From e5ff6cdfbdb6c480b9025456aa6a70a510dda831 Mon Sep 17 00:00:00 2001 From: mariusrklein <47218379+mariusrklein@users.noreply.github.com> Date: Sat, 1 Feb 2025 02:28:32 +0100 Subject: [PATCH] added counter to freizeit member page --- jdav_web/members/admin.py | 25 +++++++++++++++++++ .../members/locale/de/LC_MESSAGES/django.po | 10 +++++++- jdav_web/members/models.py | 6 +++++ .../admin/edit_inline/tabular_footer.html | 10 ++++++++ .../templates/admin/edit_inline/tabular.html | 1 + 5 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 jdav_web/members/templates/admin/edit_inline/tabular_footer.html diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index 6bd9cbe..e800bf5 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -920,6 +920,31 @@ class MemberOnListInline(CommonAdminInlineMixin, GenericTabularInline): TextField: {'widget': Textarea(attrs={'rows': 1, 'cols': 40})} } sortable_options = [] + template = "admin/edit_inline/tabular_footer.html" + + def people_count(self, obj): + if isinstance(obj, Freizeit): + # Number of organizers who are also in the Memberlist + organizer_count = len(obj.staff_on_memberlist) + + # Total number of people in the Memberlist + total_people = obj.participant_count + organizer_count + + else: # fallback if no activity was found + total_people = 0 + organizer_count = 0 + return dict(total_people=total_people, organizer_count=organizer_count) + + def get_formset(self, request, obj=None, **kwargs): + """Override get_formset to add extra context.""" + formset = super().get_formset(request, obj, **kwargs) + + if obj: # Ensure there is an Activity instance + formset.total_people = self.people_count(obj)['total_people'] + formset.organizer_count = self.people_count(obj)['organizer_count'] + + return formset + class MemberNoteListAdmin(admin.ModelAdmin): diff --git a/jdav_web/members/locale/de/LC_MESSAGES/django.po b/jdav_web/members/locale/de/LC_MESSAGES/django.po index 45701ba..331394b 100644 --- a/jdav_web/members/locale/de/LC_MESSAGES/django.po +++ b/jdav_web/members/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-19 19:16+0100\n" +"POT-Creation-Date: 2025-02-01 02:24+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1062,6 +1062,14 @@ msgstr "Zurück auf die Warteliste setzen" msgid "Cancel" msgstr "Abbrechen" +#: members/templates/admin/edit_inline/tabular_footer.html +msgid "Number of persons:" +msgstr "Anzahl Personen:" + +#: members/templates/admin/edit_inline/tabular_footer.html +msgid "thereof leaders:" +msgstr "davon Leitung:" + #: members/templates/admin/freizeit_finance_overview.html msgid "" "\n" diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index e049399..98eb762 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -1139,6 +1139,12 @@ class Freizeit(CommonModel): @property def staff_count(self): return self.jugendleiter.count() + + @property + def staff_on_memberlist(self): + ps = set(map(lambda x: x.member, self.membersonlist.distinct())) + jls = set(self.jugendleiter.distinct()) + return ps.intersection(jls) @property def participant_count(self): diff --git a/jdav_web/members/templates/admin/edit_inline/tabular_footer.html b/jdav_web/members/templates/admin/edit_inline/tabular_footer.html new file mode 100644 index 0000000..c35c4ab --- /dev/null +++ b/jdav_web/members/templates/admin/edit_inline/tabular_footer.html @@ -0,0 +1,10 @@ +{% extends "admin/edit_inline/tabular.html" %} +{% load i18n admin_urls static %} +{% block extra_footer_content %} + + + {% trans "Number of persons:" %} {{ inline_admin_formset.formset.total_people }}, {% trans "thereof leaders:" %} {{ inline_admin_formset.formset.organizer_count }} + + + +{% endblock %} \ No newline at end of file diff --git a/jdav_web/templates/admin/edit_inline/tabular.html b/jdav_web/templates/admin/edit_inline/tabular.html index 42bb07f..962bfa9 100644 --- a/jdav_web/templates/admin/edit_inline/tabular.html +++ b/jdav_web/templates/admin/edit_inline/tabular.html @@ -71,6 +71,7 @@ {% endfor %} + {% block extra_footer_content %}{% endblock %} {% if inline_admin_formset.is_collapsible %}{% endif %}