From 36add025b8f14a840a08b25de66b7d1845fa5a24 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Sat, 3 Dec 2022 21:33:13 +0100
Subject: [PATCH] Get period min/max for events from the event's school term
 and not from the current

---
 CHANGELOG.rst                  |  2 ++
 aleksis/apps/chronos/models.py | 19 +++++++++++++++++--
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index bd547d58..e76c1e6a 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -14,6 +14,8 @@ Fixed
 
 * The daily lessons page did not work correctly due to faulty pre-filtering of lessons.
 * Substitution form teacher selections also included students
+* Getting the max and min periods for events failed due to using always the current school term.
+  Typically, that caused problems when the schedule changed (more or less periods on a day). 
 
 `2.5`_ - 2022-11-12
 -------------------
diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py
index e6553ab3..eb7e538d 100644
--- a/aleksis/apps/chronos/models.py
+++ b/aleksis/apps/chronos/models.py
@@ -1099,6 +1099,21 @@ class Event(SchoolTermRelatedExtensibleModel, GroupPropertiesMixin, TeacherPrope
         else:
             return _("Event {pk}").format(pk=self.pk)
 
+    def get_period_min(self, day) -> int:
+
+        return (
+            TimePeriod.objects.on_day(day)
+            .aggregate(period__min=Coalesce(Min("period"), 1))
+            .get("period__min")
+        )
+
+    def get_period_max(self, day) -> int:
+        return (
+            TimePeriod.objects.on_day(day)
+            .aggregate(period__max=Coalesce(Max("period"), 7))
+            .get("period__max")
+        )
+
     @property
     def raw_period_from_on_day(self) -> TimePeriod:
         """Get start period on the annotated day (as TimePeriod object).
@@ -1107,7 +1122,7 @@ class Event(SchoolTermRelatedExtensibleModel, GroupPropertiesMixin, TeacherPrope
         """
         day = getattr(self, "_date", timezone.now().date())
         if day != self.date_start:
-            return TimePeriod.from_period(TimePeriod.period_min, day)
+            return TimePeriod.from_period(self.get_period_min(day), day)
         else:
             return self.period_from
 
@@ -1119,7 +1134,7 @@ class Event(SchoolTermRelatedExtensibleModel, GroupPropertiesMixin, TeacherPrope
         """
         day = getattr(self, "_date", timezone.now().date())
         if day != self.date_end:
-            return TimePeriod.from_period(TimePeriod.period_max, day)
+            return TimePeriod.from_period(self.get_period_max(day), day)
         else:
             return self.period_to
 
-- 
GitLab