From f268561995c87ca7c8d8bf108bd92a71eaf38bec Mon Sep 17 00:00:00 2001 From: Julian Leucker <leuckerj@gmail.com> Date: Tue, 14 May 2024 12:57:00 +0200 Subject: [PATCH] Touch documentations when opening manage students dialog --- .../absences/ManageStudentsTrigger.vue | 27 +++++++++++++++++-- .../absences/participationStatus.graphql | 21 +++++++++++++++ aleksis/apps/alsijil/models.py | 6 +++++ aleksis/apps/alsijil/schema/__init__.py | 1 + aleksis/apps/alsijil/schema/documentation.py | 12 +++++++++ 5 files changed, 65 insertions(+), 2 deletions(-) diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsTrigger.vue b/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsTrigger.vue index 3aa87f47c..528a66ed5 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsTrigger.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/ManageStudentsTrigger.vue @@ -2,11 +2,13 @@ import { DateTime } from "luxon"; import ManageStudentsDialog from "./ManageStudentsDialog.vue"; import documentationPartMixin from "../documentation/documentationPartMixin"; +import { touchDocumentation } from "./participationStatus.graphql"; +import mutateMixin from "aleksis.core/mixins/mutateMixin.js"; export default { name: "ManageStudentsTrigger", components: { ManageStudentsDialog }, - mixins: [documentationPartMixin], + mixins: [documentationPartMixin, mutateMixin], data() { return { canOpenParticipation: false, @@ -30,6 +32,26 @@ export default { clearTimeout(this.timeout); } }, + methods: { + touchDocumentation() { + this.mutate( + touchDocumentation, + { + documentationId: this.documentation.id, + }, + (storedDocumentations, incoming) => { + // ID may be different now + console.log("incoming:", incoming); + + return storedDocumentations.map((doc) => + doc.id === this.documentation.id + ? Object.assign(doc, incoming, { oldId: doc.id }) + : doc, + ); + }, + ); + }, + }, }; </script> @@ -40,9 +62,10 @@ export default { dense color="primary" outlined - :disabled="!canOpenParticipation" + :disabled="!canOpenParticipation || loading" v-bind="attrs" v-on="on" + @click="touchDocumentation" > <v-icon>$edit</v-icon> </v-chip> diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/participationStatus.graphql b/aleksis/apps/alsijil/frontend/components/coursebook/absences/participationStatus.graphql index e75232635..4c3f8df66 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/absences/participationStatus.graphql +++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/participationStatus.graphql @@ -16,3 +16,24 @@ mutation updateParticipationStatuses( } } } + +mutation touchDocumentation($documentationId: ID!) { + touchDocumentation(documentationId: $documentationId) { + items: documentation { + id + participations { + id + person { + id + fullName + } + absenceReason { + id + name + shortName + } + isOptimistic + } + } + } +} diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py index 2bf3b78c3..89b15ef94 100644 --- a/aleksis/apps/alsijil/models.py +++ b/aleksis/apps/alsijil/models.py @@ -708,6 +708,12 @@ class Documentation(CalendarEvent): return cls.objects.get(id=_id) + def touch(self): + # TODO: check if participation statuses etc. are created correctly. + # might require some extra work, as the object may have been created + # recently, so checking again would be overkill. + pass + class ParticipationStatus(CalendarEvent): """A participation or absence record about a single person. diff --git a/aleksis/apps/alsijil/schema/__init__.py b/aleksis/apps/alsijil/schema/__init__.py index 7ed5030b3..01366e832 100644 --- a/aleksis/apps/alsijil/schema/__init__.py +++ b/aleksis/apps/alsijil/schema/__init__.py @@ -18,6 +18,7 @@ from .documentation import ( DocumentationBatchCreateOrUpdateMutation, DocumentationType, LessonsForPersonType, + TouchDocumentationMutation, ) from .participation_status import ParticipationStatusBatchPatchMutation diff --git a/aleksis/apps/alsijil/schema/documentation.py b/aleksis/apps/alsijil/schema/documentation.py index bdc965471..72017279c 100644 --- a/aleksis/apps/alsijil/schema/documentation.py +++ b/aleksis/apps/alsijil/schema/documentation.py @@ -139,3 +139,15 @@ class DocumentationBatchCreateOrUpdateMutation(graphene.Mutation): objs = [cls.create_or_update(info, doc) for doc in input] return DocumentationBatchCreateOrUpdateMutation(documentations=objs) + + +class TouchDocumentationMutation(graphene.Mutation): + class Arguments: + documentation_id = graphene.ID(required=True) + + documentation = graphene.Field(DocumentationType) + + def mutate(root, info, documentation_id): + documentation = Documentation.get_or_create_by_id(documentation_id, info.context.user) + documentation.touch() + return TouchDocumentationMutation(documentation=documentation) -- GitLab