From abf342297e880d9c33447f7ca2b1116e3c1e35ff Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Thu, 3 Sep 2020 11:02:27 +0200
Subject: [PATCH] Add view with all groups a person is an owner of

---
 aleksis/apps/alsijil/menus.py                 |  6 +++++
 .../alsijil/class_register/groups.html        | 24 +++++++++++++++++++
 aleksis/apps/alsijil/urls.py                  |  1 +
 aleksis/apps/alsijil/views.py                 | 11 +++++++++
 4 files changed, 42 insertions(+)
 create mode 100644 aleksis/apps/alsijil/templates/alsijil/class_register/groups.html

diff --git a/aleksis/apps/alsijil/menus.py b/aleksis/apps/alsijil/menus.py
index d20c88b56..8b51bb206 100644
--- a/aleksis/apps/alsijil/menus.py
+++ b/aleksis/apps/alsijil/menus.py
@@ -24,6 +24,12 @@ MENUS = {
                     "icon": "view_week",
                     "validators": ["menu_generator.validators.is_authenticated"],
                 },
+                {
+                    "name": _("My groups"),
+                    "url": "my_groups",
+                    "icon": "people",
+                    "validators": ["menu_generator.validators.is_authenticated"],
+                },
                 {
                     "name": _("My overview"),
                     "url": "overview_me",
diff --git a/aleksis/apps/alsijil/templates/alsijil/class_register/groups.html b/aleksis/apps/alsijil/templates/alsijil/class_register/groups.html
new file mode 100644
index 000000000..87385476b
--- /dev/null
+++ b/aleksis/apps/alsijil/templates/alsijil/class_register/groups.html
@@ -0,0 +1,24 @@
+{# -*- engine:django -*- #}
+{% extends "core/base.html" %}
+{% load i18n %}
+
+{% block browser_title %}{% blocktrans %}My groups{% endblocktrans %}{% endblock %}
+
+
+{% block page_title %}
+  {% blocktrans %}My groups{% endblocktrans %}
+{% endblock %}
+
+{% block content %}
+  <div class="collection">
+    {% for group in groups %}
+      <a class="collection-item" href="{% url "week_view" "group" group.pk %}">
+        {{ group }}
+      </a>
+    {% empty %}
+      <li class="collection-item flow-text">
+        {% blocktrans %}No groups available.{% endblocktrans %}
+      </li>
+    {% endfor %}
+  </div>
+{% endblock %}
diff --git a/aleksis/apps/alsijil/urls.py b/aleksis/apps/alsijil/urls.py
index e2bba60a0..af972edd5 100644
--- a/aleksis/apps/alsijil/urls.py
+++ b/aleksis/apps/alsijil/urls.py
@@ -26,6 +26,7 @@ urlpatterns = [
     path(
         "print/group/<int:id_>", views.full_register_group, name="full_register_group"
     ),
+    path("groups/", views.my_groups, name="my_groups"),
     path("persons/", views.my_students, name="my_students"),
     path("persons/<int:id_>/", views.overview_person, name="overview_person"),
     path("me/", views.overview_person, name="overview_me"),
diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py
index ce85d1013..b6b76985e 100644
--- a/aleksis/apps/alsijil/views.py
+++ b/aleksis/apps/alsijil/views.py
@@ -473,6 +473,17 @@ def my_students(request: HttpRequest) -> HttpResponse:
     return render(request, "alsijil/class_register/persons.html", context)
 
 
+def my_groups(request: HttpRequest) -> HttpResponse:
+    context = {}
+    groups = (
+        Group.objects.for_current_school_term_or_all()
+        .annotate(lessons_count=Count("lessons"))
+        .filter(lessons_count__gt=0, owners=request.user.person)
+    )
+    context["groups"] = groups
+    return render(request, "alsijil/class_register/groups.html", context)
+
+
 def overview_person(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse:
     context = {}
     person = objectgetter_optional(
-- 
GitLab