From ba21458f135193504816e1cdc39556e8f3742d34 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Sat, 2 Sep 2023 17:21:11 +0200
Subject: [PATCH] Fix displaying of subjects in lesson feed

---
 .../frontend/components/LessonEventOldNew.vue |  2 +-
 .../components/LessonEventSubject.vue         |  6 +-
 .../calendar_feeds/details/LessonDetails.vue  | 18 ++----
 aleksis/apps/chronos/models.py                | 16 +++--
 aleksis/apps/chronos/schema/__init__.py       | 59 +++++++++----------
 5 files changed, 47 insertions(+), 54 deletions(-)

diff --git a/aleksis/apps/chronos/frontend/components/LessonEventOldNew.vue b/aleksis/apps/chronos/frontend/components/LessonEventOldNew.vue
index 11634a63..774dfb8a 100644
--- a/aleksis/apps/chronos/frontend/components/LessonEventOldNew.vue
+++ b/aleksis/apps/chronos/frontend/components/LessonEventOldNew.vue
@@ -29,7 +29,7 @@ export default {
         ><lesson-event-link-iterator :items="oldItems" :attr="attr"
       /></span>
       <!-- eslint-disable-next-line @intlify/vue-i18n/no-raw-text -->
-      <span>→</span>
+      <span> → </span>
       <lesson-event-link-iterator :items="newItems" :attr="attr" />
     </span>
     <span v-else-if="newItems.length > 0">
diff --git a/aleksis/apps/chronos/frontend/components/LessonEventSubject.vue b/aleksis/apps/chronos/frontend/components/LessonEventSubject.vue
index d102c9dd..9a739936 100644
--- a/aleksis/apps/chronos/frontend/components/LessonEventSubject.vue
+++ b/aleksis/apps/chronos/frontend/components/LessonEventSubject.vue
@@ -26,13 +26,13 @@ export default {
         {{ event.meta.amends.subject[attr] }}</span
       >
       <!-- eslint-disable-next-line @intlify/vue-i18n/no-raw-text -->
-      <span>→</span>
-      {{ event.meta.subject[attr] }}
+      <span> → </span>
+      <span>{{ event.meta.subject[attr] }}</span>
     </span>
     <span v-else-if="event.meta.subject">
       {{ event.meta.subject[attr] }}
     </span>
-    <span v-else-if="event.amended && event.amends.subject">
+    <span v-else-if="event.meta.amended && event.meta.amends.subject">
       {{ event.meta.amends.subject[attr] }}
     </span>
     <span v-else>
diff --git a/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue b/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue
index 3459abc5..2732bee5 100644
--- a/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue
+++ b/aleksis/apps/chronos/frontend/components/calendar_feeds/details/LessonDetails.vue
@@ -149,16 +149,10 @@
             />
           </template>
           <template #cancelled.field="{ attrs, on }">
-            <v-checkbox
-              v-bind="attrs"
-              v-on="on"
-            />
+            <v-checkbox v-bind="attrs" v-on="on" />
           </template>
           <template #comment.field="{ attrs, on }">
-            <v-textarea
-              v-bind="attrs"
-              v-on="on"
-            />
+            <v-textarea v-bind="attrs" v-on="on" />
           </template>
         </dialog-object-form>
       </v-card-actions>
@@ -183,7 +177,7 @@ import {
   gqlPersons,
   gqlRooms,
   createAmendLesson,
-  patchAmendLesson
+  patchAmendLesson,
 } from "../../amendLesson.graphql";
 
 export default {
@@ -229,7 +223,7 @@ export default {
           comment: this.selectedEvent.meta.comment,
         },
         gqlCreateMutation: createAmendLesson,
-        gqlPatchMutation: patchAmendLesson
+        gqlPatchMutation: patchAmendLesson,
       },
     };
   },
@@ -239,8 +233,8 @@ export default {
         ...item,
         amends: this.selectedEvent.meta.id,
         // LessonEvent has datetime in UTC & graphql does not like the Z timezone info
-        datetimeStart: this.selectedEvent.start.toISOString().replace('Z', ''),
-        datetimeEnd: this.selectedEvent.end.toISOString().replace('Z', ''),
+        datetimeStart: this.selectedEvent.start.toISOString().replace("Z", ""),
+        datetimeEnd: this.selectedEvent.end.toISOString().replace("Z", ""),
       };
     },
     transformPatchData(item) {
diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py
index ed70d658..165e9b10 100644
--- a/aleksis/apps/chronos/models.py
+++ b/aleksis/apps/chronos/models.py
@@ -1468,14 +1468,16 @@ class LessonEvent(CalendarEvent):
 
     @property
     def subject_name_with_amends(self: "LessonEvent") -> str:
-        my_subject = self.subject.name
+        my_subject = self.subject.name if self.subject else ""
         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
+        elif my_subject:
+            return my_subject
+        return _("Lesson")
 
     @property
     def real_amends(self: "LessonEvent") -> "LessonEvent":
@@ -1489,14 +1491,16 @@ class LessonEvent(CalendarEvent):
         """Get the title of the event."""
         if reference_object.title:
             return reference_object.title
-        elif reference_object.subject:
-            title = reference_object.subject.name
+        elif reference_object.subject or (
+            reference_object.amends and reference_object.real_amends.subject
+        ):
+            title = reference_object.subject_name_with_amends
             if request.user.person in reference_object.teachers.all():
                 title += " · " + reference_object.group_names
             else:
-                title += " · " + reference_object.teacher_names
+                title += " · " + reference_object.teacher_names_with_amends
             if reference_object.rooms.all().exists():
-                title += " · " + reference_object.room_names
+                title += " · " + reference_object.room_names_with_amends
             return title
 
         return _("Lesson")
diff --git a/aleksis/apps/chronos/schema/__init__.py b/aleksis/apps/chronos/schema/__init__.py
index e5d83a8c..212a9330 100644
--- a/aleksis/apps/chronos/schema/__init__.py
+++ b/aleksis/apps/chronos/schema/__init__.py
@@ -2,9 +2,9 @@ import graphene
 from graphene_django import DjangoObjectType
 from graphene_django_cud.mutations import DjangoCreateMutation, DjangoPatchMutation
 
-from aleksis.core.models import Group, Person, Room, CalendarEvent
-from ..models import LessonEvent
+from aleksis.core.models import CalendarEvent, Group, Person, Room
 
+from ..models import LessonEvent
 from ..util.chronos_helpers import get_classes, get_rooms, get_teachers
 
 
@@ -35,53 +35,48 @@ class TimetableRoomType(DjangoObjectType):
 class CalendarEventForLessonEventType(DjangoObjectType):
     class Meta:
         model = CalendarEvent
-        fields = ("id",
-                  "amends",
-                  "datetime_start",
-                  "datetime_end")
+        fields = ("id", "amends", "datetime_start", "datetime_end")
 
 
 class LessonEventType(DjangoObjectType):
     class Meta:
         model = LessonEvent
-        fields = ("id",
-                  "amends",
-                  "datetime_start",
-                  "datetime_end",
-                  "subject",
-                  "teachers",
-                  "groups",
-                  "rooms",
-                  "cancelled",
-                  "comment")
+        fields = (
+            "id",
+            "amends",
+            "datetime_start",
+            "datetime_end",
+            "subject",
+            "teachers",
+            "groups",
+            "rooms",
+            "cancelled",
+            "comment",
+        )
 
 
 class AmendLessonCreateMutation(DjangoCreateMutation):
     class Meta:
         model = LessonEvent
         permissions = ("chronos.edit_substitution_rule",)
-        only_fields = ("amends",
-                       "datetime_start",
-                       "datetime_end",
-                       "subject",
-                       "teachers",
-                       "groups",
-                       "rooms",
-                       "cancelled",
-                       "comment")
+        only_fields = (
+            "amends",
+            "datetime_start",
+            "datetime_end",
+            "subject",
+            "teachers",
+            "groups",
+            "rooms",
+            "cancelled",
+            "comment",
+        )
 
 
 class AmendLessonPatchMutation(DjangoPatchMutation):
     class Meta:
         model = LessonEvent
         permissions = ("chronos.edit_substitution_rule",)
-        only_fields = (
-                       "subject",
-                       "teachers",
-                       "groups",
-                       "rooms",
-                       "cancelled",
-                       "comment")
+        only_fields = ("subject", "teachers", "groups", "rooms", "cancelled", "comment")
 
 
 class TimetableType(graphene.Enum):
-- 
GitLab