From 3a07d8c0dd5d3f39d19796ed79d59f87669031ed Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Sun, 1 Nov 2020 16:05:24 +0100 Subject: [PATCH] Add helper methods for getting next/previous lesson of a person on a day --- aleksis/apps/chronos/model_extensions.py | 33 ++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/aleksis/apps/chronos/model_extensions.py b/aleksis/apps/chronos/model_extensions.py index 3a288a29..917a5dba 100644 --- a/aleksis/apps/chronos/model_extensions.py +++ b/aleksis/apps/chronos/model_extensions.py @@ -1,3 +1,4 @@ +from datetime import date from typing import Optional, Union from django.utils.translation import gettext_lazy as _ @@ -79,6 +80,38 @@ def lesson_periods_as_teacher(self): return LessonPeriod.objects.filter(lesson__teachers=self) +@Person.method +def daily_lessons(self, day: date): + """Get all lessons of this person on the given day.""" + return LessonPeriod.objects.on_day(day).filter_from_person(self) + + +@Person.method +def next_lesson(self, lesson_period: "LessonPeriod", day: date) -> Union["LessonPeriod", None]: + """Get next lesson of the person on the same day.""" + daily_lessons = self.daily_lessons(day) + ids = list(daily_lessons.values_list("id", flat=True)) + index = ids.index(lesson_period.pk) + + if index + 1 < len(ids): + return daily_lessons[index + 1] + else: + return None + + +@Person.method +def previous_lesson(self, lesson_period: "LessonPeriod", day: date) -> Union["LessonPeriod", None]: + """Get previous lesson of the person on the same day.""" + daily_lessons = self.daily_lessons(day) + ids = list(daily_lessons.values_list("id", flat=True)) + index = ids.index(lesson_period.pk) + + if index > 0: + return daily_lessons[index - 1] + else: + return None + + def for_timetables(cls): """Return all announcements that should be shown in timetable views.""" return cls.objects.filter(show_in_timetables=True) -- GitLab