From 7faa1dfbe012c141e6506ddf7ba6a36abe6db412 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Fri, 24 Jan 2025 18:25:53 +0100
Subject: [PATCH] Add print button to coursebook group tab

---
 .../coursebook/CoursebookPrintDialog.vue        | 17 +++++++++++++++--
 .../statistics/StatisticsForGroupTab.vue        |  9 +++++++--
 2 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/CoursebookPrintDialog.vue b/aleksis/apps/alsijil/frontend/components/coursebook/CoursebookPrintDialog.vue
index 976dccbeb..8a9058d6d 100644
--- a/aleksis/apps/alsijil/frontend/components/coursebook/CoursebookPrintDialog.vue
+++ b/aleksis/apps/alsijil/frontend/components/coursebook/CoursebookPrintDialog.vue
@@ -20,9 +20,10 @@ import CancelButton from "aleksis.core/components/generic/buttons/CancelButton.v
       {{ $t("alsijil.coursebook.print.title") }}
     </template>
     <template #content>
-      {{ $t("alsijil.coursebook.print.groups") }}
       <v-autocomplete
+        v-if="!group"
         :items="availableGroups"
+        :label="$t('alsijil.coursebook.print.groups')"
         item-text="name"
         item-value="id"
         :value="value"
@@ -87,7 +88,16 @@ export default {
      */
     availableGroups: {
       type: Array,
-      required: true,
+      required: false,
+      default: () => [],
+    },
+    /**
+     * Set a group to use this dialog exclusively for
+     */
+    group: {
+      type: Object,
+      required: false,
+      default: null,
     },
     /**
      * Initially selected groups
@@ -121,6 +131,9 @@ export default {
   },
   computed: {
     selectedGroups() {
+      if (this.group) {
+        return [this.group.id];
+      }
       if (this.currentGroupSelection.length == 0) {
         return this.value.map((group) => group.id);
       } else {
diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/statistics/StatisticsForGroupTab.vue b/aleksis/apps/alsijil/frontend/components/coursebook/statistics/StatisticsForGroupTab.vue
index 95d377ac6..1575348b9 100644
--- a/aleksis/apps/alsijil/frontend/components/coursebook/statistics/StatisticsForGroupTab.vue
+++ b/aleksis/apps/alsijil/frontend/components/coursebook/statistics/StatisticsForGroupTab.vue
@@ -10,6 +10,9 @@
     :show-select="false"
     @items="items = $event"
   >
+    <template #additionalActions>
+      <coursebook-print-dialog :group="group" />
+    </template>
     <template
       v-for="(extraMark, index) in extraMarks"
       #[`extraMarks.${index}.count`]="{ item }"
@@ -67,7 +70,7 @@
         :to="{
           name: 'core.personById',
           params: {
-            personId: item.person.id,
+            id: item.person.id,
           },
           hash: '#' + MODE.PARTICIPATIONS,
         }"
@@ -81,13 +84,14 @@ import groupOverviewTabMixin from "aleksis.core/mixins/groupOverviewTabMixin.js"
 import CRUDList from "aleksis.core/components/generic/CRUDList.vue";
 import PersonChip from "aleksis.core/components/person/PersonChip.vue";
 import SecondaryActionButton from "aleksis.core/components/generic/buttons/SecondaryActionButton.vue";
+import CoursebookPrintDialog from "../CoursebookPrintDialog.vue";
 
 import AbsenceReasonChip from "aleksis.apps.kolego/components/AbsenceReasonChip.vue";
 import ExtraMarkChip from "aleksis.apps.alsijil/components/extra_marks/ExtraMarkChip.vue";
 
 import { statisticsByGroup } from "./statistics.graphql";
 import { absenceReasons } from "../queries/absenceReasons.graphql";
-import { extraMarks } from "../../extra_marks/extra_marks.graphql";
+import { extraMarks } from "../queries/extraMarks.graphql";
 import { MODE } from "./modes";
 
 export default {
@@ -99,6 +103,7 @@ export default {
     ExtraMarkChip,
     PersonChip,
     SecondaryActionButton,
+    CoursebookPrintDialog,
   },
   data() {
     return {
-- 
GitLab