diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py index 0f0e72bb864590684c8eab5e90eed5eb5f444546..e4780a2917fc1a84711d0cce13d030229d3b56ea 100644 --- a/aleksis/apps/alsijil/models.py +++ b/aleksis/apps/alsijil/models.py @@ -1,7 +1,11 @@ from django.db import models from django.utils.translation import gettext_lazy as _ +from calendarweek import CalendarWeek + +from aleksis.apps.chronos.models import LessonPeriod from aleksis.core.mixins import ExtensibleModel +from aleksis.core.util.core_helpers import get_site_preferences def isidentifier(value: str) -> bool: @@ -102,6 +106,51 @@ class LessonDocumentation(ExtensibleModel): verbose_name=_("Group note"), max_length=200, blank=True ) + def _take_over_data(self): + """Take over data to the next lesson, if exists and data are not already set. + + Can be deactivated using site preference ``alsijil__take_over_double``. + """ + if get_site_preferences()["alsijil__take_over_double"] and ( + self.topic or self.homework or self.group_note + ): + try: + second_lesson = LessonPeriod.objects.get( + lesson=self.lesson_period.lesson, + period__weekday=self.lesson_period.period.weekday, + period__period=self.lesson_period.period.period + 1, + ) + lesson_documentation = second_lesson.get_or_create_lesson_documentation( + CalendarWeek( + week=self.week, + year=self.lesson_period.lesson.get_year(self.week), + ) + ) + + changed = False + + if not lesson_documentation.topic: + lesson_documentation.topic = self.topic + changed = True + + if not lesson_documentation.homework: + lesson_documentation.homework = self.homework + changed = True + + if not lesson_documentation.group_note: + lesson_documentation.group_note = self.group_note + changed = True + + if changed: + lesson_documentation.save() + except LessonPeriod.DoesNotExist: + # Do nothing if it's a single lesson + pass + + def save(self, *args, **kwargs): + self._take_over_data() + super().save(*args, **kwargs) + class Meta: verbose_name = _("Lesson documentation") verbose_name_plural = _("Lesson documentations") diff --git a/aleksis/apps/alsijil/preferences.py b/aleksis/apps/alsijil/preferences.py index e2a55de885f3e415d9b4e461ab3192f899af2398..5fb4cf083bad76578adf67aef217c3374556b7c9 100644 --- a/aleksis/apps/alsijil/preferences.py +++ b/aleksis/apps/alsijil/preferences.py @@ -14,3 +14,16 @@ class BlockPersonalNotesForCancelled(BooleanPreference): name = "block_personal_notes_for_cancelled" default = True verbose_name = _("Block adding personal notes for cancelled lessons") + + +@site_preferences_registry.register +class TakeOverDataForDoubleLessons(BooleanPreference): + section = alsijil + name = "take_over_double" + default = True + verbose_name = _( + "Take over data from first lesson for second lesson in double lessons" + ) + help_text = _( + "This will take over data only if the data in the second lesson are empty." + )