members/excursion: add V32 and improve texts

pull/73/head
Christian Merten 1 year ago
parent eaccc5a5ef
commit 7d93a4be0a
Signed by: christian.merten
GPG Key ID: D953D69721B948B3

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-11-30 03:54+0100\n"
"POT-Creation-Date: 2024-11-30 15:59+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -132,165 +132,165 @@ msgstr "Bestätigung zurücknehmen"
msgid "Finance"
msgstr "Finanzen"
#: finance/models.py:20
#: finance/models.py:21
msgid "Name"
msgstr "Name"
#: finance/models.py:26 finance/models.py:466 finance/models.py:490
#: finance/models.py:27 finance/models.py:472 finance/models.py:496
#: finance/templates/admin/confirmed_statement.html:38
#: finance/templates/admin/overview_submitted_statement.html:100
msgid "Ledger"
msgstr "Geldtopf"
#: finance/models.py:27
#: finance/models.py:28
msgid "Ledgers"
msgstr "Geldtöpfe"
#: finance/models.py:47 finance/models.py:409 finance/models.py:489
#: finance/models.py:48 finance/models.py:415 finance/models.py:495
msgid "Short description"
msgstr "Kurzbeschreibung"
#: finance/models.py:50 finance/models.py:410
#: finance/models.py:51 finance/models.py:416
msgid "Explanation"
msgstr "Erklärung"
#: finance/models.py:52
#: finance/models.py:53
msgid "Associated excursion"
msgstr "Zugehörige Ausfahrt"
#: finance/models.py:57
#: finance/models.py:58
msgid "Price per night"
msgstr "Preis pro Nacht"
#: finance/models.py:59
#: finance/models.py:60
msgid "Submitted"
msgstr "Eingericht"
#: finance/models.py:60
#: finance/models.py:61
msgid "Submitted on"
msgstr "Eingereicht am"
#: finance/models.py:61
#: finance/models.py:62
msgid "Confirmed"
msgstr "Abgewickelt"
#: finance/models.py:62 finance/models.py:473
#: finance/models.py:63 finance/models.py:479
msgid "Paid on"
msgstr "Bezahlt am"
#: finance/models.py:64
#: finance/models.py:65
msgid "Created by"
msgstr "Erstellt von"
#: finance/models.py:69
#: finance/models.py:70
msgid "Submitted by"
msgstr "Eingereicht bei"
#: finance/models.py:74 finance/models.py:474
#: finance/models.py:75 finance/models.py:480
msgid "Authorized by"
msgstr "Autorisiert von"
#: finance/models.py:81 finance/models.py:408 finance/models.py:469
#: finance/models.py:82 finance/models.py:414 finance/models.py:475
msgid "Statement"
msgstr "Abrechnung"
#: finance/models.py:82
#: finance/models.py:83
msgid "Statements"
msgstr "Abrechnungen"
#: finance/models.py:97
#: finance/models.py:98
#, python-format
msgid "Statement: %(excursion)s"
msgstr "Abrechnung: %(excursion)s"
#: finance/models.py:149
#: finance/models.py:150
msgid "Ready to confirm"
msgstr "Bereit zur Abwicklung"
#: finance/models.py:193
#: finance/models.py:194
#, python-format
msgid "Compensation for %(excu)s"
msgstr "Entschädigung für %(excu)s"
#: finance/models.py:326
#: finance/models.py:327
#: finance/templates/admin/overview_submitted_statement.html:78
msgid "Total"
msgstr "Gesamtbetrag"
#: finance/models.py:363
#: finance/models.py:369
msgid "Statement in preparation"
msgstr "Abrechnung in Vorbereitung"
#: finance/models.py:364
#: finance/models.py:370
msgid "Statements in preparation"
msgstr "Abrechnungen in Vorbereitung"
#: finance/models.py:383
#: finance/models.py:389
msgid "Submitted statement"
msgstr "Eingereichte Abrechnung"
#: finance/models.py:384
#: finance/models.py:390
msgid "Submitted statements"
msgstr "Eingereichte Abrechnungen"
#: finance/models.py:400
#: finance/models.py:406
msgid "Paid statement"
msgstr "Bezahlte Abrechnung"
#: finance/models.py:401
#: finance/models.py:407
msgid "Paid statements"
msgstr "Bezahlte Abrechnungen"
#: finance/models.py:412 finance/models.py:426 finance/models.py:463
#: finance/models.py:418 finance/models.py:432 finance/models.py:469
#: finance/templates/admin/confirmed_statement.html:36
#: finance/templates/admin/overview_submitted_statement.html:31
#: finance/templates/admin/overview_submitted_statement.html:98
msgid "Amount"
msgstr "Betrag"
#: finance/models.py:413
#: finance/models.py:419
msgid "Paid by"
msgstr "Bezahlt von"
#: finance/models.py:415
#: finance/models.py:421
msgid "Covered"
msgstr "Übernommen"
#: finance/models.py:416
#: finance/models.py:422
msgid "Refunded"
msgstr "Ausgezahlt"
#: finance/models.py:418
#: finance/models.py:424
msgid "Proof"
msgstr "Beleg"
#: finance/models.py:429 finance/models.py:436 finance/models.py:449
#: finance/models.py:435 finance/models.py:442 finance/models.py:455
msgid "Bill"
msgstr "Ausgabe"
#: finance/models.py:430 finance/models.py:437 finance/models.py:450
#: finance/models.py:436 finance/models.py:443 finance/models.py:456
#: finance/templates/admin/overview_submitted_statement.html:26
msgid "Bills"
msgstr "Ausgaben"
#: finance/models.py:462 finance/templates/admin/confirmed_statement.html:37
#: finance/models.py:468 finance/templates/admin/confirmed_statement.html:37
#: finance/templates/admin/overview_submitted_statement.html:99
msgid "Reference"
msgstr "Verwendungszweck"
#: finance/models.py:464
#: finance/models.py:470
msgid "Recipient"
msgstr "Empfänger"
#: finance/models.py:472
#: finance/models.py:478
msgid "Paid"
msgstr "Bezahlt"
#: finance/models.py:484
#: finance/models.py:490
msgid "Transaction"
msgstr "Überweisung"
#: finance/models.py:485
#: finance/models.py:491
#: finance/templates/admin/overview_submitted_statement.html:84
msgid "Transactions"
msgstr "Überweisungen"

@ -162,3 +162,8 @@ Bei Fragen, wende dich gerne an %(RESPONSIBLE_MAIL)s.
Viele Grüße
Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL }
ADDRESS = """JDAV %(SEKTION)s
%(STREET)s
%(PLACE)s""" % { 'SEKTION': SEKTION, 'STREET': SEKTION_STREET, 'PLACE': SEKTION_TOWN }

@ -8,10 +8,23 @@ SEKTION_TELEFAX = "06221 437338"
SEKTION_CONTACT_MAIL = "geschaeftsstelle@alpenverein-heidelberg.de"
SEKTION_BOARD_MAIL = "vorstand@alpenverein-heidelberg.de"
SEKTION_CRISIS_INTERVENTION_MAIL = "krisenmanagement@alpenverein-heidelberg.de"
SEKTION_IBAN = "DE22 6729 0000 0000 1019 40"
SEKTION_ACCOUNT_HOLDER = "Deutscher Alpenverein Sektion Heidelberg 1869"
RESPONSIBLE_MAIL = "jugendreferat@jdav-hd.de"
DIGITAL_MAIL = "digitales@jdav-hd.de"
# LJP
V32_HEAD_ORGANISATION = """JDAV Baden-Württemberg
Rotebühlstraße 59A
70178 Stuttgart
info@jdav-bw.de
0711 - 49 09 46 00"""
LJP_CONTRIBUTION_PER_DAY = 25
# echo
ECHO_PASSWORD_BIRTHDATE_FORMAT = '%d.%m.%Y'

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-11-30 03:54+0100\n"
"POT-Creation-Date: 2024-11-30 15:59+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -258,17 +258,15 @@ msgstr "SJR Antrag erstellen"
#: templates/admin/members/freizeit/change_form_object_tools.html:23
msgid "Generate overview"
msgstr "Übersicht erstellen"
msgstr "Hinweise für Jugendleiter:innen erstellen"
#: templates/admin/members/freizeit/change_form_object_tools.html:30
msgid "Generate seminar report"
msgstr "Seminarbericht erstellen"
msgstr "Landesjugendplan Antrag erstellen"
#: templates/admin/members/freizeit/change_form_object_tools.html:38
#, fuzzy
#| msgid "Generate overview"
msgid "Finance overview"
msgstr "Übersicht erstellen"
msgstr "Kostenübersicht"
#: templates/admin/members/member/change_form_object_tools.html:8
msgid "Invite as user"

@ -23,10 +23,10 @@ from django.utils.html import format_html
from django.utils.translation import gettext_lazy as _
from django.db.models import TextField, ManyToManyField, ForeignKey, Count,\
Sum, Case, Q, F, When, Value, IntegerField, Subquery, OuterRef
from django.forms import Textarea, RadioSelect, TypedChoiceField
from django.forms import Textarea, RadioSelect, TypedChoiceField, CheckboxInput
from django.shortcuts import render
from django.core.exceptions import PermissionDenied
from .pdf import render_tex, fill_pdf_form
from .pdf import render_tex, fill_pdf_form, merge_pdfs, serve_pdf
from contrib.admin import CommonAdminInlineMixin, CommonAdminMixin
@ -825,6 +825,9 @@ class GenerateSeminarReportForm(forms.Form):
modes = (('full', _('Full report')),
('basic', _('Costs and participants only')))
mode = forms.ChoiceField(choices=modes, label=_('Mode'))
prepend_v32 = forms.BooleanField(label=_('Prepend V32'), initial=True,
widget=CheckboxInput(attrs={'style': 'display: inherit'}),
required=False)
class FreizeitAdmin(CommonAdminMixin, nested_admin.NestedModelAdmin):
@ -904,12 +907,21 @@ class FreizeitAdmin(CommonAdminMixin, nested_admin.NestedModelAdmin):
messages.error(request, _('Please select a mode.'))
return self.render_seminar_report_options(request, memberlist, form)
mode = form.cleaned_data['mode']
prepend_v32 = form.cleaned_data['prepend_v32']
if mode == 'full' and not hasattr(memberlist, 'ljpproposal'):
messages.error(request, _('Full mode is only available, if the seminar report section is filled out.'))
return self.render_seminar_report_options(request, memberlist, form)
context = dict(memberlist=memberlist, settings=settings, mode=mode)
title = memberlist.ljpproposal.title if hasattr(memberlist, 'ljpproposal') else memberlist.name
return render_tex(title + '_Seminarbericht', 'members/seminar_report.tex', context)
context = dict(memberlist=memberlist, settings=settings, mode=mode)
fp = render_tex(title + '_Seminarbericht', 'members/seminar_report.tex', context, save_only=True)
if prepend_v32:
context = memberlist.v32_fields()
v32_fp = fill_pdf_form(title + "_LJP_V32",
'members/V32-1_Themenorientierte_Bildungsmassnahmen.pdf',
context,
save_only=True)
return merge_pdfs(title + 'LJP_Antrag', [v32_fp, fp])
return serve_pdf(fp)
return self.render_seminar_report_options(request, memberlist, GenerateSeminarReportForm())
seminar_report.short_description = _('Generate seminar report')

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-11-30 04:20+0100\n"
"POT-Creation-Date: 2024-11-30 15:59+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -109,7 +109,7 @@ msgstr ""
msgid "activity"
msgstr "Aktivität"
#: members/admin.py:374 members/models.py:54 members/models.py:1409
#: members/admin.py:374 members/models.py:54 members/models.py:1475
msgid "Name"
msgstr "Name"
@ -160,7 +160,7 @@ msgid "Successfully demoted %(name)s to waiter."
msgstr "%(name)s zurück auf die Warteliste gesetzt."
#: members/admin.py:542 members/models.py:389 members/models.py:733
#: members/models.py:1154
#: members/models.py:1220
msgid "Group"
msgstr "Gruppe"
@ -273,7 +273,11 @@ msgstr "Nur Kosten und Teilnehmende"
msgid "Mode"
msgstr "Modus"
#: members/admin.py:841
#: members/admin.py:828
msgid "Prepend V32"
msgstr "V32 Formblatt einfügen"
#: members/admin.py:844
msgid ""
"General information on your excursion. These are partly relevant for the "
"amount of financial compensation (means of transport, travel distance, etc.)."
@ -282,48 +286,48 @@ msgstr ""
"teilweise relevant für die Zuschüsse aus dem Jugendetat (Verkehrsmittel, "
"Fahrstrecke in km)."
#: members/admin.py:871
#: members/admin.py:874
#, 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:879
#: members/admin.py:882
msgid "Generate crisis intervention list"
msgstr "Kriseninterventionsliste erstellen"
#: members/admin.py:887
#: members/admin.py:890
msgid "Generate overview"
msgstr "Hinweise für Jugendleiter erstellen"
#: members/admin.py:891 members/admin.py:914
#: members/admin.py:894 members/admin.py:926
#: members/templates/admin/generate_seminar_report.html:21
msgid "Generate seminar report"
msgstr "Seminarbericht erstellen"
msgstr "Landesjugendplan Antrag erstellen"
#: members/admin.py:904
#: members/admin.py:907
msgid "Please select a mode."
msgstr "Bitte wähle einen Modus aus."
#: members/admin.py:908
#: members/admin.py:912
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:926
#: members/admin.py:938
msgid "Generate SJR application"
msgstr "SJR Antrag erstellen"
#: members/admin.py:930
#: members/admin.py:942
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:934
#: members/admin.py:946
msgid ""
"Successfully submited statement. The finance department will notify you as "
"soon as possible."
@ -331,7 +335,7 @@ msgstr ""
"Abrechnung erfolgreich eingericht. Die Finanzabteilung wird sich bei dir so "
"schnell wie möglich melden."
#: members/admin.py:937
#: members/admin.py:949
#: members/templates/admin/freizeit_finance_overview.html:21
msgid "Finance overview"
msgstr "Kostenübersicht"
@ -409,7 +413,7 @@ msgstr "Jugendleiter"
msgid "week day"
msgstr "Wochentag"
#: members/models.py:78 members/models.py:1236
#: members/models.py:78 members/models.py:1302
msgid "Starting time"
msgstr "Zeitpunkt"
@ -599,7 +603,7 @@ msgid "Set login data for Kompass"
msgstr "Zugangsdaten für Kompass wählen"
#: members/models.py:689 members/models.py:885 members/models.py:896
#: members/models.py:1185 members/models.py:1192
#: members/models.py:1251 members/models.py:1258
msgid "Member"
msgstr "Teilnehmer"
@ -700,7 +704,7 @@ msgstr "Von der Warteliste abgemeldet"
msgid "Comment"
msgstr "Kommentar"
#: members/models.py:897 members/models.py:1193
#: members/models.py:897 members/models.py:1259
msgid "Members"
msgstr "Teilnehmer"
@ -748,7 +752,7 @@ msgstr "mittel"
msgid "hard"
msgstr "schwer"
#: members/models.py:966 members/models.py:1216
#: members/models.py:966 members/models.py:1282
#: members/templates/admin/freizeit_finance_overview.html:26
msgid "Excursion"
msgstr "Ausfahrt"
@ -757,163 +761,163 @@ msgstr "Ausfahrt"
msgid "Excursions"
msgstr "Ausfahrten"
#: members/models.py:1131 members/models.py:1207 members/models.py:1423
#: members/models.py:1197 members/models.py:1273 members/models.py:1489
msgid "Title"
msgstr "Titel"
#: members/models.py:1132 members/models.py:1150 members/models.py:1424
#: members/models.py:1198 members/models.py:1216 members/models.py:1490
msgid "Date"
msgstr "Datum"
#: members/models.py:1151
#: members/models.py:1217
msgid "Location"
msgstr "Ort"
#: members/models.py:1152
#: members/models.py:1218
msgid "Topic"
msgstr "Thema"
#: members/models.py:1176
#: members/models.py:1242
msgid "Jugendleiter"
msgstr "Jugendleiter"
#: members/models.py:1179
#: members/models.py:1245
msgid "Klettertreff"
msgstr "Klettertreff"
#: members/models.py:1180
#: members/models.py:1246
msgid "Klettertreffs"
msgstr "Klettertreffs"
#: members/models.py:1198
#: members/models.py:1264
msgid "Password"
msgstr "Passwort"
#: members/models.py:1201
#: members/models.py:1267
msgid "registration password"
msgstr "Registrierungspassort"
#: members/models.py:1202
#: members/models.py:1268
msgid "registration passwords"
msgstr "Registrierungspasswörter"
#: members/models.py:1209
#: members/models.py:1275
msgid "Alpinistic goals"
msgstr "Alpintechnische Ziele"
#: members/models.py:1210
#: members/models.py:1276
msgid "Pedagogic goals"
msgstr "Pädagogische Ziele"
#: members/models.py:1211
#: members/models.py:1277
msgid "Content and methods"
msgstr "Inhalte und Methoden"
#: members/models.py:1212
#: members/models.py:1278
msgid "Evaluation"
msgstr "Wertung"
#: members/models.py:1213
#: members/models.py:1279
msgid "Experiences and possible improvements"
msgstr "Erfahrungen und Verbesserungsvorschläge"
#: members/models.py:1222 members/models.py:1243
#: members/models.py:1288 members/models.py:1309
msgid "LJP Proposal"
msgstr "Seminarbericht"
#: members/models.py:1223
#: members/models.py:1289
msgid "LJP Proposals"
msgstr "Seminarberichte"
#: members/models.py:1237
#: members/models.py:1303
msgid "Duration in hours"
msgstr "Dauer in Stunden"
#: members/models.py:1240
#: members/models.py:1306
msgid "Activity and method"
msgstr "Art der Aktion inkl. Methode"
#: members/models.py:1248
#: members/models.py:1314
msgid "Intervention"
msgstr "Aktion"
#: members/models.py:1249
#: members/models.py:1315
msgid "Interventions"
msgstr "Aktionen"
#: members/models.py:1351 members/models.py:1381
#: members/models.py:1417 members/models.py:1447
msgid "May list members"
msgstr "Darf folgende Teilnehmer:innen listen"
#: members/models.py:1353 members/models.py:1383
#: members/models.py:1419 members/models.py:1449
msgid "May view members"
msgstr "Darf folgende Teilnehmer:innen anzeigen"
#: members/models.py:1355 members/models.py:1385
#: members/models.py:1421 members/models.py:1451
msgid "May change members"
msgstr "Darf folgende Teilnehmer:innen ändern"
#: members/models.py:1357 members/models.py:1387
#: members/models.py:1423 members/models.py:1453
msgid "May delete members"
msgstr "Darf folgende Teilnehmer:innen löschen"
#: members/models.py:1361 members/models.py:1391
#: members/models.py:1427 members/models.py:1457
msgid "May list members of groups"
msgstr "Darf Teilnehmer:innen folgender Gruppen listen"
#: members/models.py:1363 members/models.py:1393
#: members/models.py:1429 members/models.py:1459
msgid "May view members of groups"
msgstr "Darf Teilnehmer:innen folgender Gruppen anzeigen"
#: members/models.py:1365 members/models.py:1395
#: members/models.py:1431 members/models.py:1461
msgid "May change members of groups"
msgstr "Darf Teilnehmer:innen folgender Gruppen ändern"
#: members/models.py:1367 members/models.py:1397
#: members/models.py:1433 members/models.py:1463
msgid "May delete members of groups"
msgstr "Darf Teilnehmer:innen folgender Gruppen löschen"
#: members/models.py:1370 members/models.py:1371 members/models.py:1374
#: members/models.py:1436 members/models.py:1437 members/models.py:1440
msgid "Permissions"
msgstr "Berechtigungen"
#: members/models.py:1400 members/models.py:1401 members/models.py:1404
#: members/models.py:1466 members/models.py:1467 members/models.py:1470
msgid "Group permissions"
msgstr "Gruppenberechtigungen"
#: members/models.py:1410
#: members/models.py:1476
msgid "Permission needed"
msgstr "Freigabe erforderlich"
#: members/models.py:1413
#: members/models.py:1479
msgid "Training category"
msgstr "Fortbildungstyp"
#: members/models.py:1414
#: members/models.py:1480
msgid "Training categories"
msgstr "Fortbildungstypen"
#: members/models.py:1425
#: members/models.py:1491
msgid "Category"
msgstr "Kategorien"
#: members/models.py:1426
#: members/models.py:1492
msgid "Comments"
msgstr "Kommentar"
#: members/models.py:1427
#: members/models.py:1493
msgid "Participated"
msgstr "Teilgenommmen"
#: members/models.py:1428
#: members/models.py:1494
msgid "Passed"
msgstr "Bestanden"
#: members/models.py:1431
#: members/models.py:1497
msgid "Training"
msgstr "Fortbildung"
#: members/models.py:1432
#: members/models.py:1498
msgid "Trainings"
msgstr "Fortbildungen"
@ -943,7 +947,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:58
#: members/templates/admin/generate_seminar_report.html:60
#: 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
@ -972,10 +976,8 @@ msgid "You listed the following expenses:"
msgstr "Du hast die folgenden Ausgaben angegeben:"
#: members/templates/admin/freizeit_finance_overview.html:39
#, fuzzy
#| msgid "Evaluation"
msgid "Explanation"
msgstr "Wertung"
msgstr "Erklärung"
#: members/templates/admin/freizeit_finance_overview.html:40
msgid "Amount"
@ -1138,8 +1140,12 @@ msgid ""
"Here you can generate a seminar report suitable for the LJP. A report\n"
"always contains a head page with the basic information on the seminar."
msgstr ""
"Hier kannst du einen Seminarbericht für den Landesjugendplan erstellen. Ein "
"Bericht enthält immer einen Kopf mit den Stammdaten des Seminars."
"Hier kannst du einen Zuschussantrag für den Landesjugendplan (LJP) "
"erstellen. Ein solcher Antrag besteht immer aus zwei Teilen: Einem Formblatt "
"und einem Seminarbericht. Ein Bericht enthält immer einen Kopf mit den "
"Stammdaten des Seminars. Darüber hinaus muss der Seminarbericht eine "
"Teilnehemendenliste, eine Kostenübersicht und eine detaillierte didaktische "
"Planung enthalten. "
#: members/templates/admin/generate_seminar_report.html:31
msgid ""
@ -1147,8 +1153,8 @@ msgid ""
"as one expense in the\n"
"expense overview."
msgstr ""
"Ausgaben mit der gleichen Kurzbeschreibung werden automatisch aufsummiert "
"und zu einer Ausgabe zusammengefasst."
"In der Kostenübersicht werden Ausgaben mit der gleichen Kurzbeschreibung "
"automatisch aufsummiert und zu einer Ausgabe zusammengefasst."
#: members/templates/admin/generate_seminar_report.html:36
msgid ""
@ -1156,7 +1162,7 @@ msgid ""
"schedule. This requires\n"
"the seminar report section to be filled out."
msgstr ""
"Vollständiger Bericht: Stelle Lernziele und einen detaillierte, tabellierten "
"Vollständiger Bericht: Stelle Lernziele und einen detaillierten, tabellierten "
"Zeitplan dar. Dies benötigt, dass der Seminarbericht in der Ausfahrt "
"ausgefüllt ist."
@ -1171,10 +1177,15 @@ msgstr ""
"hinzufügen."
#: members/templates/admin/generate_seminar_report.html:46
msgid "Please choose one of the listed modes."
msgstr "Bitte wähle einen der obigen Modi."
msgid "You may also choose to include the V32 attachment."
msgstr ""
"Ein LJP Antrag benötigt immer ein Formblatt (in unserem Fall V32-1 "
"Themenorientierte Bildungsmaßnahmen). Dieses kannst du automatisch "
"vorausfüllen lassen und dem Antrag hinzufügen. "
"Bitte fülle die verbleibenden Felder im Formblatt selbst aus und "
"unterschreibe das PDF."
#: members/templates/admin/generate_seminar_report.html:57
#: members/templates/admin/generate_seminar_report.html:59
msgid "Generate"
msgstr "Erstellen"
@ -1636,6 +1647,9 @@ msgstr "abgelaufen"
msgid "Invalid emergency contacts"
msgstr "Ungültige Notfallkontakte"
#~ msgid "Please choose one of the listed modes."
#~ msgstr "Bitte wähle einen der obigen Modi."
#~ msgid "Good conduct certificate presentation needed"
#~ msgstr "Vorlage Führungszeugnis notwendig"

@ -1024,9 +1024,21 @@ class Freizeit(CommonModel):
jls = set(self.jugendleiter.distinct())
return len(ps - jls)
@property
def ljp_participant_count(self):
ps = set(map(lambda x: x.member, self.membersonlist.distinct()))
jls = set(self.jugendleiter.distinct())
count = len(ps.union(jls))
return count
#return count if count >= 5 else 0
@property
def maximal_ljp_contributions(self):
return cvt_to_decimal(settings.LJP_CONTRIBUTION_PER_DAY * self.ljp_participant_count * self.duration)
@property
def potential_ljp_contributions(self):
return cvt_to_decimal(min(25 * self.participant_count * self.duration,
return cvt_to_decimal(min(self.maximal_ljp_contributions,
0.9 * float(self.statement.total_bills_theoretic) + float(self.statement.total_staff)))
@property
@ -1113,6 +1125,60 @@ class Freizeit(CommonModel):
base['Status' + suffix] = str(2)
return base
def v32_fields(self):
title = self.ljpproposal.title if hasattr(self, 'ljpproposal') else self.name
base = {
# AntragstellerIn
'Textfeld 2': settings.ADDRESS,
# Dachorganisation
'Textfeld 3': settings.V32_HEAD_ORGANISATION,
# Datum der Maßnahme am/vom
'Textfeld 20': self.date.strftime('%d.%m.%Y'),
# bis
'Textfeld 28': self.end.strftime('%d.%m.%Y'),
# Thema der Maßnahme
'Textfeld 22': title,
# IBAN
'Textfeld 36': settings.SEKTION_IBAN,
# Kontoinhaber
'Textfeld 37': settings.SEKTION_ACCOUNT_HOLDER,
# Zahl der zuwendungsfähigen Teilnehemr
'Textfeld 43': str(self.ljp_participant_count),
# Teilnahmetage
'Textfeld 46': str(round(self.duration * self.ljp_participant_count, 1)).replace('.', ','),
# Euro Tagessatz
'Textfeld 48': str(settings.LJP_CONTRIBUTION_PER_DAY),
# Erbetener Zuschuss
'Textfeld 50': str(self.maximal_ljp_contributions).replace('.', ','),
# Stunden Bildungsprogramm
'Textfeld 52': '??',
# Tage
'Textfeld 53': str(round(self.duration, 1)).replace('.', ','),
# Haushaltsjahr
'Textfeld 54': str(datetime.now().year),
# nicht anrechenbare Teilnahmetage
'Textfeld 55': '0',
# Gesamt-Teilnahmetage
'Textfeld 56': str(round(self.duration * self.ljp_participant_count, 1)).replace('.', ','),
# Ort, Datum
'DatumOrt 2': 'Heidelberg, ' + datetime.now().strftime('%d.%m.%Y')
}
if self.statement:
possible_contributions = self.maximal_ljp_contributions
total_contributions = min(self.statement.total_theoretic, possible_contributions)
self_participation = max(cvt_to_decimal(0), self.statement.total_theoretic - possible_contributions)
# Gesamtkosten von
base['Textfeld 62'] = str(self.statement.total_theoretic).replace('.', ',')
# Eigenmittel und Teilnahmebeiträge
base['Textfeld 59'] = str(self_participation).replace('.', ',')
# Drittmittel
base['Textfeld 60'] = '0,00'
# Erbetener Zuschuss
base['Textfeld 61'] = str(total_contributions).replace('.', ',')
# Ergibt wieder
base['Textfeld 58'] = base['Textfeld 62']
return base
@staticmethod
def filter_queryset_by_permissions(member, queryset=None):
if queryset is None:

@ -31,7 +31,17 @@ def media_dir():
return os.path.join(settings.MEDIA_MEMBERLISTS, "memberlists")
def render_tex(name, template_path, context):
def serve_pdf(filename_pdf):
# provide the user with the resulting pdf file
with open(media_path(filename_pdf), 'rb') as pdf:
response = HttpResponse(FileWrapper(pdf))#, content='application/pdf')
response['Content-Type'] = 'application/pdf'
response['Content-Disposition'] = 'attachment; filename='+filename_pdf
return response
def render_tex(name, template_path, context, save_only=False):
filename = name + "_" + datetime.today().strftime("%d_%m_%Y")
filename = filename.replace(' ', '_').replace('&', '').replace('/', '_')
# drop umlauts, accents etc.
@ -64,16 +74,12 @@ def render_tex(name, template_path, context):
os.chdir(oldwd)
# provide the user with the resulting pdf file
with open(media_path(filename_pdf), 'rb') as pdf:
response = HttpResponse(FileWrapper(pdf))#, content='application/pdf')
response['Content-Type'] = 'application/pdf'
response['Content-Disposition'] = 'attachment; filename='+filename_pdf
return response
if save_only:
return filename_pdf
return serve_pdf(filename_pdf)
def fill_pdf_form(name, template_path, fields, attachments=[]):
def fill_pdf_form(name, template_path, fields, attachments=[], save_only=False):
filename = name + "_" + datetime.today().strftime("%d_%m_%Y")
filename = filename.replace(' ', '_').replace('&', '').replace('/', '_')
# drop umlauts, accents etc.
@ -104,10 +110,22 @@ def fill_pdf_form(name, template_path, fields, attachments=[]):
with open(media_path(filename_pdf), 'wb') as output_stream:
writer.write(output_stream)
# provide the user with the resulting pdf file
with open(media_path(filename_pdf), 'rb') as pdf:
response = HttpResponse(FileWrapper(pdf))#, content='application/pdf')
response['Content-Type'] = 'application/pdf'
response['Content-Disposition'] = 'attachment; filename='+filename_pdf
if save_only:
return filename_pdf
return serve_pdf(filename_pdf)
return response
def merge_pdfs(name, filenames, save_only=False):
merger = PdfWriter()
for pdf in filenames:
merger.append(media_path(pdf))
filename = name + "_" + datetime.today().strftime("%d_%m_%Y")
filename_pdf = filename + ".pdf"
merger.write(media_path(filename_pdf))
merger.close()
if save_only:
return filename_pdf
return serve_pdf(filename_pdf)

@ -43,12 +43,14 @@ have to add learning goals and a time schedule manually.{% endblocktrans %}
</ul>
<br>
<p>{% blocktrans %}Please choose one of the listed modes.{% endblocktrans %}</p>
<p>{% blocktrans %}You may also choose to include the V32 attachment.{% endblocktrans %}</p>
<form action="" method="post">
{% csrf_token %}
<p>
<table>
{{ form }}
</table>
</p>
<br>
<input type="hidden" name="action" value="seminar_report">

@ -1,6 +1,6 @@
{% load tex_extras %}
\documentclass{article}
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{booktabs}

@ -1,6 +1,6 @@
{% load tex_extras %}
\documentclass{article}
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{booktabs}

@ -1,6 +1,6 @@
{% load tex_extras %}
\documentclass{article}
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{booktabs}

@ -20,14 +20,14 @@
<li>
<form method="post" action="{% url 'admin:members_freizeit_action' original.pk %}">
{% csrf_token %}
<input type="submit" name="notes_list" value="{% trans 'Generate overview' %}">
<input type="submit" name="seminar_report" value="{% trans 'Generate seminar report' %}">
</form>
</li>
<li>
<form method="post" action="{% url 'admin:members_freizeit_action' original.pk %}">
{% csrf_token %}
<input type="submit" name="seminar_report" value="{% trans 'Generate seminar report' %}">
<input type="submit" name="notes_list" value="{% trans 'Generate overview' %}">
</form>
</li>

Loading…
Cancel
Save