From 704e142e46f16b7d11112fa84da1ed95fb31759a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjamin=20H=C3=A4ttasch?=
 <benjamin.haettasch@cs.tu-darmstadt.de>
Date: Sun, 1 Mar 2020 17:55:13 +0100
Subject: [PATCH] Use event timezones where possible

Adapt admin views
Adapt rendering of times of AK slots for backend and frontend
---
 AKModel/admin.py  | 37 ++++++++++++++++++++++++++++++++++---
 AKModel/models.py |  2 +-
 2 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/AKModel/admin.py b/AKModel/admin.py
index 51db59e7..8d60bc7e 100644
--- a/AKModel/admin.py
+++ b/AKModel/admin.py
@@ -2,12 +2,23 @@ from django.contrib import admin
 from django.contrib.admin import SimpleListFilter
 from django.db.models import Count, F
 from django.shortcuts import render
+from django.utils import timezone
 from django.utils.translation import gettext_lazy as _
 
 from AKModel.availability import Availability
 from AKModel.models import Event, AKOwner, AKCategory, AKTrack, AKTag, AKRequirement, AK, Room, AKSlot
 
-admin.site.register(Event)
+
+@admin.register(Event)
+class EventAdmin(admin.ModelAdmin):
+    def get_form(self, request, obj=None, change=False, **kwargs):
+        # Use timezone of event
+        if obj is not None and obj.timezone:
+            timezone.activate(obj.timezone)
+        # No timezone available? Use UTC
+        else:
+            timezone.activate("UTC")
+        return super().get_form(request, obj, change, **kwargs)
 
 admin.site.register(AKOwner)
 
@@ -60,6 +71,26 @@ admin.site.register(AK, AKAdmin)
 
 admin.site.register(Room)
 
-admin.site.register(AKSlot)
 
-admin.site.register(Availability)
+@admin.register(AKSlot)
+class AKSlotAdmin(admin.ModelAdmin):
+    def get_form(self, request, obj=None, change=False, **kwargs):
+        # Use timezone of associated event
+        if obj is not None and obj.event.timezone:
+            timezone.activate(obj.event.timezone)
+        # No timezone available? Use UTC
+        else:
+            timezone.activate("UTC")
+        return super().get_form(request, obj, change, **kwargs)
+
+
+@admin.register(Availability)
+class AvailabilityAdmin(admin.ModelAdmin):
+    def get_form(self, request, obj=None, change=False, **kwargs):
+        # Use timezone of associated event
+        if obj is not None and obj.event.timezone:
+            timezone.activate(obj.event.timezone)
+        # No timezone available? Use UTC
+        else:
+            timezone.activate("UTC")
+        return super().get_form(request, obj, change, **kwargs)
diff --git a/AKModel/models.py b/AKModel/models.py
index d60f04a7..997e85e2 100644
--- a/AKModel/models.py
+++ b/AKModel/models.py
@@ -293,7 +293,7 @@ class AKSlot(models.Model):
         """
         if self.start is None:
             return _("Not scheduled yet")
-        return self.start.strftime('%a %H:%M')
+        return self.start.astimezone(self.event.timezone).strftime('%a %H:%M')
 
     @property
     def end(self):
-- 
GitLab