From 447fe1782560b08af87b15f0efb618163f2bbc33 Mon Sep 17 00:00:00 2001 From: "Edward Tirado Jr." Date: Thu, 3 Jul 2025 01:29:35 -0500 Subject: [PATCH] updated schedule date to use local time --- movie_manager/admin.py | 16 +++++++++++++++- movie_manager/tests.py | 9 +++++---- movie_manager/viewsets/schedule.py | 20 ++++++-------------- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/movie_manager/admin.py b/movie_manager/admin.py index 883114f..2bdc1b9 100644 --- a/movie_manager/admin.py +++ b/movie_manager/admin.py @@ -1,4 +1,7 @@ +from zoneinfo import ZoneInfo + from django.contrib import admin +from django.utils import timezone from movie_manager.models import Movie, MovieList, Schedule, Showing @@ -21,4 +24,15 @@ class ScheduleAdmin(admin.ModelAdmin): @admin.register(Showing) class ShowingAdmin(admin.ModelAdmin): - list_display = ["showtime", "movie"] + list_display = ["local_showtime", "movie"] + + def local_showtime(self, obj): + if obj.showtime: + target_tz = ZoneInfo("America/Chicago") + with timezone.override(target_tz): + local_time = timezone.localtime(obj.showtime) + return local_time.strftime("%Y-%m-%d %H:%M") + return "Invalid datetime" + + local_showtime.short_description = "Showtime (Local)" + local_showtime.admin_order_field = "showtime" diff --git a/movie_manager/tests.py b/movie_manager/tests.py index 8ab499b..09fcbb8 100644 --- a/movie_manager/tests.py +++ b/movie_manager/tests.py @@ -37,14 +37,15 @@ class ShowingViewsetTestCase(APITestCase): self.assertEqual(response_data.get("showtime"), showing_time) self.assertEqual(response_data.get("movie").get("title"), "Test Movie") - @freeze_time("2025-07-02 23:59:00", tz_offset=-5) + @freeze_time("2025-07-03 04:59:00") # 2025-07-02 23:59 CDT in UTC def test_it_returns_active_showings(self): self.client.force_authenticate(user=self.schedule.owner) showtimes_america_chicago_utc = [ - "2025-07-03T04:00:59.000Z", # 7/2/25 11:59pm - "2025-07-01T04:00:59.000Z", # 6/30/25 11:59pm - "2025-07-08T04:00:59.000Z", # 7/7/25 11:59pm + "2025-07-08T04:59:59.000Z", # 2025-07-07 11:59pm + "2025-07-03T04:59:59.000Z", # 2025-07-02 11:59pm + "2025-07-03T04:00:00.000Z", # 2025-07-02 11:00pm + "2025-07-01T04:59:00.000Z", # 2025-06-30 11:59pm ] for showtime in showtimes_america_chicago_utc: diff --git a/movie_manager/viewsets/schedule.py b/movie_manager/viewsets/schedule.py index 57d5ec2..41d7364 100644 --- a/movie_manager/viewsets/schedule.py +++ b/movie_manager/viewsets/schedule.py @@ -1,5 +1,3 @@ -import datetime - from django.http import JsonResponse from django.utils import timezone from knox.auth import TokenAuthentication @@ -25,12 +23,8 @@ class ScheduleViewset(viewsets.ModelViewSet): # Get the schedule instance instance = self.get_object() now = timezone.now() - # get time from start of day - today = timezone.make_aware(datetime.datetime(now.year, now.month, now.day)) - upcoming_showings = Showing.objects.filter( - showtime__gte=today, schedule=instance - ) + upcoming_showings = Showing.objects.filter(showtime__gte=now, schedule=instance) serializer = self.get_serializer(instance) data = serializer.data @@ -39,18 +33,16 @@ class ScheduleViewset(viewsets.ModelViewSet): data["showings"] = ShowingSerializer(upcoming_showings, many=True).data if request.GET.get("past_showings") == "true": - past_showings = Showing.objects.filter( - showtime__lt=today, schedule=instance - ) + past_showings = Showing.objects.filter(showtime__lt=now, schedule=instance) # Add both to the response data["past_showings"] = [ { - "id": showing.id, - "showtime": showing.showtime.isoformat(), - "movie": MovieSerializer(showing.movie).data, + "id": past_showing.id, + "showtime": past_showing.showtime.isoformat(), + "movie": MovieSerializer(past_showing.movie).data, } - for showing in past_showings + for past_showing in past_showings ] else: data["past_showings"] = []