From d19da71fef0235d02413cda5c107c3bb3bd9ee60 Mon Sep 17 00:00:00 2001 From: Christian Merten Date: Sat, 30 Nov 2024 01:25:28 +0100 Subject: [PATCH] members: add demote to waiter button and confirmation --- jdav_web/locale/de/LC_MESSAGES/django.po | 6 +- jdav_web/members/admin.py | 56 ++- .../members/locale/de/LC_MESSAGES/django.po | 409 +++++++++--------- .../templates/admin/demote_to_waiter.html | 48 ++ .../change_form_object_tools.html | 13 + 5 files changed, 330 insertions(+), 202 deletions(-) create mode 100644 jdav_web/members/templates/admin/demote_to_waiter.html create mode 100644 jdav_web/templates/admin/members/memberunconfirmedproxy/change_form_object_tools.html diff --git a/jdav_web/locale/de/LC_MESSAGES/django.po b/jdav_web/locale/de/LC_MESSAGES/django.po index d83aa2c..49905e1 100644 --- a/jdav_web/locale/de/LC_MESSAGES/django.po +++ b/jdav_web/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-11-27 23:16+0100\n" +"POT-Creation-Date: 2024-11-30 01:22+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -272,6 +272,10 @@ msgstr "Abrechnung einreichen" msgid "Invite as user" msgstr "Als Kompassbenutzer:in einladen" +#: templates/admin/members/memberunconfirmedproxy/change_form_object_tools.html:8 +msgid "Demote to waiter" +msgstr "Zurück auf die Warteliste setzen" + #: templates/admin/members/memberwaitinglist/change_form_object_tools.html:8 #: templates/admin/members/memberwaitinglist/submit_line.html:9 msgid "Invite to group" diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index 31de6a6..ed28f4d 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -374,7 +374,11 @@ class MemberAdmin(CommonAdminMixin, admin.ModelAdmin): name_text_or_link.admin_order_field = 'lastname' -class MemberUnconfirmedAdmin(admin.ModelAdmin): +class DemoteToWaiterForm(forms.Form): + _selected_action = forms.CharField(widget=forms.MultipleHiddenInput) + + +class MemberUnconfirmedAdmin(CommonAdminMixin, admin.ModelAdmin): fieldsets = [ (None, { @@ -422,7 +426,7 @@ class MemberUnconfirmedAdmin(admin.ModelAdmin): list_filter = ('group', 'confirmed_mail', 'confirmed_alternative_mail') readonly_fields = ['confirmed_mail', 'confirmed_alternative_mail', 'good_conduct_certificate_valid'] - actions = ['request_mail_confirmation', 'confirm', 'demote_to_waiter'] + actions = ['request_mail_confirmation', 'confirm', 'demote_to_waiter_action'] inlines = [EmergencyContactInline] change_form_template = "members/change_member_unconfirmed.html" @@ -464,22 +468,62 @@ class MemberUnconfirmedAdmin(admin.ModelAdmin): messages.error(request, _("Failed to confirm some registrations because of unconfirmed email addresses.")) confirm.short_description = _('Confirm selected registrations') + def get_urls(self): + urls = super().get_urls() + + def wrap(view): + def wrapper(*args, **kwargs): + return self.admin_site.admin_view(view)(*args, **kwargs) + + wrapper.model_admin = self + return update_wrapper(wrapper, view) + + custom_urls = [ + path( + "/demote/", + wrap(self.demote_to_waiter_view), + name="%s_%s_demote" % (self.opts.app_label, self.opts.model_name), + ), + ] + return custom_urls + urls + + def demote_to_waiter_action(self, request, queryset): + return self.demote_to_waiter_view(request, queryset) + demote_to_waiter_action.short_description = _('Demote selected registrations to waiters.') + + def demote_to_waiter_view(self, request, object_id): + if type(object_id) == str: + member = MemberUnconfirmedProxy.objects.get(pk=object_id) + queryset = [member] + form = None + else: + queryset = object_id + form = DemoteToWaiterForm(initial={'_selected_action': queryset.values_list('id', flat=True)}) + + if "apply" in request.POST: + self.demote_to_waiter(request, queryset) + return HttpResponseRedirect(reverse('admin:members_memberunconfirmedproxy_changelist')) + + context = dict(self.admin_site.each_context(request), + title=_('Demote member to waiter'), + opts=self.opts, + queryset=queryset, + form=form) + return render(request, 'admin/demote_to_waiter.html', context=context) + def demote_to_waiter(self, request, queryset): for member in queryset: - #mem_as_dict = member.__dict__ - #del mem_as_dict['_state'] - #del mem_as_dict['id'] waiter = MemberWaitingList(prename=member.prename, lastname=member.lastname, email=member.email, birth_date=member.birth_date, + gender=member.gender, comments=member.comments, confirmed_mail=member.confirmed_mail, confirm_mail_key=member.confirm_mail_key) waiter.save() member.delete() messages.success(request, _("Successfully demoted %(name)s to waiter.") % {'name': waiter.name}) - demote_to_waiter.short_description = _('Demote selected registrations to waiters.') def response_change(self, request, member): if "_confirm" in request.POST: diff --git a/jdav_web/members/locale/de/LC_MESSAGES/django.po b/jdav_web/members/locale/de/LC_MESSAGES/django.po index 6e0fabd..04677ac 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-11-28 00:04+0100\n" +"POT-Creation-Date: 2024-11-30 01:22+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,165 +18,169 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: members/admin.py:126 members/models.py:382 +#: members/admin.py:125 members/models.py:381 msgid "Registration complete" msgstr "Anmeldung vollständig" -#: members/admin.py:132 +#: members/admin.py:131 msgid "True" msgstr "Ja" -#: members/admin.py:133 +#: members/admin.py:132 msgid "False" msgstr "Nein" -#: members/admin.py:134 +#: members/admin.py:133 msgid "All" msgstr "Alle" -#: members/admin.py:184 members/admin.py:397 +#: members/admin.py:183 members/admin.py:400 msgid "Contact information" msgstr "Kontaktinformationen" -#: members/admin.py:189 members/admin.py:402 +#: members/admin.py:188 members/admin.py:405 msgid "Skills" msgstr "Fähigkeiten" -#: members/admin.py:194 members/admin.py:407 +#: members/admin.py:193 members/admin.py:410 msgid "Others" msgstr "Sonstiges" -#: members/admin.py:200 members/admin.py:412 +#: members/admin.py:199 members/admin.py:415 msgid "Organizational" msgstr "Organisatorisches" -#: members/admin.py:281 +#: members/admin.py:280 msgid "Compose new mail to selected members" msgstr "Neue Nachricht an ausgewählte Teilnehmer verfassen" -#: members/admin.py:287 +#: members/admin.py:286 msgid "Echo required" msgstr "Rückmeldung erforderlich" -#: members/admin.py:289 +#: members/admin.py:288 msgid "Successfully requested echo from selected members." msgstr "" "Rückmeldungsaufforderung erfolgreich an ausgewählte Teilnehmer verschickt." -#: members/admin.py:290 +#: members/admin.py:289 msgid "Request echo from selected members" msgstr "Rückmeldungsaufforderung an ausgewählte Teilnehmer verschicken" -#: members/admin.py:296 +#: members/admin.py:295 #, python-format msgid "Successfully invited %(name)s as user." msgstr "Erfolgreich %(name)s aufgefordert Zugangsdaten zu wählen." -#: members/admin.py:298 +#: members/admin.py:297 msgid "Successfully invited selected members to join as users." msgstr "" "Erfolgreich ausgewählte Teilnehmer:innen aufgefordert Zugangsdaten zu wählen." -#: members/admin.py:305 members/admin.py:322 +#: members/admin.py:304 members/admin.py:321 msgid "Permission denied." msgstr "Fehlende Berechtigungen." -#: members/admin.py:312 members/admin.py:341 +#: members/admin.py:311 members/admin.py:340 #: members/templates/admin/invite_as_user.html:21 msgid "Invite as user" msgstr "Kompass Zugangsdaten wählen lassen" -#: members/admin.py:317 +#: members/admin.py:316 msgid "Invite selected members to join Kompass as users." msgstr "Ausgewählte Teilnehmer:innen Kompass Zugangsdaten wählen lassen." -#: members/admin.py:328 +#: members/admin.py:327 msgid "Member not found." msgstr "Teilnehmer:in nicht gefunden." -#: members/admin.py:332 +#: members/admin.py:331 #, python-format msgid "%(name)s already has login data." msgstr "%(name)s hat schon Zugangsdaten." -#: members/admin.py:346 +#: members/admin.py:345 #, 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:364 +#: members/admin.py:363 msgid "activity" msgstr "Aktivität" -#: members/admin.py:374 members/models.py:53 members/models.py:1401 +#: members/admin.py:373 members/models.py:53 members/models.py:1395 msgid "Name" msgstr "Name" -#: members/admin.py:446 +#: members/admin.py:449 msgid "Successfully requested mail confirmation from selected registrations." msgstr "Aufforderung zur Bestätigung der Email Adresse versendet." -#: members/admin.py:447 +#: members/admin.py:450 msgid "Request mail confirmation from selected registrations" msgstr "Aufforderung zur Bestätigung der Email Adresse versenden" -#: members/admin.py:454 members/admin.py:488 +#: members/admin.py:457 members/admin.py:531 #, python-format msgid "Successfully confirmed %(name)s." msgstr "Registrierung von %(name)s erfolgreich bestätigt." -#: members/admin.py:458 members/admin.py:491 +#: members/admin.py:461 members/admin.py:534 #, 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:463 +#: members/admin.py:466 msgid "Successfully confirmed multiple registrations." msgstr "Erfolgreich mehrere Registrierungen bestätigt." -#: members/admin.py:465 +#: members/admin.py:468 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:466 +#: members/admin.py:469 msgid "Confirm selected registrations" msgstr "Ausgewählte Registrierungen bestätigen" -#: members/admin.py:482 +#: members/admin.py:492 +msgid "Demote selected registrations to waiters." +msgstr "Ausgewählte Registrierungen zurück auf die Warteliste setzen." + +#: members/admin.py:508 +msgid "Demote member to waiter" +msgstr "Ausgewählte Registrierung zurück auf die Warteliste setzen." + +#: members/admin.py:526 #, python-format msgid "Successfully demoted %(name)s to waiter." msgstr "%(name)s zurück auf die Warteliste gesetzt." -#: members/admin.py:483 -msgid "Demote selected registrations to waiters." -msgstr "Ausgewählte Registrierungen zurück auf die Warteliste setzen." - -#: members/admin.py:498 members/models.py:389 members/models.py:738 -#: members/models.py:1146 +#: members/admin.py:541 members/models.py:388 members/models.py:732 +#: members/models.py:1140 msgid "Group" msgstr "Gruppe" -#: members/admin.py:532 +#: members/admin.py:575 #, 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:533 +#: members/admin.py:576 msgid "Ask selected waiters to confirm their waiting status" msgstr "Wartende auffordern den Wartelistenplatz zu bestätigen" -#: members/admin.py:542 members/admin.py:602 +#: members/admin.py:585 members/admin.py:645 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:546 members/admin.py:607 +#: members/admin.py:589 members/admin.py:650 msgid "" "The selected group does not have a contact email. Please first set a contact " "email and then try again." @@ -184,32 +188,32 @@ 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:554 members/admin.py:614 +#: members/admin.py:597 members/admin.py:657 #, python-format msgid "Successfully invited %(name)s to %(group)s." msgstr "Erfolgreich %(name)s zu Gruppe %(group)s eingeladen." -#: members/admin.py:558 members/admin.py:620 +#: members/admin.py:601 members/admin.py:663 msgid "Select group for invitation" msgstr "Wähle Gruppe für Einladung aus" -#: members/admin.py:565 +#: members/admin.py:608 msgid "Offer waiter a place in a group." msgstr "Personen auf der Warteliste einen Gruppenplatz anbieten." -#: members/admin.py:663 +#: members/admin.py:706 msgid "Difficulty" msgstr "Schwierigkeit" -#: members/admin.py:666 +#: members/admin.py:709 msgid "Tour type" msgstr "Art der Tour" -#: members/admin.py:669 members/models.py:956 +#: members/admin.py:712 members/models.py:950 msgid "Means of transportation" msgstr "Verkehrsmittel" -#: members/admin.py:695 +#: members/admin.py:738 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 " @@ -222,7 +226,7 @@ msgstr "" "einzelnen Posten wird dabei auf der LJP-Kostenübersicht angezeigt (sinnvoll " "wären z.B. Anreise, Verpflegung, Material etc.)." -#: members/admin.py:713 +#: members/admin.py:756 msgid "" "Here you can work on a seminar report for applying for financial " "contributions from Landesjugendplan (LJP). More information on creating a " @@ -235,7 +239,7 @@ msgstr "" "wahlweise nur TN-Liste und Kostenübersicht kannst du anschließend " "herunterladen." -#: members/admin.py:721 +#: members/admin.py:764 msgid "" "Please list all participants (also youth leaders) of this excursion. Here " "you can still make changes just before departure and hence generate the " @@ -246,30 +250,30 @@ msgstr "" "jederzeit die aktuelle Teilnehmer:innenliste für die Krisenintervention " "generieren." -#: members/admin.py:767 +#: members/admin.py:810 #, 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:777 +#: members/admin.py:820 msgid "Generate PDF summary" msgstr "Übersicht erstellen" -#: members/admin.py:781 +#: members/admin.py:824 msgid "Full report" msgstr "Vollständiger Seminarbericht" -#: members/admin.py:782 +#: members/admin.py:825 msgid "Costs and participants only" msgstr "Nur Kosten und Teilnehmende" -#: members/admin.py:783 +#: members/admin.py:826 msgid "Mode" msgstr "Modus" -#: members/admin.py:797 +#: members/admin.py:840 msgid "" "General information on your excursion. These are partly relevant for the " "amount of financial compensation (means of transport, travel distance, etc.)." @@ -278,38 +282,38 @@ msgstr "" "teilweise relevant für die Zuschüsse aus dem Jugendetat (Verkehrsmittel, " "Fahrstrecke in km)." -#: members/admin.py:827 +#: members/admin.py:870 #, 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:835 +#: members/admin.py:878 msgid "Generate crisis intervention list" msgstr "Kriseninterventionsliste erstellen" -#: members/admin.py:843 +#: members/admin.py:886 msgid "Generate overview" msgstr "Hinweise für Jugendleiter erstellen" -#: members/admin.py:847 members/admin.py:870 +#: members/admin.py:890 members/admin.py:913 #: members/templates/admin/generate_seminar_report.html:21 msgid "Generate seminar report" msgstr "Seminarbericht erstellen" -#: members/admin.py:860 +#: members/admin.py:903 msgid "Please select a mode." msgstr "Bitte wähle einen Modus aus." -#: members/admin.py:864 +#: members/admin.py:907 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:882 +#: members/admin.py:925 msgid "Generate SJR application" msgstr "SJR Antrag erstellen" @@ -345,11 +349,11 @@ msgstr "Samstag" msgid "Sunday" msgstr "Sonntag" -#: members/models.py:54 members/models.py:942 +#: members/models.py:54 members/models.py:936 msgid "Description" msgstr "Beschreibung" -#: members/models.py:60 members/models.py:934 +#: members/models.py:60 members/models.py:928 #: members/templates/members/change_member.html:18 msgid "Activity" msgstr "Aktivität" @@ -386,7 +390,7 @@ msgstr "Jugendleiter" msgid "week day" msgstr "Wochentag" -#: members/models.py:77 members/models.py:1228 +#: members/models.py:77 members/models.py:1222 msgid "Starting time" msgstr "Zeitpunkt" @@ -395,12 +399,10 @@ msgid "Ending time" msgstr "Endzeitpunkt" #: members/models.py:80 -#, fuzzy -#| msgid "Contact information" msgid "Contact email" -msgstr "Kontaktinformationen" +msgstr "Kontakt Email" -#: members/models.py:90 members/models.py:258 +#: members/models.py:90 members/models.py:257 msgid "group" msgstr "Gruppe" @@ -424,7 +426,7 @@ msgstr "Emailadresse bestätigt" msgid "Email confirmation needed" msgstr "Email Bestätigung erforderlich" -#: members/models.py:188 members/models.py:232 +#: members/models.py:188 members/models.py:231 msgid "phone number" msgstr "Telefonnummer (mobil)" @@ -432,469 +434,470 @@ msgstr "Telefonnummer (mobil)" msgid "birth date" msgstr "Geburtsdatum" -#: members/models.py:204 +#: members/models.py:203 msgid "Gender" msgstr "Gender" -#: members/models.py:205 +#: members/models.py:204 msgid "comments" msgstr "Kommentare" -#: members/models.py:229 +#: members/models.py:228 msgid "Alternative email confirmed" msgstr "Alternative E-Mail Adresse bestätigt" -#: members/models.py:233 +#: members/models.py:232 msgid "street and house number" msgstr "Straße und Hausnummer" -#: members/models.py:234 +#: members/models.py:233 msgid "Postcode" msgstr "PLZ" -#: members/models.py:236 +#: members/models.py:235 msgid "town" msgstr "Stadt" -#: members/models.py:237 +#: members/models.py:236 msgid "Address extra" msgstr "Adress-Zusatz" -#: members/models.py:238 +#: members/models.py:237 msgid "Country" msgstr "Land" -#: members/models.py:240 +#: members/models.py:239 msgid "Good conduct certificate presented on" msgstr "Führungszeugnis vorgelegt am" -#: members/models.py:241 +#: members/models.py:240 msgid "Joined on" msgstr "Eintritt" -#: members/models.py:242 +#: members/models.py:241 msgid "Left on" msgstr "Austritt" -#: members/models.py:243 +#: members/models.py:242 msgid "Has key" msgstr "Hat Jugendraumschlüssel" -#: members/models.py:244 +#: members/models.py:243 msgid "Has a free ticket for the climbing gym" msgstr "Hat Freikarte für Kletterhalle" -#: members/models.py:245 +#: members/models.py:244 msgid "DAV badge number" msgstr "DAV Mitgliedsnummer" -#: members/models.py:246 +#: members/models.py:245 msgid "Knows how to swim" msgstr "Kann schwimmen" -#: members/models.py:247 +#: members/models.py:246 msgid "Climbing badge" msgstr "Kletterschein" -#: members/models.py:248 +#: members/models.py:247 msgid "Alpine experience" msgstr "Alpine Erfahrung" -#: members/models.py:249 +#: members/models.py:248 msgid "Allergies" msgstr "Allergieen" -#: members/models.py:250 +#: members/models.py:249 msgid "Medication" msgstr "Medikamente" -#: members/models.py:251 +#: members/models.py:250 msgid "Tetanus vaccination" msgstr "Tetanusimpfung" -#: members/models.py:252 +#: members/models.py:251 msgid "Photos may be taken" msgstr "Fotoerlaubnis" -#: members/models.py:253 +#: members/models.py:252 msgid "Legal guardians" msgstr "Erziehungsberechtigte" -#: members/models.py:255 +#: members/models.py:254 msgid "May cancel a group appointment independently" msgstr "Darf sich allein von der Gruppenstunde abmelden" -#: members/models.py:262 +#: members/models.py:261 msgid "receives newsletter" msgstr "Erhält den Newsletter" -#: members/models.py:266 +#: members/models.py:265 msgid "created" msgstr "erstellt" -#: members/models.py:267 +#: members/models.py:266 msgid "Active" msgstr "Aktiv" -#: members/models.py:268 +#: members/models.py:267 msgid "registration form" msgstr "Anmeldeformular" -#: members/models.py:276 +#: members/models.py:275 msgid "image" msgstr "Bild" -#: members/models.py:285 +#: members/models.py:284 msgid "Echoed" msgstr "Rückgemeldet" -#: members/models.py:286 +#: members/models.py:285 msgid "Confirmed" msgstr "Bestätigt" -#: members/models.py:288 +#: members/models.py:287 msgid "Login data" msgstr "Zugangsdaten" -#: members/models.py:318 +#: members/models.py:317 msgid "Good conduct certificate valid" msgstr "Führungszeugnis gültig" -#: members/models.py:392 +#: members/models.py:391 msgid "member" msgstr "Teilnehmer" -#: members/models.py:393 +#: members/models.py:392 msgid "members" msgstr "Teilnehmer" -#: members/models.py:466 +#: members/models.py:460 #, python-format msgid "New unconfirmed registration for group %(group)s" msgstr "Neue unbestätigte Registrierung für Gruppe %(group)s" -#: members/models.py:677 +#: members/models.py:671 msgid "Set login data for Kompass" msgstr "Zugangsdaten für Kompass wählen" -#: members/models.py:694 members/models.py:890 members/models.py:901 -#: members/models.py:1177 members/models.py:1184 +#: members/models.py:688 members/models.py:884 members/models.py:895 +#: members/models.py:1171 members/models.py:1178 msgid "Member" msgstr "Teilnehmer" -#: members/models.py:701 +#: members/models.py:695 msgid "Emergency contact" msgstr "Notfallkontakt" -#: members/models.py:702 +#: members/models.py:696 msgid "Emergency contacts" msgstr "Notfallkontakte" -#: members/models.py:722 +#: members/models.py:716 msgid "Unconfirmed registration" msgstr "Unbestätigte Registrierung" -#: members/models.py:723 +#: members/models.py:717 msgid "Unconfirmed registrations" msgstr "Unbestätigte Registrierungen" -#: members/models.py:737 members/models.py:782 +#: members/models.py:731 members/models.py:776 msgid "Waiter" msgstr "Wartende Person" -#: members/models.py:739 +#: members/models.py:733 msgid "Invitation date" msgstr "Einladungsdatum" -#: members/models.py:740 members/templates/members/reject_success.html:6 +#: members/models.py:734 members/templates/members/reject_success.html:6 #: members/templates/members/reject_success.html:11 msgid "Invitation rejected" msgstr "Einladung abgelehnt" -#: members/models.py:744 +#: members/models.py:738 msgid "Invitation to group" msgstr "Gruppeneinladung" -#: members/models.py:745 +#: members/models.py:739 msgid "Invitations to groups" msgstr "Gruppeneinladungen" -#: members/models.py:752 +#: members/models.py:746 msgid "Rejected" msgstr "Abgelehnt" -#: members/models.py:754 +#: members/models.py:748 msgid "Expired" msgstr "Abgelaufen" -#: members/models.py:756 +#: members/models.py:750 msgid "Undecided" msgstr "Ausstehend" -#: members/models.py:757 +#: members/models.py:751 msgid "Status" msgstr "Status" -#: members/models.py:768 +#: members/models.py:762 msgid "Do you want to tell us something else?" msgstr "Möchtest du uns noch etwas mitteilen?" -#: members/models.py:769 +#: members/models.py:763 msgid "application date" msgstr "Bewerbungsdatum" -#: members/models.py:771 +#: members/models.py:765 msgid "Last wait confirmation" msgstr "Letzte Wartebestätigung" -#: members/models.py:775 +#: members/models.py:769 msgid "Last reminder" msgstr "Letzte Erinnerung" -#: members/models.py:776 +#: members/models.py:770 msgid "Missed reminders" msgstr "Verpasste Erinnerungen" -#: members/models.py:783 +#: members/models.py:777 msgid "Waiters" msgstr "Warteliste" -#: members/models.py:807 +#: members/models.py:801 msgid "Waiting status confirmed" msgstr "Wartelistenplatz bestätigt" -#: members/models.py:814 +#: members/models.py:808 msgid "Waiting confirmation needed" msgstr "Wartelistenplatzbestätigung erforderlich" -#: members/models.py:869 +#: members/models.py:863 msgid "Invitation to trial group meeting" msgstr "Einladung zu Schnupperstunde" -#: members/models.py:881 +#: members/models.py:875 msgid "Unregistered from waiting list" msgstr "Von der Warteliste abgemeldet" -#: members/models.py:895 +#: members/models.py:889 msgid "Comment" msgstr "Kommentar" -#: members/models.py:902 members/models.py:1185 +#: members/models.py:896 members/models.py:1179 msgid "Members" msgstr "Teilnehmer" -#: members/models.py:936 +#: members/models.py:930 msgid "Place" msgstr "Stützpunkt / Ort" -#: members/models.py:937 +#: members/models.py:931 msgid "Destination (optional)" msgstr "ggf. Ziel" -#: members/models.py:939 +#: members/models.py:933 msgid "e.g. a peak" msgstr "z.B. ein Gipfel" -#: members/models.py:940 +#: members/models.py:934 msgid "Begin" msgstr "Anfang" -#: members/models.py:941 +#: members/models.py:935 msgid "End (optional)" msgstr "Ende" -#: members/models.py:944 +#: members/models.py:938 msgid "Groups" msgstr "Gruppen" -#: members/models.py:957 +#: members/models.py:951 msgid "Kilometers traveled" msgstr "Fahrstrecke in Kilometer" -#: members/models.py:960 +#: members/models.py:954 msgid "Categories" msgstr "Kategorien" -#: members/models.py:961 +#: members/models.py:955 msgid "easy" msgstr "leicht" -#: members/models.py:961 +#: members/models.py:955 msgid "medium" msgstr "mittel" -#: members/models.py:961 +#: members/models.py:955 msgid "hard" msgstr "schwer" -#: members/models.py:971 members/models.py:1208 +#: members/models.py:965 members/models.py:1202 msgid "Excursion" msgstr "Ausfahrt" -#: members/models.py:972 +#: members/models.py:966 msgid "Excursions" msgstr "Ausfahrten" -#: members/models.py:1123 members/models.py:1199 members/models.py:1415 +#: members/models.py:1117 members/models.py:1193 members/models.py:1409 msgid "Title" msgstr "Titel" -#: members/models.py:1124 members/models.py:1142 members/models.py:1416 +#: members/models.py:1118 members/models.py:1136 members/models.py:1410 msgid "Date" msgstr "Datum" -#: members/models.py:1143 +#: members/models.py:1137 msgid "Location" msgstr "Ort" -#: members/models.py:1144 +#: members/models.py:1138 msgid "Topic" msgstr "Thema" -#: members/models.py:1168 +#: members/models.py:1162 msgid "Jugendleiter" msgstr "Jugendleiter" -#: members/models.py:1171 +#: members/models.py:1165 msgid "Klettertreff" msgstr "Klettertreff" -#: members/models.py:1172 +#: members/models.py:1166 msgid "Klettertreffs" msgstr "Klettertreffs" -#: members/models.py:1190 +#: members/models.py:1184 msgid "Password" msgstr "Passwort" -#: members/models.py:1193 +#: members/models.py:1187 msgid "registration password" msgstr "Registrierungspassort" -#: members/models.py:1194 +#: members/models.py:1188 msgid "registration passwords" msgstr "Registrierungspasswörter" -#: members/models.py:1201 +#: members/models.py:1195 msgid "Alpinistic goals" msgstr "Alpintechnische Ziele" -#: members/models.py:1202 +#: members/models.py:1196 msgid "Pedagogic goals" msgstr "Pädagogische Ziele" -#: members/models.py:1203 +#: members/models.py:1197 msgid "Content and methods" msgstr "Inhalte und Methoden" -#: members/models.py:1204 +#: members/models.py:1198 msgid "Evaluation" msgstr "Wertung" -#: members/models.py:1205 +#: members/models.py:1199 msgid "Experiences and possible improvements" msgstr "Erfahrungen und Verbesserungsvorschläge" -#: members/models.py:1214 members/models.py:1235 +#: members/models.py:1208 members/models.py:1229 msgid "LJP Proposal" msgstr "Seminarbericht" -#: members/models.py:1215 +#: members/models.py:1209 msgid "LJP Proposals" msgstr "Seminarberichte" -#: members/models.py:1229 +#: members/models.py:1223 msgid "Duration in hours" msgstr "Dauer in Stunden" -#: members/models.py:1232 +#: members/models.py:1226 msgid "Activity and method" msgstr "Art der Aktion inkl. Methode" -#: members/models.py:1240 +#: members/models.py:1234 msgid "Intervention" msgstr "Aktion" -#: members/models.py:1241 +#: members/models.py:1235 msgid "Interventions" msgstr "Aktionen" -#: members/models.py:1343 members/models.py:1373 +#: members/models.py:1337 members/models.py:1367 msgid "May list members" msgstr "Darf folgende Teilnehmer:innen listen" -#: members/models.py:1345 members/models.py:1375 +#: members/models.py:1339 members/models.py:1369 msgid "May view members" msgstr "Darf folgende Teilnehmer:innen anzeigen" -#: members/models.py:1347 members/models.py:1377 +#: members/models.py:1341 members/models.py:1371 msgid "May change members" msgstr "Darf folgende Teilnehmer:innen ändern" -#: members/models.py:1349 members/models.py:1379 +#: members/models.py:1343 members/models.py:1373 msgid "May delete members" msgstr "Darf folgende Teilnehmer:innen löschen" -#: members/models.py:1353 members/models.py:1383 +#: members/models.py:1347 members/models.py:1377 msgid "May list members of groups" msgstr "Darf Teilnehmer:innen folgender Gruppen listen" -#: members/models.py:1355 members/models.py:1385 +#: members/models.py:1349 members/models.py:1379 msgid "May view members of groups" msgstr "Darf Teilnehmer:innen folgender Gruppen anzeigen" -#: members/models.py:1357 members/models.py:1387 +#: members/models.py:1351 members/models.py:1381 msgid "May change members of groups" msgstr "Darf Teilnehmer:innen folgender Gruppen ändern" -#: members/models.py:1359 members/models.py:1389 +#: members/models.py:1353 members/models.py:1383 msgid "May delete members of groups" msgstr "Darf Teilnehmer:innen folgender Gruppen löschen" -#: members/models.py:1362 members/models.py:1363 members/models.py:1366 +#: members/models.py:1356 members/models.py:1357 members/models.py:1360 msgid "Permissions" msgstr "Berechtigungen" -#: members/models.py:1392 members/models.py:1393 members/models.py:1396 +#: members/models.py:1386 members/models.py:1387 members/models.py:1390 msgid "Group permissions" msgstr "Gruppenberechtigungen" -#: members/models.py:1402 +#: members/models.py:1396 msgid "Permission needed" msgstr "Freigabe erforderlich" -#: members/models.py:1405 +#: members/models.py:1399 msgid "Training category" msgstr "Fortbildungstyp" -#: members/models.py:1406 +#: members/models.py:1400 msgid "Training categories" msgstr "Fortbildungstypen" -#: members/models.py:1417 +#: members/models.py:1411 msgid "Category" msgstr "Kategorien" -#: members/models.py:1418 +#: members/models.py:1412 msgid "Comments" msgstr "Kommentar" -#: members/models.py:1419 +#: members/models.py:1413 msgid "Participated" msgstr "Teilgenommmen" -#: members/models.py:1420 +#: members/models.py:1414 msgid "Passed" msgstr "Bestanden" -#: members/models.py:1423 +#: members/models.py:1417 msgid "Training" msgstr "Fortbildung" -#: members/models.py:1424 +#: members/models.py:1418 msgid "Trainings" msgstr "Fortbildungen" +#: members/templates/admin/demote_to_waiter.html:17 #: members/templates/admin/generate_seminar_report.html:17 #: members/templates/admin/invite_as_user.html:17 #: members/templates/admin/invite_for_group.html:17 @@ -903,6 +906,30 @@ msgstr "Fortbildungen" msgid "Home" msgstr "Start" +#: members/templates/admin/demote_to_waiter.html:20 +#: members/templates/admin/demote_to_waiter.html:25 +msgid "Demote to waiter" +msgstr "Zurück auf die Warteliste setzen" + +#: members/templates/admin/demote_to_waiter.html:27 +msgid "" +"Do you want to demote the following unconfirmed registrations to waiters?" +msgstr "" +"Möchtest du die folgenden Personen zurück auf die Warteliste setzen?" + +#: members/templates/admin/demote_to_waiter.html:45 +msgid "Demote" +msgstr "Zurück auf die Warteliste setzen" + +#: members/templates/admin/demote_to_waiter.html:46 +#: members/templates/admin/generate_seminar_report.html:54 +#: members/templates/admin/invite_as_user.html:37 +#: members/templates/admin/invite_for_group.html:52 +#: members/templates/admin/invite_selected_as_user.html:49 +#: members/templates/admin/invite_selected_for_group.html:53 +msgid "Cancel" +msgstr "Abbrechen" + #: members/templates/admin/generate_seminar_report.html:27 msgid "" "Here you can generate a seminar report suitable for the LJP. A report\n" @@ -939,14 +966,6 @@ msgstr "Bitte wähle einen der obigen Modi." msgid "Generate" msgstr "Erstellen" -#: members/templates/admin/generate_seminar_report.html:54 -#: members/templates/admin/invite_as_user.html:37 -#: members/templates/admin/invite_for_group.html:52 -#: members/templates/admin/invite_selected_as_user.html:49 -#: members/templates/admin/invite_selected_for_group.html:53 -msgid "Cancel" -msgstr "Abbrechen" - #: members/templates/admin/invite_as_user.html:27 #, python-format msgid "" diff --git a/jdav_web/members/templates/admin/demote_to_waiter.html b/jdav_web/members/templates/admin/demote_to_waiter.html new file mode 100644 index 0000000..661ddef --- /dev/null +++ b/jdav_web/members/templates/admin/demote_to_waiter.html @@ -0,0 +1,48 @@ +{% extends "admin/base_site.html" %} +{% load i18n admin_urls static %} + +{% block extrahead %} + {{ block.super }} + {{ media }} + + + +{% endblock %} + +{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} invite-waiter +{% endblock %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block content %} +

{% translate "Demote to waiter" %}

+

+{% trans "Do you want to demote the following unconfirmed registrations to waiters?" %} +

+

+

    + {% for member in queryset %} +
  • + {{ member }} +
  • + {% endfor %} +
+

+ +
+ {% csrf_token %} + {% if form %} + {{form}} + {% endif %} + + + {% translate "Cancel" %} +
+{% endblock %} diff --git a/jdav_web/templates/admin/members/memberunconfirmedproxy/change_form_object_tools.html b/jdav_web/templates/admin/members/memberunconfirmedproxy/change_form_object_tools.html new file mode 100644 index 0000000..c3fbe46 --- /dev/null +++ b/jdav_web/templates/admin/members/memberunconfirmedproxy/change_form_object_tools.html @@ -0,0 +1,13 @@ +{% extends "admin/change_form_object_tools.html" %} +{% load i18n admin_urls %} + +{% block object-tools-items %} + +
  • + {% url opts|admin_urlname:'demote' original.pk|admin_urlquote as demote_url %} + {% trans 'Demote to waiter' %} +
  • + +{{block.super}} + +{% endblock %}