From a0e2fe1e074b0d91dbe893a9ba1b534c7ee7f50a Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Mon, 22 Apr 2024 19:54:37 +0200
Subject: [PATCH] Add print button to timetable view

---
 .../components/timetables/Timetable.vue       | 22 +++++++++++++++++++
 aleksis/apps/lesrooster/frontend/index.js     |  9 +++++++-
 .../apps/lesrooster/frontend/messages/en.json |  3 ++-
 3 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/aleksis/apps/lesrooster/frontend/components/timetables/Timetable.vue b/aleksis/apps/lesrooster/frontend/components/timetables/Timetable.vue
index 5e1ad4fd..b0a1cbe8 100644
--- a/aleksis/apps/lesrooster/frontend/components/timetables/Timetable.vue
+++ b/aleksis/apps/lesrooster/frontend/components/timetables/Timetable.vue
@@ -87,6 +87,28 @@ export default {
         </v-card-text>
       </v-card>
     </template>
+    <template #additionalButton="{ selected, mobile }">
+      <div :class="{ 'full-width': mobile, 'd-flex': true }" v-if="selected">
+        <v-btn
+          outlined
+          color="secondary"
+          small
+          :class="{ 'mx-3 flex-grow-1': true, 'mb-3': mobile }"
+          :to="{
+            name: 'lesrooster.timetablePrint',
+            params: {
+              timeGrid: timeGrid.id,
+              type: selected.type.toLowerCase(),
+              id: selected.objId,
+            },
+          }"
+          target="_blank"
+        >
+          <v-icon left>mdi-printer-outline</v-icon>
+          {{ $t("lesrooster.timetable.print") }}
+        </v-btn>
+      </div>
+    </template>
     <template #default="{ selected }">
       <group-time-table
         v-if="$route.params.type === 'group'"
diff --git a/aleksis/apps/lesrooster/frontend/index.js b/aleksis/apps/lesrooster/frontend/index.js
index 0484a740..df8ebf22 100644
--- a/aleksis/apps/lesrooster/frontend/index.js
+++ b/aleksis/apps/lesrooster/frontend/index.js
@@ -43,7 +43,14 @@ export default {
         },
       ],
     },
-
+    {
+      path: "timetable/:timeGrid(\\d+)/:type(\\w+)/:id(\\d+)/print/",
+      component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
+      name: "lesrooster.timetablePrint",
+      props: {
+        byTheGreatnessOfTheAlmightyAleksolotlISwearIAmWorthyOfUsingTheLegacyBaseTemplate: true,
+      },
+    },
     {
       path: "validity_ranges/",
       component: () => import("./components/validity_range/ValidityRange.vue"),
diff --git a/aleksis/apps/lesrooster/frontend/messages/en.json b/aleksis/apps/lesrooster/frontend/messages/en.json
index 336f8d26..939fd310 100644
--- a/aleksis/apps/lesrooster/frontend/messages/en.json
+++ b/aleksis/apps/lesrooster/frontend/messages/en.json
@@ -128,7 +128,8 @@
       }
     },
     "timetable": {
-      "menu_title": "Timetables"
+      "menu_title": "Timetables",
+      "print": "Print"
     },
     "supervision": {
       "menu_title": "Supervisions",
-- 
GitLab