diff --git a/src/backoffice/locale/de/LC_MESSAGES/django.po b/src/backoffice/locale/de/LC_MESSAGES/django.po index b3cc091661bc1c6d3fe776d10e327e0fec9fdb66..89ce478d592bcb0675a2fe010a746fe16bb68a47 100644 --- a/src/backoffice/locale/de/LC_MESSAGES/django.po +++ b/src/backoffice/locale/de/LC_MESSAGES/django.po @@ -475,6 +475,10 @@ msgstr "" msgid "Assemblies" msgstr "" +# use translation from core +msgid "Assembly__location_state" +msgstr "" + msgid "assemblies_filtered_tag" msgstr "Es werden nur Assemblies mit dem folgenden Tag angezeigt:" @@ -1922,6 +1926,9 @@ msgstr "abgelehnt" msgid "nav_assemblies_hidden" msgstr "versteckt" +msgid "AssemblyTeam__placement" +msgstr "Platzierung" + msgid "lists" msgstr "Listen" diff --git a/src/backoffice/locale/en/LC_MESSAGES/django.po b/src/backoffice/locale/en/LC_MESSAGES/django.po index 3c2f31a824dc320d3d2e529b36b8629ab0ed1f59..82947e614461b264e496cb4e90c3f05195999048 100644 --- a/src/backoffice/locale/en/LC_MESSAGES/django.po +++ b/src/backoffice/locale/en/LC_MESSAGES/django.po @@ -475,6 +475,10 @@ msgstr "" msgid "Assemblies" msgstr "" +# use translation from core +msgid "Assembly__location_state" +msgstr "" + msgid "assemblies_filtered_tag" msgstr "Showing only assemblies tagged with:" @@ -1928,6 +1932,9 @@ msgstr "rejected" msgid "nav_assemblies_hidden" msgstr "hidden" +msgid "AssemblyTeam__placement" +msgstr "placement" + msgid "lists" msgstr "lists" diff --git a/src/backoffice/templates/backoffice/assembly_list.html b/src/backoffice/templates/backoffice/assembly_list.html index 09acf28e259cc139c9ca0f6c8b81a2a8ba5528c0..ff9fbf622ef70fbbf7efc1446d6e821b366f88bb 100644 --- a/src/backoffice/templates/backoffice/assembly_list.html +++ b/src/backoffice/templates/backoffice/assembly_list.html @@ -17,7 +17,12 @@ <div class="card"> <div class="card-header"> - <span class="text-muted">{% trans "Assemblies" %}:</span> {{ mode_display }} + <span class="text-muted">{% trans "Assemblies" %}:</span> + {% if location_state %} + {% trans "Assembly__location_state" %} = <code>{{ location_state }}</code> + {% else %} + {{ mode_display }} + {% endif %} </div> <div class="card-body"> @@ -36,6 +41,7 @@ <th>{% trans "Assembly__name" %}</th> <th title="{% trans "Assembly__is_official" %}">{% trans "Assembly__is_official__short" %}</th> <th>{% trans "Assembly__state" %}</th> + <th>{% trans "Assembly__location_state" %}</th> <th>{% trans "Assembly__last_update_staff" %}</th> <th>{% trans "Assembly__last_update_assembly" %}</th> </tr> @@ -60,7 +66,7 @@ - {% endif %} </td> - + <td>{{ assembly.get_location_state_display }}</td> <td> <span class="{% if assembly.last_activity_log_staff > assembly.last_activity_log_assembly %}text-success{% endif %}" title="{% trans "Assembly__last_update_staff" %}">{{ assembly.last_activity_log_staff|naturaltime }}</span> diff --git a/src/backoffice/views/assemblyteam.py b/src/backoffice/views/assemblyteam.py index 42b35b619d1917f846ade973a2ed31a343a8a043..e57fc7563cd05a3c025ed524316bf5c47efcbd60 100644 --- a/src/backoffice/views/assemblyteam.py +++ b/src/backoffice/views/assemblyteam.py @@ -37,7 +37,6 @@ class AssemblyTeamMixin(ConferenceLoginRequiredMixin): base_view_name = 'backoffice:assemblies' list_view_name = 'backoffice:assemblieslist' sidebar_caption = _('nav_assemblies') - status_field = 'state' MODES = { 'all': (('XMode', Q(state__exact=Assembly.State.HIDDEN)), _('nav_assemblies_all')), @@ -54,6 +53,7 @@ class AssemblyTeamMixin(ConferenceLoginRequiredMixin): self.request.session['assembly_back'] = {'link': self.request.get_full_path(), 'title': str(self.sidebar_caption)} assemblies = [] + placements = [] lists = [] context['sidebar'] = { 'title': self.sidebar_caption, @@ -63,6 +63,11 @@ class AssemblyTeamMixin(ConferenceLoginRequiredMixin): 'children': assemblies, 'expanded': True, }, + { + 'caption': _('AssemblyTeam__placement'), + 'children': placements, + 'expanded': True, + }, { 'caption': _('lists'), 'children': lists, @@ -81,6 +86,15 @@ class AssemblyTeamMixin(ConferenceLoginRequiredMixin): } ) + for k, v in Assembly.LocationState.choices: + placements.append( + { + 'caption': v, + 'count': self.conference.assemblies.filter(location_state=str(k)).count(), + 'link': reverse(self.base_view_name) + '?location_state=' + k, + } + ) + lists.append( { 'caption': 'slug, name, friends & WA', @@ -126,15 +140,20 @@ class AssembliesListMixin(AssemblyTeamMixin, FilteredListView): def get_queryset(self, **kwargs): # get the mode mode = (self.request.POST if self.request.method == 'POST' else self.request.GET).get('mode', self.default_assemblies_mode) + location_state = (self.request.POST if self.request.method == 'POST' else self.request.GET).get('location_state', None) query_filters = {} - if mode in self.MODES: + if location_state: + # TODO: allow filters to be combined + query_filters['location_state'] = location_state + elif mode in self.MODES: query_filters[self.MODES[mode][0][0]] = self.MODES[mode][0][1] else: messages.warning(self.request, f'unknown mode "{mode}", using "all"') mode = 'all' query_filters[self.MODES[mode][0][0]] = self.MODES[mode][0][1] self.assemblies_mode = mode + self.location_state = location_state qs = super().get_queryset( Assembly.objects.associated_with_user(conference=self.conference, user=self.request.user, staff_can_see=True), query_filters=query_filters @@ -228,6 +247,7 @@ class AssembliesView(AssembliesListMixin, AlphabeticalPaginatorView): context['mode'] = self.assemblies_mode context['mode_display'] = self.MODES[self.assemblies_mode][1] + context['location_state'] = self.location_state # activate current sidebar item for sidebar_item in context['sidebar']['items'][0]['children']: @@ -328,7 +348,7 @@ class AssembliesListsView(AssembliesListMixin): def prepare_registration(self): # assemblies with the (additional) registration data as columns - qs_fields = ['slug', 'name', self.status_field, 'hierarchy', 'parent__slug', 'assembly_links_agg', 'description', 'registration_details'] + qs_fields = ['slug', 'name', 'state', 'location_state', 'hierarchy', 'parent__slug', 'assembly_links_agg', 'description', 'registration_details'] qs = ( self.get_queryset() .prefetch_related('assembly_links') @@ -379,7 +399,7 @@ class AssembliesListsView(AssembliesListMixin): ctx['data'] = data # activate current sidebar item - for sidebar_item in ctx['sidebar']['items'][1]['children']: + for sidebar_item in ctx['sidebar']['items'][2]['children']: if sidebar_item['variant'] == variant: sidebar_item['active'] = True break