From 21bd3d8d258671fe07de7f7d793602b6170f8101 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Mon, 5 Jun 2023 22:00:57 +0200 Subject: [PATCH] Provide current request to all value_ and get_ methods of calendar events --- aleksis/apps/chronos/models.py | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py index f2172e9c..c40c6010 100644 --- a/aleksis/apps/chronos/models.py +++ b/aleksis/apps/chronos/models.py @@ -1431,36 +1431,43 @@ class LessonEvent(CalendarEvent): return ", ".join([r.name for r in self.rooms.all()]) @classmethod - def value_title(cls, reference_object: "LessonEvent") -> str: + def value_title(cls, reference_object: "LessonEvent", request) -> str: """Get the title of the event.""" if reference_object.title: return reference_object.title elif reference_object.subject: - return reference_object.subject.name + " · " + reference_object.group_names + title = reference_object.subject.name + if request.user.person in reference_object.teachers.all(): + title += " · " + reference_object.group_names + else: + title += " · " + reference_object.teacher_names + if reference_object.rooms.all().exists(): + title += " · " + reference_object.room_names + return title return _("Lesson") @classmethod - def value_description(cls, reference_object: "LessonEvent") -> str: + def value_description(cls, reference_object: "LessonEvent", request) -> str: return render_to_string("chronos/lesson_event_description.txt", {"event": reference_object}) @classmethod - def value_color(cls, reference_object: "LessonEvent") -> str: + def value_color(cls, reference_object: "LessonEvent", request) -> str: """Get the color of the event.""" return ( reference_object.subject.colour_bg if reference_object.subject - else super().value_color(reference_object) + else super().value_color(reference_object, request) ) @classmethod - def value_organizer(cls, reference_object: "LessonEvent") -> str: + def value_organizer(cls, reference_object: "LessonEvent", request) -> str: """Get the organizer of the event.""" # TODO: Do not use the teachers as organizer, because only one organizer is allowed return [t.get_vcal_address(role="CHAIR") for t in reference_object.teachers.all()] @classmethod - def value_attendee(cls, reference_object: "LessonEvent") -> str: + def value_attendee(cls, reference_object: "LessonEvent", request) -> str: """Get the attendees of the event.""" # FIXME: Permissions attendees = [t.get_vcal_address(role="CHAIR") for t in reference_object.teachers.all()] + [ @@ -1469,12 +1476,12 @@ class LessonEvent(CalendarEvent): return [a for a in attendees if a] @classmethod - def value_location(cls, reference_object: "LessonEvent") -> str: + def value_location(cls, reference_object: "LessonEvent", request) -> str: """Get the location of the event.""" return ", ".join([r.name for r in reference_object.rooms.all()]) @classmethod - def value_status(cls, reference_object: "LessonEvent") -> str: + def value_status(cls, reference_object: "LessonEvent", request) -> str: """Get the status of the event.""" if reference_object.cancelled: return "CANCELLED" @@ -1485,7 +1492,8 @@ class LessonEvent(CalendarEvent): """Return all objects that should be included in the calendar.""" objs = super().get_objects(request) amended = objs.filter( - Q(teachers=request.user.person) | Q(groups__members=request.user.person) + Q(amended_by__isnull=False) + & (Q(teachers=request.user.person) | Q(groups__members=request.user.person)) ).values_list("amended_by__pk", flat=True) return objs.filter( Q(teachers=request.user.person) @@ -1503,13 +1511,13 @@ class SupervisionEvent(LessonEvent): verbose_name = _("Supervisions") @classmethod - def value_title(cls, reference_object: "LessonEvent") -> str: + def value_title(cls, reference_object: "LessonEvent", request) -> str: """Get the title of the event.""" return _("Supervision: {}").format(reference_object.room_names) @classmethod - def value_description(cls, reference_object: "LessonEvent") -> str: + def value_description(cls, reference_object: "LessonEvent", request) -> str: return render_to_string( "chronos/supervision_event_description.txt", {"event": reference_object} ) -- GitLab