diff --git a/aleksis/apps/chronos/managers.py b/aleksis/apps/chronos/managers.py index 600a20cae801604c76e7d992f8f07d30092dc696..2fb3c8e36ce5242fc96425e28b1c393c4df7865b 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 59f25388ecae313c55465e7b519d7173038e8052..11b57388df8dfa390b8a9f405e6aa2895a347480 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