diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py index 09ed5d838259508080f60dcd60166670a7a58afa..ab445938d9fab4de1a23c601dfc53130c8ed2719 100644 --- a/aleksis/apps/chronos/models.py +++ b/aleksis/apps/chronos/models.py @@ -127,10 +127,17 @@ class LessonDataQuerySet(models.QuerySet): def filter_group(self, group: Union[Group, int]): """ Filter for all lessons a group (class) regularly attends. """ - return self.filter( - Q(**{self._period_path + "lesson__groups": group}) - | Q(**{self._period_path + "lesson__groups__parent_groups": group}) - ) + if isinstance(group, int): + group = Group.objects.get(pk=group) + + if group.parent_groups.all(): + # Prevent to show lessons multiple times + return self.filter(Q(**{self._period_path + "lesson__groups": group})) + else: + return self.filter( + Q(**{self._period_path + "lesson__groups": group}) + | Q(**{self._period_path + "lesson__groups__parent_groups": group}) + ) def filter_teacher(self, teacher: Union[Person, int]): """ Filter for all lessons given by a certain teacher. """ @@ -443,7 +450,7 @@ class Lesson(ExtensibleModel): return CalendarWeek(year=year, week=week) class Meta: - ordering = ["date_start"] + ordering = ["date_start", "subject"] indexes = [models.Index(fields=["date_start", "date_end"])] @@ -552,7 +559,7 @@ class LessonPeriod(ExtensibleModel): ) class Meta: - ordering = ["lesson__date_start", "period__weekday", "period__period"] + ordering = ["lesson__date_start", "period__weekday", "period__period", "lesson__subject"] indexes = [models.Index(fields=["lesson", "period"])] diff --git a/aleksis/apps/chronos/views.py b/aleksis/apps/chronos/views.py index e94b3feab5dcd4532bddc7fd4fcfe4248ebf8477..310b6f44841e28e944bb574caeb86b3feafa69d8 100644 --- a/aleksis/apps/chronos/views.py +++ b/aleksis/apps/chronos/views.py @@ -30,8 +30,12 @@ def all_timetables(request: HttpRequest) -> HttpResponse: teachers = Person.objects.annotate( lessons_count=Count("lessons_as_teacher") ).filter(lessons_count__gt=0) - classes = Group.objects.annotate(lessons_count=Count("lessons")).filter( - lessons_count__gt=0, parent_groups=None + groups = Group.objects.annotate( + lessons_count=Count("lessons"), + child_lessons_count=Count("child_groups__lessons"), + ) + classes = groups.filter(lessons_count__gt=0, parent_groups=None) | groups.filter( + child_lessons_count__gt=0, parent_groups=None ) rooms = Room.objects.annotate(lessons_count=Count("lesson_periods")).filter( lessons_count__gt=0