diff --git a/src/backoffice/locale/de/LC_MESSAGES/django.po b/src/backoffice/locale/de/LC_MESSAGES/django.po index 2663d40fe29b63189dd8ff4d75f250f36bb56bf2..9850b08b075967a7f0cac12240802bcf3f6bb691 100644 --- a/src/backoffice/locale/de/LC_MESSAGES/django.po +++ b/src/backoffice/locale/de/LC_MESSAGES/django.po @@ -761,6 +761,10 @@ msgstr "Karte" msgid "nav_moderation" msgstr "Moderation" +# Use translation from core +msgid "Teams" +msgstr "" + msgid "nav_conference_admin" msgstr "Konferenz" @@ -1443,10 +1447,6 @@ msgstr "Self-organized Session löschen" msgid "SoS__delete__introduction" msgstr "Hiermit wird diese Self-organized Session gelöscht. Wenn du sie nur unsichtbar machen möchtest gibt es weiter oben die Möglichkeit die Self-organized Session zurückzunehmen!" -# use translation from core -msgid "Teams" -msgstr "" - msgid "Team__name" msgstr "Name" diff --git a/src/backoffice/locale/en/LC_MESSAGES/django.po b/src/backoffice/locale/en/LC_MESSAGES/django.po index fda5d873cab00808d3dd803dc2fa9de41960d2a7..7ea574c3f4ac432de02cd461e49f284332519412 100644 --- a/src/backoffice/locale/en/LC_MESSAGES/django.po +++ b/src/backoffice/locale/en/LC_MESSAGES/django.po @@ -761,6 +761,10 @@ msgstr "map" msgid "nav_moderation" msgstr "moderation" +# Use translation from core +msgid "Teams" +msgstr "" + msgid "nav_conference_admin" msgstr "Conference" @@ -1448,10 +1452,6 @@ msgstr "Delete self-organized session" msgid "SoS__delete__introduction" msgstr "This removes this self-organized session. If you only want to make it invisible, there is an option above to recall the self-organized session above!" -# use translation from core -msgid "Teams" -msgstr "" - msgid "Team__name" msgstr "name" diff --git a/src/backoffice/templates/backoffice/base.html b/src/backoffice/templates/backoffice/base.html index bc7ac4bce8883bbec2435707e06886584895d1c2..0c38c59cec2034fe3b68d5425635cf95eb23e0fc 100644 --- a/src/backoffice/templates/backoffice/base.html +++ b/src/backoffice/templates/backoffice/base.html @@ -96,6 +96,12 @@ </a> </li> {% endif %} + <li class="nav-item"> + <a class="nav-link{% if active_page == 'teams' %} active{% endif %}" + href="{% url 'backoffice:teams' %}">{% trans "Teams" %} + {% if active_page == 'teams' %}<span class="visually-hidden">{{ activetab_srmarker }}</span>{% endif %} + </a> + </li> {% if has_conference_admin or has_assembly_registration_admin %} <li class="nav-item"> <a class="nav-link{% if active_page == 'conference_admin' %} active{% endif %}" diff --git a/src/backoffice/views/teams/teams.py b/src/backoffice/views/teams/teams.py index 82af22e2d5c6a9eaa01ce9001a9224113c4ec065..ffcfe4ad2f821391a6ef2ad8f16d7e850fbb4a5e 100644 --- a/src/backoffice/views/teams/teams.py +++ b/src/backoffice/views/teams/teams.py @@ -3,14 +3,65 @@ from typing import Any from django.contrib.postgres.aggregates.general import ArrayAgg from django.db.models import BooleanField, Case, Count, When from django.db.models.query import Q, QuerySet +from django.urls import reverse +from django.utils.translation import gettext as _ from django.views.generic import ListView from core.models import ConferenceMember, Team -from backoffice.views.mixins import ConferenceRuleLoginRequiredMixin +from backoffice.views.mixins import ConferenceRuleLoginRequiredMixin, guess_active_sidebar_item -class TeamListView(ConferenceRuleLoginRequiredMixin, ListView): +class TeamNavContextMixin(ConferenceRuleLoginRequiredMixin): + def get_context_data(self, **kwargs) -> dict[str, Any]: + member = ConferenceMember.get_member( + conference=self.conference, + user=self.request.user, + ) + teams = [ + { + 'caption': team['name'], + 'link': reverse( + 'backoffice:team', + kwargs={ + 'uuid': team['uuid'], + }, + ), + 'classes': [], + } + for team in Team.objects.all().values( + 'uuid', + 'name', + 'require_staff', + ) + if member.is_staff or not team['require_staff'] + ] + team_entry = { + 'caption': _('Teams'), + 'link': reverse('backoffice:teams'), + 'children': teams, + 'count': len(teams), + 'expanded': True, + } + + context = { + **super().get_context_data(**kwargs), + 'active_page': 'teams', + 'sidebar': { + 'title': _('Teams'), + 'title_link': reverse('backoffice:teams'), + 'items': [ + team_entry, + ], + }, + } + + guess_active_sidebar_item(self.request, context['sidebar']['items']) + + return context + + +class TeamListView(TeamNavContextMixin, ListView): model = Team template_name = 'backoffice/teams/list.html' context_object_name = 'teams'