diff --git a/aleksis/apps/alsijil/forms.py b/aleksis/apps/alsijil/forms.py index 99954b5308595d789eb3dca3a1e8ecf3602b9f6f..f8e791e38b6c1a6c5a700133a089fd39bcf39e4c 100644 --- a/aleksis/apps/alsijil/forms.py +++ b/aleksis/apps/alsijil/forms.py @@ -28,7 +28,7 @@ class LessonDocumentationForm(forms.ModelForm): class PersonalNoteForm(forms.ModelForm): class Meta: model = PersonalNote - fields = ["absent", "late", "excused", "remarks"] + fields = ["absent", "late", "excused", "excuse_type", "remarks"] person_name = forms.CharField(disabled=True) diff --git a/aleksis/apps/alsijil/model_extensions.py b/aleksis/apps/alsijil/model_extensions.py index 57768babbc029e3da42359550120a01fb5cf6517..a09aa38c9be47c6a73e5d1e86caf6f375c9045e1 100644 --- a/aleksis/apps/alsijil/model_extensions.py +++ b/aleksis/apps/alsijil/model_extensions.py @@ -8,7 +8,7 @@ from calendarweek import CalendarWeek from aleksis.apps.chronos.models import LessonPeriod from aleksis.core.models import Group, Person -from .models import LessonDocumentation, PersonalNote +from .models import ExcuseType, LessonDocumentation, PersonalNote @Person.method @@ -18,6 +18,7 @@ def mark_absent( from_period: int = 0, absent: bool = True, excused: bool = False, + excuse_type: Optional[ExcuseType] = None, remarks: str = "", ): """Mark a person absent for all lessons in a day, optionally starting with a selected period number. @@ -44,7 +45,7 @@ def mark_absent( person=self, lesson_period=lesson_period, week=wanted_week.week, - defaults={"absent": absent, "excused": excused}, + defaults={"absent": absent, "excused": excused, "excuse_type": excuse_type}, ) if remarks: diff --git a/aleksis/apps/alsijil/templates/alsijil/class_register/lesson.html b/aleksis/apps/alsijil/templates/alsijil/class_register/lesson.html index 5748e84a69f478a8a26d0a51cb54cdc8d981a992..6545bf9c3a79d8ab1efaf8e7544c30451bc4b508 100644 --- a/aleksis/apps/alsijil/templates/alsijil/class_register/lesson.html +++ b/aleksis/apps/alsijil/templates/alsijil/class_register/lesson.html @@ -144,6 +144,7 @@ <th>{% blocktrans %}Absent{% endblocktrans %}</th> <th>{% blocktrans %}Tardiness{% endblocktrans %}</th> <th>{% blocktrans %}Excused{% endblocktrans %}</th> + <th>{% blocktrans %}Excuse type{% endblocktrans %}</th> <th>{% blocktrans %}Remarks{% endblocktrans %}</th> </tr> </thead> @@ -172,6 +173,14 @@ <span></span> </label> </td> + <td> + <div class="input-field"> + {{ form.excuse_type }} + <label for="{{ form.excuse_type.id_for_label }}"> + {% trans "Excuse type" %} + </label> + </div> + </td> <td> <div class="input-field"> {{ form.remarks }} diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py index 25868ba0dff775804e21038a4e6547353cffc2c2..03e710eebe3acae56a8f4a05f91a60462f9e2f20 100644 --- a/aleksis/apps/alsijil/views.py +++ b/aleksis/apps/alsijil/views.py @@ -102,6 +102,8 @@ def lesson( if lesson_documentation_form.is_valid(): lesson_documentation_form.save() + messages.success(request, _("The lesson documentation has been saved.")) + if personal_note_formset.is_valid(): instances = personal_note_formset.save() @@ -112,8 +114,16 @@ def lesson( lesson_period.period.period + 1, instance.absent, instance.excused, + instance.excuse_type, ) + messages.success(request, _("The personal notes have been saved.")) + + # Regenerate form here to ensure that programmatically changed data will be shown correctly + personal_note_formset = PersonalNoteFormSet( + None, queryset=persons_qs, prefix="personal_notes" + ) + context["lesson_documentation"] = lesson_documentation context["lesson_documentation_form"] = lesson_documentation_form context["personal_note_formset"] = personal_note_formset