From 05dcffa950bd4e38080fc230c8c2a809dd3e9aa6 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Wed, 7 Jun 2023 18:02:10 +0200
Subject: [PATCH] Make descriptions of LessonEvents compatible with
 substitutions

---
 aleksis/apps/chronos/models.py                | 50 +++++++++++++++++++
 .../chronos/lesson_event_description.txt      | 10 ++--
 2 files changed, 56 insertions(+), 4 deletions(-)

diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py
index c40c6010..24815bb9 100644
--- a/aleksis/apps/chronos/models.py
+++ b/aleksis/apps/chronos/models.py
@@ -1430,6 +1430,56 @@ class LessonEvent(CalendarEvent):
     def room_names(self: "LessonEvent") -> str:
         return ", ".join([r.name for r in self.rooms.all()])
 
+    @property
+    def room_names_with_amends(self: "LessonEvent") -> str:
+        my_room_names = self.room_names
+        amended_room_names = self.real_amends.room_names if self.amends else ""
+
+        if my_room_names and amended_room_names:
+            return _("{} (instead of {})").format(my_room_names, amended_room_names)
+        elif not my_room_names and amended_room_names:
+            return amended_room_names
+        return my_room_names
+
+    @property
+    def group_names_with_amends(self: "LessonEvent") -> str:
+        my_group_names = self.group_names
+        amended_group_names = self.real_amends.group_names if self.amends else ""
+
+        if my_group_names and amended_group_names:
+            return _("{} (instead of {})").format(my_group_names, amended_group_names)
+        elif not my_group_names and amended_group_names:
+            return amended_group_names
+        return my_group_names
+
+    @property
+    def teacher_names_with_amends(self: "LessonEvent") -> str:
+        my_teacher_names = self.teacher_names
+        amended_teacher_names = self.real_amends.teacher_names if self.amends else ""
+
+        if my_teacher_names and amended_teacher_names:
+            return _("{} (instead of {})").format(my_teacher_names, amended_teacher_names)
+        elif not my_teacher_names and amended_teacher_names:
+            return amended_teacher_names
+        return my_teacher_names
+
+    @property
+    def subject_name_with_amends(self: "LessonEvent") -> str:
+        my_subject = self.subject.name
+        amended_subject = self.real_amends.subject.name if self.amends else ""
+
+        if my_subject and amended_subject:
+            return _("{} (instead of {})").format(my_subject, amended_subject)
+        elif not my_subject and amended_subject:
+            return amended_subject
+        return my_subject
+
+    @property
+    def real_amends(self: "LessonEvent") -> "LessonEvent":
+        if self.amends:
+            return LessonEvent.objects.get(pk=self.amends.pk)
+        return self
+
     @classmethod
     def value_title(cls, reference_object: "LessonEvent", request) -> str:
         """Get the title of the event."""
diff --git a/aleksis/apps/chronos/templates/chronos/lesson_event_description.txt b/aleksis/apps/chronos/templates/chronos/lesson_event_description.txt
index db81aa0a..055eb824 100644
--- a/aleksis/apps/chronos/templates/chronos/lesson_event_description.txt
+++ b/aleksis/apps/chronos/templates/chronos/lesson_event_description.txt
@@ -1,4 +1,6 @@
-{% load i18n %}{% trans "Groups" %}: {{ event.group_names }}
-{% trans "Subject" %}: {{ event.subject }}
-{% trans "Teachers" %}: {{ event.teacher_names }}
-{% trans "Rooms" %}: {{ event.room_names }}
\ No newline at end of file
+{% load i18n %}{% trans "Groups" %}: {{ event.group_names_with_amends|default:"–" }}{% if event.subject %}
+{% trans "Subject" %}: {{ event.subject_name_with_amends }}{% endif %}
+{% trans "Teachers" %}: {{ event.teacher_names_with_amends|default:"–" }}
+{% trans "Rooms" %}: {{ event.room_names_with_amends|default:"–" }}{% if event.comment %}
+
+{{ event.comment }}{% endif %}
\ No newline at end of file
-- 
GitLab