From 1c87afd0f0bca21367fdc1868046f04a97526b08 Mon Sep 17 00:00:00 2001
From: Julian Leucker <leuckerj@gmail.com>
Date: Thu, 29 Apr 2021 15:01:19 +0200
Subject: [PATCH] Create a filter for some basic personal note attributes

---
 aleksis/apps/alsijil/filters.py | 28 ++++++++++++++++++++++++++++
 aleksis/apps/alsijil/views.py   |  7 ++++++-
 2 files changed, 34 insertions(+), 1 deletion(-)
 create mode 100644 aleksis/apps/alsijil/filters.py

diff --git a/aleksis/apps/alsijil/filters.py b/aleksis/apps/alsijil/filters.py
new file mode 100644
index 000000000..c6bda959e
--- /dev/null
+++ b/aleksis/apps/alsijil/filters.py
@@ -0,0 +1,28 @@
+from django.utils.translation import gettext as _
+
+from django_filters import FilterSet, CharFilter, ModelMultipleChoiceFilter
+from material import Layout, Row
+
+from .models import ExcuseType, PersonalNote
+
+
+class PersonalNoteFilter(FilterSet):
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self.form.layout = Layout(
+            # TODO: Row with day (lt and gt) and subject (char search),
+            Row("absent", "excused", "excuse_type"),
+            Row("late__lt", "late__gt", "extra_marks")
+        )
+
+    class Meta:
+        model = PersonalNote
+        fields = {
+            "excused": ["exact"],
+            "late": ["lt", "gt"],
+            "absent": ['exact'],
+            "excuse_type": ["exact"],
+            "extra_marks": ["exact"],
+            # TODO: "date??": ['lt', 'gt'],
+            # TODO: "subject??": "exact",
+        }
diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py
index edf9c1f89..c3bfd95ff 100644
--- a/aleksis/apps/alsijil/views.py
+++ b/aleksis/apps/alsijil/views.py
@@ -40,6 +40,7 @@ from aleksis.core.util import messages
 from aleksis.core.util.core_helpers import get_site_preferences, objectgetter_optional
 from aleksis.core.util.predicates import check_global_permission
 
+from .filters import PersonalNoteFilter
 from .forms import (
     AssignGroupRoleForm,
     ExcuseTypeForm,
@@ -808,6 +809,10 @@ def overview_person(request: HttpRequest, id_: Optional[int] = None) -> HttpResp
             "-school_term_start", "-order_year", "-order_week", "-order_weekday", "order_period",
         )
     )
+    personal_note_filter_object = PersonalNoteFilter(request.GET, queryset=personal_notes)
+    filtered_personal_notes = personal_note_filter_object.qs
+    context["personal_note_filter_form"] = personal_note_filter_object.form
+
     personal_notes_list = []
     for note in personal_notes:
         note.set_object_permission_checker(checker)
@@ -824,7 +829,7 @@ def overview_person(request: HttpRequest, id_: Optional[int] = None) -> HttpResp
                 form.execute()
             person.refresh_from_db()
     context["action_form"] = form
-    table = PersonalNoteTable(personal_notes)
+    table = PersonalNoteTable(filtered_personal_notes)
     RequestConfig(request, paginate={"per_page": 20}).configure(table)
     context["personal_notes_table"] = table
     print(table.columns, table.rows, sep="\n" * 3)
-- 
GitLab