From 1fb685a1d655e5b91e9443b1b1107057f59af8fe Mon Sep 17 00:00:00 2001 From: Michael Bauer <michael-bauer@posteo.de> Date: Sun, 6 Oct 2024 16:57:10 +0200 Subject: [PATCH] Resolve substitutions partially via graphene-types --- .../frontend/components/substitutions.graphql | 19 +++++---- aleksis/apps/chronos/schema/__init__.py | 41 +++++++++++++++++-- 2 files changed, 49 insertions(+), 11 deletions(-) diff --git a/aleksis/apps/chronos/frontend/components/substitutions.graphql b/aleksis/apps/chronos/frontend/components/substitutions.graphql index 1c5ccd3c..e64ea23e 100644 --- a/aleksis/apps/chronos/frontend/components/substitutions.graphql +++ b/aleksis/apps/chronos/frontend/components/substitutions.graphql @@ -9,15 +9,18 @@ query substitutionsForDate ($date: Date!) { } substitutions { groups { - shortName - } - period { - startSlot - endSlot - startTime - endTime - wholeDay + old { + shortName + } + new { + shortName + } } + startSlot + endSlot + startTime + endTime + wholeDay teachers { shortName fullName diff --git a/aleksis/apps/chronos/schema/__init__.py b/aleksis/apps/chronos/schema/__init__.py index acb8f791..2b902867 100644 --- a/aleksis/apps/chronos/schema/__init__.py +++ b/aleksis/apps/chronos/schema/__init__.py @@ -125,10 +125,45 @@ class TimetableObjectType(graphene.ObjectType): return f"{root.type.value}-{root.id}" +class SubstitutionGroupsType(graphene.ObjectType): + old = graphene.List(GroupType) + new = graphene.List(GroupType) + + def resolve_old(root, info): + if not root.cancelled and root.groups.all() and root.amends.groups.all(): + return root.amends.groups.all() + else: + return [] + + def resolve_new(root, info): + if root cancelled: + return root.amends.groups.all() + else: + return root.groups.all() or root.amends.groups.all() + + +class SubstitutionType(graphene.ObjectType): + """This type contains the logic also contained in the pdf templates.""" + groups = graphene.List(SubstitutionGroupsType) + start_slot = graphene.Int() + end_slot = graphene.Int() + start_time = graphene.Time() + end_time = graphene.Time() + whole_day = graphene.Boolean() + teachers = graphene.List(PersonType) + subject = graphene.String() + rooms = graphene.List(RoomType) + cancelled = graphene.Boolean() + comment = graphene.String() + + def resolve_groups(root, info): + return root['REFERENCE_OBJECT'] + + class SubstitutionsForDateType(graphene.ObjectType): affected_teachers = graphene.List(PersonType) affected_groups = graphene.List(GroupType) - substitutions = graphene.List(LessonEventType) + substitutions = graphene.List(SubstitutionType) class Query(graphene.ObjectType): timetable_teachers = graphene.List(TimetablePersonType) @@ -137,7 +172,7 @@ class Query(graphene.ObjectType): available_timetables = graphene.List(TimetableObjectType) substitutions_for_date = graphene.List( SubstitutionsForDateType, - date=graphene.Date, + date=graphene.Date(), ) def resolve_timetable_teachers(self, info, **kwargs): @@ -185,7 +220,7 @@ class Query(graphene.ObjectType): SubstitutionsForDateType( affected_teachers=affected_teachers, affected_groups=affected_groups, - substitutions=[sub['el']['REFERENCE_OBJECT'] for sub in substitutions] + substitutions=[sub['el'] for sub in substitutions] ) class Mutation(graphene.ObjectType): -- GitLab