From e1bac805c6686d58c2a1da49bf1d66b96036f880 Mon Sep 17 00:00:00 2001
From: Julian Leucker <leuckerj@gmail.com>
Date: Wed, 20 Jul 2022 12:32:43 +0200
Subject: [PATCH] Update schema to support editing and creation of personal
 notes

---
 aleksis/apps/alsijil/schema.py | 43 +++++++++++++++++++---------------
 1 file changed, 24 insertions(+), 19 deletions(-)

diff --git a/aleksis/apps/alsijil/schema.py b/aleksis/apps/alsijil/schema.py
index c6eb931b0..df025b11c 100644
--- a/aleksis/apps/alsijil/schema.py
+++ b/aleksis/apps/alsijil/schema.py
@@ -4,7 +4,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, PersonalNoteForm
+from .forms import LessonDocumentationForm
 from .models import ExcuseType, LessonDocumentation, PersonalNote, ExtraMark
 
 
@@ -58,18 +58,13 @@ class LessonDocumentationMutation(DjangoModelFormMutation):
         form_class = LessonDocumentationForm
 
 
-class PersonalNoteMutation(DjangoModelFormMutation):
-    personal_note = graphene.Field(PersonalNoteType)
-
-    class Meta:
-        form_class = PersonalNoteForm
-
-
-class CreatePersonalNoteMutation(graphene.Mutation):
+class PersonalNoteMutation(graphene.Mutation):
     class Arguments:
         person_id = graphene.ID(required=True)
         lesson_documentation = graphene.ID(required=True)
 
+        personal_note_id = graphene.ID(required=False)  # Update or create personal note
+
         late = graphene.Int(required=False)
         absent = graphene.Boolean(required=False)
         excused = graphene.Boolean(required=False)
@@ -86,6 +81,7 @@ class CreatePersonalNoteMutation(graphene.Mutation):
             info,
             person_id,
             lesson_documentation,
+            personal_note_id=None,
             late=0,
             absent=False,
             excused=False,
@@ -95,32 +91,41 @@ class CreatePersonalNoteMutation(graphene.Mutation):
     ):
         if extra_marks is None:
             extra_marks = []
+
         person = Person.objects.get(pk=person_id)
         lesson_documentation = LessonDocumentation.objects.get(pk=lesson_documentation)
-        extra_marks = ExtraMark.objects.filter(pk__in=extra_marks)
-        personal_note = PersonalNote.objects.create(
+
+        personal_note, created = PersonalNote.objects.get_or_create(
             person=person,
             event=lesson_documentation.event,
             extra_lesson=lesson_documentation.extra_lesson,
             lesson_period=lesson_documentation.lesson_period,
-            late=late,
-            absent=absent,
-            excused=excused,
-            excuse_type=excuse_type,
-            remarks=remarks,
             week=lesson_documentation.week,
             year=lesson_documentation.year,
         )
+        if late:
+            personal_note.late = late
+        if absent is not None:
+            personal_note.absent = absent
+        if excused is not None:
+            personal_note.excused = excused
+        if excuse_type:
+            personal_note.excuse_type = ExcuseType.objects.get(pk=excuse_type)
+        if remarks:
+            personal_note.remarks = remarks
+        personal_note.save()
+
+        extra_marks = ExtraMark.objects.filter(pk__in=extra_marks)
         personal_note.extra_marks.set(extra_marks)
         personal_note.groups_of_person.set(person.member_of.all())
         personal_note.save()
-        return CreatePersonalNoteMutation(personal_note=personal_note)
+        return PersonalNoteMutation(personal_note=personal_note)
 
 
 class Mutation(graphene.ObjectType):
     update_lesson_documentation = LessonDocumentationMutation.Field()
-    create_personal_note = CreatePersonalNoteMutation.Field()
-    update_personal_note = PersonalNoteMutation.Field()
+    update_or_create_personal_note = PersonalNoteMutation.Field()
+    # update_personal_note = PersonalNoteMutation.Field()
 
 
 class Query(graphene.ObjectType):
-- 
GitLab