From be37ac4a80887a09f20e3a12794a6cca19db58f0 Mon Sep 17 00:00:00 2001 From: Julian Leucker <leuckerj@gmail.com> Date: Wed, 14 Aug 2024 11:53:23 +0200 Subject: [PATCH] Update sendToServer to accept extramarks as well --- .../coursebook/absences/sendToServerMixin.js | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/sendToServerMixin.js b/aleksis/apps/alsijil/frontend/components/coursebook/absences/sendToServerMixin.js index d75f72173..c417e016f 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/absences/sendToServerMixin.js +++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/sendToServerMixin.js @@ -1,6 +1,7 @@ /** * Mixin to provide shared functionality needed to send updated participation data to the server */ +import { createPersonalNotes } from "../personal_notes/personal_notes.graphql"; import { updateParticipationStatuses } from "./participationStatus.graphql"; import mutateMixin from "aleksis.core/mixins/mutateMixin.js"; @@ -18,6 +19,10 @@ export default { fieldValue = { tardiness: value, }; + } else if (field === "extraMark") { + // Too much different logic → own method + this.addExtraMarks(participations, value); + return; } else { console.error(`Wrong field '${field}' for sendToServer`); return; @@ -50,5 +55,39 @@ export default { }, ); }, + addExtraMarks(participations, extraMarkId) { + + // Get all participation statuses without this extra mark and get the respective person ids + const participants = participations.filter( + participation => !participation.notesWithExtraMark.some(note => note.extraMark.id === extraMarkId) + ).map(participation => participation.person.id) + + // CREATE new personal note + this.mutate( + createPersonalNotes, + { + input: participants.map(person => ( + { + documentation: this.documentation.id, + person: person, + extraMark: extraMarkId, + } + )), + }, + (storedDocumentations, incomingPersonalNotes) => { + const documentation = storedDocumentations.find( + (doc) => doc.id === this.documentation.id, + ); + incomingPersonalNotes.forEach((note, index) => { + const participationStatus = documentation.participations.find( + (part) => part.person.id === participants[index], + ); + participationStatus.notesWithExtraMark.push(note); + }); + + return storedDocumentations; + }, + ); + } }, }; -- GitLab