From ebfe03d1b32fb494387204f3f4eb2a3df112ca7f Mon Sep 17 00:00:00 2001
From: Michael Bauer <michael-bauer@posteo.de>
Date: Tue, 5 Nov 2024 11:18:20 +0100
Subject: [PATCH] Make frontend & route handle list of groups

---
 .../components/coursebook/CoursebookPrintDialog.vue    |  3 +--
 aleksis/apps/alsijil/frontend/index.js                 |  2 +-
 aleksis/apps/alsijil/urls.py                           |  2 +-
 aleksis/apps/alsijil/views.py                          | 10 ++++++----
 4 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/CoursebookPrintDialog.vue b/aleksis/apps/alsijil/frontend/components/coursebook/CoursebookPrintDialog.vue
index b69ab14f6..6fd2fc674 100644
--- a/aleksis/apps/alsijil/frontend/components/coursebook/CoursebookPrintDialog.vue
+++ b/aleksis/apps/alsijil/frontend/components/coursebook/CoursebookPrintDialog.vue
@@ -136,8 +136,7 @@ export default {
       this.$router.push({
         name: "alsijil.coursebook_print",
         params: {
-          // TODO: Send & handle more than one group!
-          groupId: this.selectedGroups[0],
+          groupIds: this.selectedGroups,
         },
         query: { 
           cover: this.includeCover,
diff --git a/aleksis/apps/alsijil/frontend/index.js b/aleksis/apps/alsijil/frontend/index.js
index a157cb1bb..03b8dec48 100644
--- a/aleksis/apps/alsijil/frontend/index.js
+++ b/aleksis/apps/alsijil/frontend/index.js
@@ -80,7 +80,7 @@ export default {
       ],
     },
     {
-      path: "print/group/:groupId/",
+      path: "print/groups/:groupIds+/",
       component: () => import("aleksis.core/components/LegacyBaseTemplate.vue"),
       name: "alsijil.coursebook_print",
       props: {
diff --git a/aleksis/apps/alsijil/urls.py b/aleksis/apps/alsijil/urls.py
index c7465fc55..b03ac2cb3 100644
--- a/aleksis/apps/alsijil/urls.py
+++ b/aleksis/apps/alsijil/urls.py
@@ -4,7 +4,7 @@ from . import views
 
 urlpatterns = [
     path(
-        "print/group/<int:id_>/",
+        "print/groups/<path:ids>/",
         views.full_register_for_group,
         name="full_register_for_group"
     ),
diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py
index 6376e570d..776493de4 100644
--- a/aleksis/apps/alsijil/views.py
+++ b/aleksis/apps/alsijil/views.py
@@ -42,10 +42,12 @@ from .tasks import generate_full_register_printout
 @permission_required(
     "alsijil.view_full_register_rule", fn=objectgetter_optional(Group, None, False)
 )
-def full_register_for_group(request: HttpRequest, id_: int) -> HttpResponse:
+def full_register_for_group(request: HttpRequest, ids: str) -> HttpResponse:
     """Show a configurable register printout as PDF for a group."""
 
-    group = get_object_or_404(Group, pk=id_)
+    ids = [int(id_) for id_ in ids.split("/")]
+
+    groups = [get_object_or_404(Group, pk=id_) for id_ in ids]
 
     file_object = PDFFile.objects.create()
     if has_person(request):
@@ -55,7 +57,7 @@ def full_register_for_group(request: HttpRequest, id_: int) -> HttpResponse:
     redirect_url = f"/pdfs/{file_object.pk}"
 
     result = generate_full_register_printout.delay(
-        group=group.pk,
+        groups=ids,
         file_object=file_object.pk,
         include_cover=request.GET.get("cover", True),
         include_abbreviations=request.GET.get("abbreviations", True),
@@ -77,7 +79,7 @@ def full_register_for_group(request: HttpRequest, id_: int) -> HttpResponse:
     return render_progress_page(
         request,
         result,
-        title=_("Generate register printout for {}").format(group),
+        title=_(f"Generate register printout for {', '.join([group.short_name for group in groups])}"),
         progress_title=_("Generate register printout …"),
         success_message=_("The printout has been generated successfully."),
         error_message=_("There was a problem while generating the printout."),
-- 
GitLab