diff --git a/jdav_web/finance/locale/de/LC_MESSAGES/django.po b/jdav_web/finance/locale/de/LC_MESSAGES/django.po
index 705dd7a..187f6fe 100644
--- a/jdav_web/finance/locale/de/LC_MESSAGES/django.po
+++ b/jdav_web/finance/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: 2023-03-17 23:19+0100\n"
+"POT-Creation-Date: 2023-03-20 18:48+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -18,12 +18,12 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: admin.py:69
+#: finance/admin.py:69
#, python-format
msgid "%(name)s is already submitted."
msgstr "%(name)s ist bereits eingereicht."
-#: admin.py:75
+#: finance/admin.py:75
#, python-format
msgid ""
"Successfully submited %(name)s. The finance department will notify the "
@@ -32,23 +32,23 @@ msgstr ""
"Rechnung %(name)s erfolgreich eingereicht. Das Finanzreferat wird auf dich "
"sobald wie möglich zukommen."
-#: admin.py:78
+#: finance/admin.py:78
msgid "Submit statement"
msgstr "Rechnung einreichen"
-#: admin.py:152
+#: finance/admin.py:152
#, python-format
msgid "%(name)s is not yet submitted."
msgstr "%(name)s ist noch nicht eingereicht."
-#: admin.py:159
+#: finance/admin.py:159
#, python-format
msgid "An error occured while trying to confirm %(name)s. Please try again."
msgstr ""
"Beim Abwickeln von %(name)s ist ein Fehler aufgetreten. Bitte versuche es "
"erneut."
-#: admin.py:163
+#: finance/admin.py:163
#, python-format
msgid ""
"Successfully confirmed %(name)s. I hope you executed the associated "
@@ -57,11 +57,11 @@ msgstr ""
"Erfolgreich %(name)s abgewickelt. Ich hoffe du hast die zugehörigen "
"Überweisungen ausgeführt, ich werde dich nicht nochmal erinnern."
-#: admin.py:170
+#: finance/admin.py:170
msgid "Statement confirmed"
msgstr "Abrechnung abgewickelt"
-#: admin.py:176
+#: finance/admin.py:176
msgid ""
"Transactions do not match the covered expenses. Please correct the mistakes "
"listed below."
@@ -69,19 +69,19 @@ msgstr ""
"Überweisungen stimmen nicht mit den übernommenen Kosten überein. Bitte "
"korrigiere die unten aufgeführten Fehler."
-#: admin.py:181
+#: finance/admin.py:181
msgid "Some transactions have no ledger configured. Please fill in the gaps."
msgstr ""
"Manche Überweisungen haben kein Geldtopf eingestellt. Bitte trage das nach."
-#: admin.py:190
+#: finance/admin.py:190
#, python-format
msgid "Successfully rejected %(name)s. The requestor can reapply, when needed."
msgstr ""
"Die Rechnung %(name)s wurde abgelehnt. Die Person kann die Rechnung erneut "
"einstellen, wenn es benötigt wird."
-#: admin.py:197
+#: finance/admin.py:197
#, python-format
msgid ""
"%(name)s already has transactions. Please delete them first, if you want to "
@@ -90,194 +90,198 @@ msgstr ""
"%(name)s hat bereits Überweisungen. Bitte lösche diese zunächst, bevor du "
"neue generierst."
-#: admin.py:201
+#: finance/admin.py:201
#, python-format
msgid "Successfully generated transactions for %(name)s"
msgstr "Automatisch Überweisungsträger für %(name)s generiert."
-#: admin.py:204
+#: finance/admin.py:204
msgid "View submitted statement"
msgstr "Eingereichte Abrechnung einsehen"
-#: admin.py:230
+#: finance/admin.py:230
#, python-format
msgid "Successfully reduced transactions for %(name)s."
msgstr "Überweisungsträger für %(name)s minimiert."
-#: apps.py:8
+#: finance/apps.py:8
msgid "Finance"
msgstr "Finanzen"
-#: models.py:13
+#: finance/models.py:13
msgid "Name"
msgstr "Name"
-#: models.py:19 models.py:352 models.py:376
-#: templates/admin/confirmed_statement.html:38
-#: templates/admin/overview_submitted_statement.html:100
+#: finance/models.py:19 finance/models.py:372 finance/models.py:396
+#: finance/templates/admin/confirmed_statement.html:38
+#: finance/templates/admin/overview_submitted_statement.html:100
msgid "Ledger"
msgstr "Geldtopf"
-#: models.py:20
+#: finance/models.py:20
msgid "Ledgers"
msgstr "Geldtöpfe"
-#: models.py:42 models.py:323 models.py:375
+#: finance/models.py:42 finance/models.py:343 finance/models.py:395
msgid "Short description"
msgstr "Kurzbeschreibung"
-#: models.py:45 models.py:324
+#: finance/models.py:45 finance/models.py:344
msgid "Explanation"
msgstr "Erklärung"
-#: models.py:47
+#: finance/models.py:47
msgid "Associated excursion"
msgstr "Zugehörige Freizeit"
-#: models.py:52
+#: finance/models.py:52
msgid "Price per night"
msgstr "Preis pro Nacht"
-#: models.py:54
+#: finance/models.py:54
msgid "Submitted"
msgstr "Eingericht"
-#: models.py:55
+#: finance/models.py:55
msgid "Submitted on"
msgstr "Eingereicht am"
-#: models.py:56
+#: finance/models.py:56
msgid "Confirmed"
msgstr "Abgewickelt"
-#: models.py:57 models.py:359
+#: finance/models.py:57 finance/models.py:379
msgid "Paid on"
msgstr "Bezahlt am"
-#: models.py:59
+#: finance/models.py:59
msgid "Submitted by"
msgstr "Eingereicht bei"
-#: models.py:64 models.py:360
+#: finance/models.py:64 finance/models.py:380
msgid "Authorized by"
msgstr "Autorisiert von"
-#: models.py:71 models.py:322 models.py:355
+#: finance/models.py:71 finance/models.py:342 finance/models.py:375
msgid "Statement"
msgstr "Abrechnung"
-#: models.py:72
+#: finance/models.py:72
msgid "Statements"
msgstr "Abrechnungen"
-#: models.py:77
+#: finance/models.py:77
#, python-format
msgid "Statement: %(excursion)s"
msgstr "Abrechnung: %(excursion)s"
-#: models.py:123
+#: finance/models.py:123
msgid "Ready to confirm"
msgstr "Bereit zur Abwicklung"
-#: models.py:162
+#: finance/models.py:162
#, python-format
msgid "Compensation for %(excu)s"
msgstr "Entschädigung für %(excu)s"
-#: models.py:274 templates/admin/overview_submitted_statement.html:78
+#: finance/models.py:294
+#: finance/templates/admin/overview_submitted_statement.html:78
msgid "Total"
msgstr "Gesamtbetrag"
-#: models.py:287
+#: finance/models.py:307
msgid "Statement in preparation"
msgstr "Abrechnung in Vorbereitung"
-#: models.py:288
+#: finance/models.py:308
msgid "Statements in preparation"
msgstr "Abrechnungen in Vorbereitung"
-#: models.py:301
+#: finance/models.py:321
msgid "Submitted statement"
msgstr "Eingereichte Abrechnung"
-#: models.py:302
+#: finance/models.py:322
msgid "Submitted statements"
msgstr "Eingereichte Abrechnungen"
-#: models.py:316
+#: finance/models.py:336
msgid "Paid statement"
msgstr "Bezahlte Abrechnung"
-#: models.py:317
+#: finance/models.py:337
msgid "Paid statements"
msgstr "Bezahlte Abrechnungen"
-#: models.py:327
+#: finance/models.py:347
msgid "Paid by"
msgstr "Bezahlt von"
-#: models.py:329
+#: finance/models.py:349
msgid "Covered"
msgstr "Übernommen"
-#: models.py:330
+#: finance/models.py:350
msgid "Refunded"
msgstr "Ausgezahlt"
-#: models.py:332
+#: finance/models.py:352
msgid "Proof"
msgstr "Beleg"
-#: models.py:340 models.py:349 templates/admin/confirmed_statement.html:36
-#: templates/admin/overview_submitted_statement.html:31
-#: templates/admin/overview_submitted_statement.html:98
+#: finance/models.py:360 finance/models.py:369
+#: 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"
-#: models.py:343
+#: finance/models.py:363
msgid "Bill"
msgstr "Quittung"
-#: models.py:344 templates/admin/overview_submitted_statement.html:26
+#: finance/models.py:364
+#: finance/templates/admin/overview_submitted_statement.html:26
msgid "Bills"
msgstr "Quittungen"
-#: models.py:348 templates/admin/confirmed_statement.html:37
-#: templates/admin/overview_submitted_statement.html:99
+#: finance/models.py:368 finance/templates/admin/confirmed_statement.html:37
+#: finance/templates/admin/overview_submitted_statement.html:99
msgid "Reference"
msgstr "Verwendungszweck"
-#: models.py:350
+#: finance/models.py:370
msgid "Recipient"
msgstr "Empfänger"
-#: models.py:358
+#: finance/models.py:378
msgid "Paid"
msgstr "Bezahlt"
-#: models.py:370
+#: finance/models.py:390
msgid "Transaction"
msgstr "Überweisung"
-#: models.py:371 templates/admin/overview_submitted_statement.html:84
+#: finance/models.py:391
+#: finance/templates/admin/overview_submitted_statement.html:84
msgid "Transactions"
msgstr "Überweisungen"
-#: templates/admin/confirmed_statement.html:17
-#: templates/admin/overview_submitted_statement.html:17
-#: templates/admin/submit_statement.html:17
+#: finance/templates/admin/confirmed_statement.html:17
+#: finance/templates/admin/overview_submitted_statement.html:17
+#: finance/templates/admin/submit_statement.html:17
msgid "Home"
msgstr "Start"
-#: templates/admin/confirmed_statement.html:21
+#: finance/templates/admin/confirmed_statement.html:21
msgid "Paiment"
msgstr "Bezahlung"
-#: templates/admin/confirmed_statement.html:26
+#: finance/templates/admin/confirmed_statement.html:26
msgid "Paying statement"
msgstr "Rechnung bezahlen"
-#: templates/admin/confirmed_statement.html:29
+#: finance/templates/admin/confirmed_statement.html:29
msgid ""
"The statement is valid. Please execute the following transactions and then "
"proceed by finalizing the confirmation."
@@ -285,43 +289,43 @@ msgstr ""
"Die Abrechnung ist gültig. Bitte führe die folgenden Überweisungen aus und "
"fahre dann fort, indem du die Abwicklung bestätigst."
-#: templates/admin/confirmed_statement.html:35
+#: finance/templates/admin/confirmed_statement.html:35
msgid "IBAN"
msgstr "IBAN"
-#: templates/admin/confirmed_statement.html:66
+#: finance/templates/admin/confirmed_statement.html:66
msgid "I did execute the listed transactions."
msgstr "Ich habe die aufgeführten Überweisungen ausgeführt."
-#: templates/admin/confirmed_statement.html:68
+#: finance/templates/admin/confirmed_statement.html:68
msgid "Confirm"
msgstr "Bestätigen"
-#: templates/admin/overview_submitted_statement.html:21
+#: finance/templates/admin/overview_submitted_statement.html:21
msgid "Overview"
msgstr "Übersicht"
-#: templates/admin/overview_submitted_statement.html:32
+#: finance/templates/admin/overview_submitted_statement.html:32
msgid "Covered by association"
msgstr "Vom Verein übernommen"
-#: templates/admin/overview_submitted_statement.html:50
+#: finance/templates/admin/overview_submitted_statement.html:50
#, python-format
msgid "The total amount is %(total_bills)s €."
msgstr "Der Gesamtbetrag beträgt %(total_bills)s €."
-#: templates/admin/overview_submitted_statement.html:54
+#: finance/templates/admin/overview_submitted_statement.html:54
msgid "Excursion"
msgstr "Freizeit"
-#: templates/admin/overview_submitted_statement.html:57
+#: finance/templates/admin/overview_submitted_statement.html:57
#, python-format
msgid "This excursion featured %(staff_count)s youth leader(s), each costing"
msgstr ""
"Diese Freizeit hatte %(staff_count)s Jugendleiter:innen. Auf jede:n "
"entfallen die folgenden Kosten:"
-#: templates/admin/overview_submitted_statement.html:62
+#: finance/templates/admin/overview_submitted_statement.html:62
#, python-format
msgid ""
"%(nights)s nights for %(price_per_night)s€ per night making a total of "
@@ -330,7 +334,7 @@ msgstr ""
"%(nights)s Nächte zum Preis von %(price_per_night)s€ pro Nacht. Das ergibt "
"eine Gesamtsumme von %(nights_per_yl)s€."
-#: templates/admin/overview_submitted_statement.html:65
+#: finance/templates/admin/overview_submitted_statement.html:65
#, python-format
msgid ""
"%(duration)s days for %(allowance_per_day)s€ per day making a total of "
@@ -339,7 +343,7 @@ msgstr ""
"%(duration)s Tage für %(allowance_per_day)s€ pro Tag. Das ergibt eine "
"Gesamtsumme von %(allowance_per_yl)s€."
-#: templates/admin/overview_submitted_statement.html:68
+#: finance/templates/admin/overview_submitted_statement.html:68
#, python-format
msgid ""
"%(kilometers_traveled)s km by %(means_of_transport)s (%(euro_per_km)s € / "
@@ -348,7 +352,7 @@ msgstr ""
"%(kilometers_traveled)s km mit %(means_of_transport)s (%(euro_per_km)s€ / "
"km). Das ergibt eine Gesamtsumme von %(transportation_per_yl)s€."
-#: templates/admin/overview_submitted_statement.html:73
+#: finance/templates/admin/overview_submitted_statement.html:73
#, python-format
msgid ""
"In total this is %(total_per_yl)s€ times %(staff_count)s, giving "
@@ -357,12 +361,12 @@ msgstr ""
"Insgesamt sind das Kosten von %(total_per_yl)s€ mal %(staff_count)s, "
"insgesamt also %(total_staff)s€."
-#: templates/admin/overview_submitted_statement.html:81
+#: finance/templates/admin/overview_submitted_statement.html:81
#, python-format
msgid "This results in a total amount of %(total)s€"
msgstr "Das resultiert in einem Gesamtbetrag von %(total)s€"
-#: templates/admin/overview_submitted_statement.html:87
+#: finance/templates/admin/overview_submitted_statement.html:87
msgid ""
"Currently, no transactions are planned. You can auto generate them from the "
"data, by clicking the following button."
@@ -370,19 +374,19 @@ msgstr ""
"Aktuell sind keine Überweisungen vorgesehen. Du kannst die erforderlichen "
"durch Klicken auf den folgenden Knopf generieren."
-#: templates/admin/overview_submitted_statement.html:90
+#: finance/templates/admin/overview_submitted_statement.html:90
msgid "Generate transactions"
msgstr "Erzeuge Überweisungsträger"
-#: templates/admin/overview_submitted_statement.html:94
+#: finance/templates/admin/overview_submitted_statement.html:94
msgid "Currently the following transactions are planned."
msgstr "Aktuell sind die folgenden Überweisungen vorgesehen."
-#: templates/admin/overview_submitted_statement.html:137
+#: finance/templates/admin/overview_submitted_statement.html:137
msgid "These transactions match the calculated costs."
msgstr "Diese Überweisungen stimmen mit den berechneten Kosten überein."
-#: templates/admin/overview_submitted_statement.html:140
+#: finance/templates/admin/overview_submitted_statement.html:140
msgid ""
"The current transactions do not reflect all costs in this statement. Please "
"fix the following issues:"
@@ -390,41 +394,41 @@ msgstr ""
"Die aktuell vorgesehenen Überweisungen stimmen nicht mit den berechneten "
"Kosten überein. Bitte korrigiere die folgenden Fehler:"
-#: templates/admin/overview_submitted_statement.html:145
+#: finance/templates/admin/overview_submitted_statement.html:145
msgid "Currently receiving"
msgstr "Erhält aktuell"
-#: templates/admin/overview_submitted_statement.html:146
+#: finance/templates/admin/overview_submitted_statement.html:146
msgid "Actual costs"
msgstr "Tatsächliche Kosten"
-#: templates/admin/overview_submitted_statement.html:147
+#: finance/templates/admin/overview_submitted_statement.html:147
msgid "Difference"
msgstr "Differenz"
-#: templates/admin/overview_submitted_statement.html:174
+#: finance/templates/admin/overview_submitted_statement.html:174
msgid "Accept"
msgstr "Annehmen"
-#: templates/admin/overview_submitted_statement.html:175
+#: finance/templates/admin/overview_submitted_statement.html:175
msgid "Reject"
msgstr "Ablehnen"
-#: templates/admin/overview_submitted_statement.html:178
-#: templates/admin/submit_statement.html:35
+#: finance/templates/admin/overview_submitted_statement.html:178
+#: finance/templates/admin/submit_statement.html:35
msgid "Cancel"
msgstr "Abbruch"
-#: templates/admin/submit_statement.html:21
-#: templates/admin/submit_statement.html:34
+#: finance/templates/admin/submit_statement.html:21
+#: finance/templates/admin/submit_statement.html:34
msgid "Submit"
msgstr "Einreichen"
-#: templates/admin/submit_statement.html:26
+#: finance/templates/admin/submit_statement.html:26
msgid "Submit to the finance department"
msgstr "Beim Finanzreferat einreichen"
-#: templates/admin/submit_statement.html:28
+#: finance/templates/admin/submit_statement.html:28
msgid ""
"Do you want to submit the statement for further processing by the finance "
"department? If you proceed, no further changes to the statement are possible."
diff --git a/jdav_web/jdav_web/settings.py b/jdav_web/jdav_web/settings.py
index 5aca563..704e64b 100644
--- a/jdav_web/jdav_web/settings.py
+++ b/jdav_web/jdav_web/settings.py
@@ -183,7 +183,7 @@ EMAIL_BACKEND = 'djcelery_email.backends.CeleryEmailBackend'
# Celery Email Setup
CELERY_EMAIL_TASK_CONFIG = {
- 'rate_limit' : '1/m' # * CELERY_EMAIL_CHUNK_SIZE (default: 10)
+ 'rate_limit' : '10/m' # * CELERY_EMAIL_CHUNK_SIZE (default: 10)
}
@@ -262,3 +262,141 @@ PASSWORD_HASHERS = [
'django.contrib.auth.hashers.Argon2PasswordHasher',
'django.contrib.auth.hashers.ScryptPasswordHasher',
]
+
+# mail texts
+
+CONFIRM_MAIL_TEXT = """Hallo {name},
+
+du hast bei der JDAV Ludwigsburg eine E-Mail Adresse hinterlegt. Da bei uns alle Kommunikation
+per Email funktioniert, brauchen wir eine Bestätigung {whattoconfirm}. Dazu klicke bitte einfach auf
+folgenden Link:
+
+{link}
+
+Viele Grüße
+Deine JDAV Ludwigsburg"""
+
+NEW_UNCONFIRMED_REGISTRATION = """Hallo {name},
+
+für deine Gruppe {group} liegt eine neue unbestätigte Reservierung vor. Die Person hat bereits ihre
+E-Mailadressen bestätigt. Bitte prüfe die Registrierung eingehend und bestätige falls möglich. Zu
+der Registrierung kommst du hier:
+
+{link}
+
+Viele Grüße
+Dein KOMPASS"""
+
+INVITE_TEXT = """Hallo {name},
+
+wir haben gute Neuigkeiten für dich. Es ist ein Platz in der Jugendgruppe freigeworden. Wir brauchen
+jetzt noch ein paar Informationen von dir und deine Anmeldebestätigung. Das kannst du alles über folgenden
+Link erledigen:
+
+{link}
+
+Du siehst dort auch die Daten, die du bei deiner Eintragung auf die Warteliste angegeben hast. Bitte
+überprüfe, ob die Daten noch stimmen und ändere sie bei Bedarf ab.
+
+Bei Fragen, wende dich gerne an jugendreferent@jdav-ludwigsburg.de.
+
+Viele Grüße
+Deine JDAV Ludwigsburg"""
+
+
+WAIT_CONFIRMATION_TEXT = """Hallo {name},
+
+leider können wir dir zur Zeit noch keinen Platz in einer Jugendgruppe anbieten. Da wir
+sehr viele Interessenten haben und wir möglichst vielen die Möglichkeit bieten möchten, an
+einer Jugendgruppe teilhaben zu können, fragen wir regelmäßig alle Personen auf der
+Warteliste ab, ob sie noch Interesse haben.
+
+Wenn du weiterhin auf der Warteliste bleiben möchtest, klicke auf den folgenden Link:
+
+{link}
+
+Falls du nicht mehr auf der Warteliste bleiben möchtest, musst du nichts machen. Du wirst automatisch entfernt.
+
+Viele Grüße
+Deine JDAV Ludwigsburg"""
+
+UNSUBSCRIBE_CONFIRMATION_TEXT = """Klicke auf den Link, um dich vom Newsletter der JDAV Ludwigsburg abzumelden
+
+{link}"""
+
+NOTIFY_MOST_ACTIVE_TEXT = """Hallo {name}!
+
+Herzlichen Glückwunsch, du hast im letzten Jahr zu den {congratulate_max} aktivsten
+Mitgliedern der JDAV Ludwigsburg gehört! Um genau zu sein beträgt dein Aktivitäts Wert
+des letzten Jahres {score} Punkte. Das entspricht {level} Kletterer:innen. Damit warst du
+im letzten Jahr das {position}aktivste Mitglied der JDAV Ludwigsburg.
+
+
+Auf ein weiteres aktives Jahr in der JDAV Ludwigsburg
+
+Dein:e Jugendreferent:in"""
+
+ECHO_TEXT = """Hallo {name},
+
+um unsere Daten auf dem aktuellen Stand zu halten, brauchen wir eine
+kurze Bestätigung von dir. Dafür besuche einfach diesen Link:
+
+{link}
+
+Dort kannst du deine Daten überprüfen und ändern. Falls du nicht innerhalb von
+30 Tagen deine Daten bestätigst, wirst du aus unserer Datenbank gelöscht und
+erhälst in Zukunft keine Mails mehr von uns.
+
+Bei Fragen, wende dich gerne an jugendreferent@jdav-ludwigsburg.de.
+
+Viele Grüße
+Deine JDAV Ludwigsburg"""
+
+PREPEND_INCOMPLETE_REGISTRATION_TEXT = """WICHTIGE MITTEILUNG
+
+Deine Anmeldung ist aktuell nicht vollständig. Bitte fülle umgehend das
+Anmeldeformular aus und lasse es Deine*r Jugendleiter*in zukommen! Dieses
+kannst Du unter folgendem Link herunterladen:
+
+https://cloud.jdav-ludwigsburg.de/index.php/s/NQfRqA9MTKfPBkC
+
+****************
+
+"""
+
+MAIL_FOOTER = """
+
+
+****************
+
+Diese Email wurde über die Webseite der JDAV Ludwigsburg
+verschickt. Wenn Du in Zukunft keine Emails mehr erhalten möchtest,
+kannst Du hier den Newsletter deabonnieren:
+
+{link}"""
+
+# fixed email addresses
+
+RESPONSIBLE_MAIL = "jugendreferent@jdav-ludwigsburg.de"
+
+# contact data
+
+SEKTION = "Ludwigsburg"
+SEKTION_STREET = "Fuchshofstr. 66"
+SEKTION_TOWN = "71638 Ludwigsburg"
+SEKTION_TELEPHONE = "07141 927893"
+SEKTION_TELEFAX = "07141 924042"
+SEKTION_CONTACT_MAIL = "info@alpenverein-ludwigsburg.de"
+
+
+# mailutils
+
+HOST = os.environ.get('DJANGO_ALLOWED_HOST', 'localhost:8000').split(",")[0]
+PROTOCOL = os.environ.get('DJANGO_PROTOCOL', 'https')
+BASE_URL = os.environ.get('DJANGO_BASE_URL', HOST)
+
+DEFAULT_SENDING_MAIL = os.environ.get('EMAIL_SENDING_ADDRESS', 'christian@localhost')
+
+# misc
+
+CONGRATULATE_MEMBERS_MAX = 10
diff --git a/jdav_web/locale/de/LC_MESSAGES/django.po b/jdav_web/locale/de/LC_MESSAGES/django.po
index 88fde65..03cf594 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: 2023-03-17 23:10+0100\n"
+"POT-Creation-Date: 2023-03-20 18:48+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -24,7 +24,7 @@ msgstr "Startseite"
#: templates/admin/finance/statementconfirmed/change_form_object_tools.html:8
msgid "Unconfirm"
-msgstr ""
+msgstr "Bestätigung zurücknehmen"
#: templates/admin/finance/statementsubmitted/change_form_object_tools.html:21
msgid "Reduce transactions"
@@ -38,7 +38,19 @@ msgstr "Übersicht"
msgid "Submit"
msgstr "Einreichen"
-#: templates/admin/members/freizeit/change_form_object_tools.html:8
+#: templates/admin/members/freizeit/change_form_object_tools.html:9
+msgid "Generate crisis intervention list"
+msgstr "Kriseninterventionsliste erstellen"
+
+#: templates/admin/members/freizeit/change_form_object_tools.html:16
+msgid "Generate overview"
+msgstr "Übersicht erstellen"
+
+#: templates/admin/members/freizeit/change_form_object_tools.html:23
+msgid "Generate seminar report"
+msgstr "Seminarbericht erstellen"
+
+#: templates/admin/members/freizeit/change_form_object_tools.html:29
msgid "Submit statement"
msgstr "Abrechnung einreichen"
@@ -54,24 +66,3 @@ msgstr "Dateityp nicht unterstützt."
#: utils.py:28
msgid "Please keep filesize under {}. Current filesize: {}"
msgstr "Maximale Dateigröße {}. Aktuelle Dateigröße: {}."
-
-#~ msgid "Welcome,"
-#~ msgstr "Willkommen"
-
-#~ msgid "Documentation"
-#~ msgstr "Dokumentation"
-
-#~ msgid "Change password"
-#~ msgstr "Passwort ändern"
-
-#~ msgid "Log out"
-#~ msgstr "Abmelden"
-
-#~ msgid "Home"
-#~ msgstr "Start"
-
-#~ msgid "View site"
-#~ msgstr "Seite anzeigen"
-
-#~ msgid "JDAV LB Administration"
-#~ msgstr "JDAV LB Verwaltung"
diff --git a/jdav_web/mailer/locale/de/LC_MESSAGES/django.po b/jdav_web/mailer/locale/de/LC_MESSAGES/django.po
index 23d6de6..2a7502f 100644
--- a/jdav_web/mailer/locale/de/LC_MESSAGES/django.po
+++ b/jdav_web/mailer/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: 2022-01-12 17:38+0100\n"
+"POT-Creation-Date: 2023-03-20 18:48+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -38,6 +38,11 @@ msgstr "Email wurde erfolgreich verschickt"
msgid "mailer"
msgstr "Verteiler"
+#: mailer/management/commands/notify_active.py:38
+#, python-format
+msgid "Congratulation %(name)s"
+msgstr "Herzlichen Glückwunsch %(name)s"
+
#: mailer/models.py:18
msgid "Only alphanumeric characters are allowed"
msgstr "Nur Buchstaben und Zahlen erlaubt"
@@ -112,26 +117,26 @@ msgstr "Andere Teilnehmer"
msgid "recipients"
msgstr "Empfänger"
-#: mailer/models.py:168
+#: mailer/models.py:182
msgid "message"
msgstr "Nachricht"
-#: mailer/models.py:169
+#: mailer/models.py:183
msgid "messages"
msgstr "Nachrichten"
-#: mailer/models.py:171
+#: mailer/models.py:185
msgid "Can submit mails"
msgstr "Kann Mails verschicken"
-#: mailer/models.py:187
+#: mailer/models.py:201
msgid ""
"Either a group, a memberlist or at least one member is required as recipient"
msgstr ""
"Es muss entweder eine Gruppe, eine Teilnehmerliste oder mindestens ein "
"Teilnehmer als Empfänger ausgewählt werden."
-#: mailer/models.py:192
+#: mailer/models.py:206
msgid ""
"At least one reply-to recipient is required. Use the info mail if you really "
"want no reply-to recipient."
@@ -139,19 +144,19 @@ msgstr ""
"Es muss mindestens ein Antwort-An Empfänger angegeben werden. Nutze die info "
"Email-Adresse falls du wirklich keinen Antwort-An Empfänger haben möchtest."
-#: mailer/models.py:199
+#: mailer/models.py:213
msgid "file"
msgstr "Datei"
-#: mailer/models.py:205
+#: mailer/models.py:219
msgid "Empty"
msgstr "Leer"
-#: mailer/models.py:208
+#: mailer/models.py:222
msgid "attachment"
msgstr "Anhang"
-#: mailer/models.py:209
+#: mailer/models.py:223
msgid "attachments"
msgstr "Anhänge"
@@ -232,7 +237,7 @@ msgstr "Vorname"
msgid "Lastname"
msgstr "Nachname"
-#: mailer/templates/mailer/subscribe.html:26 mailer/views.py:61
+#: mailer/templates/mailer/subscribe.html:26 mailer/views.py:59
msgid "Birthdate"
msgstr "Geburtsdatum"
@@ -265,31 +270,14 @@ msgstr "Ungültiger Link. Bitte nochmal versuchen!"
msgid "Please fill in every field"
msgstr "Bitte jedes Feld ausfüllen!"
-#: mailer/views.py:84
+#: mailer/views.py:49
+msgid "Unsubscription confirmation"
+msgstr "Abmeldebestätigung"
+
+#: mailer/views.py:82
msgid "Please fill in every field!"
msgstr "Bitte jedes Feld ausfüllen!"
-#: mailer/views.py:91
+#: mailer/views.py:89
msgid "Member already exists"
msgstr "Mitglied schon vorhanden"
-
-#~ msgid "reply to"
-#~ msgstr "Antwort an"
-
-#~ msgid "Message sent"
-#~ msgstr "Nachricht gesendet"
-
-#~ msgid "from email"
-#~ msgstr "Von Email"
-
-#~ msgid "Confirmation of unsubscription"
-#~ msgstr "Abmeldebestätigung"
-
-#~ msgid ""
-#~ "Click the link to unsubscribe to the newsletter of the JDAV\n"
-#~ "{}"
-#~ msgstr ""
-#~ "Klicke auf den Link um dich von Newsletter des JDAV Ludwigsburg abzumelden"
-
-#~ msgid "History"
-#~ msgstr "Geschichte"
diff --git a/jdav_web/mailer/mailutils.py b/jdav_web/mailer/mailutils.py
index 90219fd..c3c287b 100644
--- a/jdav_web/mailer/mailutils.py
+++ b/jdav_web/mailer/mailutils.py
@@ -1,13 +1,10 @@
from django.core import mail
from django.core.mail import EmailMessage
+from django.conf import settings
import os
NOT_SENT, SENT, PARTLY_SENT = 0, 1, 2
-HOST = os.environ.get('DJANGO_ALLOWED_HOST', 'localhost:8000').split(",")[0]
-PROTOCOL = os.environ.get('DJANGO_PROTOCOL', 'https')
-BASE_URL = os.environ.get('DJANGO_BASE_URL', HOST)
-
def send(subject, content, sender, recipients, message_id=None, reply_to=None,
attachments=None):
@@ -49,16 +46,11 @@ def send(subject, content, sender, recipients, message_id=None, reply_to=None,
def get_content(content, registration_complete=True):
url = prepend_base_url("/newsletter/unsubscribe")
- prepend = "WICHTIGE MITTEILUNG\n\n"\
- "Deine Anmeldung ist aktuell nicht vollständig. Bitte fülle umgehend das"\
- " Anmeldeformular aus und lasse es Deine*r Jugendleiter*in zukommen! Dieses"\
- " kannst Du unter folgendem Link herunterladen:\n"\
- "https://cloud.jdav-ludwigsburg.de/index.php/s/NQfRqA9MTKfPBkC"\
- "\n\n****************\n\n".format(HOST)
- text = "{}{}\n\n\n****************\n\nDiese Email wurde über die Webseite der JDAV Ludwigsburg"\
- " verschickt. Wenn Du in Zukunft keine Emails mehr erhalten möchtest,"\
- " kannst Du hier den Newsletter deabonnieren:\n{}"\
- .format("" if registration_complete else prepend, content, url)
+ prepend = settings.PREPEND_INCOMPLETE_REGISTRATION_TEXT
+ footer = settings.MAIL_FOOTER.format(link=url)
+ text = "{prepend}{content}{footer}".format(prepend="" if registration_complete else prepend,
+ content=content,
+ footer=footer)
return text
@@ -87,7 +79,4 @@ def get_mail_confirmation_link(key):
def prepend_base_url(absolutelink):
- return "{protocol}://{base}{link}".format(protocol=PROTOCOL, base=BASE_URL, link=absolutelink)
-
-
-mail_root = os.environ.get('EMAIL_SENDING_ADDRESS', 'christian@localhost')
+ return "{protocol}://{base}{link}".format(protocol=settings.PROTOCOL, base=settings.BASE_URL, link=absolutelink)
diff --git a/jdav_web/mailer/management/commands/notify_active.py b/jdav_web/mailer/management/commands/notify_active.py
index 46086b1..4a71779 100644
--- a/jdav_web/mailer/management/commands/notify_active.py
+++ b/jdav_web/mailer/management/commands/notify_active.py
@@ -2,20 +2,19 @@ from django.core.management.base import BaseCommand
from mailer.models import Message
from members.models import Member, annotate_activity_score
from django.db.models import Q
-from mailer.mailutils import mail_root, send
+from django.utils.translation import gettext_lazy as _
+from mailer.mailutils import send
+from django.conf import settings
import re
-CONGRATULATE_MEMBERS_MAX = 10
-SENDING_ADDRESS = mail_root
-
class Command(BaseCommand):
help = 'Congratulates the most active members'
requires_system_checks = False
def handle(self, *args, **options):
- qs = list(reversed(annotate_activity_score(Member.objects.all()).order_by('_activity_score')))[:CONGRATULATE_MEMBERS_MAX]
+ qs = list(reversed(annotate_activity_score(Member.objects.all()).order_by('_activity_score')))[:settings.CONGRATULATE_MEMBERS_MAX]
for position, member in enumerate(qs):
positiontext = "{}. ".format(position + 1) if position > 0 else ""
score = member._activity_score
@@ -29,20 +28,11 @@ class Command(BaseCommand):
level = 4
else:
level = 5
- print("sent to ", member.prename)
- content = "Hallo {}!\n\n"\
- "Herzlichen Glückwunsch, du hast im letzten Jahr zu den {} aktivsten "\
- "Mitgliedern der JDAV Ludwigsburg gehört! Um genau zu sein beträgt "\
- "dein Aktivitäts Wert "\
- "des letzten Jahres {} Punkte. Das entspricht {} Kletterer*innen. "\
- "Damit warst du im letzten Jahr "\
- "das {}aktivste Mitglied der JDAV Ludwigsburg.\n\n"\
- "Auf ein weiteres aktives Jahr in der JDAV Ludwigsburg\n"\
- "Dein*e Jugendreferent*in".format(member.prename,
- CONGRATULATE_MEMBERS_MAX,
- score,
- level,
- positiontext)
- send("Herzlichen Glückwunsch {}".format(member.prename),
- content, SENDING_ADDRESS, [member.email],
- reply_to=["jugendreferent@jdav-ludwigsburg.de"])
+ content = settings.NOTIFY_MOST_ACTIVE_TEXT.format(name=member.prename,
+ congratulate_max=CONGRATULATE_MEMBERS_MAX,
+ score=score,
+ level=level,
+ position=positiontext)
+ send(_("Congratulation %(name)s") % { 'name': member.prename },
+ content, settings.DEFAULT_SENDING_ADDRESS, [member.email],
+ reply_to=[settings.RESPONSIBLE_MAIL])
diff --git a/jdav_web/mailer/models.py b/jdav_web/mailer/models.py
index d1afb7f..1594377 100644
--- a/jdav_web/mailer/models.py
+++ b/jdav_web/mailer/models.py
@@ -3,17 +3,14 @@ from django.core.exceptions import ValidationError
from django import forms
from django.utils.translation import gettext_lazy as _
from django.utils.translation import gettext
-from .mailutils import send, get_content, NOT_SENT, SENT, PARTLY_SENT, mail_root
+from .mailutils import send, get_content, NOT_SENT, SENT, PARTLY_SENT
from utils import RestrictedFileField
from jdav_web.celery import app
from django.core.validators import RegexValidator
+from django.conf import settings
import os
-# this is the mail address that is used to send mails
-SENDING_ADDRESS = mail_root
-HOST = os.environ.get('DJANGO_ALLOWED_HOST', 'localhost:8000').split(",")[0]
-
alphanumeric = RegexValidator(r'^[0-9a-zA-Z]*$', _('Only alphanumeric characters are allowed'))
@@ -30,7 +27,7 @@ class EmailAddress(models.Model):
@property
def email(self):
- return "{0}@{1}".format(self.name, HOST)
+ return "{0}@{1}".format(self.name, settings.HOST)
@property
def forwards(self):
@@ -150,16 +147,16 @@ class Message(models.Model):
reply_to_unfiltered.extend([ml.email for ml in self.reply_to_email_address.all()])
# remove sending address from reply-to field (probably unnecessary since it's removed by
# the mail provider anyways)
- reply_to = [mail for mail in reply_to_unfiltered if mail != SENDING_ADDRESS ]
+ reply_to = [mail for mail in reply_to_unfiltered if mail != settings.DEFAULT_SENDING_MAIL ]
try:
success1 = send(self.subject, get_content(self.content, registration_complete=False),
- SENDING_ADDRESS,
+ settings.DEFAULT_SENDING_MAIL,
emails_rem,
message_id=message_id,
attachments=attach,
reply_to=reply_to)
success2 = send(self.subject, get_content(self.content, registration_complete=True),
- SENDING_ADDRESS,
+ settings.DEFAULT_SENDING_MAIL,
emails_no_rem,
message_id=message_id,
attachments=attach,
diff --git a/jdav_web/mailer/views.py b/jdav_web/mailer/views.py
index 6530614..863ef1d 100644
--- a/jdav_web/mailer/views.py
+++ b/jdav_web/mailer/views.py
@@ -3,7 +3,8 @@ from django import forms
from django.utils.translation import gettext_lazy as _
from django.urls import reverse
from django.http import HttpResponseRedirect
-from .mailutils import send as send_mail, mail_root, get_unsubscribe_link
+from .mailutils import send as send_mail, get_unsubscribe_link
+from django.conf import settings
from members.models import Member
@@ -46,11 +47,9 @@ def unsubscribe(request):
except (KeyError, Member.DoesNotExist):
return render_unsubscribe(request, _("Please fill in every field"))
else:
- send_mail("Abmeldebestätigung",
- "Klicke auf den Link, um dich vom Newsletter des JDAV "
- "Ludwigsburg "
- "abzumelden\n{}".format(get_unsubscribe_link(member)),
- mail_root, email)
+ send_mail(_("Unsubscription confirmation"),
+ settings.UNSUBSCRIBE_CONFIRMATION_TEXT.format(link=get_unsubscribe_link(member)),
+ settings.DEFAULT_SENDING_MAIL, email)
return render_confirmation_sent(request, email)
diff --git a/jdav_web/material/locale/de/LC_MESSAGES/django.po b/jdav_web/material/locale/de/LC_MESSAGES/django.po
index 8774727..e961dec 100644
--- a/jdav_web/material/locale/de/LC_MESSAGES/django.po
+++ b/jdav_web/material/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: 2022-01-12 17:38+0100\n"
+"POT-Creation-Date: 2023-03-20 18:48+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -34,79 +34,79 @@ msgstr "Zu alt"
msgid "material"
msgstr "Material"
-#: material/models.py:15
+#: material/models.py:16
msgid "Name"
msgstr "Name"
-#: material/models.py:21 material/models.py:38
+#: material/models.py:22 material/models.py:39
msgid "Material category"
msgstr "Materialtyp"
-#: material/models.py:22
+#: material/models.py:23
msgid "Material categories"
msgstr "Materialtypen"
-#: material/models.py:31
+#: material/models.py:32
msgid "name"
msgstr "Name"
-#: material/models.py:32
+#: material/models.py:33
msgid "description"
msgstr "Beschreibung"
-#: material/models.py:33
+#: material/models.py:34
msgid "quantity"
msgstr "Anzahl"
-#: material/models.py:34
+#: material/models.py:35
msgid "purchase date"
msgstr "Kaufdatum"
-#: material/models.py:35
+#: material/models.py:36
msgid "lifetime (years)"
msgstr "Lebenszeit (Jahre)"
-#: material/models.py:36
+#: material/models.py:37
msgid "photo"
msgstr "Bild"
-#: material/models.py:49
+#: material/models.py:50
msgid "Quantity"
msgstr "Anzahl"
-#: material/models.py:56
+#: material/models.py:57
msgid "Thumbnail"
msgstr "Bild"
-#: material/models.py:65
+#: material/models.py:64
msgid "Owners"
msgstr "Verantwortliche"
-#: material/models.py:75
+#: material/models.py:74
msgid "Not too old?"
msgstr "Nicht zu alt?"
-#: material/models.py:78
+#: material/models.py:77
msgid "material part"
msgstr "Materialteil"
-#: material/models.py:79
+#: material/models.py:78
msgid "material parts"
msgstr "Materialteile"
-#: material/models.py:85
+#: material/models.py:84
msgid "owner"
msgstr "Besitzer"
-#: material/models.py:86
+#: material/models.py:85
msgid "count"
msgstr "Anzahl"
-#: material/models.py:93
+#: material/models.py:92
msgid "ownership"
msgstr "Besitzer"
-#: material/models.py:94
+#: material/models.py:93
msgid "ownerships"
msgstr "Verantwortliche"
diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py
index cc817fc..fd5a292 100644
--- a/jdav_web/members/admin.py
+++ b/jdav_web/members/admin.py
@@ -33,7 +33,7 @@ from .models import (Member, Group, Freizeit, MemberNoteList, NewMemberOnList, K
KlettertreffAttendee, ActivityCategory, OldMemberOnList, MemberList,
annotate_activity_score, RegistrationPassword, MemberUnconfirmedProxy)
from finance.models import Statement, Bill
-from mailer.mailutils import send as send_mail, get_echo_link, mail_root
+from mailer.mailutils import send as send_mail, get_echo_link
from django.conf import settings
#from easy_select2 import apply_select2
@@ -127,23 +127,9 @@ class MemberAdmin(admin.ModelAdmin):
for member in queryset:
if not member.gets_newsletter:
continue
- send_mail("Wichtig: Rückmeldung erforderlich!",
- """Hallo {name},
-
-um unsere Daten auf dem aktuellen Stand zu halten, brauchen wir eine
-kurze Bestätigung von dir. Dafür besuche einfach diesen Link:
-
-{link}
-
-Dort kannst du deine Daten überprüfen und ändern. Falls du nicht innerhalb von
-30 Tagen deine Daten bestätigst, wirst du aus unserer Datenbank gelöscht und
-erhälst in Zukunft keine Mails mehr von uns.
-
-Bei Fragen, wende dich gerne an jugendreferent@jdav-ludwigsburg.de.
-
-Viele Grüße
-Deine JDAV Ludwigsburg""".format(name=member.prename, link=get_echo_link(member)),
- mail_root,
+ send_mail(_("Echo required"),
+ settings.ECHO_TEXT.format(name=member.prename, link=get_echo_link(member)),
+ settings.DEFAULT_SENDING_MAIL,
[member.email, member.email_parents] if member.email_parents and member.cc_email_parents
else member.email)
messages.success(request, _("Successfully requested echo from selected members."))
diff --git a/jdav_web/members/locale/de/LC_MESSAGES/django.po b/jdav_web/members/locale/de/LC_MESSAGES/django.po
index 3612259..ca24287 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: 2023-03-18 13:25+0100\n"
+"POT-Creation-Date: 2023-03-20 18:48+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -18,602 +18,613 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: admin.py:41 models.py:175
+#: members/admin.py:42 members/models.py:175
msgid "Registration complete"
msgstr "Anmeldung vollständig"
-#: admin.py:47
+#: members/admin.py:48
msgid "True"
msgstr "Ja"
-#: admin.py:48
+#: members/admin.py:49
msgid "False"
msgstr "Nein"
-#: admin.py:49
+#: members/admin.py:50
msgid "All"
msgstr "Alle"
-#: admin.py:123
+#: members/admin.py:124
msgid "Compose new mail to selected members"
msgstr "Neue Nachricht an ausgewählte Teilnehmer verfassen"
-#: admin.py:148
+#: members/admin.py:130
+msgid "Echo required"
+msgstr "Rückmeldung erforderlich"
+
+#: members/admin.py:135
msgid "Successfully requested echo from selected members."
msgstr ""
"Rückmeldungsaufforderung erfolgreich an ausgewählte Teilnehmer verschickt."
-#: admin.py:149
+#: members/admin.py:136
msgid "Request echo from selected members"
msgstr "Rückmeldungsaufforderung an ausgewählte Teilnehmer verschicken"
-#: admin.py:166
+#: members/admin.py:153
msgid "activity"
msgstr "Aktivität"
-#: admin.py:195
+#: members/admin.py:182
msgid "Successfully requested mail confirmation from selected registrations."
msgstr "Aufforderung zur Bestätigung der Email Adresse versendet."
-#: admin.py:196
+#: members/admin.py:183
msgid "Request mail confirmation from selected registrations"
msgstr "Aufforderung zur Bestätigung der Email Adresse versenden"
-#: admin.py:203 admin.py:241
+#: members/admin.py:190 members/admin.py:228
#, python-format
msgid "Successfully confirmed %(name)s."
msgstr "Registrierung von %(name)s erfolgreich bestätigt."
-#: admin.py:207 admin.py:244
+#: members/admin.py:194 members/admin.py:231
#, python-format
msgid "Can't confirm. %(name)s has unconfirmed email addresses."
msgstr "Bestätigung nicht möglich. %(name)s hat unbestätigte Emailadressen."
-#: admin.py:212
+#: members/admin.py:199
msgid "Successfully confirmed multiple registrations."
msgstr "Erfolgreich mehrere Registrierungen bestätigt."
-#: admin.py:214
+#: members/admin.py:201
msgid ""
"Failed to confirm some registrations because of unconfirmed email addresses."
msgstr ""
"Einige Bestätigungen fehlgeschlagen, weil Emailadressen noch nicht bestätigt "
"sind."
-#: admin.py:215
+#: members/admin.py:202
msgid "Confirm selected registrations"
msgstr "Ausgewählte Registrierungen bestätigen"
-#: admin.py:235
+#: members/admin.py:222
#, python-format
msgid "Successfully demoted %(name)s to waiter."
msgstr "%(name)s zurück auf die Warteliste gesetzt."
-#: admin.py:236
+#: members/admin.py:223
msgid "Demote selected registrations to waiters."
msgstr "Ausgewählte Registrierungen zurück auf die Warteliste setzen."
-#: admin.py:251 models.py:270 models.py:690
+#: members/admin.py:238 members/models.py:270 members/models.py:690
msgid "Group"
msgstr "Gruppe"
-#: admin.py:271
+#: members/admin.py:258
#, python-format
msgid "Successfully asked %(name)s to confirm their waiting status."
msgstr "Erfolgreich %(name)s aufgefordert den Wartelistenplatz zu bestätigen."
-#: admin.py:272
+#: members/admin.py:259
msgid "Ask selected waiters to confirm their waiting status"
msgstr "Wartende auffordern den Wartelistenplatz zu bestätigen"
-#: admin.py:281 admin.py:337
+#: members/admin.py:268 members/admin.py:324
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. "
-#: admin.py:289 admin.py:344
+#: members/admin.py:276 members/admin.py:331
#, python-format
msgid "Successfully invited %(name)s to %(group)s."
msgstr "Erfolgreich %(name)s zu Gruppe %(group)s eingeladen."
-#: admin.py:293 admin.py:349
+#: members/admin.py:280 members/admin.py:336
msgid "Select group for invitation"
msgstr "Wähle Gruppe für Einladung aus"
-#: admin.py:300
+#: members/admin.py:287
msgid "Offer waiter a place in a group."
msgstr "Personen auf der Warteliste einen Gruppenplatz anbieten."
-#: admin.py:388
+#: members/admin.py:375
msgid "Difficulty"
msgstr "Schwierigkeit"
-#: admin.py:391
+#: members/admin.py:378
msgid "Tour type"
msgstr "Art der Tour"
-#: admin.py:394 models.py:551
+#: members/admin.py:381 members/models.py:551
msgid "Means of transportation"
msgstr "Verkehrsmittel"
-#: admin.py:617
+#: members/admin.py:605
msgid "Generate crisis intervention list"
msgstr "Kriseninterventionsliste erstellen"
-#: admin.py:624
+#: members/admin.py:612
msgid "Generate overview"
msgstr "Hinweise für Jugendleiter erstellen"
-#: admin.py:631
+#: members/admin.py:619
msgid "Generate seminar report"
msgstr "Seminarbericht erstellen"
-#: apps.py:7 models.py:274
+#: members/apps.py:7 members/models.py:274
msgid "members"
msgstr "Teilnehmer"
-#: models.py:35
+#: members/models.py:35
msgid "Name"
msgstr "Name"
-#: models.py:36
+#: members/models.py:36
msgid "Description"
msgstr "Beschreibung"
-#: models.py:42 models.py:432 models.py:531
-#: templates/members/change_member.html:17
+#: members/models.py:42 members/models.py:432 members/models.py:531
+#: members/templates/members/change_member.html:17
msgid "Activity"
msgstr "Aktivität"
-#: models.py:43
+#: members/models.py:43
msgid "Activities"
msgstr "Aktivitäten"
-#: models.py:51
+#: members/models.py:51
msgid "name"
msgstr "Name"
-#: models.py:52
+#: members/models.py:52
msgid "lowest year"
msgstr "Ab Jahrgang"
-#: models.py:53
+#: members/models.py:53
msgid "highest year"
msgstr "Bis Jahrgang"
-#: models.py:54
+#: members/models.py:54
msgid "youth leaders"
msgstr "Jugendleiter"
-#: models.py:62 models.py:166
+#: members/models.py:62 members/models.py:166
msgid "group"
msgstr "Gruppe"
-#: models.py:63
+#: members/models.py:63
msgid "groups"
msgstr "Gruppen"
-#: models.py:75
+#: members/models.py:75
msgid "prename"
msgstr "Vorname"
-#: models.py:76
+#: members/models.py:76
msgid "last name"
msgstr "Nachname"
-#: models.py:79
+#: members/models.py:79
msgid "Parents' Email"
msgstr "Email der Eltern"
-#: models.py:80
+#: members/models.py:80
msgid "Also send mails to parents"
msgstr "Emails auch an Eltern schicken"
-#: models.py:82
+#: members/models.py:82
msgid "birth date"
msgstr "Geburtsdatum"
-#: models.py:84
+#: members/models.py:84
msgid "comments"
msgstr "Kommentare"
-#: models.py:86
+#: members/models.py:86
msgid "Email confirmed"
msgstr "Emailadresse bestätigt"
-#: models.py:87
+#: members/models.py:87
msgid "Parents email confirmed"
msgstr "Emailadresse der Eltern bestätigt"
-#: models.py:115 models.py:124
+#: members/models.py:115 members/models.py:124
msgid "Email confirmation needed"
msgstr "Email Bestätigung erforderlich"
-#: models.py:159
+#: members/models.py:159
msgid "street and house number"
msgstr "Straße und Hausnummer"
-#: models.py:160
+#: members/models.py:160
msgid "Postcode"
msgstr "PLZ"
-#: models.py:162
+#: members/models.py:162
msgid "town"
msgstr "Stadt"
-#: models.py:164
+#: members/models.py:164
msgid "phone number"
msgstr "Telefonnummer"
-#: models.py:165
+#: members/models.py:165
msgid "parents phone number"
msgstr "Telefonnummer der Eltern"
-#: models.py:170
+#: members/models.py:170
msgid "receives newsletter"
msgstr "Erhält den Newsletter"
-#: models.py:174
+#: members/models.py:174
msgid "created"
msgstr "erstellt"
-#: models.py:176
+#: members/models.py:176
msgid "Active"
msgstr "Aktiv"
-#: models.py:178
+#: members/models.py:178
msgid "registration form"
msgstr "Anmeldeformular"
-#: models.py:188
+#: members/models.py:188
msgid "Echoed"
msgstr "Rückgemeldet"
-#: models.py:189
+#: members/models.py:189
msgid "Confirmed"
msgstr "Bestätigt"
-#: models.py:273
+#: members/models.py:273
msgid "member"
msgstr "Teilnehmer"
-#: models.py:305
+#: members/models.py:305
#, python-format
msgid "New unconfirmed registration for group %(group)s"
msgstr "Neue unbestätigte Registrierung für Gruppe %(group)s"
-#: models.py:323
+#: members/models.py:323
msgid "Unconfirmed registration"
msgstr "Unbestätigte Registrierung"
-#: models.py:324
+#: members/models.py:324
msgid "Unconfirmed registrations"
msgstr "Unbestätigte Registrierungen"
-#: models.py:340
+#: members/models.py:340
msgid "Last wait confirmation"
msgstr "Letzte Wartebestätigung"
-#: models.py:351
+#: members/models.py:351
msgid "Invited for group"
msgstr "Einladung zu Gruppe austehend"
-#: models.py:355
+#: members/models.py:355
msgid "Waiter"
msgstr "Wartende Person"
-#: models.py:356
+#: members/models.py:356
msgid "Waiters"
msgstr "Warteliste"
-#: models.py:373
+#: members/models.py:373
msgid "Waiting status confirmed"
msgstr "Wartelistenplatz bestätigt"
-#: models.py:377
+#: members/models.py:377
msgid "Waiting confirmation needed"
msgstr "Wartelistenplatzbestätigung erforderlich"
-#: models.py:434 models.py:533
+#: members/models.py:418
+msgid "Good news"
+msgstr "Gute Neuigkeiten"
+
+#: members/models.py:434 members/models.py:533
msgid "Place"
msgstr "Ort"
-#: models.py:435 models.py:534
+#: members/models.py:435 members/models.py:534
msgid "Destination (optional)"
msgstr "Ziel (optional)"
-#: models.py:437 models.py:668 models.py:686
+#: members/models.py:437 members/models.py:668 members/models.py:686
msgid "Date"
msgstr "Datum"
-#: models.py:438 models.py:537
+#: members/models.py:438 members/models.py:537
msgid "End (optional)"
msgstr "Ende"
-#: models.py:440 models.py:539
+#: members/models.py:440 members/models.py:539
msgid "Groups"
msgstr "Gruppen"
-#: models.py:448 models.py:555
+#: members/models.py:448 members/models.py:555
msgid "Categories"
msgstr "Kategorien"
-#: models.py:449 models.py:556
+#: members/models.py:449 members/models.py:556
msgid "easy"
msgstr "leicht"
-#: models.py:449 models.py:556
+#: members/models.py:449 members/models.py:556
msgid "medium"
msgstr "mittel"
-#: models.py:449 models.py:556
+#: members/models.py:449 members/models.py:556
msgid "hard"
msgstr "schwer"
-#: models.py:458
+#: members/models.py:458
msgid "Memberlist"
msgstr "Teilnehmerliste"
-#: models.py:459
+#: members/models.py:459
msgid "Memberlists"
msgstr "Teilnehmerlisten"
-#: models.py:477 models.py:485 models.py:493 models.py:504 models.py:721
-#: models.py:728
+#: members/models.py:477 members/models.py:485 members/models.py:493
+#: members/models.py:504 members/models.py:721 members/models.py:728
msgid "Member"
msgstr "Teilnehmer"
-#: models.py:479 models.py:498
+#: members/models.py:479 members/models.py:498
msgid "Comment"
msgstr "Kommentar"
-#: models.py:486 models.py:505 models.py:729
+#: members/models.py:486 members/models.py:505 members/models.py:729
msgid "Members"
msgstr "Teilnehmer"
-#: models.py:536
+#: members/models.py:536
msgid "Begin"
msgstr "Anfang"
-#: models.py:552
+#: members/models.py:552
msgid "Kilometers traveled"
msgstr "Fahrstrecke in Kilometer"
-#: models.py:667 models.py:743
+#: members/models.py:667 members/models.py:743
msgid "Title"
msgstr "Titel"
-#: models.py:687
+#: members/models.py:687
msgid "Location"
msgstr "Ort"
-#: models.py:688
+#: members/models.py:688
msgid "Topic"
msgstr "Thema"
-#: models.py:712
+#: members/models.py:712
msgid "Jugendleiter"
msgstr "Jugendleiter"
-#: models.py:715
+#: members/models.py:715
msgid "Klettertreff"
msgstr "Klettertreff"
-#: models.py:716
+#: members/models.py:716
msgid "Klettertreffs"
msgstr "Klettertreffs"
-#: models.py:734
+#: members/models.py:734
msgid "Password"
msgstr "Passwort"
-#: models.py:737
+#: members/models.py:737
msgid "registration password"
msgstr "Registrierungspassort"
-#: models.py:738
+#: members/models.py:738
msgid "registration passwords"
msgstr "Registrierungspasswörter"
-#: models.py:745
+#: members/models.py:745
msgid "Alpinistic goals"
msgstr "Alpintechnische Ziele"
-#: models.py:746
+#: members/models.py:746
msgid "Pedagogic goals"
msgstr "Pädagogische Ziele"
-#: models.py:747
+#: members/models.py:747
msgid "Content and methods"
msgstr "Inhalte und Methoden"
-#: models.py:748
+#: members/models.py:748
msgid "Evaluation"
msgstr "Wertung"
-#: models.py:749
+#: members/models.py:749
msgid "Experiences and possible improvements"
msgstr "Erfahrungen und Verbesserungsvorschläge"
-#: models.py:752
+#: members/models.py:752
msgid "Excursion"
msgstr "Freizeit"
-#: models.py:758 models.py:773
+#: members/models.py:758 members/models.py:773
msgid "LJP Proposal"
msgstr "Seminarbericht"
-#: models.py:759
+#: members/models.py:759
msgid "LJP Proposals"
msgstr "Seminarberichte"
-#: models.py:766
+#: members/models.py:766
msgid "Starting time"
msgstr "Zeitpunkt"
-#: models.py:767
+#: members/models.py:767
msgid "Duration in hours"
msgstr "Dauer in Stunden"
-#: models.py:770
+#: members/models.py:770
msgid "Activity and method"
msgstr "Art der Aktion inkl. Methode"
-#: models.py:778
+#: members/models.py:778
msgid "Intervention"
msgstr "Aktion"
-#: models.py:779
+#: members/models.py:779
msgid "Interventions"
msgstr "Aktionen"
-#: templates/admin/invite_for_group.html:17
-#: templates/admin/invite_selected_for_group.html:17
+#: members/templates/admin/invite_for_group.html:17
+#: members/templates/admin/invite_selected_for_group.html:17
msgid "Home"
msgstr "Start"
-#: templates/admin/invite_for_group.html:21
+#: members/templates/admin/invite_for_group.html:21
msgid "Invite to group"
msgstr "Zu Gruppe einladen"
-#: templates/admin/invite_for_group.html:26
-#: templates/admin/invite_selected_for_group.html:25
+#: members/templates/admin/invite_for_group.html:26
+#: members/templates/admin/invite_selected_for_group.html:25
msgid "Invite to a group"
msgstr "Zu einer Gruppe einladen"
-#: templates/admin/invite_for_group.html:28
+#: members/templates/admin/invite_for_group.html:28
msgid "You are inviting:"
msgstr "Du lädst die folgende Person ein:"
-#: templates/admin/invite_for_group.html:39
+#: members/templates/admin/invite_for_group.html:39
#, python-format
msgid "Please choose the group that you want to invite %(waiter)s to."
msgstr "Bitte wähle die Gruppe aus zu der du %(waiter)s einladen möchtest."
-#: templates/admin/invite_for_group.html:51
-#: templates/admin/invite_selected_for_group.html:52
+#: members/templates/admin/invite_for_group.html:51
+#: members/templates/admin/invite_selected_for_group.html:52
msgid "Invite"
msgstr "Einladen"
-#: templates/admin/invite_for_group.html:52
-#: templates/admin/invite_selected_for_group.html:53
+#: members/templates/admin/invite_for_group.html:52
+#: members/templates/admin/invite_selected_for_group.html:53
msgid "Cancel"
msgstr "Abbrechen"
-#: templates/admin/invite_selected_for_group.html:20
+#: members/templates/admin/invite_selected_for_group.html:20
msgid "Invite multiple waiters"
msgstr "Mehrere Wartende einladen"
-#: templates/admin/invite_selected_for_group.html:27
+#: members/templates/admin/invite_selected_for_group.html:27
msgid "You selected the following waiters:"
msgstr "Du hast die folgenden Wartenden ausgewählt:"
-#: templates/admin/invite_selected_for_group.html:40
+#: members/templates/admin/invite_selected_for_group.html:40
msgid "Please choose the group you want these waiters to be invited for."
msgstr ""
"Bitte wähle die Gruppe aus zu der du die obigen Wartenden einladen möchtest."
-#: templates/admin/klettertreff_overview.html:9
+#: members/templates/admin/klettertreff_overview.html:9
msgid "date"
msgstr "Datum"
-#: templates/members/change_member.html:6
+#: members/templates/members/change_member.html:6
msgid "Participations:"
msgstr "Freizeitteilnahmen:"
-#: templates/members/change_member.html:14
+#: members/templates/members/change_member.html:14
msgid "Qualities:"
msgstr "Fähigkeiten:"
-#: templates/members/change_member.html:18
+#: members/templates/members/change_member.html:18
msgid "Skill level"
msgstr "Fähigkeitsniveau"
-#: templates/members/change_member_unconfirmed.html:11
+#: members/templates/members/change_member_unconfirmed.html:11
msgid "Save and confirm registration"
msgstr "Speichern und Registrierung bestätigen"
-#: templates/members/echo.html:6 templates/members/echo.html:13
-#: templates/members/echo_failed.html:11 templates/members/echo_success.html:10
+#: members/templates/members/echo.html:6 members/templates/members/echo.html:13
+#: members/templates/members/echo_failed.html:11
+#: members/templates/members/echo_success.html:10
msgid "Echo"
msgstr "Rückmeldung"
-#: templates/members/echo.html:15
+#: members/templates/members/echo.html:15
msgid "Thanks for echoing back. Here is your current data:"
msgstr ""
"Vielen Dank, dass du dich rückmeldest. Hier siehst du deine aktuellen Daten. "
"Falls sich etwas geändert hat, trage das bitte hier ein."
-#: templates/members/echo.html:27 templates/members/register.html:34
-#: templates/members/register_password.html:22
-#: templates/members/register_waiting_list.html:31
+#: members/templates/members/echo.html:27
+#: members/templates/members/register.html:35
+#: members/templates/members/register_password.html:22
+#: members/templates/members/register_waiting_list.html:31
msgid "submit"
msgstr "Bestätigen"
-#: templates/members/echo_failed.html:6
+#: members/templates/members/echo_failed.html:6
msgid "Echo failed"
msgstr "Rückmeldung fehlgeschlagen"
-#: templates/members/echo_failed.html:13
-#: templates/members/invited_registration_failed.html:13
+#: members/templates/members/echo_failed.html:13
+#: members/templates/members/invited_registration_failed.html:13
msgid "Something went wrong. The key you supplied is"
msgstr "Etwas ist schief gegangen. Der verwendete Code ist"
-#: templates/members/echo_failed.html:15
-#: templates/members/invited_registration_failed.html:15
-#: templates/members/register_failed.html:15
+#: members/templates/members/echo_failed.html:15
+#: members/templates/members/invited_registration_failed.html:15
+#: members/templates/members/register_failed.html:15
msgid "If you think this is a mistake, please"
msgstr "Wenn du denkst, dass das ein Fehler ist, "
-#: templates/members/echo_failed.html:15
-#: templates/members/invited_registration_failed.html:15
-#: templates/members/register_failed.html:15
+#: members/templates/members/echo_failed.html:15
+#: members/templates/members/invited_registration_failed.html:15
+#: members/templates/members/register_failed.html:15
msgid "contact us."
msgstr "kontaktiere uns."
-#: templates/members/echo_success.html:5
+#: members/templates/members/echo_success.html:5
msgid "Echo successful"
msgstr "Rückmeldung erfolgreich"
-#: templates/members/echo_success.html:12
+#: members/templates/members/echo_success.html:12
msgid "Thank you"
msgstr "Danke"
-#: templates/members/echo_success.html:12
+#: members/templates/members/echo_success.html:12
msgid "Your data was successfully updated."
msgstr "Deine Daten wurden erfolgreich aktualisiert."
-#: templates/members/invited_registration_failed.html:6
-#: templates/members/register_failed.html:6
+#: members/templates/members/invited_registration_failed.html:6
+#: members/templates/members/register_failed.html:6
msgid "Registration failed"
msgstr "Registrierung fehlgeschlagen"
-#: templates/members/invited_registration_failed.html:11
-#: templates/members/register.html:6 templates/members/register_failed.html:11
-#: templates/members/register_password.html:6
-#: templates/members/register_success.html:6
-#: templates/members/register_wrong_password.html:6
+#: members/templates/members/invited_registration_failed.html:11
+#: members/templates/members/register.html:6
+#: members/templates/members/register_failed.html:11
+#: members/templates/members/register_password.html:6
+#: members/templates/members/register_success.html:6
+#: members/templates/members/register_wrong_password.html:6
msgid "Registration"
msgstr "Registrierung"
-#: templates/members/mail_confirmation_invalid.html:6
-#: templates/members/mail_confirmation_invalid.html:11
+#: members/templates/members/mail_confirmation_invalid.html:6
+#: members/templates/members/mail_confirmation_invalid.html:11
msgid "Mail confirmation failed"
msgstr "Emailbestätigung fehlgeschlagen"
-#: templates/members/mail_confirmation_invalid.html:13
-#: templates/members/waiting_confirmation_invalid.html:19
+#: members/templates/members/mail_confirmation_invalid.html:13
+#: members/templates/members/waiting_confirmation_invalid.html:19
msgid "The supplied link is invalid."
msgstr "Der verwendete Link ist ungültig."
-#: templates/members/mail_confirmation_success.html:6
-#: templates/members/mail_confirmation_success.html:11
+#: members/templates/members/mail_confirmation_success.html:6
+#: members/templates/members/mail_confirmation_success.html:11
msgid "Mail confirmed"
msgstr "Emailadresse bestätigt"
-#: templates/members/mail_confirmation_success.html:14
+#: members/templates/members/mail_confirmation_success.html:14
#, python-format
msgid ""
"The email address %(email)s was successfully confirmed as parents email of "
@@ -622,7 +633,7 @@ msgstr ""
"Die Emailadresse %(email)s wurde erfolgreich als Emailadresse der Eltern von "
"%(name)s bestätigt."
-#: templates/members/mail_confirmation_success.html:17
+#: members/templates/members/mail_confirmation_success.html:17
#, python-format
msgid ""
"The email address %(email)s was successfully confirmed as personal email of "
@@ -631,51 +642,54 @@ msgstr ""
"Die Emailadresse %(email)s wurde erfolgreich als persönliche Emailadresse "
"von %(name)s bestätigt."
-#: templates/members/register.html:13
-#: templates/members/register_password.html:11
-#: templates/members/register_success.html:11
-#: templates/members/register_wrong_password.html:11
+#: members/templates/members/register.html:13
+#: members/templates/members/register_password.html:11
+#: members/templates/members/register_success.html:11
+#: members/templates/members/register_wrong_password.html:11
msgid "Register"
msgstr "Registrieren"
-#: templates/members/register.html:15
+#: members/templates/members/register.html:15
msgid "Here you can register for group"
msgstr "Hier kannst du dich registrieren für die Gruppe"
-#: templates/members/register.html:28
-msgid "I am member of the DAV Ludwigsburg."
-msgstr "Ich bin Mitglied des DAV Ludwigsburg."
+#: members/templates/members/register.html:28
+#, python-format
+msgid "I am member of the DAV %(sektion)s."
+msgstr "Ich bin Mitglied des DAV %(sektion)s."
-#: templates/members/register.html:30
-#: templates/members/register_waiting_list.html:28
+#: members/templates/members/register.html:30
+#: members/templates/members/register_waiting_list.html:28
+#, python-format
msgid ""
"I agree that my data is stored and processed on the server of the JDAV "
-"Ludwigsburg."
+"%(sektion)s."
msgstr ""
-"Ich bin einverstanden, dass meine Daten auf dem Server der JDAV Ludwigsburg "
+"Ich bin einverstanden, dass meine Daten auf dem Server der JDAV %(sektion)s "
"gespeichert und verarbeitet werden."
-#: templates/members/register_failed.html:13
+#: members/templates/members/register_failed.html:13
msgid "Something went wrong while processing your registration."
msgstr "Etwas ist schief gelaufen, bei der Verarbeitung deiner Registrierung."
-#: templates/members/register_password.html:13
+#: members/templates/members/register_password.html:13
+#, python-format
msgid ""
-"Thanks for your interest in participating. Please enter the registration "
-"password, your youth leader gave you."
+"Thanks for your interest in participating in the JDAV %(sektion)s. Please "
+"enter the registration password, your youth leader gave you."
msgstr ""
-"Danke für dein Interesse bei der JDAV Ludwigsburg teilzunehmen. Bitte gib "
+"Danke für dein Interesse bei der JDAV %(sektion)s teilzunehmen. Bitte gib "
"das Passwort ein, das du von deinem Jugendleiter erhalten hast."
-#: templates/members/register_success.html:13
+#: members/templates/members/register_success.html:13
msgid "Your registration succeeded."
msgstr "Deine Registrierung war erfolgreich."
-#: templates/members/register_success.html:16
+#: members/templates/members/register_success.html:16
msgid "Please remember to confirm your email address."
msgstr "Bitte denk daran, deine E-Mail Adresse(n) zu bestätigen."
-#: templates/members/register_success.html:17
+#: members/templates/members/register_success.html:17
msgid ""
"The coordinating team will process your registration when your email address "
"is confirmed."
@@ -683,57 +697,57 @@ msgstr ""
"Unser Jugendleiterteam wird deine Registrierung bearbeiten, wenn deine "
"Emailadressen bestätigt sind."
-#: templates/members/register_success.html:19
+#: members/templates/members/register_success.html:19
msgid ""
"The coordinating team will process your registration as soon as possible."
msgstr ""
"Unser Jugendleiterteam wird deine Registrierung so schnell wie möglich "
"bearbeiten."
-#: templates/members/register_waiting_list.html:6
+#: members/templates/members/register_waiting_list.html:6
msgid "Registration for waiting list"
msgstr "Registrierung für die Warteliste"
-#: templates/members/register_waiting_list.html:13
+#: members/templates/members/register_waiting_list.html:13
msgid "Register for waiting list"
msgstr "Für die Warteliste registrieren"
-#: templates/members/register_waiting_list.html:15
+#: members/templates/members/register_waiting_list.html:15
msgid "Here you can register for the waiting list."
msgstr "Hier kannst du dich auf die Warteliste eintragen."
-#: templates/members/register_waiting_list_success.html:6
-#: templates/members/register_waiting_list_success.html:11
+#: members/templates/members/register_waiting_list_success.html:6
+#: members/templates/members/register_waiting_list_success.html:11
msgid "Registration for waiting list."
msgstr "Registrierung für die Warteliste."
-#: templates/members/register_waiting_list_success.html:13
+#: members/templates/members/register_waiting_list_success.html:13
msgid "Your registration for the waiting list was successful."
msgstr "Du wurdest auf die Warteliste gesetzt."
-#: templates/members/register_waiting_list_success.html:14
+#: members/templates/members/register_waiting_list_success.html:14
msgid "Please remember to confirm all email addresses that you entered."
msgstr "Bitte denk daran, deine E-Mail Adresse(n) zu bestätigen."
-#: templates/members/register_waiting_list_success.html:15
+#: members/templates/members/register_waiting_list_success.html:15
msgid "We will notify you if there is a vacant place in one of our groups."
msgstr ""
"Wir werden dich umgehend benachrichtigen, wenn es einen freien Platz in "
"einer unserer Gruppen gibt."
-#: templates/members/register_wrong_password.html:13
+#: members/templates/members/register_wrong_password.html:13
msgid ""
"You entered a wrong password to often. Please ask your youth leader again."
msgstr ""
"Du hast zu oft ein falsches Passwort eingegeben. Bitte frage deinen "
"Jugendleiter nach einem korrekten Passwort."
-#: templates/members/waiting_confirmation_invalid.html:6
-#: templates/members/waiting_confirmation_invalid.html:11
+#: members/templates/members/waiting_confirmation_invalid.html:6
+#: members/templates/members/waiting_confirmation_invalid.html:11
msgid "Waiting confirmation failed"
msgstr "Wartelistenplatzbestätigung fehlgeschlagen"
-#: templates/members/waiting_confirmation_invalid.html:15
+#: members/templates/members/waiting_confirmation_invalid.html:15
msgid ""
"Unfortunately, you did not confirm your intention to stay on the waiting "
"list in time. You lost your spot on the list. You can"
@@ -741,16 +755,16 @@ msgstr ""
"Leider hast du deinen Wartelistenplatz nicht rechtzeitig bestätigt und hast "
"somit deinen Platz verloren. Du kannst"
-#: templates/members/waiting_confirmation_invalid.html:16
+#: members/templates/members/waiting_confirmation_invalid.html:16
msgid "rejoin the waiting list"
msgstr "der Warteliste erneut beitreten"
-#: templates/members/waiting_confirmation_success.html:6
-#: templates/members/waiting_confirmation_success.html:11
+#: members/templates/members/waiting_confirmation_success.html:6
+#: members/templates/members/waiting_confirmation_success.html:11
msgid "Waiting confirmed"
msgstr "Wartelistenplatz bestätigt"
-#: templates/members/waiting_confirmation_success.html:14
+#: members/templates/members/waiting_confirmation_success.html:14
#, python-format
msgid ""
"Thank you %(prename)s for your interest in staying on the waiting list.\n"
@@ -759,7 +773,7 @@ msgstr ""
"Danke %(prename)s für dein Interesse auf der Warteliste zu bleiben.\n"
"Dein Platz ist bereits bestätigt."
-#: templates/members/waiting_confirmation_success.html:18
+#: members/templates/members/waiting_confirmation_success.html:18
#, python-format
msgid ""
"Thank you %(prename)s for your interest in staying on the waiting list.\n"
@@ -768,49 +782,14 @@ msgstr ""
"Danke %(prename)s für dein Interesse auf der Warteliste zu bleiben.\n"
"Dein Platz wurde bestätigt."
-#: views.py:83 views.py:104 views.py:268
+#: members/views.py:84 members/views.py:105 members/views.py:270
msgid "invalid"
msgstr "ungültig"
-#: views.py:85 views.py:270
+#: members/views.py:86 members/views.py:272
msgid "expired"
msgstr "abgelaufen"
-#: views.py:114
+#: members/views.py:115
msgid "The entered password is wrong."
msgstr "Das eingegebene Passwort ist falsch."
-
-#~ msgid "Convert to PDF"
-#~ msgstr "Kriseninterventionsliste erstellen"
-
-#~ msgid "Generate list for LJP"
-#~ msgstr "LJP Liste erstellen"
-
-#, python-format
-#~ msgid "Can't invite %(name)s. No group was specified."
-#~ msgstr ""
-#~ "Einladen von %(name)s nicht möglich. Es wurde keine Gruppe angegeben."
-
-#~ msgid "Not waiting"
-#~ msgstr "NICHT Warteliste"
-
-#~ msgid "street"
-#~ msgstr "Straße"
-
-#~ msgid "Can't confirm. "
-#~ msgstr "Bestätigung nicht möglich. "
-
-#~ msgid "minimum age (years)"
-#~ msgstr "Mindestalter (Jahre)"
-
-#~ msgid "queue"
-#~ msgstr "Warteliste"
-
-#~ msgid "Art der Tour"
-#~ msgstr "Art der Tour"
-
-#~ msgid "Listname"
-#~ msgstr "Name der Liste"
-
-#~ msgid "Comments"
-#~ msgstr "Kommentare"
diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py
index a8c5a6b..3ba2b82 100644
--- a/jdav_web/members/models.py
+++ b/jdav_web/members/models.py
@@ -10,7 +10,7 @@ from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelatio
from django.contrib.contenttypes.models import ContentType
from utils import RestrictedFileField
import os
-from mailer.mailutils import send as send_mail, mail_root, get_mail_confirmation_link,\
+from mailer.mailutils import send as send_mail, get_mail_confirmation_link,\
prepend_base_url, get_registration_link, get_wait_confirmation_link
from django.contrib.auth.models import User
from django.conf import settings
@@ -113,10 +113,10 @@ class Person(models.Model):
self.confirmed_mail = False
self.confirm_mail_key = uuid.uuid4().hex
send_mail(_('Email confirmation needed'),
- CONFIRM_MAIL_TEXT.format(name=self.prename,
- link=get_mail_confirmation_link(self.confirm_mail_key),
- whattoconfirm='deiner Emailadresse'),
- mail_root,
+ settings.CONFIRM_MAIL_TEXT.format(name=self.prename,
+ link=get_mail_confirmation_link(self.confirm_mail_key),
+ whattoconfirm='deiner Emailadresse'),
+ settings.DEFAULT_SENDING_MAIL,
self.email)
if self.email_parents:
self.confirmed_mail_parents = False
@@ -125,7 +125,7 @@ class Person(models.Model):
CONFIRM_MAIL_TEXT.format(name=self.prename,
link=get_mail_confirmation_link(self.confirm_mail_parents_key),
whattoconfirm='der Emailadresse deiner Eltern'),
- mail_root,
+ settings.DEFAULT_SENDING_MAIL,
self.email_parents)
else:
self.confirmed_mail_parents = True
@@ -146,7 +146,7 @@ class Person(models.Model):
def send_mail(self, subject, content):
send_mail(subject,
content,
- mail_root,
+ settings.DEFAULT_SENDING_MAIL,
[self.email, self.email_parents] if self.email_parents and self.cc_email_parents
else self.email)
@@ -303,10 +303,10 @@ class Member(Person):
link = prepend_base_url(reverse('admin:members_memberunconfirmedproxy_change',
args=[str(self.id)]))
send_mail(_('New unconfirmed registration for group %(group)s') % {'group': group},
- NEW_UNCONFIRMED_REGISTRATION.format(name=jl.prename,
- group=group,
- link=link),
- mail_root,
+ settings.NEW_UNCONFIRMED_REGISTRATION.format(name=jl.prename,
+ group=group,
+ link=link),
+ settings.DEFAULT_SENDING_MAIL,
jl.email)
class MemberUnconfirmedManager(models.Manager):
@@ -375,8 +375,8 @@ class MemberWaitingList(Person):
def ask_for_wait_confirmation(self):
"""Sends an email to the person asking them to confirm their intention to wait."""
self.send_mail(_('Waiting confirmation needed'),
- WAIT_CONFIRMATION_TEXT.format(name=self.prename,
- link=get_wait_confirmation_link(self)))
+ settings.WAIT_CONFIRMATION_TEXT.format(name=self.prename,
+ link=get_wait_confirmation_link(self)))
def confirm_waiting(self, key):
# if a wrong key is supplied, we return invalid
@@ -415,17 +415,17 @@ class MemberWaitingList(Person):
return self.registration_key == key and timezone.now() < self.registration_expire
def invite_to_group(self):
- send_mail("Gute Neuigkeiten von der JDAV",
- INVITE_TEXT.format(name=self.prename,
+ send_mail(_("Good news"),
+ settings.INVITE_TEXT.format(name=self.prename,
link=get_registration_link(self)),
- mail_root,
+ settings.DEFAULT_SENDING_MAIL,
[self.email, self.email_parents] if self.email_parents and self.cc_email_parents
else self.email)
class MemberList(models.Model):
"""Lets the user create a list of members in pdf format.
-
+
DEPRECATED: Replaced by Freizeit and Notizliste
"""
@@ -866,59 +866,3 @@ def annotate_activity_score(queryset):
+ F('_jugendleiter_klettertreff_score') + 3 * F('_jugendleiter_freizeit_score'))
)
return queryset
-
-
-CONFIRM_MAIL_TEXT = """Hallo {name},
-
-du hast bei der JDAV Ludwigsburg eine E-Mail Adresse hinterlegt. Da bei uns alle Kommunikation
-per Email funktioniert, brauchen wir eine Bestätigung {whattoconfirm}. Dazu klicke bitte einfach auf
-folgenden Link:
-
-{link}
-
-Viele Grüße
-Deine JDAV Ludwigsburg"""
-
-NEW_UNCONFIRMED_REGISTRATION = """Hallo {name},
-
-für deine Gruppe {group} liegt eine neue unbestätigte Reservierung vor. Die Person hat bereits ihre
-E-Mailadressen bestätigt. Bitte prüfe die Registrierung eingehend und bestätige falls möglich. Zu
-der Registrierung kommst du hier:
-
-{link}
-
-Viele Grüße
-Dein KOMPASS"""
-
-INVITE_TEXT = """Hallo {name},
-
-wir haben gute Neuigkeiten für dich. Es ist ein Platz in der Jugendgruppe freigeworden. Wir brauchen
-jetzt noch ein paar Informationen von dir und deine Anmeldebestätigung. Das kannst du alles über folgenden
-Link erledigen:
-
-{link}
-
-Du siehst dort auch die Daten, die du bei deiner Eintragung auf die Warteliste angegeben hast. Bitte
-überprüfe, ob die Daten noch stimmen und ändere sie bei Bedarf ab.
-
-Bei Fragen, wende dich gerne an jugendreferent@jdav-ludwigsburg.de.
-
-Viele Grüße
-Deine JDAV Ludwigsburg"""
-
-
-WAIT_CONFIRMATION_TEXT = """Hallo {name},
-
-leider können wir dir zur Zeit noch keinen Platz in einer Jugendgruppe anbieten. Da wir
-sehr viele Interessenten haben und wir möglichst vielen die Möglichkeit bieten möchten, an
-einer Jugendgruppe teilhaben zu können, fragen wir regelmäßig alle Personen auf der
-Warteliste ab, ob sie noch Interesse haben.
-
-Wenn du weiterhin auf der Warteliste bleiben möchtest, klicke auf den folgenden Link:
-
-{link}
-
-Falls du nicht mehr auf der Warteliste bleiben möchtest, musst du nichts machen. Du wirst automatisch entfernt.
-
-Viele Grüße
-Deine JDAV Ludwigsburg"""
diff --git a/jdav_web/members/templates/members/crisis_intervention_list.tex b/jdav_web/members/templates/members/crisis_intervention_list.tex
index 9dbd369..4434c98 100644
--- a/jdav_web/members/templates/members/crisis_intervention_list.tex
+++ b/jdav_web/members/templates/members/crisis_intervention_list.tex
@@ -47,12 +47,12 @@
\begin{flushright}
\small
\noindent Deutscher Alpenverein e. V. \\
- Sektion Ludwigsburg\\
- Fuchshofstr. 66\\
- 71638 Ludwigsburg\\
- Tel.: 07141 927893\\
- Fax: 07141 924042\\
- info@alpenverein-ludwigsburg.de\\
+ Sektion {{ settings.SEKTION }} \\
+ {{ settings.SEKTION_STREET }} \\
+ {{ settings.SEKTION_TOWN }} \\
+ Tel.: {{ settings.SEKTION_TELEPHONE }} \\
+ Fax: {{ settings.SEKTION_TELEFAX }} \\
+ {{ settings.SEKTION_CONCACT_MAIL }} \\
\end{flushright}
\end{textblock*}
diff --git a/jdav_web/members/templates/members/register.html b/jdav_web/members/templates/members/register.html
index 4d724ca..bd5efa9 100644
--- a/jdav_web/members/templates/members/register.html
+++ b/jdav_web/members/templates/members/register.html
@@ -25,9 +25,10 @@
- {% trans "I am member of the DAV Ludwigsburg." %}
+ {% blocktrans %}I am member of the DAV {{ sektion }}.{% endblocktrans %}
- {% trans "I agree that my data is stored and processed on the server of the JDAV Ludwigsburg." %}
+ {% blocktrans %}I agree that my data is stored and processed on the server of the JDAV {{ sektion }}.{% endblocktrans %}
+
{% trans "Thanks for your interest in participating. Please enter the registration password, your youth leader gave you." %}
+
{% blocktrans %}Thanks for your interest in participating in the JDAV {{ sektion }}. Please enter the registration password, your youth leader gave you.{% endblocktrans %}