From 55c960542827358bf9ba2fdc518f470b46ac56de Mon Sep 17 00:00:00 2001 From: Christian Merten Date: Sat, 14 Dec 2024 16:52:45 +0100 Subject: [PATCH] members/admin: show last group invitation and gender in list --- jdav_web/members/admin.py | 25 +- .../members/locale/de/LC_MESSAGES/django.po | 276 +++++++++--------- jdav_web/members/models.py | 8 + 3 files changed, 170 insertions(+), 139 deletions(-) diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index 299f38c..3bd3653 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -15,6 +15,7 @@ from django.template.loader import get_template from django.urls import path, reverse from django.http import HttpResponse, HttpResponseRedirect from wsgiref.util import FileWrapper +from django.utils import timezone from django import forms from django.contrib import admin, messages from django.contrib.admin import DateFieldListFilter @@ -580,14 +581,28 @@ class InvitationToGroupAdmin(admin.TabularInline): return False +class InvitedToGroupFilter(admin.SimpleListFilter): + title = _('Pending group invitation for group') + parameter_name = 'pending_group_invitation' + + def lookups(self, request, model_admin): + return [(g.pk, g.name) for g in Group.objects.all()] + + def queryset(self, request, queryset): + pk = self.value() + if not pk: + return queryset + return queryset.filter(invitationtogroup__group__pk=pk, invitationtogroup__rejected=False, + invitationtogroup__date__gt=(timezone.now() - timezone.timedelta(days=30)).date()).distinct() + + class MemberWaitingListAdmin(CommonAdminMixin, admin.ModelAdmin): fields = ['prename', 'lastname', 'email', 'birth_date', 'gender', 'application_text', - 'application_date', 'comments', - 'sent_reminders'] - list_display = ('name', 'birth_date', 'age', 'application_date', 'confirmed_mail', - 'waiting_confirmed', 'sent_reminders') + 'application_date', 'comments', 'sent_reminders'] + list_display = ('name', 'birth_date', 'age', 'gender', 'application_date', 'latest_group_invitation', + 'confirmed_mail', 'waiting_confirmed', 'sent_reminders') search_fields = ('prename', 'lastname', 'email') - list_filter = ('confirmed_mail',) + list_filter = ['confirmed_mail', 'gender', InvitedToGroupFilter] actions = ['ask_for_registration', 'ask_for_wait_confirmation'] inlines = [InvitationToGroupAdmin] readonly_fields= ['application_date', 'sent_reminders'] diff --git a/jdav_web/members/locale/de/LC_MESSAGES/django.po b/jdav_web/members/locale/de/LC_MESSAGES/django.po index 2479933..15d2225 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: 2024-12-04 00:04+0100\n" +"POT-Creation-Date: 2024-12-14 16:49+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,186 +18,190 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: members/admin.py:126 members/models.py:404 +#: members/admin.py:127 members/models.py:404 msgid "Registration complete" msgstr "Anmeldung vollständig" -#: members/admin.py:132 +#: members/admin.py:133 msgid "True" msgstr "Ja" -#: members/admin.py:133 +#: members/admin.py:134 msgid "False" msgstr "Nein" -#: members/admin.py:134 +#: members/admin.py:135 msgid "All" msgstr "Alle" -#: members/admin.py:184 members/admin.py:414 +#: members/admin.py:185 members/admin.py:415 msgid "Contact information" msgstr "Kontaktinformationen" -#: members/admin.py:189 members/admin.py:419 +#: members/admin.py:190 members/admin.py:420 msgid "Skills" msgstr "Fähigkeiten" -#: members/admin.py:194 members/admin.py:424 +#: members/admin.py:195 members/admin.py:425 msgid "Others" msgstr "Sonstiges" -#: members/admin.py:200 members/admin.py:429 +#: members/admin.py:201 members/admin.py:430 msgid "Organizational" msgstr "Organisatorisches" -#: members/admin.py:282 +#: members/admin.py:283 msgid "Compose new mail to selected members" msgstr "Neue Nachricht an ausgewählte Teilnehmer*innen verfassen" -#: members/admin.py:288 +#: members/admin.py:289 msgid "Echo required" msgstr "Rückmeldung erforderlich" -#: members/admin.py:290 +#: members/admin.py:291 msgid "Successfully requested echo from selected members." msgstr "" "Rückmeldungsaufforderung erfolgreich an ausgewählte Teilnehmer*innen " "verschickt." -#: members/admin.py:291 +#: members/admin.py:292 msgid "Request echo from selected members" msgstr "Rückmeldungsaufforderung an ausgewählte Teilnehmer*innen verschicken" -#: members/admin.py:300 +#: members/admin.py:301 #, python-format msgid "%(name)s does not have a DAV360 email address or is already registered." msgstr "%(name)s hat keine DAV360 E-Mail Adresse oder ist bereits registriert." -#: members/admin.py:302 +#: members/admin.py:303 #, python-format msgid "Successfully invited %(name)s as user." msgstr "Erfolgreich %(name)s aufgefordert Zugangsdaten zu wählen." -#: members/admin.py:304 +#: members/admin.py:305 msgid "Successfully invited selected members to join as users." msgstr "" "Erfolgreich ausgewählte Teilnehmer*innen aufgefordert Zugangsdaten zu wählen." -#: members/admin.py:306 +#: members/admin.py:307 msgid "Some members have been invited, others could not be invited." msgstr "" "Manche Teilnehmer*innen wurden eingeladen, andere konnten nicht eingeladen " "werden." -#: members/admin.py:313 members/admin.py:330 +#: members/admin.py:314 members/admin.py:331 msgid "Permission denied." msgstr "Fehlende Berechtigungen." -#: members/admin.py:320 members/admin.py:354 +#: members/admin.py:321 members/admin.py:355 #: members/templates/admin/invite_as_user.html:21 msgid "Invite as user" msgstr "Kompass Zugangsdaten wählen lassen" -#: members/admin.py:325 +#: members/admin.py:326 msgid "Invite selected members to join Kompass as users." msgstr "Ausgewählte Teilnehmer*innen Kompass Zugangsdaten wählen lassen." -#: members/admin.py:336 +#: members/admin.py:337 msgid "Member not found." msgstr "Teilnehmer*in nicht gefunden." -#: members/admin.py:340 +#: members/admin.py:341 #, python-format msgid "%(name)s already has login data." msgstr "%(name)s hat schon Zugangsdaten." -#: members/admin.py:345 +#: members/admin.py:346 #, python-format msgid "The configured email address for %(name)s is not an internal one." msgstr "Die für %(name)s eingestellte E-Mail Adresse ist keine DAV360 Adresse." -#: members/admin.py:359 +#: members/admin.py:360 #, python-format msgid "%(name)s already has a pending invitation as user." msgstr "" "%(name)s hat bereits eine ausstehende Aufforderung Zugangsdaten zu wählen." -#: members/admin.py:377 +#: members/admin.py:378 msgid "activity" msgstr "Aktivität" -#: members/admin.py:387 members/models.py:56 members/models.py:1519 +#: members/admin.py:388 members/models.py:56 members/models.py:1527 msgid "Name" msgstr "Name" -#: members/admin.py:477 +#: members/admin.py:478 msgid "Successfully requested mail confirmation from selected registrations." msgstr "Aufforderung zur Bestätigung der Email Adresse versendet." -#: members/admin.py:478 +#: members/admin.py:479 msgid "Request mail confirmation from selected registrations" msgstr "Aufforderung zur Bestätigung der Email Adresse versenden" -#: members/admin.py:485 members/admin.py:559 +#: members/admin.py:486 members/admin.py:560 #, python-format msgid "Successfully confirmed %(name)s." msgstr "Registrierung von %(name)s erfolgreich bestätigt." -#: members/admin.py:489 members/admin.py:562 +#: members/admin.py:490 members/admin.py:563 #, python-format msgid "Can't confirm. %(name)s has unconfirmed email addresses." msgstr "Bestätigung nicht möglich. %(name)s hat unbestätigte Emailadressen." -#: members/admin.py:494 +#: members/admin.py:495 msgid "Successfully confirmed multiple registrations." msgstr "Erfolgreich mehrere Registrierungen bestätigt." -#: members/admin.py:496 +#: members/admin.py:497 msgid "" "Failed to confirm some registrations because of unconfirmed email addresses." msgstr "" "Einige Bestätigungen fehlgeschlagen, weil Emailadressen noch nicht bestätigt " "sind." -#: members/admin.py:497 +#: members/admin.py:498 msgid "Confirm selected registrations" msgstr "Ausgewählte Registrierungen bestätigen" -#: members/admin.py:520 +#: members/admin.py:521 msgid "Demote selected registrations to waiters." msgstr "Ausgewählte Registrierungen zurück auf die Warteliste setzen." -#: members/admin.py:536 +#: members/admin.py:537 msgid "Demote member to waiter" msgstr "Ausgewählte Registrierung zurück auf die Warteliste setzen." -#: members/admin.py:554 +#: members/admin.py:555 #, python-format msgid "Successfully demoted %(name)s to waiter." msgstr "%(name)s zurück auf die Warteliste gesetzt." -#: members/admin.py:569 members/models.py:411 members/models.py:777 -#: members/models.py:1264 +#: members/admin.py:570 members/models.py:411 members/models.py:777 +#: members/models.py:1272 msgid "Group" msgstr "Gruppe" -#: members/admin.py:603 +#: members/admin.py:585 +msgid "Pending group invitation for group" +msgstr "Ausstehende Gruppeneinladung für Gruppe" + +#: members/admin.py:618 #, python-format msgid "Successfully asked %(name)s to confirm their waiting status." msgstr "Erfolgreich %(name)s aufgefordert den Wartelistenplatz zu bestätigen." -#: members/admin.py:604 +#: members/admin.py:619 msgid "Ask selected waiters to confirm their waiting status" msgstr "Wartende auffordern den Wartelistenplatz zu bestätigen" -#: members/admin.py:613 members/admin.py:673 +#: members/admin.py:628 members/admin.py:688 msgid "" "An error occurred while trying to invite said members. Please try again." msgstr "" "Beim Einladen dieser Personen ist ein Fehler aufgetreten. Bitte versuche es " "nochmal. " -#: members/admin.py:617 members/admin.py:678 +#: members/admin.py:632 members/admin.py:693 msgid "" "The selected group does not have a contact email. Please first set a contact " "email and then try again." @@ -205,43 +209,43 @@ msgstr "" "Die ausgewählte Gruppe hat keine Kontakt E-Mail Adresse. Bitte stelle eine " "Kontakt E-Mail Adresse ein und versuche es erneut." -#: members/admin.py:625 members/admin.py:685 +#: members/admin.py:640 members/admin.py:700 #, python-format msgid "Successfully invited %(name)s to %(group)s." msgstr "Erfolgreich %(name)s zu Gruppe %(group)s eingeladen." -#: members/admin.py:629 members/admin.py:691 +#: members/admin.py:644 members/admin.py:706 msgid "Select group for invitation" msgstr "Wähle Gruppe für Einladung aus" -#: members/admin.py:636 +#: members/admin.py:651 msgid "Offer waiter a place in a group." msgstr "Personen auf der Warteliste einen Gruppenplatz anbieten." -#: members/admin.py:708 members/models.py:72 +#: members/admin.py:723 members/models.py:72 msgid "name" msgstr "Name" -#: members/admin.py:709 +#: members/admin.py:724 msgid "" "The group name may only consist of letters, numerals, _, -, :, * and spaces." msgstr "" "Der Gruppenname darf nur aus Buchstaben, Zahlen, _, -, :, * oder Leerzeichen " "bestehen." -#: members/admin.py:738 +#: members/admin.py:753 msgid "Difficulty" msgstr "Schwierigkeit" -#: members/admin.py:741 +#: members/admin.py:756 msgid "Tour type" msgstr "Art der Tour" -#: members/admin.py:744 members/models.py:995 +#: members/admin.py:759 members/models.py:1003 msgid "Means of transportation" msgstr "Verkehrsmittel" -#: members/admin.py:770 +#: members/admin.py:785 msgid "" "Please list here all expenses in relation with this excursion and upload " "relevant bills. These have to be permanently stored for the application of " @@ -254,7 +258,7 @@ msgstr "" "einzelnen Posten wird dabei auf der LJP-Kostenübersicht angezeigt (sinnvoll " "wären z.B. Anreise, Verpflegung, Material etc.)." -#: members/admin.py:788 +#: members/admin.py:803 msgid "" "Here you can work on a seminar report for applying for financial " "contributions from Landesjugendplan (LJP). More information on creating a " @@ -267,7 +271,7 @@ msgstr "" "wahlweise nur TN-Liste und Kostenübersicht kannst du anschließend " "herunterladen." -#: members/admin.py:796 +#: members/admin.py:811 msgid "" "Please list all participants (also youth leaders) of this excursion. Here " "you can still make changes just before departure and hence generate the " @@ -278,34 +282,34 @@ msgstr "" "jederzeit die aktuelle Teilnehmer*innenliste für die Krisenintervention " "generieren." -#: members/admin.py:842 +#: members/admin.py:857 #, python-format msgid "You are not allowed to view all members on note list %(name)s." msgstr "" "Du hast nicht die nötigen Rechte um alle Teilnehmer*innen der Notizliste " "%(name)s anzusehen." -#: members/admin.py:852 +#: members/admin.py:867 msgid "Generate PDF summary" msgstr "Übersicht erstellen" -#: members/admin.py:856 +#: members/admin.py:871 msgid "Full report" msgstr "Vollständiger Seminarbericht" -#: members/admin.py:857 +#: members/admin.py:872 msgid "Costs and participants only" msgstr "Nur Kosten und Teilnehmende" -#: members/admin.py:858 +#: members/admin.py:873 msgid "Mode" msgstr "Modus" -#: members/admin.py:859 +#: members/admin.py:874 msgid "Prepend V32" msgstr "V32 Formblatt einfügen" -#: members/admin.py:875 +#: members/admin.py:890 msgid "" "General information on your excursion. These are partly relevant for the " "amount of financial compensation (means of transport, travel distance, etc.)." @@ -314,48 +318,48 @@ msgstr "" "teilweise relevant für die Zuschüsse aus dem Jugendetat (Verkehrsmittel, " "Fahrstrecke in km)." -#: members/admin.py:905 +#: members/admin.py:920 #, python-format msgid "You are not allowed to view all members on excursion %(name)s." msgstr "" "Du hast nicht die nötigen Rechte um alle Teilnehmer*innen der Ausfahrt " "%(name)s anzusehen." -#: members/admin.py:913 +#: members/admin.py:928 msgid "Generate crisis intervention list" msgstr "Kriseninterventionsliste erstellen" -#: members/admin.py:921 +#: members/admin.py:936 msgid "Generate overview" msgstr "Hinweise für Jugendleiter erstellen" -#: members/admin.py:925 members/admin.py:957 +#: members/admin.py:940 members/admin.py:972 #: members/templates/admin/generate_seminar_report.html:21 msgid "Generate seminar report" msgstr "Landesjugendplan Antrag erstellen" -#: members/admin.py:938 +#: members/admin.py:953 msgid "Please select a mode." msgstr "Bitte wähle einen Modus aus." -#: members/admin.py:943 +#: members/admin.py:958 msgid "" "Full mode is only available, if the seminar report section is filled out." msgstr "" "Der vollständiger Modus ist nur verfügbar, wenn der Seminarbericht " "ausgefüllt ist. " -#: members/admin.py:969 +#: members/admin.py:984 msgid "Generate SJR application" msgstr "SJR Antrag erstellen" -#: members/admin.py:973 +#: members/admin.py:988 msgid "No statement found. Please add a statement and then retry." msgstr "" "Keine Abrechnung angelegt. Bitte lege eine Abrechnung and und versuche es " "erneut." -#: members/admin.py:977 +#: members/admin.py:992 msgid "" "Successfully submited statement. The finance department will notify you as " "soon as possible." @@ -363,7 +367,7 @@ msgstr "" "Abrechnung erfolgreich eingericht. Die Finanzabteilung wird sich bei dir so " "schnell wie möglich melden." -#: members/admin.py:980 +#: members/admin.py:995 #: members/templates/admin/freizeit_finance_overview.html:21 msgid "Finance overview" msgstr "Kostenübersicht" @@ -400,11 +404,11 @@ msgstr "Samstag" msgid "Sunday" msgstr "Sonntag" -#: members/models.py:57 members/models.py:981 +#: members/models.py:57 members/models.py:989 msgid "Description" msgstr "Beschreibung" -#: members/models.py:63 members/models.py:973 +#: members/models.py:63 members/models.py:981 #: members/templates/members/change_member.html:18 msgid "Activity" msgstr "Aktivität" @@ -437,7 +441,7 @@ msgstr "Jugendleiter" msgid "week day" msgstr "Wochentag" -#: members/models.py:80 members/models.py:1346 +#: members/models.py:80 members/models.py:1354 msgid "Starting time" msgstr "Zeitpunkt" @@ -626,8 +630,8 @@ msgstr "Neue unbestätigte Registrierung für Gruppe %(group)s" msgid "Set login data for Kompass" msgstr "Zugangsdaten für Kompass wählen" -#: members/models.py:728 members/models.py:929 members/models.py:940 -#: members/models.py:1295 members/models.py:1302 +#: members/models.py:728 members/models.py:937 members/models.py:948 +#: members/models.py:1303 members/models.py:1310 msgid "Member" msgstr "Teilnehmer*in" @@ -708,240 +712,244 @@ msgstr "Verpasste Erinnerungen" msgid "Waiters" msgstr "Warteliste" -#: members/models.py:846 +#: members/models.py:837 +msgid "Latest group invitation" +msgstr "Letzte Gruppeneinladung" + +#: members/models.py:854 msgid "Waiting status confirmed" msgstr "Wartelistenplatz bestätigt" -#: members/models.py:853 +#: members/models.py:861 msgid "Waiting confirmation needed" msgstr "Wartelistenplatzbestätigung erforderlich" -#: members/models.py:908 +#: members/models.py:916 msgid "Invitation to trial group meeting" msgstr "Einladung zu Schnupperstunde" -#: members/models.py:920 +#: members/models.py:928 msgid "Unregistered from waiting list" msgstr "Von der Warteliste abgemeldet" -#: members/models.py:934 +#: members/models.py:942 msgid "Comment" msgstr "Kommentar" -#: members/models.py:941 members/models.py:1303 +#: members/models.py:949 members/models.py:1311 msgid "Members" msgstr "Teilnehmer*innen" -#: members/models.py:975 +#: members/models.py:983 msgid "Place" msgstr "Stützpunkt / Ort" -#: members/models.py:976 +#: members/models.py:984 msgid "Destination (optional)" msgstr "ggf. Ziel" -#: members/models.py:978 +#: members/models.py:986 msgid "e.g. a peak" msgstr "z.B. ein Gipfel" -#: members/models.py:979 +#: members/models.py:987 msgid "Begin" msgstr "Anfang" -#: members/models.py:980 +#: members/models.py:988 msgid "End (optional)" msgstr "Ende" -#: members/models.py:983 +#: members/models.py:991 msgid "Groups" msgstr "Gruppen" -#: members/models.py:996 +#: members/models.py:1004 msgid "Kilometers traveled" msgstr "Fahrstrecke in Kilometer" -#: members/models.py:999 +#: members/models.py:1007 msgid "Categories" msgstr "Kategorien" -#: members/models.py:1000 +#: members/models.py:1008 msgid "easy" msgstr "leicht" -#: members/models.py:1000 +#: members/models.py:1008 msgid "medium" msgstr "mittel" -#: members/models.py:1000 +#: members/models.py:1008 msgid "hard" msgstr "schwer" -#: members/models.py:1010 members/models.py:1326 +#: members/models.py:1018 members/models.py:1334 #: members/templates/admin/freizeit_finance_overview.html:26 msgid "Excursion" msgstr "Ausfahrt" -#: members/models.py:1011 +#: members/models.py:1019 msgid "Excursions" msgstr "Ausfahrten" -#: members/models.py:1241 members/models.py:1317 members/models.py:1533 +#: members/models.py:1249 members/models.py:1325 members/models.py:1541 msgid "Title" msgstr "Titel" -#: members/models.py:1242 members/models.py:1260 members/models.py:1534 +#: members/models.py:1250 members/models.py:1268 members/models.py:1542 msgid "Date" msgstr "Datum" -#: members/models.py:1261 +#: members/models.py:1269 msgid "Location" msgstr "Ort" -#: members/models.py:1262 +#: members/models.py:1270 msgid "Topic" msgstr "Thema" -#: members/models.py:1286 +#: members/models.py:1294 msgid "Jugendleiter" msgstr "Jugendleiter" -#: members/models.py:1289 +#: members/models.py:1297 msgid "Klettertreff" msgstr "Klettertreff" -#: members/models.py:1290 +#: members/models.py:1298 msgid "Klettertreffs" msgstr "Klettertreffs" -#: members/models.py:1308 +#: members/models.py:1316 msgid "Password" msgstr "Passwort" -#: members/models.py:1311 +#: members/models.py:1319 msgid "registration password" msgstr "Registrierungspassort" -#: members/models.py:1312 +#: members/models.py:1320 msgid "registration passwords" msgstr "Registrierungspasswörter" -#: members/models.py:1319 +#: members/models.py:1327 msgid "Alpinistic goals" msgstr "Alpintechnische Ziele" -#: members/models.py:1320 +#: members/models.py:1328 msgid "Pedagogic goals" msgstr "Pädagogische Ziele" -#: members/models.py:1321 +#: members/models.py:1329 msgid "Content and methods" msgstr "Inhalte und Methoden" -#: members/models.py:1322 +#: members/models.py:1330 msgid "Evaluation" msgstr "Wertung" -#: members/models.py:1323 +#: members/models.py:1331 msgid "Experiences and possible improvements" msgstr "Erfahrungen und Verbesserungsvorschläge" -#: members/models.py:1332 members/models.py:1353 +#: members/models.py:1340 members/models.py:1361 msgid "LJP Proposal" msgstr "Seminarbericht" -#: members/models.py:1333 +#: members/models.py:1341 msgid "LJP Proposals" msgstr "Seminarberichte" -#: members/models.py:1347 +#: members/models.py:1355 msgid "Duration in hours" msgstr "Dauer in Stunden" -#: members/models.py:1350 +#: members/models.py:1358 msgid "Activity and method" msgstr "Art der Aktion inkl. Methode" -#: members/models.py:1358 +#: members/models.py:1366 msgid "Intervention" msgstr "Aktion" -#: members/models.py:1359 +#: members/models.py:1367 msgid "Interventions" msgstr "Aktionen" -#: members/models.py:1461 members/models.py:1491 +#: members/models.py:1469 members/models.py:1499 msgid "May list members" msgstr "Darf folgende Teilnehmer*innen listen" -#: members/models.py:1463 members/models.py:1493 +#: members/models.py:1471 members/models.py:1501 msgid "May view members" msgstr "Darf folgende Teilnehmer*innen anzeigen" -#: members/models.py:1465 members/models.py:1495 +#: members/models.py:1473 members/models.py:1503 msgid "May change members" msgstr "Darf folgende Teilnehmer*innen ändern" -#: members/models.py:1467 members/models.py:1497 +#: members/models.py:1475 members/models.py:1505 msgid "May delete members" msgstr "Darf folgende Teilnehmer*innen löschen" -#: members/models.py:1471 members/models.py:1501 +#: members/models.py:1479 members/models.py:1509 msgid "May list members of groups" msgstr "Darf Teilnehmer*innen folgender Gruppen listen" -#: members/models.py:1473 members/models.py:1503 +#: members/models.py:1481 members/models.py:1511 msgid "May view members of groups" msgstr "Darf Teilnehmer*innen folgender Gruppen anzeigen" -#: members/models.py:1475 members/models.py:1505 +#: members/models.py:1483 members/models.py:1513 msgid "May change members of groups" msgstr "Darf Teilnehmer*innen folgender Gruppen ändern" -#: members/models.py:1477 members/models.py:1507 +#: members/models.py:1485 members/models.py:1515 msgid "May delete members of groups" msgstr "Darf Teilnehmer*innen folgender Gruppen löschen" -#: members/models.py:1480 members/models.py:1481 members/models.py:1484 +#: members/models.py:1488 members/models.py:1489 members/models.py:1492 msgid "Permissions" msgstr "Berechtigungen" -#: members/models.py:1510 members/models.py:1511 members/models.py:1514 +#: members/models.py:1518 members/models.py:1519 members/models.py:1522 msgid "Group permissions" msgstr "Gruppenberechtigungen" -#: members/models.py:1520 +#: members/models.py:1528 msgid "Permission needed" msgstr "Freigabe erforderlich" -#: members/models.py:1523 +#: members/models.py:1531 msgid "Training category" msgstr "Fortbildungstyp" -#: members/models.py:1524 +#: members/models.py:1532 msgid "Training categories" msgstr "Fortbildungstypen" -#: members/models.py:1535 +#: members/models.py:1543 msgid "Category" msgstr "Kategorien" -#: members/models.py:1536 +#: members/models.py:1544 msgid "Comments" msgstr "Kommentar" -#: members/models.py:1537 +#: members/models.py:1545 msgid "Participated" msgstr "Teilgenommmen" -#: members/models.py:1538 +#: members/models.py:1546 msgid "Passed" msgstr "Bestanden" -#: members/models.py:1541 +#: members/models.py:1549 msgid "Training" msgstr "Fortbildung" -#: members/models.py:1542 +#: members/models.py:1550 msgid "Trainings" msgstr "Fortbildungen" diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index 9f11fd3..8c3d27b 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -828,6 +828,14 @@ class MemberWaitingList(Person): 'delete_obj': has_global_perm('members.delete_global_memberwaitinglist'), } + def latest_group_invitation(self): + gi = self.invitationtogroup_set.order_by('-pk').first() + if gi: + return "{group}: {status}".format(group=gi.group.name, status=gi.status()) + else: + return "-" + latest_group_invitation.short_description = _('Latest group invitation') + @property def waiting_confirmation_needed(self): """Returns if person should be asked to confirm waiting status."""