From 47cc5796c1eec99d0c131141aa8d661a67e46a0c Mon Sep 17 00:00:00 2001
From: Michael Bauer <michael-bauer@posteo.de>
Date: Thu, 2 May 2024 17:56:28 +0200
Subject: [PATCH] Implement lessons-for-persons query handler

---
 .../absences/absenceCreation.graphql          |  7 +--
 aleksis/apps/alsijil/schema/__init__.py       | 52 ++++++++-----------
 2 files changed, 27 insertions(+), 32 deletions(-)

diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/absenceCreation.graphql b/aleksis/apps/alsijil/frontend/components/coursebook/absences/absenceCreation.graphql
index 130b5cabb..a7028c74f 100644
--- a/aleksis/apps/alsijil/frontend/components/coursebook/absences/absenceCreation.graphql
+++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/absenceCreation.graphql
@@ -17,15 +17,16 @@ query lessonsForPersons(
     end: $end
   ) {
     id
-    fullname
     lessons {
-      start
-      end
+      id
+      datetimeStart
+      datetimeEnd
       course
       subject
     }
   }
 }
+# TODO: course is missing in LessonEventType
 
 # Use absencesInputType
 mutation createAbsences(
diff --git a/aleksis/apps/alsijil/schema/__init__.py b/aleksis/apps/alsijil/schema/__init__.py
index 7803b6127..1bab10d51 100644
--- a/aleksis/apps/alsijil/schema/__init__.py
+++ b/aleksis/apps/alsijil/schema/__init__.py
@@ -11,6 +11,7 @@ from aleksis.core.models import Group, Person
 from aleksis.core.schema.base import FilterOrderList
 from aleksis.core.schema.group import GroupType
 from aleksis.core.util.core_helpers import has_person
+from aleksis.apps.chronos.models import LessonEvent
 
 from ..models import Documentation
 from .documentation import (
@@ -123,7 +124,8 @@ class Query(graphene.ObjectType):
             | Q(groups__parent_groups__owners=person)
         )
 
-    def lessons_for_persons(
+    @staticmethod
+    def resolve_lessons_for_persons(
         root,
         info,
         persons,
@@ -131,36 +133,28 @@ class Query(graphene.ObjectType):
         end,
         **kwargs,
     ):
-        # Do date like resolve_documentations_for_coursebook? 
-
-        # Get all lesson events for person
-        #   Make this reusable for mutation -> Einzeiler
-        # Pack into (id fullname lesson (start end course subject ...))
-        
-        event_params = {
-            "type": "PARTICIPANT",
-            "obj_id": PERSON_ID,
-        }
-
-        # get_objects (lesson_events chronos models.py)
-        # adapt own -> person as param
-        # _put list of person IDs in event_params_
-
-        events = LessonEvent.get_single_events(
-            start,
-            end,
-            None,
-            event_params,
-            with_reference_object=True,
-        )
+        """Resolve all lesson events for each person in timeframe start to end.
+        """
+        lessons_for_person = []
+        for person in persons:
+            event_params = {
+                "type": "PARTICIPANT",
+                "obj_id": PERSON_ID,
+            }
+
+            lessons_for_person.append(
+                id=person,
+                lessons=LessonEvent.get_single_events(
+                    datetime.combine(start, datetime.min.time()),
+                    datetime.combine(date_end, datetime.max.time()),
+                    None,
+                    event_params,
+                    with_reference_object=True,
+                )
+            )
 
-        return [id
-        
-                get_single_events -> python object ical 
-        # Use own graphene types (wrapper, & event
-        # then populate them here
+        return lessons_for_person
 
-        return
 
 class Mutation(graphene.ObjectType):
     create_or_update_documentations = DocumentationBatchCreateOrUpdateMutation.Field()
-- 
GitLab