add postcode and not bw reason

pull/121/head
Christian Merten 10 months ago
parent 4f0e9435e9
commit 582dd81465
Signed by: christian.merten
GPG Key ID: D953D69721B948B3

@ -1073,8 +1073,8 @@ class FreizeitAdmin(CommonAdminMixin, nested_admin.NestedModelAdmin):
view_on_site = False view_on_site = False
fieldsets = ( fieldsets = (
(None, { (None, {
'fields': ('name', 'place', 'destination', 'date', 'end', 'description', 'groups', 'jugendleiter', 'fields': ('name', 'place', 'postcode', 'destination', 'date', 'end', 'description', 'groups',
'approved_extra_youth_leader_count', 'jugendleiter', 'approved_extra_youth_leader_count',
'tour_type', 'tour_approach', 'kilometers_traveled', 'activity', 'difficulty'), 'tour_type', 'tour_approach', 'kilometers_traveled', 'activity', 'difficulty'),
'description': _('General information on your excursion. These are partly relevant for the amount of financial compensation (means of transport, travel distance, etc.).') 'description': _('General information on your excursion. These are partly relevant for the amount of financial compensation (means of transport, travel distance, etc.).')
}), }),

@ -75,6 +75,13 @@ VBK_TEMPLATES = {
LJPProposal.LJP_EDUCATIONAL: 'members/LJP_VBK_3-2.xlsx', LJPProposal.LJP_EDUCATIONAL: 'members/LJP_VBK_3-2.xlsx',
} }
NOT_BW_REASONS = {
LJPProposal.NOT_BW_CONTENT: 'aufgrund der Lehrgangsinhalte',
LJPProposal.NOT_BW_ROOMS: 'trägereigene Räumlichkeiten',
LJPProposal.NOT_BW_CLOSE_BORDER: 'Grenznähe',
LJPProposal.NOT_BW_ECONOMIC: 'wirtschaftliche Sparsamkeit',
}
def generate_ljp_vbk(excursion): def generate_ljp_vbk(excursion):
""" """
@ -87,7 +94,7 @@ def generate_ljp_vbk(excursion):
workbook = openpyxl.load_workbook(path) workbook = openpyxl.load_workbook(path)
sheet = workbook.active sheet = workbook.active
title = excursion.ljpproposal.title if hasattr(excursion, 'ljpproposal') else excursion.name title = excursion.ljpproposal.title
sheet['I6'] = settings.SEKTION_IBAN sheet['I6'] = settings.SEKTION_IBAN
sheet['I8'] = settings.SEKTION_ACCOUNT_HOLDER sheet['I8'] = settings.SEKTION_ACCOUNT_HOLDER
@ -104,7 +111,9 @@ def generate_ljp_vbk(excursion):
sheet['J19'] = f"{excursion.duration}" sheet['J19'] = f"{excursion.duration}"
sheet['L19'] = f"{excursion.ljp_participant_count}" sheet['L19'] = f"{excursion.ljp_participant_count}"
sheet['H19'] = excursion.get_ljp_activity_category() sheet['H19'] = excursion.get_ljp_activity_category()
sheet['M19'] = excursion.place sheet['M19'] = f"{excursion.postcode}, {excursion.place}"
sheet['N19'] = f"{NOT_BW_REASONS[excursion.ljpproposal.not_bw_reason]}"\
if not excursion.ljpproposal.not_bw_reason is None else ""
if hasattr(excursion, 'statement'): if hasattr(excursion, 'statement'):
sheet['Q19'] = f"{excursion.statement.total_theoretic}" sheet['Q19'] = f"{excursion.statement.total_theoretic}"

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-02-02 18:06+0100\n" "POT-Creation-Date: 2025-02-06 00:32+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -374,25 +374,10 @@ msgstr "Kriseninterventionsliste erstellen"
msgid "Generate overview" msgid "Generate overview"
msgstr "Hinweise für Jugendleiter erstellen" msgstr "Hinweise für Jugendleiter erstellen"
#: members/admin.py members/templates/admin/generate_seminar_vbk.html
msgid "Generate LJP V-BK form"
msgstr "Erzeuge LJP V-BK Formular"
#: members/admin.py members/templates/admin/generate_seminar_report.html #: members/admin.py members/templates/admin/generate_seminar_report.html
msgid "Generate seminar report" msgid "Generate seminar report"
msgstr "Landesjugendplan Antrag erstellen" msgstr "Landesjugendplan Antrag erstellen"
#: members/admin.py members/tests.py
msgid "Please select a mode."
msgstr "Bitte wähle einen Modus aus."
#: members/admin.py members/tests.py
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 members/templates/admin/generate_sjr_application.html #: members/admin.py members/templates/admin/generate_sjr_application.html
msgid "Generate SJR application" msgid "Generate SJR application"
msgstr "SJR Antrag erstellen" msgstr "SJR Antrag erstellen"
@ -1008,6 +993,34 @@ msgstr ""
"Wie wolltet ihr das Bildungsziel erreichen? Ist das Ziel so erreicht worden? " "Wie wolltet ihr das Bildungsziel erreichen? Ist das Ziel so erreicht worden? "
"Wenn nicht, warum nicht? Wenn ja, was hat geholfen, das Ziel zu erreichen?" "Wenn nicht, warum nicht? Wenn ja, was hat geholfen, das Ziel zu erreichen?"
#: members/models.py
msgid "Course content"
msgstr "aufgrund der Lehrgangsinhalte"
#: members/models.py
msgid "Available rooms"
msgstr "trägereigene Räumlichkeiten"
#: members/models.py
msgid "Close to the border"
msgstr "Grenznähe"
#: members/models.py
msgid "Economic reasons"
msgstr "wirtschaftliche Sparsamkeit"
#: members/models.py
msgid "Explanation if excursion not in Baden-Württemberg"
msgstr "Begründung, falls Kursort nicht in Baden-Württemberg"
#: members/models.py
msgid ""
"If the excursion takes place outside of Baden-Württemberg, please explain. "
"Otherwise, leave this empty."
msgstr ""
"Falls die Ausfahrt außerhalb von Baden-Württemberg stattfindet, gib bitte "
"eine Begründung an. Sonst lass dieses Feld frei."
#: members/models.py #: members/models.py
msgid "LJP Proposal" msgid "LJP Proposal"
msgstr "Seminarbericht" msgstr "Seminarbericht"
@ -1107,7 +1120,6 @@ msgstr "Fortbildungen"
#: members/templates/admin/demote_to_waiter.html #: members/templates/admin/demote_to_waiter.html
#: members/templates/admin/freizeit_finance_overview.html #: members/templates/admin/freizeit_finance_overview.html
#: members/templates/admin/generate_seminar_report.html #: members/templates/admin/generate_seminar_report.html
#: members/templates/admin/generate_seminar_vbk.html
#: members/templates/admin/generate_sjr_application.html #: members/templates/admin/generate_sjr_application.html
#: members/templates/admin/invite_as_user.html #: members/templates/admin/invite_as_user.html
#: members/templates/admin/invite_for_group.html #: members/templates/admin/invite_for_group.html
@ -1132,7 +1144,6 @@ msgstr "Zurück auf die Warteliste setzen"
#: members/templates/admin/demote_to_waiter.html #: members/templates/admin/demote_to_waiter.html
#: members/templates/admin/freizeit_finance_overview.html #: members/templates/admin/freizeit_finance_overview.html
#: members/templates/admin/generate_seminar_vbk.html
#: members/templates/admin/generate_sjr_application.html #: members/templates/admin/generate_sjr_application.html
#: members/templates/admin/invite_as_user.html #: members/templates/admin/invite_as_user.html
#: members/templates/admin/invite_for_group.html #: members/templates/admin/invite_for_group.html
@ -1425,35 +1436,6 @@ msgstr ""
"Eine Kosten- und Teilnehmendenübersicht. Dies ist nicht notwendig für den " "Eine Kosten- und Teilnehmendenübersicht. Dies ist nicht notwendig für den "
"eigentlichen Bericht, muss aber langfristig aufbewahrt werden." "eigentlichen Bericht, muss aber langfristig aufbewahrt werden."
#: members/templates/admin/generate_seminar_vbk.html
msgid ""
"Every LJP application needs a V-BK form containing the most important facts "
"about the seminar.\n"
"Here you can automatically generate such a form in Excel format."
msgstr ""
"Jeder LJP Antrag benötigt ein V-BK Formular, das die wichtigsten Randdaten "
"des Seminars enthält. Hier kannst du automatisch ein solches Formular im "
"Excel Format erstellen."
#: members/templates/admin/generate_seminar_vbk.html
msgid ""
"Your excursion currently has no cost-plan attached, hence the total costs "
"can't be automatically\n"
"calculated and added to the form."
msgstr ""
"Deine Ausfahrt hat zur Zeit keinen Kostenplan. Daher können die Gesamtkosten "
"nicht automatisch berechnet und dem Formular hinzugefügt werden."
#: members/templates/admin/generate_seminar_vbk.html
msgid ""
"Depending on the type of seminar, please select one of the two options below."
msgstr "Bitte wähle aus, um welche Art von Seminar es sich handelt."
#: members/templates/admin/generate_seminar_vbk.html
#: members/templates/admin/generate_sjr_application.html
msgid "Generate"
msgstr "Erstellen"
#: members/templates/admin/generate_sjr_application.html members/tests.py #: members/templates/admin/generate_sjr_application.html members/tests.py
msgid "Here you can generate an allowance application for the SJR." msgid "Here you can generate an allowance application for the SJR."
msgstr "Hier kannst du einen SJR-Zuschussantrag erstellen." msgstr "Hier kannst du einen SJR-Zuschussantrag erstellen."
@ -1471,6 +1453,10 @@ msgid ""
"Please send this application form to the jdav finance officer via email." "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." msgstr "Bitte sende diesen Antrag an den/die JDAV-Finanzwart*in per E-Mail."
#: members/templates/admin/generate_sjr_application.html
msgid "Generate"
msgstr "Erstellen"
#: members/templates/admin/invite_as_user.html #: members/templates/admin/invite_as_user.html
#, python-format #, python-format
msgid "" msgid ""
@ -2001,6 +1987,17 @@ msgstr ""
"vorausfüllen lassen und dem Antrag hinzufügen. Bitte fülle die verbleibenden " "vorausfüllen lassen und dem Antrag hinzufügen. Bitte fülle die verbleibenden "
"Felder im Formblatt selbst aus und unterschreibe das PDF." "Felder im Formblatt selbst aus und unterschreibe das PDF."
#: members/tests.py
msgid "Please select a mode."
msgstr "Bitte wähle einen Modus aus."
#: members/tests.py
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/tests.py #: members/tests.py
msgid "This field is required." msgid "This field is required."
msgstr "" msgstr ""
@ -2043,6 +2040,32 @@ msgstr "Optionale zusätzliche E-Mailadresse"
msgid "Invalid emergency contacts" msgid "Invalid emergency contacts"
msgstr "Ungültige Notfallkontakte" msgstr "Ungültige Notfallkontakte"
#~ msgid "Generate LJP V-BK form"
#~ msgstr "Erzeuge LJP V-BK Formular"
#~ msgid ""
#~ "Every LJP application needs a V-BK form containing the most important "
#~ "facts about the seminar.\n"
#~ "Here you can automatically generate such a form in Excel format."
#~ msgstr ""
#~ "Jeder LJP Antrag benötigt ein V-BK Formular, das die wichtigsten "
#~ "Randdaten des Seminars enthält. Hier kannst du automatisch ein solches "
#~ "Formular im Excel Format erstellen."
#~ msgid ""
#~ "Your excursion currently has no cost-plan attached, hence the total costs "
#~ "can't be automatically\n"
#~ "calculated and added to the form."
#~ msgstr ""
#~ "Deine Ausfahrt hat zur Zeit keinen Kostenplan. Daher können die "
#~ "Gesamtkosten nicht automatisch berechnet und dem Formular hinzugefügt "
#~ "werden."
#~ msgid ""
#~ "Depending on the type of seminar, please select one of the two options "
#~ "below."
#~ msgstr "Bitte wähle aus, um welche Art von Seminar es sich handelt."
#~ msgid "Full report" #~ msgid "Full report"
#~ msgstr "Vollständiger Seminarbericht" #~ msgstr "Vollständiger Seminarbericht"

@ -0,0 +1,18 @@
# Generated by Django 4.0.1 on 2025-02-05 23:18
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('members', '0035_ljpproposal_redo'),
]
operations = [
migrations.AddField(
model_name='ljpproposal',
name='not_bw_reason',
field=models.IntegerField(blank=True, choices=[(1, 'Course content'), (2, 'Available rooms'), (3, 'Close to the border'), (4, 'Economic reasons')], default=None, help_text='If the excursion takes place outside of Baden-Württemberg, please explain. Otherwise, leave this empty.', null=True, verbose_name='Explanation if excursion not in Baden-Württemberg'),
),
]

@ -0,0 +1,23 @@
# Generated by Django 4.0.1 on 2025-02-05 23:29
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('members', '0036_ljpproposal_not_bw_reason'),
]
operations = [
migrations.AddField(
model_name='freizeit',
name='postal_code',
field=models.CharField(default='', max_length=30, verbose_name='Postal code'),
),
migrations.AlterField(
model_name='ljpproposal',
name='title',
field=models.CharField(blank=True, default='', help_text='Official title of your seminar, this can differ from the informal title. Use e.g. sports climbing course instead of climbing weekend for fun.', max_length=100, verbose_name='Title'),
),
]

@ -0,0 +1,22 @@
# Generated by Django 4.0.1 on 2025-02-05 23:31
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('members', '0037_freizeit_postal_code_alter_ljpproposal_title'),
]
operations = [
migrations.RemoveField(
model_name='freizeit',
name='postal_code',
),
migrations.AddField(
model_name='freizeit',
name='postcode',
field=models.CharField(default='', max_length=30, verbose_name='Postcode'),
),
]

@ -1058,6 +1058,7 @@ class Freizeit(CommonModel):
name = models.CharField(verbose_name=_('Activity'), default='', name = models.CharField(verbose_name=_('Activity'), default='',
max_length=50) max_length=50)
place = models.CharField(verbose_name=_('Place'), default='', max_length=50) place = models.CharField(verbose_name=_('Place'), default='', max_length=50)
postcode = models.CharField(verbose_name=_('Postcode'), default='', max_length=30)
destination = models.CharField(verbose_name=_('Destination (optional)'), destination = models.CharField(verbose_name=_('Destination (optional)'),
default='', max_length=50, blank=True, default='', max_length=50, blank=True,
help_text=_('e.g. a peak')) help_text=_('e.g. a peak'))
@ -1478,7 +1479,7 @@ class RegistrationPassword(models.Model):
class LJPProposal(CommonModel): class LJPProposal(CommonModel):
"""A proposal for LJP""" """A proposal for LJP"""
title = models.CharField(verbose_name=_('Title'), max_length=30, title = models.CharField(verbose_name=_('Title'), max_length=100,
blank=True, default='', blank=True, default='',
help_text=_('Official title of your seminar, this can differ from the informal title. Use e.g. sports climbing course instead of climbing weekend for fun.')) help_text=_('Official title of your seminar, this can differ from the informal title. Use e.g. sports climbing course instead of climbing weekend for fun.'))
@ -1506,6 +1507,20 @@ class LJPProposal(CommonModel):
help_text=_('How do you want to reach the learning goal? Has the goal been reached? If not, why not? If yes, what helped you to reach the goal?'), help_text=_('How do you want to reach the learning goal? Has the goal been reached? If not, why not? If yes, what helped you to reach the goal?'),
blank=True, default='') blank=True, default='')
NOT_BW_CONTENT, NOT_BW_ROOMS, NOT_BW_CLOSE_BORDER, NOT_BW_ECONOMIC = 1, 2, 3, 4
NOT_BW_REASONS = [
(NOT_BW_CONTENT, _('Course content')),
(NOT_BW_ROOMS, _('Available rooms')),
(NOT_BW_CLOSE_BORDER, _('Close to the border')),
(NOT_BW_ECONOMIC, _('Economic reasons')),
]
not_bw_reason = models.IntegerField(verbose_name=_('Explanation if excursion not in Baden-Württemberg'),
choices=NOT_BW_REASONS,
default=None,
blank=True,
null=True,
help_text=_('If the excursion takes place outside of Baden-Württemberg, please explain. Otherwise, leave this empty.'))
excursion = models.OneToOneField(Freizeit, excursion = models.OneToOneField(Freizeit,
verbose_name=_('Excursion'), verbose_name=_('Excursion'),
blank=True, blank=True,

Loading…
Cancel
Save