From 483ffee614f211ad6ec195203ee7d99973ec7c71 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Sat, 11 Jul 2020 21:53:07 +0200
Subject: [PATCH] Add excuse_type to personal note form

---
 aleksis/apps/alsijil/forms.py                          |  2 +-
 aleksis/apps/alsijil/model_extensions.py               |  5 +++--
 .../templates/alsijil/class_register/lesson.html       |  9 +++++++++
 aleksis/apps/alsijil/views.py                          | 10 ++++++++++
 4 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/aleksis/apps/alsijil/forms.py b/aleksis/apps/alsijil/forms.py
index 99954b530..f8e791e38 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 57768babb..a09aa38c9 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 5748e84a6..6545bf9c3 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 25868ba0d..03e710eeb 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
-- 
GitLab