From cb846ef41ad8ce15e60c9fafc33a259d69dd92a5 Mon Sep 17 00:00:00 2001 From: Hangzhi Yu <hangzhi@protonmail.com> Date: Mon, 14 Oct 2024 21:27:15 +0200 Subject: [PATCH] Improve teacher filtering mechanism when generating substitutions from absences --- aleksis/apps/chronos/managers.py | 7 +++++++ aleksis/apps/chronos/models.py | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/aleksis/apps/chronos/managers.py b/aleksis/apps/chronos/managers.py index 600a20ca..2fb3c8e3 100644 --- a/aleksis/apps/chronos/managers.py +++ b/aleksis/apps/chronos/managers.py @@ -876,6 +876,13 @@ class LessonEventQuerySet(RecurrencePolymorphicQuerySet): ) return self.filter(Q(teachers=teacher) | Q(pk__in=amended)).distinct() + def for_teachers(self, teachers: list[Union[int, Person]]) -> "LessonEventQuerySet": + """Get all lesson events for a list of persons as teacher (including amends).""" + amended = self.filter(Q(amended_by__isnull=False) & (Q(teachers__in=teachers))).values_list( + "amended_by__pk", flat=True + ) + return self.filter(Q(teachers__in=teachers) | Q(pk__in=amended)).distinct() + def for_participant(self, person: Union[int, Person]) -> "LessonEventQuerySet": """Get all lesson events the person participates in (including amends).""" amended = self.filter(Q(amended_by__isnull=False) | Q(groups__members=person)).values_list( diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py index 59f25388..11b57388 100644 --- a/aleksis/apps/chronos/models.py +++ b/aleksis/apps/chronos/models.py @@ -1664,6 +1664,12 @@ class LessonEvent(CalendarEvent): if teacher: event_queryset = event_queryset.for_teacher(teacher) + else: + affected_teachers = Person.objects.filter( + Q(kolego_absences__datetime_start__lte=date_end) + & Q(kolego_absences__datetime_end__gte=date_start) + ) + event_queryset = event_queryset.for_teachers(affected_teachers) events = LessonEvent.get_single_events( start=date_start, end=date_end, request=request, with_reference_object=True, queryset=event_queryset -- GitLab