From 12aafbf14dbd17c4bc651435d498bf17ae74161c Mon Sep 17 00:00:00 2001
From: Michael Bauer <michael-bauer@posteo.de>
Date: Mon, 28 Oct 2024 14:32:27 +0100
Subject: [PATCH] Fix and simplify person_overview filtering

The previous filtering result for participations did not survive the
annotations done by annotate_person_statistics_for_school_term.
---
 aleksis/apps/alsijil/tasks.py                 | 52 ++++++++++---------
 .../alsijil/partials/person_overview.html     | 24 ++++-----
 2 files changed, 39 insertions(+), 37 deletions(-)

diff --git a/aleksis/apps/alsijil/tasks.py b/aleksis/apps/alsijil/tasks.py
index 4660a45ee..19f65699e 100644
--- a/aleksis/apps/alsijil/tasks.py
+++ b/aleksis/apps/alsijil/tasks.py
@@ -173,15 +173,29 @@ def generate_full_register_printout(
     if include_members_table or include_person_overviews:
         group = group.prefetch_related("members")
 
-    if include_person_overviews:
+    if include_teachers_and_subjects_table:
         group = group.prefetch_related(
+            Prefetch("courses", queryset=Course.objects.select_related("subject")),
+            "courses__teachers",
+            "child_groups",
+            Prefetch("child_groups__courses", queryset=Course.objects.select_related("subject")),
+            "child_groups__courses__teachers",
+        )
+
+    group = group[0]
+    context["group"] = group
+
+    if include_members_table or include_person_overviews:
+        context["members"] = annotate_person_statistics_for_school_term(group.members.all(), group.school_term, group)
+
+    if include_person_overviews:
+        context["members"] = context["members"].prefetch_related(
             Prefetch(
-                "members__participations",
+                "participations",
                 queryset=ParticipationStatus.objects
-                .filter(
-                    # TODO: Not shure this filter works here as intended = test
-                    Q(absence_reason__isnull=False)
-                    | Q(tardiness__isnull=False)
+                .exclude(
+                    Q(absence_reason__isnull=True)
+                    | Q(tardiness__isnull=True)
                 )
                 .select_related("absence_reason")
                 .prefetch_related(
@@ -189,11 +203,16 @@ def generate_full_register_printout(
                         "related_documentation",
                         queryset=Documentation.objects.select_related("subject").prefetch_related("teachers"),
                     ),
-                )
+                ),
+                to_attr="notable_participations",
             ),
             Prefetch(
-                "members__new_personal_notes",
-                queryset=NewPersonalNote.objects.prefetch_related(
+                "new_personal_notes",
+                queryset=NewPersonalNote.objects
+                .exclude(
+                    Q(note="")
+                    | Q(extra_marks=None))
+                .prefetch_related(
                     Prefetch(
                         "documentation",
                         queryset=Documentation.objects.select_related("subject").prefetch_related("teachers"),
@@ -203,21 +222,6 @@ def generate_full_register_printout(
             ),
         )
 
-    if include_teachers_and_subjects_table:
-        group = group.prefetch_related(
-            Prefetch("courses", queryset=Course.objects.select_related("subject")),
-            "courses__teachers",
-            "child_groups",
-            Prefetch("child_groups__courses", queryset=Course.objects.select_related("subject")),
-            "child_groups__courses__teachers",
-        )
-
-    group = group[0]
-    context["group"] = group
-
-    if include_members_table or include_person_overviews:
-        context["members"] = annotate_person_statistics_for_school_term(group.members.all(), group.school_term, group)
-
     # OLD
 
     context["school_term"] = group.school_term
diff --git a/aleksis/apps/alsijil/templates/alsijil/partials/person_overview.html b/aleksis/apps/alsijil/templates/alsijil/partials/person_overview.html
index 4aa503d44..b198a1b2a 100644
--- a/aleksis/apps/alsijil/templates/alsijil/partials/person_overview.html
+++ b/aleksis/apps/alsijil/templates/alsijil/partials/person_overview.html
@@ -92,7 +92,7 @@
   </thead>
 
   <tbody>
-  {% for participation in person.participations %}
+  {% for participation in person.notable_participations %}
     <tr>
       <td>{{ participation.documentation.datetime_start.date }}</td>
       <td>
@@ -120,18 +120,16 @@
 
   <tbody>
   {% for note in person.new_personal_notes %}
-    {% if note.note or note.extra_marks.all %}
-      <tr>
-        <td>{{ note.documentation.datetime_start.date }}</td>
-        <td>
-          {{ note.documentation.subject.short_name }}
-        </td>
-        <!-- TODO: Should probably use short_names -->
-        <td>{{ note.documentation.teachers.all|join:', ' }}</td>
-        <td>{{ note.extra_mark.short_name }}</td>
-        <td>{{ note.note }}</td>
-      </tr>
-    {% endif %}
+    <tr>
+      <td>{{ note.documentation.datetime_start.date }}</td>
+      <td>
+        {{ note.documentation.subject.short_name }}
+      </td>
+      <!-- TODO: Should probably use short_names -->
+      <td>{{ note.documentation.teachers.all|join:', ' }}</td>
+      <td>{{ note.extra_mark.short_name }}</td>
+      <td>{{ note.note }}</td>
+    </tr>
   {% endfor %}
   </tbody>
 </table>
-- 
GitLab