diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 85a14647e5902ac18a46a0edd6c0a72dea1e899a..29591f712096891a8c0e4e27b17f781b9c8c55a8 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -13,6 +13,7 @@ Fixed ~~~~~ * Send notifications for changes done via daily lessons page. +* Lessons with same subject and groups but different teachers were not considered equal. `2.4.1`_ - 2022-08-31 --------------------- diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py index e77147752be02b634a3d365332c1b37e124dd82c..b67c1877d2c4ae8d567f405b292934c5655d4bc0 100644 --- a/aleksis/apps/chronos/models.py +++ b/aleksis/apps/chronos/models.py @@ -415,6 +415,18 @@ class Lesson(ValidityRangeRelatedExtensibleModel, GroupPropertiesMixin, TeacherP """Get teachers relation.""" return self.teachers + @property + def _equal_lessons(self): + """Get all lesson periods with equal lessons in the whole school term.""" + + qs = Lesson.objects.filter( + subject=self.subject, + validity__school_term=self.validity.school_term, + ) + for group in self.groups.all(): + qs = qs.filter(groups=group) + return qs + def __str__(self): return f"{format_m2m(self.groups)}, {self.subject.short_name}, {format_m2m(self.teachers)}" @@ -581,18 +593,10 @@ class LessonPeriod(WeekAnnotationMixin, TeacherPropertiesMixin, ExtensibleModel) return f"{self.period}, {self.lesson}" @property - def _equal_lessons(self): + def _equal_lesson_periods(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 + return LessonPeriod.objects.filter(lesson__in=self.lesson._equal_lessons) @property def next(self) -> "LessonPeriod": @@ -601,7 +605,7 @@ class LessonPeriod(WeekAnnotationMixin, TeacherPropertiesMixin, ExtensibleModel) .. warning:: To use this property, the provided lesson period must be annotated with a week. """ - return self._equal_lessons.next_lesson(self) + return self._equal_lesson_periods.next_lesson(self) @property def prev(self) -> "LessonPeriod": @@ -610,7 +614,7 @@ class LessonPeriod(WeekAnnotationMixin, TeacherPropertiesMixin, ExtensibleModel) .. warning:: To use this property, the provided lesson period must be annotated with a week. """ - return self._equal_lessons.next_lesson(self, -1) + return self._equal_lesson_periods.next_lesson(self, -1) def is_replaced_by_event( self, events: Iterable[Event], groups: Optional[Iterable[Group]] = None