From 3105d246723ae471405dc0742da4c77287071351 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Mon, 1 Jul 2024 19:17:36 +0200
Subject: [PATCH] Fix design for cancelled lessons and don't allow
 participation status with cancelled lessons

---
 .../components/coursebook/absences/ManageStudentsTrigger.vue  | 1 +
 .../components/coursebook/documentation/LessonInformation.vue | 4 ++++
 aleksis/apps/alsijil/models.py                                | 1 +
 aleksis/apps/alsijil/util/predicates.py                       | 4 ++++
 4 files changed, 10 insertions(+)

diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsTrigger.vue b/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsTrigger.vue
index 572036c67..a7854c9ae 100644
--- a/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsTrigger.vue
+++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsTrigger.vue
@@ -58,6 +58,7 @@ export default {
     v-bind="documentationPartProps"
     @update="() => null"
     :loading-indicator="loading"
+    v-if="!documentation.amends?.cancelled"
   >
     <template #activator="{ attrs, on }">
       <v-chip
diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonInformation.vue b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonInformation.vue
index 652609dcc..7128bb797 100644
--- a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonInformation.vue
+++ b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonInformation.vue
@@ -38,6 +38,10 @@ import PersonChip from "aleksis.core/components/person/PersonChip.vue";
         :subject="documentation.subject"
         v-bind="compact ? dialogActivator.attrs : {}"
         v-on="compact ? dialogActivator.on : {}"
+        :class="{
+          'text-decoration-line-through': documentation.amends?.cancelled,
+        }"
+        :disabled="documentation.amends?.cancelled"
       />
       <subject-chip
         v-if="
diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py
index 9e68ccd06..65358c5b9 100644
--- a/aleksis/apps/alsijil/models.py
+++ b/aleksis/apps/alsijil/models.py
@@ -695,6 +695,7 @@ class Documentation(CalendarEvent):
             self.participation_touched_at
             or not self.amends
             or self.value_start_datetime(self) > now()
+            or self.amends.cancelled
         ):
             # There is no source to update from or it's too early
             return
diff --git a/aleksis/apps/alsijil/util/predicates.py b/aleksis/apps/alsijil/util/predicates.py
index 9f06195e2..46e8cec68 100644
--- a/aleksis/apps/alsijil/util/predicates.py
+++ b/aleksis/apps/alsijil/util/predicates.py
@@ -450,6 +450,8 @@ def can_edit_documentation(user: User, obj: Documentation):
 def can_view_participation_status(user: User, obj: Documentation):
     """Predicate which checks if the user is allowed to view participation for a documentation."""
     if obj:
+        if obj.amends and obj.amends.cancelled:
+            return False
         if is_documentation_teacher(user, obj):
             return True
         if obj.amends:
@@ -465,6 +467,8 @@ def can_view_participation_status(user: User, obj: Documentation):
 def can_edit_participation_status(user: User, obj: Documentation):
     """Predicate which checks if the user is allowed to edit participation for a documentation."""
     if obj:
+        if obj.amends and obj.amends.cancelled:
+            return False
         if is_documentation_teacher(user, obj):
             return True
         if obj.amends:
-- 
GitLab