From cbd4e140b8e793bf30056c767952e77f42f5608a Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Tue, 18 Aug 2020 18:30:16 +0200
Subject: [PATCH] Add several small bug fixes

---
 aleksis/apps/alsijil/model_extensions.py | 5 ++++-
 aleksis/apps/alsijil/rules.py            | 9 +++++++++
 aleksis/apps/alsijil/util/predicates.py  | 7 ++++---
 aleksis/apps/alsijil/views.py            | 4 ++--
 4 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/aleksis/apps/alsijil/model_extensions.py b/aleksis/apps/alsijil/model_extensions.py
index 5113723f4..ce997f31a 100644
--- a/aleksis/apps/alsijil/model_extensions.py
+++ b/aleksis/apps/alsijil/model_extensions.py
@@ -108,7 +108,10 @@ def get_personal_notes(self, persons: QuerySet, wanted_week: CalendarWeek):
         personal_note.groups_of_person.set(personal_note.person.member_of.all())
 
     return PersonalNote.objects.select_related("person").filter(
-        lesson_period=self, week=wanted_week.week, year=wanted_week.year
+        lesson_period=self,
+        week=wanted_week.week,
+        year=wanted_week.year,
+        person__in=persons,
     )
 
 
diff --git a/aleksis/apps/alsijil/rules.py b/aleksis/apps/alsijil/rules.py
index ec1c62fa3..73d8879cf 100644
--- a/aleksis/apps/alsijil/rules.py
+++ b/aleksis/apps/alsijil/rules.py
@@ -36,6 +36,15 @@ add_perm("alsijil.view_lesson", view_lesson_predicate)
 # View lesson in menu
 add_perm("alsijil.view_lesson_menu", has_person)
 
+# View lesson personal notes
+view_lesson_personal_notes_predicate = has_person & (
+    has_global_perm("alsijil.view_personalnote")
+    | has_lesson_group_object_perm("core.view_personalnote_group")
+    | is_lesson_teacher
+    | is_lesson_parent_group_owner
+)
+add_perm("alsijil.view_lesson_personalnote", view_lesson_personal_notes_predicate)
+
 # View personal note
 view_personal_note_predicate = has_person & (
     has_global_perm("alsijil.view_personalnote")
diff --git a/aleksis/apps/alsijil/util/predicates.py b/aleksis/apps/alsijil/util/predicates.py
index 05c29eacc..3e62d17a2 100644
--- a/aleksis/apps/alsijil/util/predicates.py
+++ b/aleksis/apps/alsijil/util/predicates.py
@@ -21,9 +21,10 @@ def is_lesson_teacher(user: User, obj: LessonPeriod) -> bool:
     in the lesson or the substitution linked to the given LessonPeriod.
     """
     if obj:
-        return user.person in obj.lesson.teachers.all() or user.person in Person.objects.filter(
-            lesson_substitutions=obj.get_substitution()
-        )
+        sub = obj.get_substitution()
+        if sub and sub in user.person.lesson_substitutions.all():
+            return True
+        return user.person in obj.lesson.teachers.all()
     return True
 
 
diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py
index 2c75b4286..9bf9be6a5 100644
--- a/aleksis/apps/alsijil/views.py
+++ b/aleksis/apps/alsijil/views.py
@@ -107,9 +107,9 @@ def lesson(
     )
 
     # Create a formset that holds all personal notes for all persons in this lesson
-    persons = Person.objects
+    persons = Person.objects.all()
     if not request.user.has_perm("alsijil.view_lesson_personalnote", lesson_period):
-        persons = persons.filter(pk=request.user.pk)
+        persons = persons.filter(pk=request.user.person.pk)
     persons_qs = lesson_period.get_personal_notes(persons, wanted_week)
     personal_note_formset = PersonalNoteFormSet(
         request.POST or None, queryset=persons_qs, prefix="personal_notes"
-- 
GitLab