diff --git a/src/backoffice/locale/de/LC_MESSAGES/django.po b/src/backoffice/locale/de/LC_MESSAGES/django.po index e5288f550d027a947ee95135f639d1ace1b2c918..3d93572540a0febbb1e245126eef7699ad6bcab5 100644 --- a/src/backoffice/locale/de/LC_MESSAGES/django.po +++ b/src/backoffice/locale/de/LC_MESSAGES/django.po @@ -606,15 +606,12 @@ msgstr "" msgid "Assembly__is_official__short" msgstr "offiziell" -msgid "Assembly__last_update" -msgstr "letzte Änderung" - # use translation from core -msgid "Assembly__last_update_assembly" +msgid "Assembly__last_update_staff" msgstr "" # use translation from core -msgid "Assembly__last_update_staff" +msgid "Assembly__last_update_assembly" msgstr "" msgid "list" @@ -1120,6 +1117,9 @@ msgstr "nicht veröffentlicht" msgid "moderation__assembly__cannotunhide" msgstr "Eine versteckte Assembly muss vom Assembly-Team wieder in den passenden Status zurückversetzt werden (multiple Optionen)." +msgid "Assembly__last_update" +msgstr "letzte Änderung" + # use translation from core msgid "Badge__name" msgstr "" diff --git a/src/backoffice/locale/en/LC_MESSAGES/django.po b/src/backoffice/locale/en/LC_MESSAGES/django.po index 2d795c7013be1285db88cea1abd9bbcb83f2a113..f73c7c4e43c9b85f3a114653ba9e4cc8e289088b 100644 --- a/src/backoffice/locale/en/LC_MESSAGES/django.po +++ b/src/backoffice/locale/en/LC_MESSAGES/django.po @@ -604,15 +604,12 @@ msgstr "" msgid "Assembly__is_official__short" msgstr "official" -msgid "Assembly__last_update" -msgstr "last update" - # use translation from core -msgid "Assembly__last_update_assembly" +msgid "Assembly__last_update_staff" msgstr "" # use translation from core -msgid "Assembly__last_update_staff" +msgid "Assembly__last_update_assembly" msgstr "" msgid "list" @@ -1119,6 +1116,9 @@ msgstr "not public" msgid "moderation__assembly__cannotunhide" msgstr "A hidden assembly can only be reversed by the assembly team as there are multiple valid states/types." +msgid "Assembly__last_update" +msgstr "last update" + # use translation from core msgid "Badge__name" msgstr "" diff --git a/src/backoffice/templates/backoffice/assembly_list.html b/src/backoffice/templates/backoffice/assembly_list.html index 6afad8c85879faf8b4417388d0b13798eaf9d620..00232d8b7de0f351a2895775b6b2e1b2de09ce8e 100644 --- a/src/backoffice/templates/backoffice/assembly_list.html +++ b/src/backoffice/templates/backoffice/assembly_list.html @@ -69,7 +69,8 @@ {% if conference.support_channels %} <th>{% trans "Assembly__state_channel" %}</th> {% endif %} - <th>{% trans "Assembly__last_update" %}</th> + <th>{% trans "Assembly__last_update_staff" %}</th> + <th>{% trans "Assembly__last_update_assembly" %}</th> </tr> </thead> <tbody> @@ -102,11 +103,12 @@ </td> {% endif %} <td> - {% if assembly.last_update_assembly > assembly.last_update_staff %} - <span title="{% trans "Assembly__last_update_assembly" %}">{{ assembly.last_update_assembly|naturaltime }}</span> - {% else %} - <span class="text-muted" title="{% trans "Assembly__last_update_staff" %}">{{ assembly.last_update_staff|naturaltime }}</span> - {% endif %} + <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> + </td> + <td> + <span class="{% if assembly.last_activity_log_assembly > assembly.last_activity_log_staff %}text-success{% endif %}" + title="{% trans "Assembly__last_update_assembly" %}">{{ assembly.last_activity_log_assembly|naturaltime }}</span> </td> </tr> {% endfor %} diff --git a/src/backoffice/views/assemblyteam.py b/src/backoffice/views/assemblyteam.py index c26d5a62af290c1f9c993cceb81def37b1b406b8..3e519b5fcd839d8b88df7706359506440c54507a 100644 --- a/src/backoffice/views/assemblyteam.py +++ b/src/backoffice/views/assemblyteam.py @@ -7,7 +7,7 @@ from pandas import DataFrame, ExcelWriter from django.contrib import messages from django.contrib.postgres.aggregates import StringAgg -from django.db.models import OuterRef, Q, Subquery +from django.db.models import Max, OuterRef, Q, Subquery from django.http import Http404, HttpResponse from django.shortcuts import redirect, render from django.urls import reverse @@ -212,6 +212,19 @@ class AssemblyView(SingleAssemblyTeamMixin, DetailView): class AssembliesView(AssembliesListMixin, AlphabeticalPaginatorView): template_name = 'backoffice/assembly_list.html' + def get_queryset(self, **kwargs): + qs = ( + super() + .get_queryset(**kwargs) + .annotate( + last_activity_log_staff=Max( + 'activity_log_entries__timestamp', filter=Q(activity_log_entries__kind__in=[ActivityLogEntry.Kind.STAFF, ActivityLogEntry.Kind.MESSAGE]) + ), + last_activity_log_assembly=Max('activity_log_entries__timestamp', filter=Q(activity_log_entries__kind=ActivityLogEntry.Kind.ENTITY)), + ) + ) + return qs + def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) diff --git a/src/core/models/assemblies.py b/src/core/models/assemblies.py index 7bb008b673b19119544fac5760fc8a91b0bd077a..eee23e2b6fbf96d7febbf1f57b919cb6eb702dec 100644 --- a/src/core/models/assemblies.py +++ b/src/core/models/assemblies.py @@ -264,6 +264,11 @@ class Assembly(TaggedItemMixin, ActivityLogMixin, RulesModel): help_text=_('Assembly__last_update_staff__help'), verbose_name=_('Assembly__last_update_staff'), ) + activity_log_entries = GenericRelation( + ActivityLogEntry, + object_id_field='entity_object_id', + content_type_field='entity_content_type', + ) favorite_of = models.ManyToManyField( PlatformUser, related_name='favorite_assemblies', help_text=_('Assembly__favorite_of__help'), verbose_name=_('Assembly__favorite_of')