From 7630e7137b9dbe14f911ea1284c10d914266565d Mon Sep 17 00:00:00 2001
From: magicfelix <felix@felix-zauberer.de>
Date: Thu, 28 Jul 2022 18:37:46 +0200
Subject: [PATCH] Make LessonDocumentation able to update or create

---
 .../components/alsijil/CourseBook.graphql     | 11 ++++
 .../assets/components/alsijil/CourseBook.vue  |  5 ++
 .../components/alsijil/LessonDocumentation.js |  5 ++
 aleksis/apps/alsijil/schema.py                | 60 +++++++++++++++++--
 4 files changed, 76 insertions(+), 5 deletions(-)

diff --git a/aleksis/apps/alsijil/assets/components/alsijil/CourseBook.graphql b/aleksis/apps/alsijil/assets/components/alsijil/CourseBook.graphql
index f2575f091..22f8b1300 100644
--- a/aleksis/apps/alsijil/assets/components/alsijil/CourseBook.graphql
+++ b/aleksis/apps/alsijil/assets/components/alsijil/CourseBook.graphql
@@ -32,6 +32,17 @@ query CourseBook($lessonId: ID!) {
     topic
     homework
     groupNote
+    year
+    week
+    lessonPeriod {
+      id
+    }
+    event {
+      id
+    }
+    extraLesson {
+      id
+    }
     period
     date
     personalNotes {
diff --git a/aleksis/apps/alsijil/assets/components/alsijil/CourseBook.vue b/aleksis/apps/alsijil/assets/components/alsijil/CourseBook.vue
index 57e0344c4..51902b05f 100644
--- a/aleksis/apps/alsijil/assets/components/alsijil/CourseBook.vue
+++ b/aleksis/apps/alsijil/assets/components/alsijil/CourseBook.vue
@@ -28,6 +28,11 @@
               <lesson-documentation
                 v-bind:key="item.id"
                 :id="item.id"
+                :year="item.year"
+                :week="item.week"
+                :lessonPeriod="item.lessonPeriod"
+                :event="item.event"
+                :extraLesson="item.extraLesson"
                 :groups="data.lesson.groups"
                 :excuse-types="data.excuseTypes"
                 :extra-marks="data.extraMarks"
diff --git a/aleksis/apps/alsijil/assets/components/alsijil/LessonDocumentation.js b/aleksis/apps/alsijil/assets/components/alsijil/LessonDocumentation.js
index 5056fc1b3..86c1b0ac0 100644
--- a/aleksis/apps/alsijil/assets/components/alsijil/LessonDocumentation.js
+++ b/aleksis/apps/alsijil/assets/components/alsijil/LessonDocumentation.js
@@ -6,6 +6,11 @@ export default {
     },
     props: [
         "id",
+        "year",
+        "week",
+        "lessonPeriod",
+        "event",
+        "extraLesson",
         "date",
         "period",
         "topic",
diff --git a/aleksis/apps/alsijil/schema.py b/aleksis/apps/alsijil/schema.py
index 63cc90717..e09159f5b 100644
--- a/aleksis/apps/alsijil/schema.py
+++ b/aleksis/apps/alsijil/schema.py
@@ -5,7 +5,7 @@ from graphene_django.forms.mutation import DjangoModelFormMutation
 from aleksis.apps.chronos.models import LessonPeriod
 from aleksis.core.models import Person, Group
 from .forms import LessonDocumentationForm
-from .models import ExcuseType, LessonDocumentation, PersonalNote, ExtraMark
+from .models import Event, ExcuseType, ExtraLesson, LessonDocumentation, LessonPeriod, PersonalNote, ExtraMark
 
 
 class ExcuseTypeType(DjangoObjectType):
@@ -51,11 +51,61 @@ class ExtraMarkType(DjangoObjectType):
         model = ExtraMark
 
 
-class LessonDocumentationMutation(DjangoModelFormMutation):
+class LessonDocumentationMutation(graphene.Mutation):
+    class Arguments:
+        year = graphene.Int(required=True)
+        week = graphene.Int(required=True)
+
+        lesson_period_id = graphene.ID(required=False)
+        event_id = graphene.ID(required=False)
+        extra_lesson_id = graphene.ID(required=False)
+
+        lesson_documentation_id = graphene.ID(required=False)
+
+        topic = graphene.String(required=False)
+        homework = graphene.String(required=False)
+        group_note = graphene.String(required=False)
+
     lesson_documentation = graphene.Field(LessonDocumentationType)
 
-    class Meta:
-        form_class = LessonDocumentationForm
+    @classmethod
+    def mutate(
+            cls,
+            root,
+            info,
+            year,
+            week,
+            lesson_period_id=None,
+            event_id=None,
+            extra_lesson_id=None,
+            lesson_documentation_id=None,
+            topic=None,
+            homework=None,
+            group_note=None
+    ):
+
+        lesson_period = LessonPeriod.objects.filter(pk=lesson_period_id).first()
+        event = Event.objects.filter(pk=event_id).first()
+        extra_lesson = ExtraLesson.objects.filter(pk=extra_lesson_id).first()
+
+        lesson_documentation, created = LessonDocumentation.objects.get_or_create(
+            year=year,
+            week=week,
+            lesson_period=lesson_period,
+            event=event,
+            extra_lesson=extra_lesson
+        )
+
+        if topic:
+            lesson_documentation.topic = topic
+        if homework:
+            lesson_documentation.homework = homework
+        if group_note:
+            lesson_documentation.group_note = group_note
+
+        lesson_documentation.save()
+
+        return LessonDocumentationMutation(lesson_documentation=lesson_documentation)
 
 
 class PersonalNoteMutation(graphene.Mutation):
@@ -124,7 +174,7 @@ class PersonalNoteMutation(graphene.Mutation):
 
 
 class Mutation(graphene.ObjectType):
-    update_lesson_documentation = LessonDocumentationMutation.Field()
+    update_or_create_lesson_documentation = LessonDocumentationMutation.Field()
     update_or_create_personal_note = PersonalNoteMutation.Field()
     # update_personal_note = PersonalNoteMutation.Field()
 
-- 
GitLab