From 017602dda429b70af3cefdd9c0911412bd73a597 Mon Sep 17 00:00:00 2001
From: Hangzhi Yu <hangzhi@protonmail.com>
Date: Sun, 16 Aug 2020 15:16:29 +0200
Subject: [PATCH] Add filtered dropdowns for week overview

---
 aleksis/apps/alsijil/forms.py | 20 +++++++++++++-------
 aleksis/apps/alsijil/views.py |  2 +-
 2 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/aleksis/apps/alsijil/forms.py b/aleksis/apps/alsijil/forms.py
index b05cdeb4e..445f4a205 100644
--- a/aleksis/apps/alsijil/forms.py
+++ b/aleksis/apps/alsijil/forms.py
@@ -6,11 +6,12 @@ from django.db.models import Count
 from django.utils.translation import gettext_lazy as _
 
 from django_select2.forms import Select2Widget
+from guardian.shortcuts import get_objects_for_user
 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
+from aleksis.core.util.predicates import check_global_permission
 
 from .models import ExcuseType, ExtraMark, LessonDocumentation, PersonalNote
 
@@ -51,12 +52,7 @@ class SelectForm(forms.Form):
         queryset=None, label=_("Group"), required=False, widget=Select2Widget,
     )
     teacher = forms.ModelChoiceField(
-        queryset=Person.objects.annotate(
-            lessons_count=Count("lessons_as_teacher")
-        ).filter(lessons_count__gt=0),
-        label=_("Teacher"),
-        required=False,
-        widget=Select2Widget,
+        queryset=None, label=_("Teacher"), required=False, widget=Select2Widget,
     )
 
     def clean(self) -> dict:
@@ -78,12 +74,22 @@ class SelectForm(forms.Form):
         return data
 
     def __init__(self, *args, **kwargs):
+        self.request = kwargs.pop("request")
         super().__init__(*args, **kwargs)
         self.fields["group"].queryset = (
             Group.objects.for_current_school_term_or_all()
             .annotate(lessons_count=Count("lessons"))
             .filter(lessons_count__gt=0)
         )
+        if not check_global_permission(self.request.user, "alsijil.view_week"):
+            self.fields["group"].queryset = self.fields["group"].queryset & get_objects_for_user(
+                self.request.user, "core.register_absence_group", Group
+            )
+        self.fields["teacher"].queryset = (
+            Person.objects.annotate(lessons_count=Count("lessons_as_teacher")).filter(lessons_count__gt=0)
+        )
+        if not check_global_permission(self.request.user, "alsijil.view_week"):
+            self.fields["teacher"].queryset = self.fields["teacher"].queryset.filter(pk=self.request.user.person.pk)
 
 
 PersonalNoteFormSet = forms.modelformset_factory(
diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py
index f2cf70d98..34ace3a0b 100644
--- a/aleksis/apps/alsijil/views.py
+++ b/aleksis/apps/alsijil/views.py
@@ -206,7 +206,7 @@ def week_view(
         initial = {type_.value: instance}
     else:
         initial = {}
-    select_form = SelectForm(request.POST or None, initial=initial)
+    select_form = SelectForm(request.POST or None, initial=initial, request=request)
 
     if request.method == "POST":
         if select_form.is_valid():
-- 
GitLab