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