From 0e4ce68d999ae08b81e2812ec30a7a5d3b118839 Mon Sep 17 00:00:00 2001
From: Michael Bauer <michael-bauer@posteo.de>
Date: Tue, 30 Apr 2024 12:49:56 +0200
Subject: [PATCH] Add for_participant manager

that returns all lessonEvent a person participates in.
---
 aleksis/apps/chronos/managers.py | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/aleksis/apps/chronos/managers.py b/aleksis/apps/chronos/managers.py
index b61587a8..3d8f8e0a 100644
--- a/aleksis/apps/chronos/managers.py
+++ b/aleksis/apps/chronos/managers.py
@@ -876,6 +876,15 @@ class LessonEventQuerySet(PolymorphicQuerySet):
         )
         return self.filter(Q(teachers=teacher) | Q(pk__in=amended)).distinct()
 
+    def for_participant(self, person: Union[int, Person]) -> "LessonEventQuerySet":
+        """Get all lesson events the person participates in (including amends)."""
+        amended = self.filter(
+            Q(amended_by__isnull=False) | Q(groups__members=person)
+        ).values_list("amended_by__pk", flat=True)
+        return self.filter(
+            Q(groups__members=person) | Q(pk__in=amended)
+        ).distinct()
+
     def for_group(self, group: Union[int, Group]) -> "LessonEventQuerySet":
         """Get all lesson events for a certain group (including amends/as parent group)."""
         amended = self.filter(
-- 
GitLab