From 8f13316806837caca1229bc907c3fdfb0a2076ce Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Thu, 11 Mar 2021 11:56:47 +0100
Subject: [PATCH] Add preference for allowing original teachers to edit their
 substituted lessons

---
 aleksis/apps/alsijil/preferences.py |  8 ++++++++
 aleksis/apps/alsijil/rules.py       | 14 +++++++++++++-
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/aleksis/apps/alsijil/preferences.py b/aleksis/apps/alsijil/preferences.py
index 98cdcc710..6ebcb2ae2 100644
--- a/aleksis/apps/alsijil/preferences.py
+++ b/aleksis/apps/alsijil/preferences.py
@@ -34,6 +34,14 @@ class RegisterAbsenceAsPrimaryGroupOwner(BooleanPreference):
     )
 
 
+@site_preferences_registry.register
+class EditLessonDocumentationAsOriginalTeacher(BooleanPreference):
+    section = alsijil
+    name = "edit_lesson_documentation_as_original_teacher"
+    default = True
+    verbose_name = _("Allow original teachers to edit their lessons although they are substituted")
+
+
 @site_preferences_registry.register
 class CarryOverDataToNextPeriods(BooleanPreference):
     section = alsijil
diff --git a/aleksis/apps/alsijil/rules.py b/aleksis/apps/alsijil/rules.py
index 4037bb6df..836e0aaf7 100644
--- a/aleksis/apps/alsijil/rules.py
+++ b/aleksis/apps/alsijil/rules.py
@@ -58,6 +58,10 @@ add_perm("alsijil.view_register_object_personalnote", view_lesson_personal_notes
 # Edit personal note
 edit_lesson_personal_note_predicate = view_lesson_personal_notes_predicate & (
     is_lesson_teacher
+    | (
+        is_lesson_original_teacher
+        & is_site_preference_set("alsijil", "edit_lesson_documentation_as_original_teacher")
+    )
     | has_global_perm("alsijil.change_personalnote")
     | has_lesson_group_object_perm("core.edit_personalnote_group")
 )
@@ -76,7 +80,11 @@ add_perm("alsijil.view_personalnote", view_personal_note_predicate)
 
 # Edit personal note
 edit_personal_note_predicate = view_personal_note_predicate & (
-    ~is_own_personal_note & ~is_personal_note_lesson_original_teacher
+    ~is_own_personal_note
+    & ~(
+        is_personal_note_lesson_original_teacher
+        or not is_site_preference_set("alsijil", "edit_lesson_documentation_as_original_teacher")
+    )
     | has_global_perm("alsijil.view_personalnote")
     | has_personal_note_group_perm("core.edit_personalnote_group")
 )
@@ -89,6 +97,10 @@ add_perm("alsijil.view_lessondocumentation", view_lesson_documentation_predicate
 # Edit lesson documentation
 edit_lesson_documentation_predicate = view_register_object_predicate & (
     is_lesson_teacher
+    | (
+        is_lesson_original_teacher
+        & is_site_preference_set("alsijil", "edit_lesson_documentation_as_original_teacher")
+    )
     | has_global_perm("alsijil.change_lessondocumentation")
     | has_lesson_group_object_perm("core.edit_lessondocumentation_group")
 )
-- 
GitLab