From 307944bbb76cdb41416122c67616ed97682d7371 Mon Sep 17 00:00:00 2001 From: mariusrklein <47218379+mariusrklein@users.noreply.github.com> Date: Tue, 31 Dec 2024 18:16:27 +0100 Subject: [PATCH 1/3] added form to select correct invoice for sjr application --- jdav_web/members/admin.py | 49 +++++- .../members/locale/de/LC_MESSAGES/django.po | 144 +++++++++++------- jdav_web/members/pdf.py | 14 +- .../admin/generate_sjr_application.html | 52 +++++++ 4 files changed, 190 insertions(+), 69 deletions(-) create mode 100644 jdav_web/members/templates/admin/generate_sjr_application.html diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index cc4c184..8694a02 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -871,6 +871,15 @@ class GenerateSeminarReportForm(forms.Form): widget=CheckboxInput(attrs={'style': 'display: inherit'}), required=False) +class GenerateSjrForm(forms.Form): + + def __init__(self, *args, **kwargs): + self.attachments = kwargs.pop('attachments') + + super(GenerateSjrForm,self).__init__(*args,**kwargs) + self.fields['invoice'] = forms.ChoiceField(choices=self.attachments, label=_('Invoice')) + + class FreizeitAdmin(CommonAdminMixin, nested_admin.NestedModelAdmin): #inlines = [MemberOnListInline, LJPOnListInline, StatementOnListInline] @@ -966,17 +975,41 @@ class FreizeitAdmin(CommonAdminMixin, nested_admin.NestedModelAdmin): return serve_pdf(fp) return self.render_seminar_report_options(request, memberlist, GenerateSeminarReportForm()) seminar_report.short_description = _('Generate seminar report') - + + def render_sjr_options(self, request, memberlist, form): + context = dict(self.admin_site.each_context(request), + title=_('Generate SJR application'), + opts=self.opts, + memberlist=memberlist, + form=form, + object=memberlist) + return render(request, 'admin/generate_sjr_application.html', context=context) + def sjr_application(self, request, memberlist): - if not self.may_view_excursion(request, memberlist): - return self.not_allowed_view(request, memberlist) - context = memberlist.sjr_application_fields() if hasattr(memberlist, 'statement'): - attachments = [b.proof.path for b in memberlist.statement.bill_set.all() if b.proof] + attachment_names = [f"{b.short_description}: {b.explanation} ({b.amount:.2f}€)" for b in memberlist.statement.bill_set.all() if b.proof] + attachment_paths = [b.proof.path for b in memberlist.statement.bill_set.all() if b.proof] else: - attachments = [] - title = memberlist.ljpproposal.title if hasattr(memberlist, 'ljpproposal') else memberlist.name - return fill_pdf_form(title + "_SJR_Antrag", 'members/sjr_template.pdf', context, attachments) + attachment_names = [] + attachment_paths = [] + attachments = zip(attachment_paths, attachment_names) + + if not self.may_view_excursion(request, memberlist): + return self.not_allowed_view(request, memberlist) + if "apply" in request.POST: + form = GenerateSjrForm(request.POST, attachments=attachments) + if not form.is_valid(): + messages.error(request, _('Please select an invoice.')) + return self.render_sjr_options(request, memberlist, form) + + selected_attachments = [form.cleaned_data['invoice']] + context = memberlist.sjr_application_fields() + title = memberlist.ljpproposal.title if hasattr(memberlist, 'ljpproposal') else memberlist.name + + return fill_pdf_form(title + "_SJR_Antrag", 'members/sjr_template.pdf', context, selected_attachments) + + return self.render_sjr_options(request, memberlist, GenerateSjrForm(attachments=attachments)) + sjr_application.short_description = _('Generate SJR application') def finance_overview(self, request, memberlist): diff --git a/jdav_web/members/locale/de/LC_MESSAGES/django.po b/jdav_web/members/locale/de/LC_MESSAGES/django.po index cfd1dbb..551b8c9 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-19 01:21+0100\n" +"POT-Creation-Date: 2024-12-31 18:13+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -34,174 +34,174 @@ msgstr "Nein" msgid "All" msgstr "Alle" -#: members/admin.py:185 members/admin.py:415 +#: members/admin.py:185 members/admin.py:414 msgid "Contact information" msgstr "Kontaktinformationen" -#: members/admin.py:190 members/admin.py:420 +#: members/admin.py:190 members/admin.py:419 msgid "Skills" msgstr "Fähigkeiten" -#: members/admin.py:195 members/admin.py:425 +#: members/admin.py:195 members/admin.py:424 msgid "Others" msgstr "Sonstiges" -#: members/admin.py:201 members/admin.py:430 +#: members/admin.py:201 members/admin.py:429 msgid "Organizational" msgstr "Organisatorisches" -#: members/admin.py:283 +#: members/admin.py:282 msgid "Compose new mail to selected members" msgstr "Neue Nachricht an ausgewählte Teilnehmer*innen verfassen" -#: members/admin.py:289 +#: members/admin.py:288 msgid "Echo required" msgstr "Rückmeldung erforderlich" -#: members/admin.py:291 +#: members/admin.py:290 msgid "Successfully requested echo from selected members." msgstr "" "Rückmeldungsaufforderung erfolgreich an ausgewählte Teilnehmer*innen " "verschickt." -#: members/admin.py:292 +#: members/admin.py:291 msgid "Request echo from selected members" msgstr "Rückmeldungsaufforderung an ausgewählte Teilnehmer*innen verschicken" -#: members/admin.py:301 +#: members/admin.py:300 #, 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:303 +#: members/admin.py:302 #, python-format msgid "Successfully invited %(name)s as user." msgstr "Erfolgreich %(name)s aufgefordert Zugangsdaten zu wählen." -#: members/admin.py:305 +#: members/admin.py:304 msgid "Successfully invited selected members to join as users." msgstr "" "Erfolgreich ausgewählte Teilnehmer*innen aufgefordert Zugangsdaten zu wählen." -#: members/admin.py:307 +#: members/admin.py:306 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:314 members/admin.py:331 +#: members/admin.py:313 members/admin.py:330 msgid "Permission denied." msgstr "Fehlende Berechtigungen." -#: members/admin.py:321 members/admin.py:355 +#: members/admin.py:320 members/admin.py:354 #: members/templates/admin/invite_as_user.html:21 msgid "Invite as user" msgstr "Kompass Zugangsdaten wählen lassen" -#: members/admin.py:326 +#: members/admin.py:325 msgid "Invite selected members to join Kompass as users." msgstr "Ausgewählte Teilnehmer*innen Kompass Zugangsdaten wählen lassen." -#: members/admin.py:337 +#: members/admin.py:336 msgid "Member not found." msgstr "Teilnehmer*in nicht gefunden." -#: members/admin.py:341 +#: members/admin.py:340 #, 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 "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:360 +#: members/admin.py:359 #, 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:378 +#: members/admin.py:377 msgid "activity" msgstr "Aktivität" -#: members/admin.py:388 members/models.py:56 members/models.py:1572 +#: members/admin.py:387 members/models.py:56 members/models.py:1572 msgid "Name" msgstr "Name" -#: members/admin.py:479 +#: members/admin.py:478 msgid "Successfully requested mail confirmation from selected registrations." msgstr "Aufforderung zur Bestätigung der Email Adresse versendet." -#: members/admin.py:480 +#: members/admin.py:479 msgid "Request mail confirmation from selected registrations" msgstr "Aufforderung zur Bestätigung der Email Adresse versenden" -#: members/admin.py:487 members/admin.py:552 +#: members/admin.py:486 members/admin.py:551 #, python-format msgid "Successfully confirmed %(name)s." msgstr "Registrierung von %(name)s erfolgreich bestätigt." -#: members/admin.py:491 members/admin.py:555 +#: members/admin.py:490 members/admin.py:554 #, 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:496 +#: members/admin.py:495 msgid "Successfully confirmed multiple registrations." msgstr "Erfolgreich mehrere Registrierungen bestätigt." -#: members/admin.py:498 +#: 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:499 +#: members/admin.py:498 msgid "Confirm selected registrations" msgstr "Ausgewählte Registrierungen bestätigen" -#: members/admin.py:522 +#: members/admin.py:521 msgid "Demote selected registrations to waiters." msgstr "Ausgewählte Registrierungen zurück auf die Warteliste setzen." -#: members/admin.py:538 +#: members/admin.py:537 msgid "Demote member to waiter" msgstr "Ausgewählte Registrierung zurück auf die Warteliste setzen." -#: members/admin.py:547 +#: members/admin.py:546 #, python-format msgid "Successfully demoted %(name)s to waiter." msgstr "%(name)s zurück auf die Warteliste gesetzt." -#: members/admin.py:562 members/models.py:419 members/models.py:822 +#: members/admin.py:561 members/models.py:419 members/models.py:822 #: members/models.py:1317 msgid "Group" msgstr "Gruppe" -#: members/admin.py:577 +#: members/admin.py:576 msgid "Pending group invitation for group" msgstr "Ausstehende Gruppeneinladung für Gruppe" -#: members/admin.py:610 +#: members/admin.py:609 #, 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:611 +#: members/admin.py:610 msgid "Ask selected waiters to confirm their waiting status" msgstr "Wartende auffordern den Wartelistenplatz zu bestätigen" -#: members/admin.py:620 members/admin.py:684 +#: members/admin.py:619 members/admin.py:683 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:624 members/admin.py:689 +#: members/admin.py:623 members/admin.py:688 msgid "" "The selected group does not have a contact email. Please first set a contact " "email and then try again." @@ -209,39 +209,39 @@ 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:632 members/admin.py:696 +#: members/admin.py:631 members/admin.py:695 #, python-format msgid "Successfully invited %(name)s to %(group)s." msgstr "Erfolgreich %(name)s zu Gruppe %(group)s eingeladen." -#: members/admin.py:636 members/admin.py:702 +#: members/admin.py:635 members/admin.py:701 msgid "Select group for invitation" msgstr "Wähle Gruppe für Einladung aus" -#: members/admin.py:643 +#: members/admin.py:642 msgid "Offer waiter a place in a group." msgstr "Personen auf der Warteliste einen Gruppenplatz anbieten." -#: members/admin.py:719 members/models.py:72 +#: members/admin.py:718 members/models.py:72 msgid "name" msgstr "Name" -#: members/admin.py:720 +#: members/admin.py:719 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:749 +#: members/admin.py:748 msgid "Difficulty" msgstr "Schwierigkeit" -#: members/admin.py:752 +#: members/admin.py:751 msgid "Tour type" msgstr "Art der Tour" -#: members/admin.py:755 members/models.py:1048 +#: members/admin.py:754 members/models.py:1048 msgid "Means of transportation" msgstr "Verkehrsmittel" @@ -309,7 +309,11 @@ msgstr "Modus" msgid "Prepend V32" msgstr "V32 Formblatt einfügen" -#: members/admin.py:886 +#: members/admin.py:880 +msgid "Invoice" +msgstr "Beleg" + +#: members/admin.py:895 msgid "" "General information on your excursion. These are partly relevant for the " "amount of financial compensation (means of transport, travel distance, etc.)." @@ -318,48 +322,53 @@ msgstr "" "teilweise relevant für die Zuschüsse aus dem Jugendetat (Verkehrsmittel, " "Fahrstrecke in km)." -#: members/admin.py:916 +#: members/admin.py:925 #, 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:924 +#: members/admin.py:933 msgid "Generate crisis intervention list" msgstr "Kriseninterventionsliste erstellen" -#: members/admin.py:932 +#: members/admin.py:941 msgid "Generate overview" msgstr "Hinweise für Jugendleiter erstellen" -#: members/admin.py:936 members/admin.py:968 +#: members/admin.py:945 members/admin.py:977 #: members/templates/admin/generate_seminar_report.html:21 msgid "Generate seminar report" msgstr "Landesjugendplan Antrag erstellen" -#: members/admin.py:949 +#: members/admin.py:958 msgid "Please select a mode." msgstr "Bitte wähle einen Modus aus." -#: members/admin.py:954 +#: members/admin.py:963 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:980 +#: members/admin.py:981 members/admin.py:1013 +#: members/templates/admin/generate_sjr_application.html:21 msgid "Generate SJR application" msgstr "SJR Antrag erstellen" -#: members/admin.py:984 +#: members/admin.py:1002 +msgid "Please select an invoice." +msgstr "Bitte wähle einen Beleg aus." + +#: members/admin.py:1017 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:988 +#: members/admin.py:1021 msgid "" "Successfully submited statement. The finance department will notify you as " "soon as possible." @@ -367,7 +376,7 @@ msgstr "" "Abrechnung erfolgreich eingericht. Die Finanzabteilung wird sich bei dir so " "schnell wie möglich melden." -#: members/admin.py:991 +#: members/admin.py:1024 #: members/templates/admin/freizeit_finance_overview.html:21 msgid "Finance overview" msgstr "Kostenübersicht" @@ -972,6 +981,7 @@ msgstr "Fortbildungen" #: members/templates/admin/demote_to_waiter.html:17 #: members/templates/admin/freizeit_finance_overview.html:17 #: members/templates/admin/generate_seminar_report.html:17 +#: members/templates/admin/generate_sjr_application.html:17 #: members/templates/admin/invite_as_user.html:17 #: members/templates/admin/invite_for_group.html:17 #: members/templates/admin/invite_selected_as_user.html:17 @@ -996,6 +1006,7 @@ msgstr "Zurück auf die Warteliste setzen" #: members/templates/admin/demote_to_waiter.html:46 #: members/templates/admin/freizeit_finance_overview.html:154 #: members/templates/admin/generate_seminar_report.html:60 +#: members/templates/admin/generate_sjr_application.html:48 #: 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 @@ -1233,9 +1244,28 @@ msgstr "" "Felder im Formblatt selbst aus und unterschreibe das PDF." #: members/templates/admin/generate_seminar_report.html:59 +#: members/templates/admin/generate_sjr_application.html:47 msgid "Generate" msgstr "Erstellen" +#: members/templates/admin/generate_sjr_application.html:27 +msgid "Here you can generate an allowance application for the SJR." +msgstr "Hier kannst du einen Zuschussantrag für den SJR Heidelberg generieren." + +#: members/templates/admin/generate_sjr_application.html:30 +msgid "" +"The application needs to be complemented with an invoice from the trip as " +"proof." +msgstr "" +"Für den Zuschussantrag benötigst du eine Rechnung als Beleg, dass die " +"Ausfahrt stattgefunden hat. Bitte wähle hier einen Beleg aus." + +#: members/templates/admin/generate_sjr_application.html:41 +msgid "" +"Please send this application form to the jdav finance officer via email." +msgstr "Anschließend kannst du das Zuschussformular herunterladen. Sende es " +"bitte per E-Mail an den Finanzwart der jdav." + #: members/templates/admin/invite_as_user.html:27 #, python-format msgid "" diff --git a/jdav_web/members/pdf.py b/jdav_web/members/pdf.py index a273b95..00a9877 100644 --- a/jdav_web/members/pdf.py +++ b/jdav_web/members/pdf.py @@ -100,12 +100,18 @@ def fill_pdf_form(name, template_path, fields, attachments=[], save_only=False): for fp in attachments: try: - img = Image.open(fp) - img_pdf = BytesIO() - img.save(img_pdf, "pdf") + if fp.endswith(".pdf"): + # append pdf directly + img_pdf = PdfReader(fp) + else: + # convert ensures that png files with an alpha channel can be appended + img = Image.open(fp).convert("RGB") + img_pdf = BytesIO() + img.save(img_pdf, "pdf") writer.append(img_pdf) - except: + except Exception as e: print("Could not add image", fp) + print(e) with open(media_path(filename_pdf), 'wb') as output_stream: writer.write(output_stream) diff --git a/jdav_web/members/templates/admin/generate_sjr_application.html b/jdav_web/members/templates/admin/generate_sjr_application.html new file mode 100644 index 0000000..98f6f53 --- /dev/null +++ b/jdav_web/members/templates/admin/generate_sjr_application.html @@ -0,0 +1,52 @@ +{% 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 %} +

+{% blocktrans %}Here you can generate an allowance application for the SJR.{% endblocktrans %} +

+

+{% blocktrans %}The application needs to be complemented with an invoice from the trip as proof.{% endblocktrans %} +

+ +
+ {% csrf_token %} +

+ + {{ form }} +
+

+

+ {% blocktrans %}Please send this application form to the jdav finance officer via email.{% endblocktrans %} +

+
+ + + + {% translate "Cancel" %} +
+ + +{% endblock %} -- 2.38.4 From 0af433b9f3ff03bfc96f656804e9911fc771adad Mon Sep 17 00:00:00 2001 From: mariusrklein <47218379+mariusrklein@users.noreply.github.com> Date: Sun, 19 Jan 2025 00:58:03 +0100 Subject: [PATCH 2/3] fixed translations --- .../members/locale/de/LC_MESSAGES/django.po | 40 ++++++++++++++----- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/jdav_web/members/locale/de/LC_MESSAGES/django.po b/jdav_web/members/locale/de/LC_MESSAGES/django.po index c987ec0..4d586e9 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-01 21:39+0100\n" +"POT-Creation-Date: 2025-01-19 00:49+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -187,10 +187,18 @@ msgstr "Gruppe" msgid "Invitation text" msgstr "Einladungstext" +#: members/admin.py +msgid "Age" +msgstr "Alter" + #: members/admin.py msgid "Pending group invitation for group" msgstr "Ausstehende Gruppeneinladung für Gruppe" +#: members/admin.py members/models.py +msgid "age" +msgstr "Alter" + #: members/admin.py #, python-format msgid "Successfully asked %(name)s to confirm their waiting status." @@ -316,11 +324,10 @@ msgid "Prepend V32" msgstr "V32 Formblatt einfügen" #: members/admin.py -#: members/admin.py:880 msgid "Invoice" msgstr "Beleg" -#: members/admin.py:895 +#: members/admin.py msgid "" "General information on your excursion. These are partly relevant for the " "amount of financial compensation (means of transport, travel distance, etc.)." @@ -359,16 +366,15 @@ msgstr "" "Der vollständiger Modus ist nur verfügbar, wenn der Seminarbericht " "ausgefüllt ist. " -#: members/admin.py +#: members/admin.py members/templates/admin/generate_sjr_application.html msgid "Generate SJR application" msgstr "SJR Antrag erstellen" #: members/admin.py -#: members/admin.py:1002 msgid "Please select an invoice." msgstr "Bitte wähle einen Beleg aus." -#: members/admin.py:1017 +#: members/admin.py msgid "No statement found. Please add a statement and then retry." msgstr "" "Keine Abrechnung angelegt. Bitte lege eine Abrechnung and und versuche es " @@ -506,10 +512,6 @@ msgstr "Gender" msgid "comments" msgstr "Kommentare" -#: members/models.py -msgid "age" -msgstr "Alter" - #: members/models.py msgid "Alternative email confirmed" msgstr "Alternative E-Mail Adresse bestätigt" @@ -986,6 +988,7 @@ msgstr "Fortbildungen" #: members/templates/admin/demote_to_waiter.html #: members/templates/admin/freizeit_finance_overview.html #: members/templates/admin/generate_seminar_report.html +#: members/templates/admin/generate_sjr_application.html #: members/templates/admin/invite_as_user.html #: members/templates/admin/invite_for_group.html #: members/templates/admin/invite_for_group_text.html @@ -1010,6 +1013,7 @@ msgstr "Zurück auf die Warteliste setzen" #: members/templates/admin/demote_to_waiter.html #: members/templates/admin/freizeit_finance_overview.html #: members/templates/admin/generate_seminar_report.html +#: members/templates/admin/generate_sjr_application.html #: members/templates/admin/invite_as_user.html #: members/templates/admin/invite_for_group.html #: members/templates/admin/invite_selected_as_user.html @@ -1246,9 +1250,25 @@ msgstr "" "Felder im Formblatt selbst aus und unterschreibe das PDF." #: members/templates/admin/generate_seminar_report.html +#: members/templates/admin/generate_sjr_application.html msgid "Generate" msgstr "Erstellen" +#: members/templates/admin/generate_sjr_application.html +msgid "Here you can generate an allowance application for the SJR." +msgstr "Hier kannst du einen SJR-Zuschussantrag erstellen." + +#: members/templates/admin/generate_sjr_application.html +msgid "" +"The application needs to be complemented with an invoice from the trip as " +"proof." +msgstr "An den Antrag muss ein Ausgabenbeleg angehängt werden, der beweist, dass die Aktivität stattgefunden hat." + +#: members/templates/admin/generate_sjr_application.html +msgid "" +"Please send this application form to the jdav finance officer via email." +msgstr "Bitte sende diesen Antrag an den/die JDAV-Finanzwart*in per E-Mail." + #: members/templates/admin/invite_as_user.html #, python-format msgid "" -- 2.38.4 From 975e244cc91b950889b4eedadfc16f4f1c189aaa Mon Sep 17 00:00:00 2001 From: Christian Merten Date: Sun, 19 Jan 2025 10:09:48 +0100 Subject: [PATCH 3/3] fix line formatting --- jdav_web/members/locale/de/LC_MESSAGES/django.po | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/jdav_web/members/locale/de/LC_MESSAGES/django.po b/jdav_web/members/locale/de/LC_MESSAGES/django.po index fbc20ba..f50cb29 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 00:49+0100\n" +"POT-Creation-Date: 2025-01-19 10:08+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1323,7 +1323,9 @@ msgstr "Hier kannst du einen SJR-Zuschussantrag erstellen." msgid "" "The application needs to be complemented with an invoice from the trip as " "proof." -msgstr "An den Antrag muss ein Ausgabenbeleg angehängt werden, der beweist, dass die Aktivität stattgefunden hat." +msgstr "" +"An den Antrag muss ein Ausgabenbeleg angehängt werden, der beweist, dass die " +"Aktivität stattgefunden hat." #: members/templates/admin/generate_sjr_application.html msgid "" -- 2.38.4