From d98f5e9f8be11f8b3f02a2e5c6fab76f691c53eb Mon Sep 17 00:00:00 2001 From: Julian Leucker <leuckerj@gmail.com> Date: Wed, 12 Jun 2024 20:03:50 +0200 Subject: [PATCH] Show student names grouped by absence reason --- .../absences/participationStatus.graphql | 1 + .../components/coursebook/coursebook.graphql | 1 + .../coursebook/documentation/LessonNotes.vue | 32 +++++++++++++++---- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/participationStatus.graphql b/aleksis/apps/alsijil/frontend/components/coursebook/absences/participationStatus.graphql index 2f15ef02d..81a3a5fb1 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/absences/participationStatus.graphql +++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/participationStatus.graphql @@ -26,6 +26,7 @@ mutation touchDocumentation($documentationId: ID!) { id person { id + firstName fullName } absenceReason { diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/coursebook.graphql b/aleksis/apps/alsijil/frontend/components/coursebook/coursebook.graphql index 1e00bab2e..c7aaad283 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/coursebook.graphql +++ b/aleksis/apps/alsijil/frontend/components/coursebook/coursebook.graphql @@ -70,6 +70,7 @@ query documentationsForCoursebook( id person { id + firstName fullName } absenceReason { diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonNotes.vue b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonNotes.vue index 4c4c24675..bc0da4a74 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonNotes.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonNotes.vue @@ -10,12 +10,29 @@ import AbsenceReasonChip from "aleksis.apps.kolego/components/AbsenceReasonChip. {{ $t("alsijil.coursebook.present_number", { present, total }) }} </v-chip> <absence-reason-chip - v-for="participation in absences" - :key="'absence-' + participation.id" - :absence-reason="participation.absenceReason" + v-for="[reasonId, participations] in Object.entries(absences)" + :key="'reason-' + reasonId" + :absence-reason="participations[0].absenceReason" dense > - <template #prepend> {{ participation.person.fullName }}: </template> + <template #append> + <span + >: + <span> + {{ + participations + .slice(0, 5) + .map((participation) => participation.person.firstName) + .join(", ") + }} + </span> + <span v-if="participations.length > 5"> + <!-- eslint-disable @intlify/vue-i18n/no-raw-text --> + +{{ participations.length - 5 }} + <!-- eslint-enable @intlify/vue-i18n/no-raw-text --> + </span> + </span> + </template> </absence-reason-chip> <manage-students-trigger v-bind="documentationPartProps" /> @@ -41,8 +58,11 @@ export default { }, absences() { // Get all course attendants who have an absence reason - return this.documentation.participations.filter( - (p) => p.absenceReason !== null, + return Object.groupBy( + this.documentation.participations.filter( + (p) => p.absenceReason !== null, + ), + ({ absenceReason }) => absenceReason.id, ); }, }, -- GitLab