From 51b7b5eee3bed68c91b09c2313af7078d7feed1c Mon Sep 17 00:00:00 2001
From: Hangzhi Yu <hangzhi@protonmail.com>
Date: Sat, 27 Aug 2022 17:04:47 +0200
Subject: [PATCH] Rename late field of PersonalNote to tardiness

---
 CHANGELOG.rst                                  |  5 +++++
 aleksis/apps/alsijil/actions.py                |  2 +-
 aleksis/apps/alsijil/filters.py                |  8 ++++----
 aleksis/apps/alsijil/forms.py                  |  2 +-
 aleksis/apps/alsijil/managers.py               |  2 +-
 .../0017_rename_late_to_tardiness.py           | 18 ++++++++++++++++++
 aleksis/apps/alsijil/model_extensions.py       |  8 ++++----
 aleksis/apps/alsijil/models.py                 |  4 ++--
 aleksis/apps/alsijil/tables.py                 |  6 +++---
 .../alsijil/partials/lesson/tabs/notes.html    |  6 +++---
 .../alsijil/partials/tardinesses.html          |  2 +-
 .../templates/alsijil/print/full_register.html | 10 +++++-----
 aleksis/apps/alsijil/views.py                  | 10 ++++++----
 13 files changed, 54 insertions(+), 29 deletions(-)
 create mode 100644 aleksis/apps/alsijil/migrations/0017_rename_late_to_tardiness.py

diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 721912e62..d7e54f938 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -9,6 +9,11 @@ and this project adheres to `Semantic Versioning`_.
 Unreleased
 ----------
 
+Changed
+~~~~~~~
+
+* Rename the "late" field in the PersonalNote model to "tardiness".
+
 Fixed
 ~~~~~
 
diff --git a/aleksis/apps/alsijil/actions.py b/aleksis/apps/alsijil/actions.py
index 9c307017e..623a96b95 100644
--- a/aleksis/apps/alsijil/actions.py
+++ b/aleksis/apps/alsijil/actions.py
@@ -41,7 +41,7 @@ def delete_personal_note(modeladmin, request, queryset):
         personal_note.reset_values()
         notes.append(personal_note)
     PersonalNote.objects.bulk_update(
-        notes, fields=["absent", "excused", "late", "excuse_type", "remarks"]
+        notes, fields=["absent", "excused", "tardiness", "excuse_type", "remarks"]
     )
 
 
diff --git a/aleksis/apps/alsijil/filters.py b/aleksis/apps/alsijil/filters.py
index c924aec0d..0de3f0487 100644
--- a/aleksis/apps/alsijil/filters.py
+++ b/aleksis/apps/alsijil/filters.py
@@ -27,20 +27,20 @@ class PersonalNoteFilter(FilterSet):
                     data[name] = initial
 
         super().__init__(data, *args, **kwargs)
-        self.form.fields["late__lt"].label = _("Tardiness is lower than")
-        self.form.fields["late__gt"].label = _("Tardiness is bigger than")
+        self.form.fields["tardiness__lt"].label = _("Tardiness is lower than")
+        self.form.fields["tardiness__gt"].label = _("Tardiness is bigger than")
         self.form.layout = Layout(
             Row("subject"),
             Row("day_start", "day_end"),
             Row("absent", "excused", "excuse_type"),
-            Row("late__gt", "late__lt", "extra_marks"),
+            Row("tardiness__gt", "tardiness__lt", "extra_marks"),
         )
 
     class Meta:
         model = PersonalNote
         fields = {
             "excused": ["exact"],
-            "late": ["lt", "gt"],
+            "tardiness": ["lt", "gt"],
             "absent": ["exact"],
             "excuse_type": ["exact"],
             "extra_marks": ["exact"],
diff --git a/aleksis/apps/alsijil/forms.py b/aleksis/apps/alsijil/forms.py
index 5c2578b7d..4ef9b4e24 100644
--- a/aleksis/apps/alsijil/forms.py
+++ b/aleksis/apps/alsijil/forms.py
@@ -75,7 +75,7 @@ class LessonDocumentationForm(forms.ModelForm):
 class PersonalNoteForm(forms.ModelForm):
     class Meta:
         model = PersonalNote
-        fields = ["absent", "late", "excused", "excuse_type", "extra_marks", "remarks"]
+        fields = ["absent", "tardiness", "excused", "excuse_type", "extra_marks", "remarks"]
 
     person_name = forms.CharField(disabled=True)
 
diff --git a/aleksis/apps/alsijil/managers.py b/aleksis/apps/alsijil/managers.py
index 9d97e5809..c9e26fa77 100644
--- a/aleksis/apps/alsijil/managers.py
+++ b/aleksis/apps/alsijil/managers.py
@@ -119,7 +119,7 @@ class PersonalNoteQuerySet(RegisterObjectRelatedQuerySet, QuerySet):
     def not_empty(self):
         """Get all not empty personal notes."""
         return self.filter(
-            ~Q(remarks="") | Q(absent=True) | ~Q(late=0) | Q(extra_marks__isnull=False)
+            ~Q(remarks="") | Q(absent=True) | ~Q(tardiness=0) | Q(extra_marks__isnull=False)
         )
 
 
diff --git a/aleksis/apps/alsijil/migrations/0017_rename_late_to_tardiness.py b/aleksis/apps/alsijil/migrations/0017_rename_late_to_tardiness.py
new file mode 100644
index 000000000..50dd5a18d
--- /dev/null
+++ b/aleksis/apps/alsijil/migrations/0017_rename_late_to_tardiness.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.2.15 on 2022-08-27 15:02
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('alsijil', '0016_add_not_counted_excuse_types'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='personalnote',
+            old_name='late',
+            new_name='tardiness',
+        ),
+    ]
diff --git a/aleksis/apps/alsijil/model_extensions.py b/aleksis/apps/alsijil/model_extensions.py
index 5b0e5ac4b..5fd9b1b24 100644
--- a/aleksis/apps/alsijil/model_extensions.py
+++ b/aleksis/apps/alsijil/model_extensions.py
@@ -326,12 +326,12 @@ def get_tardinesses(self, week: Optional[CalendarWeek] = None) -> QuerySet:
     """Get all personal notes of late persons for this lesson."""
     if not week:
         week = self.week
-    return self.personal_notes.filter(week=week.week, year=week.year, late__gt=0)
+    return self.personal_notes.filter(week=week.week, year=week.year, tardiness__gt=0)
 
 
 def get_tardinesses_simple(self, week: Optional[CalendarWeek] = None) -> QuerySet:
     """Get all personal notes of late persons for this event/extra lesson."""
-    return self.personal_notes.filter(late__gt=0)
+    return self.personal_notes.filter(tardiness__gt=0)
 
 
 Event.method(get_tardinesses_simple, "get_tardinesses")
@@ -455,10 +455,10 @@ def generate_person_list_with_class_register_statistics(
             "filtered_personal_notes",
             filter=Q(filtered_personal_notes__absent=True, filtered_personal_notes__excused=False),
         ),
-        tardiness=Sum("filtered_personal_notes__late"),
+        tardiness=Sum("filtered_personal_notes__tardiness"),
         tardiness_count=Count(
             "filtered_personal_notes",
-            filter=Q(filtered_personal_notes__late__gt=0),
+            filter=Q(filtered_personal_notes__tardiness__gt=0),
         ),
     )
 
diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py
index 16d6c7d3e..917a6d5b1 100644
--- a/aleksis/apps/alsijil/models.py
+++ b/aleksis/apps/alsijil/models.py
@@ -243,7 +243,7 @@ class PersonalNote(RegisterObjectRelatedMixin, ExtensibleModel):
     )
 
     absent = models.BooleanField(default=False)
-    late = models.PositiveSmallIntegerField(default=0)
+    tardiness = models.PositiveSmallIntegerField(default=0)
     excused = models.BooleanField(default=False)
     excuse_type = models.ForeignKey(
         ExcuseType,
@@ -275,7 +275,7 @@ class PersonalNote(RegisterObjectRelatedMixin, ExtensibleModel):
         defaults = PersonalNote()
 
         self.absent = defaults.absent
-        self.late = defaults.late
+        self.tardiness = defaults.tardiness
         self.excused = defaults.excused
         self.excuse_type = defaults.excuse_type
         self.remarks = defaults.remarks
diff --git a/aleksis/apps/alsijil/tables.py b/aleksis/apps/alsijil/tables.py
index c82385265..a0ef1734e 100644
--- a/aleksis/apps/alsijil/tables.py
+++ b/aleksis/apps/alsijil/tables.py
@@ -115,7 +115,7 @@ class PersonalNoteTable(tables.Table):
     )
     subject = tables.Column(verbose_name=_("Subject"), accessor=A("subject"), linkify=True)
     absent = tables.Column(verbose_name=_("Absent"))
-    late = tables.Column(verbose_name=_("Tardiness"))
+    tardiness = tables.Column(verbose_name=_("Tardiness"))
     excused = tables.Column(verbose_name=_("Excuse"))
     extra_marks = tables.Column(verbose_name=_("Extra marks"), accessor=A("extra_marks__all"))
 
@@ -151,9 +151,9 @@ class PersonalNoteTable(tables.Table):
             return badge
         return "–"
 
-    def render_late(self, value):
+    def render_tardiness(self, value):
         if value:
-            content = _(f"{value}' late")
+            content = _(f"{value}' tardiness")
             context = dict(content=content, classes="orange white-text")
             return render_to_string("components/materialize-chips.html", context)
         else:
diff --git a/aleksis/apps/alsijil/templates/alsijil/partials/lesson/tabs/notes.html b/aleksis/apps/alsijil/templates/alsijil/partials/lesson/tabs/notes.html
index 42dcac323..3147e1fcf 100644
--- a/aleksis/apps/alsijil/templates/alsijil/partials/lesson/tabs/notes.html
+++ b/aleksis/apps/alsijil/templates/alsijil/partials/lesson/tabs/notes.html
@@ -54,7 +54,7 @@
             </td>
             <td>
               <div class="input-field">
-                {{ form.late }}
+                {{ form.tardiness }}
                 <label for="{{ form.absent.id_for_label }}">
                   {% trans "Tardiness (in m)" %}
                 </label>
@@ -107,9 +107,9 @@
             </td>
             <td><i class="material-icons center">{{ form.absent.value|yesno:"check,clear" }}</i></td>
             <td>
-              <i class="material-icons center">{{ form.late.value|yesno:"check,clear" }}</i>
+              <i class="material-icons center">{{ form.tardiness.value|yesno:"check,clear" }}</i>
               <span class="alsijil-tardiness-text">
-                {% if form.late.value %}{{ form.late.value|to_time|time:"i\m" }}{% endif %}
+                {% if form.tardiness.value %}{{ form.tardiness.value|to_time|time:"i\m" }}{% endif %}
               </span>
             </td>
             <td><i class="material-icons center">{{ form.excused.value|yesno:"check,clear" }}</i></td>
diff --git a/aleksis/apps/alsijil/templates/alsijil/partials/tardinesses.html b/aleksis/apps/alsijil/templates/alsijil/partials/tardinesses.html
index d11a94ea1..ca20a9c4d 100644
--- a/aleksis/apps/alsijil/templates/alsijil/partials/tardinesses.html
+++ b/aleksis/apps/alsijil/templates/alsijil/partials/tardinesses.html
@@ -2,6 +2,6 @@
 {% for note in notes %}
   {% has_perm "alsijil.view_personalnote_rule" user note as can_view_personalnote %}
   {% if can_view_personalnote %}
-    <span>{{ note.person }} ({{ note.late }}'){% if not forloop.last %},{% endif %}</span>
+    <span>{{ note.person }} ({{ note.tardiness }}'){% if not forloop.last %},{% endif %}</span>
   {% endif %}
 {% endfor %}
diff --git a/aleksis/apps/alsijil/templates/alsijil/print/full_register.html b/aleksis/apps/alsijil/templates/alsijil/print/full_register.html
index a8f7dd5c3..258ed824b 100644
--- a/aleksis/apps/alsijil/templates/alsijil/print/full_register.html
+++ b/aleksis/apps/alsijil/templates/alsijil/print/full_register.html
@@ -357,7 +357,7 @@
 
       <tbody>
       {% for note in person.filtered_notes %}
-        {% if note.absent or note.late or note.remarks or note.extra_marks.all %}
+        {% if note.absent or note.tardiness or note.remarks or note.extra_marks.all %}
           <tr>
             {% if note.date %}
               <td>{{ note.date }}</td>
@@ -389,8 +389,8 @@
               {% endif %}
             </td>
             <td>
-              {% if note.late %}
-                {{ note.late }}'
+              {% if note.tardiness %}
+                {{ note.tardiness }}'
               {% endif %}
             </td>
             <td>
@@ -486,10 +486,10 @@
                       {% endif %}
                     </span>
                   {% endif %}
-                  {% if note.late %}
+                  {% if note.tardiness %}
                     <span class="lesson-note-late">
                       {{ note.person.last_name }}, {{ note.person.first_name|slice:"0:1" }}.
-                      ({{ note.late }}′)
+                      ({{ note.tardiness }}′)
                       {% if note.excused %}
                         <span class="lesson-note-excused">
                           {% if note.excuse_type %}
diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py
index dc88dea61..2f6a2b14a 100644
--- a/aleksis/apps/alsijil/views.py
+++ b/aleksis/apps/alsijil/views.py
@@ -538,10 +538,10 @@ def week_view(
                     filtered_personal_notes__absent=True, filtered_personal_notes__excused=False
                 ),
             ),
-            tardiness_sum=Sum("filtered_personal_notes__late"),
+            tardiness_sum=Sum("filtered_personal_notes__tardiness"),
             tardiness_count=Count(
                 "filtered_personal_notes",
-                filter=Q(filtered_personal_notes__late__gt=0),
+                filter=Q(filtered_personal_notes__tardiness__gt=0),
             ),
         )
 
@@ -1008,8 +1008,10 @@ def overview_person(request: HttpRequest, id_: Optional[int] = None) -> HttpResp
                     unexcused=Count("absent")
                 )
             )
-            stat.update(personal_notes.aggregate(tardiness=Sum("late")))
-            stat.update(personal_notes.filter(~Q(late=0)).aggregate(tardiness_count=Count("late")))
+            stat.update(personal_notes.aggregate(tardiness=Sum("tardiness")))
+            stat.update(
+                personal_notes.filter(~Q(tardiness=0)).aggregate(tardiness_count=Count("tardiness"))
+            )
 
             for extra_mark in extra_marks:
                 stat.update(
-- 
GitLab