diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py index 194b5fc9c4047efef384975978874102239cb64d..41172d6732c812ac6311786a86594da4650fe6d2 100644 --- a/aleksis/apps/chronos/models.py +++ b/aleksis/apps/chronos/models.py @@ -222,7 +222,7 @@ class LessonPeriodQuerySet(LessonDataQuerySet): if type_ == "teacher": # Teacher - return person.lesson_periods_as_teacher + return self.filter_teacher(person) elif type_ == "group": # Student @@ -761,6 +761,18 @@ class SupervisionQuerySet(models.QuerySet): | Q(break_item__after_period__weekday=weekday) ) + def filter_by_teacher(self, teacher: Union[Person, int]): + """ Filter for all supervisions given by a certain teacher. """ + + if self.count() > 0: + week = CalendarWeek(week=self[0]._week) + + dates = [week[w] for w in range(0, 7)] + + return self.filter(Q(substitutions__teacher=teacher, substitutions__date__in=dates) | Q(teacher=teacher)) + + return self + class Supervision(ExtensibleModel): objects = models.Manager.from_queryset(SupervisionQuerySet)() diff --git a/aleksis/apps/chronos/util/build.py b/aleksis/apps/chronos/util/build.py index 5e9f7cefdd04cbfe31fff69786d639afaddaf0d1..ee9d87101ffae41169b90e0d20723bed44207df1 100644 --- a/aleksis/apps/chronos/util/build.py +++ b/aleksis/apps/chronos/util/build.py @@ -61,7 +61,7 @@ def build_timetable( week = CalendarWeek.from_date(date_ref) else: week = date_ref - supervisions = Supervision.objects.filter(teacher=obj).annotate_week(week) + supervisions = Supervision.objects.all().annotate_week(week).filter_by_teacher(obj) if is_person: supervisions.filter_by_weekday(date_ref.weekday())