From 0d6400b43ffd15f9a73b066e9071586f729c2e4f Mon Sep 17 00:00:00 2001
From: Hangzhi Yu <hangzhi@protonmail.com>
Date: Sat, 18 Jul 2020 01:30:50 +0200
Subject: [PATCH] Filter possible selection in absence form

---
 aleksis/apps/alsijil/forms.py | 7 +++++++
 aleksis/apps/alsijil/views.py | 2 +-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/aleksis/apps/alsijil/forms.py b/aleksis/apps/alsijil/forms.py
index 88127e98c..50d8c2579 100644
--- a/aleksis/apps/alsijil/forms.py
+++ b/aleksis/apps/alsijil/forms.py
@@ -8,6 +8,7 @@ from django.utils.translation import gettext_lazy as _
 from django_select2.forms import Select2Widget
 from material import Layout, Row
 
+from aleksis.core.util.core_helpers import queryset_rules_filter
 from aleksis.apps.chronos.managers import TimetableType
 from aleksis.core.models import Group, Person
 
@@ -108,6 +109,12 @@ class RegisterAbsenceForm(forms.Form):
     excused = forms.BooleanField(label=_("Excused"), initial=True, required=False)
     remarks = forms.CharField(label=_("Remarks"), max_length=30, required=False)
 
+    def __init__(self, *args, **kwargs):
+        self.request = kwargs.pop("request")
+        super().__init__(*args, **kwargs)
+        self.fields["person"].queryset = queryset_rules_filter(self.request, Person.objects.all(),
+                                                               "core.register_absence")
+
 
 class PersonalNoteFilterForm(forms.ModelForm):
     layout = Layout(Row("identifier", "description"), Row("regex"))
diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py
index efad0b58c..f8fb823a3 100644
--- a/aleksis/apps/alsijil/views.py
+++ b/aleksis/apps/alsijil/views.py
@@ -396,7 +396,7 @@ def full_register_group(request: HttpRequest, id_: int) -> HttpResponse:
 def register_absence(request: HttpRequest) -> HttpResponse:
     context = {}
 
-    register_absence_form = RegisterAbsenceForm(request.POST or None)
+    register_absence_form = RegisterAbsenceForm(request.POST or None, request=request)
 
     if request.method == "POST":
         if register_absence_form.is_valid():
-- 
GitLab