diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py index a810fc9b17f1d6c6e353d70c1abb9a4fb90a83fe..9b27fa0ef465e09411778d2f08a223d2698dafa4 100644 --- a/aleksis/apps/chronos/models.py +++ b/aleksis/apps/chronos/models.py @@ -468,6 +468,20 @@ class LessonPeriod(ExtensibleModel, WeekAnnotationMixin): def __str__(self) -> str: return f"{self.period}, {self.lesson}" + @property + def _equal_lessons(self): + """Get all lesson periods with equal lessons in the whole school term.""" + + qs = LessonPeriod.objects.filter( + lesson__subject=self.lesson.subject, + lesson__validity__school_term=self.lesson.validity.school_term, + ) + for group in self.lesson.groups.all(): + qs = qs.filter(lesson__groups=group) + for teacher in self.lesson.teachers.all(): + qs = qs.filter(lesson__teachers=teacher) + return qs + @property def next(self) -> "LessonPeriod": """Get next lesson period of this lesson. @@ -475,7 +489,7 @@ class LessonPeriod(ExtensibleModel, WeekAnnotationMixin): .. warning:: To use this property, the provided lesson period must be annotated with a week. """ - return LessonPeriod.objects.filter(lesson=self.lesson).next_lesson(self) + return self._equal_lessons.next_lesson(self) @property def prev(self) -> "LessonPeriod": @@ -484,7 +498,7 @@ class LessonPeriod(ExtensibleModel, WeekAnnotationMixin): .. warning:: To use this property, the provided lesson period must be annotated with a week. """ - return LessonPeriod.objects.filter(lesson=self.lesson).next_lesson(self, -1) + return self._equal_lessons.next_lesson(self, -1) class Meta: ordering = [