diff --git a/.gitignore b/.gitignore index 98b0933..4fdab90 100644 --- a/.gitignore +++ b/.gitignore @@ -128,3 +128,6 @@ docker/test/media *.csv jdav_web/static/docs + +# mac files +.DS_Store diff --git a/jdav_web/jdav_web/settings/components/texts.py b/jdav_web/jdav_web/settings/components/texts.py index c2ad0ef..d1e5eaf 100644 --- a/jdav_web/jdav_web/settings/components/texts.py +++ b/jdav_web/jdav_web/settings/components/texts.py @@ -14,8 +14,8 @@ Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION } 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: +E-Mailadressen bestätigt und ihr Anmeldeformular hochgeladen. Bitte prüfe die Registrierung eingehend und +bestätige falls möglich. Zu der Registrierung kommst du hier: {link} @@ -164,6 +164,24 @@ Viele Grüße Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL } +UPLOAD_REGISTRATION_FORM_TEXT = """Hallo {name}, + +vielen Dank für deine Anmeldung in der JDAV %(SEKTION)s. Bevor es richtig losgehen kann, brauchen +wir noch die Bestätigung deiner Daten und die Zustimmung zu unseren Teilnahmebedingungen. + +Dafür kannst du das für dich vorausgefüllte Anmeldeformular unter folgendem Link herunterladen, +durchlesen und, falls du zustimmst, das unterschriebene Formular wieder dort hochladen. + +{link} + +Bist du noch nicht volljährig? Dann muss eine erziehungsberechtigte Person das Formular unterschreiben. + +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 } diff --git a/jdav_web/members/locale/de/LC_MESSAGES/django.po b/jdav_web/members/locale/de/LC_MESSAGES/django.po index 15d2225..cfd1dbb 100644 --- a/jdav_web/members/locale/de/LC_MESSAGES/django.po +++ b/jdav_web/members/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-14 16:49+0100\n" +"POT-Creation-Date: 2024-12-19 01:21+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: members/admin.py:127 members/models.py:404 +#: members/admin.py:127 members/models.py:412 msgid "Registration complete" msgstr "Anmeldung vollständig" @@ -126,82 +126,82 @@ msgstr "" msgid "activity" msgstr "Aktivität" -#: members/admin.py:388 members/models.py:56 members/models.py:1527 +#: members/admin.py:388 members/models.py:56 members/models.py:1572 msgid "Name" msgstr "Name" -#: members/admin.py:478 +#: members/admin.py:479 msgid "Successfully requested mail confirmation from selected registrations." msgstr "Aufforderung zur Bestätigung der Email Adresse versendet." -#: members/admin.py:479 +#: members/admin.py:480 msgid "Request mail confirmation from selected registrations" msgstr "Aufforderung zur Bestätigung der Email Adresse versenden" -#: members/admin.py:486 members/admin.py:560 +#: members/admin.py:487 members/admin.py:552 #, python-format msgid "Successfully confirmed %(name)s." msgstr "Registrierung von %(name)s erfolgreich bestätigt." -#: members/admin.py:490 members/admin.py:563 +#: members/admin.py:491 members/admin.py:555 #, python-format msgid "Can't confirm. %(name)s has unconfirmed email addresses." msgstr "Bestätigung nicht möglich. %(name)s hat unbestätigte Emailadressen." -#: members/admin.py:495 +#: members/admin.py:496 msgid "Successfully confirmed multiple registrations." msgstr "Erfolgreich mehrere Registrierungen bestätigt." -#: members/admin.py:497 +#: members/admin.py:498 msgid "" "Failed to confirm some registrations because of unconfirmed email addresses." msgstr "" "Einige Bestätigungen fehlgeschlagen, weil Emailadressen noch nicht bestätigt " "sind." -#: members/admin.py:498 +#: members/admin.py:499 msgid "Confirm selected registrations" msgstr "Ausgewählte Registrierungen bestätigen" -#: members/admin.py:521 +#: members/admin.py:522 msgid "Demote selected registrations to waiters." msgstr "Ausgewählte Registrierungen zurück auf die Warteliste setzen." -#: members/admin.py:537 +#: members/admin.py:538 msgid "Demote member to waiter" msgstr "Ausgewählte Registrierung zurück auf die Warteliste setzen." -#: members/admin.py:555 +#: members/admin.py:547 #, python-format msgid "Successfully demoted %(name)s to waiter." msgstr "%(name)s zurück auf die Warteliste gesetzt." -#: members/admin.py:570 members/models.py:411 members/models.py:777 -#: members/models.py:1272 +#: members/admin.py:562 members/models.py:419 members/models.py:822 +#: members/models.py:1317 msgid "Group" msgstr "Gruppe" -#: members/admin.py:585 +#: members/admin.py:577 msgid "Pending group invitation for group" msgstr "Ausstehende Gruppeneinladung für Gruppe" -#: members/admin.py:618 +#: members/admin.py:610 #, python-format msgid "Successfully asked %(name)s to confirm their waiting status." msgstr "Erfolgreich %(name)s aufgefordert den Wartelistenplatz zu bestätigen." -#: members/admin.py:619 +#: members/admin.py:611 msgid "Ask selected waiters to confirm their waiting status" msgstr "Wartende auffordern den Wartelistenplatz zu bestätigen" -#: members/admin.py:628 members/admin.py:688 +#: members/admin.py:620 members/admin.py:684 msgid "" "An error occurred while trying to invite said members. Please try again." msgstr "" "Beim Einladen dieser Personen ist ein Fehler aufgetreten. Bitte versuche es " "nochmal. " -#: members/admin.py:632 members/admin.py:693 +#: members/admin.py:624 members/admin.py:689 msgid "" "The selected group does not have a contact email. Please first set a contact " "email and then try again." @@ -209,43 +209,43 @@ msgstr "" "Die ausgewählte Gruppe hat keine Kontakt E-Mail Adresse. Bitte stelle eine " "Kontakt E-Mail Adresse ein und versuche es erneut." -#: members/admin.py:640 members/admin.py:700 +#: members/admin.py:632 members/admin.py:696 #, python-format msgid "Successfully invited %(name)s to %(group)s." msgstr "Erfolgreich %(name)s zu Gruppe %(group)s eingeladen." -#: members/admin.py:644 members/admin.py:706 +#: members/admin.py:636 members/admin.py:702 msgid "Select group for invitation" msgstr "Wähle Gruppe für Einladung aus" -#: members/admin.py:651 +#: members/admin.py:643 msgid "Offer waiter a place in a group." msgstr "Personen auf der Warteliste einen Gruppenplatz anbieten." -#: members/admin.py:723 members/models.py:72 +#: members/admin.py:719 members/models.py:72 msgid "name" msgstr "Name" -#: members/admin.py:724 +#: members/admin.py:720 msgid "" "The group name may only consist of letters, numerals, _, -, :, * and spaces." msgstr "" "Der Gruppenname darf nur aus Buchstaben, Zahlen, _, -, :, * oder Leerzeichen " "bestehen." -#: members/admin.py:753 +#: members/admin.py:749 msgid "Difficulty" msgstr "Schwierigkeit" -#: members/admin.py:756 +#: members/admin.py:752 msgid "Tour type" msgstr "Art der Tour" -#: members/admin.py:759 members/models.py:1003 +#: members/admin.py:755 members/models.py:1048 msgid "Means of transportation" msgstr "Verkehrsmittel" -#: members/admin.py:785 +#: members/admin.py:781 msgid "" "Please list here all expenses in relation with this excursion and upload " "relevant bills. These have to be permanently stored for the application of " @@ -258,7 +258,7 @@ msgstr "" "einzelnen Posten wird dabei auf der LJP-Kostenübersicht angezeigt (sinnvoll " "wären z.B. Anreise, Verpflegung, Material etc.)." -#: members/admin.py:803 +#: members/admin.py:799 msgid "" "Here you can work on a seminar report for applying for financial " "contributions from Landesjugendplan (LJP). More information on creating a " @@ -271,7 +271,7 @@ msgstr "" "wahlweise nur TN-Liste und Kostenübersicht kannst du anschließend " "herunterladen." -#: members/admin.py:811 +#: members/admin.py:807 msgid "" "Please list all participants (also youth leaders) of this excursion. Here " "you can still make changes just before departure and hence generate the " @@ -282,34 +282,34 @@ msgstr "" "jederzeit die aktuelle Teilnehmer*innenliste für die Krisenintervention " "generieren." -#: members/admin.py:857 +#: members/admin.py:853 #, python-format msgid "You are not allowed to view all members on note list %(name)s." msgstr "" "Du hast nicht die nötigen Rechte um alle Teilnehmer*innen der Notizliste " "%(name)s anzusehen." -#: members/admin.py:867 +#: members/admin.py:863 msgid "Generate PDF summary" msgstr "Übersicht erstellen" -#: members/admin.py:871 +#: members/admin.py:867 msgid "Full report" msgstr "Vollständiger Seminarbericht" -#: members/admin.py:872 +#: members/admin.py:868 msgid "Costs and participants only" msgstr "Nur Kosten und Teilnehmende" -#: members/admin.py:873 +#: members/admin.py:869 msgid "Mode" msgstr "Modus" -#: members/admin.py:874 +#: members/admin.py:870 msgid "Prepend V32" msgstr "V32 Formblatt einfügen" -#: members/admin.py:890 +#: members/admin.py:886 msgid "" "General information on your excursion. These are partly relevant for the " "amount of financial compensation (means of transport, travel distance, etc.)." @@ -318,48 +318,48 @@ msgstr "" "teilweise relevant für die Zuschüsse aus dem Jugendetat (Verkehrsmittel, " "Fahrstrecke in km)." -#: members/admin.py:920 +#: members/admin.py:916 #, 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:928 +#: members/admin.py:924 msgid "Generate crisis intervention list" msgstr "Kriseninterventionsliste erstellen" -#: members/admin.py:936 +#: members/admin.py:932 msgid "Generate overview" msgstr "Hinweise für Jugendleiter erstellen" -#: members/admin.py:940 members/admin.py:972 +#: members/admin.py:936 members/admin.py:968 #: members/templates/admin/generate_seminar_report.html:21 msgid "Generate seminar report" msgstr "Landesjugendplan Antrag erstellen" -#: members/admin.py:953 +#: members/admin.py:949 msgid "Please select a mode." msgstr "Bitte wähle einen Modus aus." -#: members/admin.py:958 +#: members/admin.py:954 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:984 +#: members/admin.py:980 msgid "Generate SJR application" msgstr "SJR Antrag erstellen" -#: members/admin.py:988 +#: members/admin.py:984 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:992 +#: members/admin.py:988 msgid "" "Successfully submited statement. The finance department will notify you as " "soon as possible." @@ -367,7 +367,7 @@ msgstr "" "Abrechnung erfolgreich eingericht. Die Finanzabteilung wird sich bei dir so " "schnell wie möglich melden." -#: members/admin.py:995 +#: members/admin.py:991 #: members/templates/admin/freizeit_finance_overview.html:21 msgid "Finance overview" msgstr "Kostenübersicht" @@ -404,11 +404,11 @@ msgstr "Samstag" msgid "Sunday" msgstr "Sonntag" -#: members/models.py:57 members/models.py:989 +#: members/models.py:57 members/models.py:1034 msgid "Description" msgstr "Beschreibung" -#: members/models.py:63 members/models.py:981 +#: members/models.py:63 members/models.py:1026 #: members/templates/members/change_member.html:18 msgid "Activity" msgstr "Aktivität" @@ -441,7 +441,7 @@ msgstr "Jugendleiter" msgid "week day" msgstr "Wochentag" -#: members/models.py:80 members/models.py:1354 +#: members/models.py:80 members/models.py:1399 msgid "Starting time" msgstr "Zeitpunkt" @@ -453,7 +453,7 @@ msgstr "Endzeitpunkt" msgid "Contact email" msgstr "Kontakt Email" -#: members/models.py:93 members/models.py:272 +#: members/models.py:93 members/models.py:276 msgid "group" msgstr "Gruppe" @@ -473,7 +473,7 @@ msgstr "Nachname" msgid "Email confirmed" msgstr "Emailadresse bestätigt" -#: members/models.py:132 members/models.py:203 members/models.py:246 +#: members/models.py:132 members/models.py:203 members/models.py:250 msgid "phone number" msgstr "Telefonnummer (mobil)" @@ -493,463 +493,479 @@ msgstr "Gender" msgid "comments" msgstr "Kommentare" -#: members/models.py:243 +#: members/models.py:247 msgid "Alternative email confirmed" msgstr "Alternative E-Mail Adresse bestätigt" -#: members/models.py:247 +#: members/models.py:251 msgid "street and house number" msgstr "Straße und Hausnummer" -#: members/models.py:248 +#: members/models.py:252 msgid "Postcode" msgstr "PLZ" -#: members/models.py:250 +#: members/models.py:254 msgid "town" msgstr "Stadt" -#: members/models.py:251 +#: members/models.py:255 msgid "Address extra" msgstr "Adress-Zusatz" -#: members/models.py:252 +#: members/models.py:256 msgid "Country" msgstr "Land" -#: members/models.py:254 +#: members/models.py:258 msgid "Good conduct certificate presented on" msgstr "Führungszeugnis vorgelegt am" -#: members/models.py:255 +#: members/models.py:259 msgid "Joined on" msgstr "Eintritt" -#: members/models.py:256 +#: members/models.py:260 msgid "Left on" msgstr "Austritt" -#: members/models.py:257 +#: members/models.py:261 msgid "Has key" msgstr "Hat Jugendraumschlüssel" -#: members/models.py:258 +#: members/models.py:262 msgid "Has a free ticket for the climbing gym" msgstr "Hat Freikarte für Kletterhalle" -#: members/models.py:259 +#: members/models.py:263 msgid "DAV badge number" msgstr "DAV Mitgliedsnummer" -#: members/models.py:260 +#: members/models.py:264 msgid "Knows how to swim" msgstr "Kann schwimmen" -#: members/models.py:261 +#: members/models.py:265 msgid "Climbing badge" msgstr "Kletterschein" -#: members/models.py:262 +#: members/models.py:266 msgid "Alpine experience" msgstr "Alpine Erfahrung" -#: members/models.py:263 +#: members/models.py:267 msgid "Allergies" msgstr "Allergieen" -#: members/models.py:264 +#: members/models.py:268 msgid "Medication" msgstr "Medikamente" -#: members/models.py:265 +#: members/models.py:269 msgid "Tetanus vaccination" msgstr "Tetanusimpfung" -#: members/models.py:266 +#: members/models.py:270 msgid "Photos may be taken" msgstr "Fotoerlaubnis" -#: members/models.py:267 +#: members/models.py:271 msgid "Legal guardians" msgstr "Erziehungsberechtigte" -#: members/models.py:269 +#: members/models.py:273 msgid "May cancel a group appointment independently" msgstr "Darf sich allein von der Gruppenstunde abmelden" -#: members/models.py:276 +#: members/models.py:280 msgid "receives newsletter" msgstr "Erhält den Newsletter" -#: members/models.py:280 +#: members/models.py:284 msgid "created" msgstr "erstellt" -#: members/models.py:281 +#: members/models.py:285 msgid "Active" msgstr "Aktiv" -#: members/models.py:282 +#: members/models.py:286 msgid "registration form" msgstr "Anmeldeformular" -#: members/models.py:290 +#: members/models.py:295 msgid "image" msgstr "Bild" -#: members/models.py:299 +#: members/models.py:304 msgid "Echoed" msgstr "Rückgemeldet" -#: members/models.py:300 +#: members/models.py:305 msgid "Confirmed" msgstr "Bestätigt" -#: members/models.py:302 +#: members/models.py:307 msgid "Login data" msgstr "Zugangsdaten" -#: members/models.py:332 +#: members/models.py:309 +msgid "waitinglist application date" +msgstr "Wartelistenbewerbungsdatum" + +#: members/models.py:311 +msgid "" +"If the person registered from the waitinglist, this is their application " +"date." +msgstr "" +"Falls sich die Person über die Warteliste angemeldet hat ist dies ihr " +"Bewerbungsdatum." + +#: members/models.py:340 msgid "Good conduct certificate valid" msgstr "Führungszeugnis gültig" -#: members/models.py:414 +#: members/models.py:422 msgid "member" msgstr "Teilnehmer*in" -#: members/models.py:415 +#: members/models.py:423 msgid "members" msgstr "Teilnehmer*innen" -#: members/models.py:484 +#: members/models.py:501 +msgid "Upload registration form" +msgstr "Anmeldeformular hochladen" + +#: members/models.py:512 #, python-format msgid "New unconfirmed registration for group %(group)s" msgstr "Neue unbestätigte Registrierung für Gruppe %(group)s" -#: members/models.py:710 +#: members/models.py:738 msgid "Set login data for Kompass" msgstr "Zugangsdaten für Kompass wählen" -#: members/models.py:728 members/models.py:937 members/models.py:948 -#: members/models.py:1303 members/models.py:1310 +#: members/models.py:773 members/models.py:982 members/models.py:993 +#: members/models.py:1348 members/models.py:1355 msgid "Member" msgstr "Teilnehmer*in" -#: members/models.py:735 +#: members/models.py:780 msgid "Emergency contact" msgstr "Notfallkontakt" -#: members/models.py:736 +#: members/models.py:781 msgid "Emergency contacts" msgstr "Notfallkontakte" -#: members/models.py:756 +#: members/models.py:801 msgid "Unconfirmed registration" msgstr "Unbestätigte Registrierung" -#: members/models.py:757 +#: members/models.py:802 msgid "Unconfirmed registrations" msgstr "Unbestätigte Registrierungen" -#: members/models.py:776 members/models.py:821 +#: members/models.py:821 members/models.py:866 msgid "Waiter" msgstr "Wartende Person" -#: members/models.py:778 +#: members/models.py:823 msgid "Invitation date" msgstr "Einladungsdatum" -#: members/models.py:779 members/templates/members/reject_success.html:6 +#: members/models.py:824 members/templates/members/reject_success.html:6 #: members/templates/members/reject_success.html:11 msgid "Invitation rejected" msgstr "Einladung abgelehnt" -#: members/models.py:783 +#: members/models.py:828 msgid "Invitation to group" msgstr "Gruppeneinladung" -#: members/models.py:784 +#: members/models.py:829 msgid "Invitations to groups" msgstr "Gruppeneinladungen" -#: members/models.py:791 +#: members/models.py:836 msgid "Rejected" msgstr "Abgelehnt" -#: members/models.py:793 +#: members/models.py:838 msgid "Expired" msgstr "Abgelaufen" -#: members/models.py:795 +#: members/models.py:840 msgid "Undecided" msgstr "Ausstehend" -#: members/models.py:796 +#: members/models.py:841 msgid "Status" msgstr "Status" -#: members/models.py:807 +#: members/models.py:852 msgid "Do you want to tell us something else?" msgstr "Möchtest du uns noch etwas mitteilen?" -#: members/models.py:808 +#: members/models.py:853 msgid "application date" msgstr "Bewerbungsdatum" -#: members/models.py:810 +#: members/models.py:855 msgid "Last wait confirmation" msgstr "Letzte Wartebestätigung" -#: members/models.py:814 +#: members/models.py:859 msgid "Last reminder" msgstr "Letzte Erinnerung" -#: members/models.py:815 +#: members/models.py:860 msgid "Missed reminders" msgstr "Verpasste Erinnerungen" -#: members/models.py:822 +#: members/models.py:867 msgid "Waiters" msgstr "Warteliste" -#: members/models.py:837 +#: members/models.py:882 msgid "Latest group invitation" msgstr "Letzte Gruppeneinladung" -#: members/models.py:854 +#: members/models.py:899 msgid "Waiting status confirmed" msgstr "Wartelistenplatz bestätigt" -#: members/models.py:861 +#: members/models.py:906 msgid "Waiting confirmation needed" msgstr "Wartelistenplatzbestätigung erforderlich" -#: members/models.py:916 +#: members/models.py:961 msgid "Invitation to trial group meeting" msgstr "Einladung zu Schnupperstunde" -#: members/models.py:928 +#: members/models.py:973 msgid "Unregistered from waiting list" msgstr "Von der Warteliste abgemeldet" -#: members/models.py:942 +#: members/models.py:987 msgid "Comment" msgstr "Kommentar" -#: members/models.py:949 members/models.py:1311 +#: members/models.py:994 members/models.py:1356 msgid "Members" msgstr "Teilnehmer*innen" -#: members/models.py:983 +#: members/models.py:1028 msgid "Place" msgstr "Stützpunkt / Ort" -#: members/models.py:984 +#: members/models.py:1029 msgid "Destination (optional)" msgstr "ggf. Ziel" -#: members/models.py:986 +#: members/models.py:1031 msgid "e.g. a peak" msgstr "z.B. ein Gipfel" -#: members/models.py:987 +#: members/models.py:1032 msgid "Begin" msgstr "Anfang" -#: members/models.py:988 +#: members/models.py:1033 msgid "End (optional)" msgstr "Ende" -#: members/models.py:991 +#: members/models.py:1036 msgid "Groups" msgstr "Gruppen" -#: members/models.py:1004 +#: members/models.py:1049 msgid "Kilometers traveled" msgstr "Fahrstrecke in Kilometer" -#: members/models.py:1007 +#: members/models.py:1052 msgid "Categories" msgstr "Kategorien" -#: members/models.py:1008 +#: members/models.py:1053 msgid "easy" msgstr "leicht" -#: members/models.py:1008 +#: members/models.py:1053 msgid "medium" msgstr "mittel" -#: members/models.py:1008 +#: members/models.py:1053 msgid "hard" msgstr "schwer" -#: members/models.py:1018 members/models.py:1334 +#: members/models.py:1063 members/models.py:1379 #: members/templates/admin/freizeit_finance_overview.html:26 msgid "Excursion" msgstr "Ausfahrt" -#: members/models.py:1019 +#: members/models.py:1064 msgid "Excursions" msgstr "Ausfahrten" -#: members/models.py:1249 members/models.py:1325 members/models.py:1541 +#: members/models.py:1294 members/models.py:1370 members/models.py:1586 msgid "Title" msgstr "Titel" -#: members/models.py:1250 members/models.py:1268 members/models.py:1542 +#: members/models.py:1295 members/models.py:1313 members/models.py:1587 msgid "Date" msgstr "Datum" -#: members/models.py:1269 +#: members/models.py:1314 msgid "Location" msgstr "Ort" -#: members/models.py:1270 +#: members/models.py:1315 msgid "Topic" msgstr "Thema" -#: members/models.py:1294 +#: members/models.py:1339 msgid "Jugendleiter" msgstr "Jugendleiter" -#: members/models.py:1297 +#: members/models.py:1342 msgid "Klettertreff" msgstr "Klettertreff" -#: members/models.py:1298 +#: members/models.py:1343 msgid "Klettertreffs" msgstr "Klettertreffs" -#: members/models.py:1316 +#: members/models.py:1361 msgid "Password" msgstr "Passwort" -#: members/models.py:1319 +#: members/models.py:1364 msgid "registration password" msgstr "Registrierungspassort" -#: members/models.py:1320 +#: members/models.py:1365 msgid "registration passwords" msgstr "Registrierungspasswörter" -#: members/models.py:1327 +#: members/models.py:1372 msgid "Alpinistic goals" msgstr "Alpintechnische Ziele" -#: members/models.py:1328 +#: members/models.py:1373 msgid "Pedagogic goals" msgstr "Pädagogische Ziele" -#: members/models.py:1329 +#: members/models.py:1374 msgid "Content and methods" msgstr "Inhalte und Methoden" -#: members/models.py:1330 +#: members/models.py:1375 msgid "Evaluation" msgstr "Wertung" -#: members/models.py:1331 +#: members/models.py:1376 msgid "Experiences and possible improvements" msgstr "Erfahrungen und Verbesserungsvorschläge" -#: members/models.py:1340 members/models.py:1361 +#: members/models.py:1385 members/models.py:1406 msgid "LJP Proposal" msgstr "Seminarbericht" -#: members/models.py:1341 +#: members/models.py:1386 msgid "LJP Proposals" msgstr "Seminarberichte" -#: members/models.py:1355 +#: members/models.py:1400 msgid "Duration in hours" msgstr "Dauer in Stunden" -#: members/models.py:1358 +#: members/models.py:1403 msgid "Activity and method" msgstr "Art der Aktion inkl. Methode" -#: members/models.py:1366 +#: members/models.py:1411 msgid "Intervention" msgstr "Aktion" -#: members/models.py:1367 +#: members/models.py:1412 msgid "Interventions" msgstr "Aktionen" -#: members/models.py:1469 members/models.py:1499 +#: members/models.py:1514 members/models.py:1544 msgid "May list members" msgstr "Darf folgende Teilnehmer*innen listen" -#: members/models.py:1471 members/models.py:1501 +#: members/models.py:1516 members/models.py:1546 msgid "May view members" msgstr "Darf folgende Teilnehmer*innen anzeigen" -#: members/models.py:1473 members/models.py:1503 +#: members/models.py:1518 members/models.py:1548 msgid "May change members" msgstr "Darf folgende Teilnehmer*innen ändern" -#: members/models.py:1475 members/models.py:1505 +#: members/models.py:1520 members/models.py:1550 msgid "May delete members" msgstr "Darf folgende Teilnehmer*innen löschen" -#: members/models.py:1479 members/models.py:1509 +#: members/models.py:1524 members/models.py:1554 msgid "May list members of groups" msgstr "Darf Teilnehmer*innen folgender Gruppen listen" -#: members/models.py:1481 members/models.py:1511 +#: members/models.py:1526 members/models.py:1556 msgid "May view members of groups" msgstr "Darf Teilnehmer*innen folgender Gruppen anzeigen" -#: members/models.py:1483 members/models.py:1513 +#: members/models.py:1528 members/models.py:1558 msgid "May change members of groups" msgstr "Darf Teilnehmer*innen folgender Gruppen ändern" -#: members/models.py:1485 members/models.py:1515 +#: members/models.py:1530 members/models.py:1560 msgid "May delete members of groups" msgstr "Darf Teilnehmer*innen folgender Gruppen löschen" -#: members/models.py:1488 members/models.py:1489 members/models.py:1492 +#: members/models.py:1533 members/models.py:1534 members/models.py:1537 msgid "Permissions" msgstr "Berechtigungen" -#: members/models.py:1518 members/models.py:1519 members/models.py:1522 +#: members/models.py:1563 members/models.py:1564 members/models.py:1567 msgid "Group permissions" msgstr "Gruppenberechtigungen" -#: members/models.py:1528 +#: members/models.py:1573 msgid "Permission needed" msgstr "Freigabe erforderlich" -#: members/models.py:1531 +#: members/models.py:1576 msgid "Training category" msgstr "Fortbildungstyp" -#: members/models.py:1532 +#: members/models.py:1577 msgid "Training categories" msgstr "Fortbildungstypen" -#: members/models.py:1543 +#: members/models.py:1588 msgid "Category" msgstr "Kategorien" -#: members/models.py:1544 +#: members/models.py:1589 msgid "Comments" msgstr "Kommentar" -#: members/models.py:1545 +#: members/models.py:1590 msgid "Participated" msgstr "Teilgenommmen" -#: members/models.py:1546 +#: members/models.py:1591 msgid "Passed" msgstr "Bestanden" -#: members/models.py:1549 +#: members/models.py:1594 msgid "Training" msgstr "Fortbildung" -#: members/models.py:1550 +#: members/models.py:1595 msgid "Trainings" msgstr "Fortbildungen" @@ -1392,6 +1408,9 @@ msgstr "Registrierung fehlgeschlagen" #: members/templates/members/register_password.html:6 #: members/templates/members/register_success.html:6 #: members/templates/members/register_wrong_password.html:6 +#: members/templates/members/upload_registration_form.html:6 +#: members/templates/members/upload_registration_form_invalid.html:6 +#: members/templates/members/upload_registration_form_success.html:6 msgid "Registration" msgstr "Registrierung" @@ -1470,6 +1489,9 @@ msgstr "Diese Datei ist größer als die maximal erlaubte Dateigröße von 5 MiB #: members/templates/members/register_password.html:11 #: members/templates/members/register_success.html:11 #: members/templates/members/register_wrong_password.html:11 +#: members/templates/members/upload_registration_form.html:11 +#: members/templates/members/upload_registration_form_invalid.html:11 +#: members/templates/members/upload_registration_form_success.html:11 msgid "Register" msgstr "Registrieren" @@ -1491,14 +1513,24 @@ msgstr "" "das Passwort ein, das du von deinem Jugendleiter erhalten hast." #: members/templates/members/register_success.html:13 -msgid "Your registration succeeded." -msgstr "Deine Registrierung war erfolgreich." +msgid "" +"Your registration succeeded. We summarized your registration in this " +"registration\n" +"form. Please download it, fill in the remaining fields and read the general " +"conditions. If you agree,\n" +"please sign the document and upload a scan or image here." +msgstr "" +"Deine Registrierung war erfolgreich. Wir haben deine Daten in diesem " +"Anmeldeformular zusammengefasst\n" +"Bitte lade es herunter, fülle die verbleibenden Felder aus und lese die " +"allgemeinen Teilnahmebedingungen. Falls du zustimmst,\n" +"unterschreibe das Formular und lade hier einen Scan oder ein Bild hoch." -#: members/templates/members/register_success.html:16 +#: members/templates/members/register_success.html:18 msgid "Please remember to confirm your email address." msgstr "Bitte denk daran, deine E-Mail Adresse(n) zu bestätigen." -#: members/templates/members/register_success.html:17 +#: members/templates/members/register_success.html:19 msgid "" "The coordinating team will process your registration when your email address " "is confirmed." @@ -1506,7 +1538,7 @@ msgstr "" "Unser Jugendleiterteam wird deine Registrierung bearbeiten, wenn deine " "Emailadressen bestätigt sind." -#: members/templates/members/register_success.html:19 +#: members/templates/members/register_success.html:21 msgid "" "The coordinating team will process your registration as soon as possible." msgstr "" @@ -1604,6 +1636,44 @@ msgstr "" "abgelehnt. Wenn ein Platz in einer anderen Gruppe frei wird, erhältst du " "eine neue Einladung.\n" +#: members/templates/members/upload_registration_form.html:14 +#, python-format +msgid "" +"We summarized your registration in our registration\n" +"form. Please download it,\n" +"fill in the remaining fields and read the general conditions. If you agree,\n" +"please sign the document and upload a scan or image here." +msgstr "" +"Wir haben deine Anmeldung in unserem Anmeldeformular zusammgengefasst. Bitte " +"lade es herunter, fülle die " +"verbleibenden Felder aus und lese unsere Teilnahmebedingungen. Falls du " +"zustimmst, unterschreibe bitte das Formular und lade hier einen Scan oder " +"ein Bild hoch." + +#: members/templates/members/upload_registration_form.html:19 +msgid "" +"If you are not an adult yet, please let someone responsible for you sign the " +"agreement." +msgstr "" +"Bist du noch nicht volljährig? Dann lass bitte eine erziehungsberechtigte " +"Person das Anmeldeformular unterschreiben." + +#: members/templates/members/upload_registration_form.html:30 +msgid "Upload" +msgstr "Hochladen" + +#: members/templates/members/upload_registration_form_invalid.html:13 +msgid "The supplied key for uploading a registration form is invalid." +msgstr "Der verwendete Link zum Hochladen eines Anmeldeformulars ist ungültig." + +#: members/templates/members/upload_registration_form_success.html:13 +msgid "" +"Thank you for uploading the registration form. Our team will process your " +"registration shortly." +msgstr "" +"Danke für das Hochladen des Anmeldeformulars. Unser Jugendleiterteam wird " +"deine Registrierung so schnell wie möglich bearbeiten." + #: members/templates/members/waiting_confirmation_invalid.html:6 #: members/templates/members/waiting_confirmation_invalid.html:11 msgid "Waiting confirmation failed" @@ -1644,44 +1714,47 @@ msgstr "" "Danke %(prename)s für dein Interesse auf der Warteliste zu bleiben.\n" "Dein Platz wurde bestätigt." -#: members/views.py:36 members/views.py:59 +#: members/views.py:37 members/views.py:76 msgid "Prename of the member." msgstr "Vorname des Teilnehmenden" -#: members/views.py:37 members/views.py:60 +#: members/views.py:38 members/views.py:77 msgid "Lastname of the member." msgstr "Nachname des Teilnehmenden" -#: members/views.py:38 +#: members/views.py:39 msgid "phone number of child or parent" msgstr "Telefonnummer des Teilnehmenden oder einer Kontaktperson" -#: members/views.py:39 +#: members/views.py:40 msgid "email of child if available, otherwise parental email address" msgstr "" "Falls verfügbar, E-Mailadresse des Teilnehmenden, sonst einer Kontaktperson" -#: members/views.py:40 +#: members/views.py:41 msgid "optional additional email address" msgstr "Optionale zusätzliche E-Mailadresse" -#: members/views.py:97 members/views.py:186 +#: members/views.py:114 members/views.py:203 msgid "The entered password is wrong." msgstr "Das eingegebene Passwort ist falsch." -#: members/views.py:132 members/views.py:138 members/views.py:146 -#: members/views.py:343 +#: members/views.py:149 members/views.py:155 members/views.py:163 +#: members/views.py:423 msgid "invalid" msgstr "ungültig" -#: members/views.py:149 members/views.py:345 +#: members/views.py:166 members/views.py:425 msgid "expired" msgstr "abgelaufen" -#: members/views.py:158 +#: members/views.py:175 msgid "Invalid emergency contacts" msgstr "Ungültige Notfallkontakte" +#~ msgid "Your registration succeeded." +#~ msgstr "Deine Registrierung war erfolgreich." + #~ msgid "Please choose one of the listed modes." #~ msgstr "Bitte wähle einen der obigen Modi." diff --git a/jdav_web/members/migrations/0032_member_upload_registration_form_key.py b/jdav_web/members/migrations/0032_member_upload_registration_form_key.py new file mode 100644 index 0000000..e02eb03 --- /dev/null +++ b/jdav_web/members/migrations/0032_member_upload_registration_form_key.py @@ -0,0 +1,18 @@ +# Generated by Django 4.0.1 on 2024-12-15 22:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('members', '0031_member_waitinglist_application_date'), + ] + + operations = [ + migrations.AddField( + model_name='member', + name='upload_registration_form_key', + field=models.CharField(default='', max_length=32), + ), + ] diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index 273b92e..4de99ee 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -232,6 +232,10 @@ class Person(Contact): return "---" return self.birth_date.strftime("%d.%m.%Y") + @property + def gender_str(self): + return self.gender_choices[self.gender][1] + class Member(Person): """ @@ -287,6 +291,7 @@ class Member(Person): 'image/jpeg', 'image/png', 'image/gif']) + upload_registration_form_key = models.CharField(max_length=32, default="") image = RestrictedFileField(verbose_name=_('image'), upload_to='people', blank=True, @@ -460,6 +465,7 @@ class Member(Person): self.waitinglist_application_date = waiter.application_date if self.alternative_email: self.confirmed_alternative_mail = False + self.upload_registration_form_key = uuid.uuid4().hex self.save() if self.registration_ready(): @@ -471,7 +477,8 @@ class Member(Person): def registration_ready(self): """Returns if the member is currently unconfirmed and all email addresses are confirmed.""" - return not self.confirmed and self.confirmed_alternative_mail and self.confirmed_mail + return not self.confirmed and self.confirmed_alternative_mail and self.confirmed_mail\ + and self.registration_form def confirm_mail(self, key): ret = super().confirm_mail(key) @@ -479,6 +486,22 @@ class Member(Person): self.notify_jugendleiters_about_confirmed_mail() return ret + def validate_registration_form(self): + self.upload_registration_form_key = '' + self.save() + if self.registration_ready(): + self.notify_jugendleiters_about_confirmed_mail() + + def send_upload_registration_form_link(self): + if not self.upload_registration_form_key: + return + print(self.name, self.upload_registration_form_key) + link = prepend_base_url(reverse('members:upload_registration_form') + "?key="\ + + self.upload_registration_form_key) + self.send_mail(_('Upload registration form'), + settings.UPLOAD_REGISTRATION_FORM_TEXT.format(name=self.prename, + link=link)) + def notify_jugendleiters_about_confirmed_mail(self): group = ", ".join([g.name for g in self.group.all()]) # notify jugendleiters of group of registration diff --git a/jdav_web/members/templates/members/register_success.html b/jdav_web/members/templates/members/register_success.html index dcadbf4..1acdab8 100644 --- a/jdav_web/members/templates/members/register_success.html +++ b/jdav_web/members/templates/members/register_success.html @@ -10,7 +10,9 @@

{% trans "Register" %}

-

{% trans "Your registration succeeded." %} +

{% blocktrans %}Your registration succeeded. We summarized your registration in this registration +form. Please download it, fill in the remaining fields and read the general conditions. If you agree, +please sign the document and upload a scan or image here.{% endblocktrans %} {% if needs_mail_confirmation %} {% trans "Please remember to confirm your email address." %} diff --git a/jdav_web/members/templates/members/registration_form.tex b/jdav_web/members/templates/members/registration_form.tex new file mode 100644 index 0000000..63c4f01 --- /dev/null +++ b/jdav_web/members/templates/members/registration_form.tex @@ -0,0 +1,406 @@ +{% load tex_extras %} + +\documentclass{article} + +\usepackage[utf8]{inputenc} +\usepackage{booktabs} +\usepackage{amssymb} +\usepackage{cmbright} +\usepackage{graphicx} +\usepackage{textpos} +\usepackage[colorlinks, breaklinks]{hyperref} +\usepackage{float} +\usepackage[margin=1in]{geometry} +\usepackage{array} +\usepackage{tabularx} +\usepackage{ltablex} + +\usepackage{tikz} +\usepackage{setspace} +\usepackage{pbox} + +\newcommand{\picpos}[4]{ + \begin{textblock*}{#1}(#2, #3) + \includegraphics[width=\textwidth]{#4} + \end{textblock*} +} + +% set formatting +\setlength\parindent{0pt} +\setlength\parskip{0.6em plus 0.1em minus 0.1em} + +% custom url command for properly formatting emails +\DeclareUrlCommand\Email{\urlstyle{same}} +% allow linebreak after every character +\expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks +\do\/\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k +\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v +\do\w\do\x\do\y\do\z +\do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K +\do\L\do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V +\do\W\do\X\do\Y\do\Z} + +\renewcommand{\arraystretch}{1} + +\newcolumntype{L}{>{\hspace{0pt}}X} +\newcommand{\tickedbox}{ + \makebox[0pt][l]{$\square$}\raisebox{.15ex}{\hspace{0.1em}$\checkmark$} +} +\newcommand{\checkbox}{ + \makebox[0pt][l]{$\square$} +} + +% algemeines Layout Formular-Elemente +\renewcommand*{\DefaultOptionsofRadio}{print,radio, radiosymbol=6, width=\baselineskip, bordercolor={black}, borderwidth=0pt} +\renewcommand*{\DefaultOptionsofText}{print,bordercolor={black}, backgroundcolor=white, borderwidth=0pt} + +\renewcommand{\LayoutTextField}[2]{% label, field +\setbox0=\hbox{#1\unskip}\ifdim\wd0=0pt +\setbox1=\hbox{#2\unskip}\ifdim\ht1>3ex +% Multiline +\begin{tikzpicture}[every node/.style={inner sep=0,outer sep=0}] + \node[anchor=west] (TextFieldNode) at (0cm,0cm) {#2}; + \draw [thick] (current bounding box.south west) rectangle (current bounding box.north east); +\end{tikzpicture}% +\else +% Inline field, lowered a little bit to be better integrated into the text +\raisebox{-3.2pt}{\begin{tikzpicture}[every node/.style={inner sep=0,outer sep=0}] + \node[anchor=west] (TextFieldNode) at (0cm,0cm) {#2}; + \draw[thick] ([yshift=-0.3ex]TextFieldNode.south west) -- ([yshift=-0.3ex]TextFieldNode.south east); +\end{tikzpicture}}% +\fi +\else +% Field with label below it +\begin{tikzpicture}[every node/.style={inner sep=0,outer sep=0}] + \node[anchor=west] (TextFieldNode) at (0cm,2ex) {#2}; + \draw[thick] ([yshift=-0.3ex]TextFieldNode.south west) -- ([yshift=-0.3ex]TextFieldNode.south east); + \node[anchor=west,font=\small] at (0cm,-0.9ex) {#1}; +\end{tikzpicture}% +\fi +} + +\newcommand{\radiosize}{0.33cm} +\newcommand{\yesnoticks}[1]{% +\raisebox{-3.2pt}{\begin{tikzpicture}[every node/.style={inner sep=0,outer sep=0}] + \node[anchor=west,style={inner sep=2px}] (FieldYes) at (0cm,0cm) {\ChoiceMenu[radio=true,name=#1,width=\radiosize,height=\radiosize]{}{=Yes}}; + \node[anchor=west] (LabelYes) at ([xshift=0.7ex]FieldYes.east) {Ja}; + \node[anchor=west,style={inner sep=2px}] (FieldNo) at ([xshift=1ex]LabelYes.east) {\ChoiceMenu[radio=true,name=#1,width=\radiosize,height=\radiosize]{}{=No}}; + \node[anchor=west] (LabelNo) at ([xshift=0.7ex]FieldNo.east) {Nein}; + \draw [thick] ([xshift=-(\radiosize+0.15cm),yshift=-(\radiosize+0.15cm)]FieldYes.north east) rectangle (FieldYes.north east); + \draw [thick] ([xshift=-(\radiosize+0.15cm),yshift=-(\radiosize+0.15cm)]FieldNo.north east) rectangle (FieldNo.north east); +\end{tikzpicture}}% +} + +% Formularfeld, leer, editierbar +\newcommand{\field}[2]{\TextField[width=#2]{#1}} + +% Formularfeld, vorbefüllt, editierbar +\newcommand{\fieldpf}[3]{\TextField[width=#2,value=#3]{#1}} + +% Formularfeld, vorbefüllt, nicht editierbar +\newcommand{\fieldpfro}[3]{\TextField[width=#2,value=#3,readonly]{#1}} + +% Formularfeld, in den Fließtext integriert +\newcommand{\fieldinline}[2]{\TextField[width=#2,name=#1]{}} + +% Ja-Nein Antwort +\newcommand{\yesno}[2]{\pbox{0.8\textwidth}{\setstretch{1}#1}\hfill\yesnoticks{#2}} + +% Dummy-Formularfeld: Sieht genauso aus, ist aber statisch, vorbefüllt, nicht editierbar. +\newcommand{\fieldd}[3]{% Label, width, prefilled text +\begin{tikzpicture}[every node/.style={inner sep=0,outer sep=0}] + % Draw the static field rectangle + \node[anchor=west] (DummyFieldNode) at (0cm,2ex) {\strut #3}; % Prefilled text + \draw[thick] ([xshift=0cm,yshift=-0.3ex]DummyFieldNode.south west) -- ([xshift=#2,yshift=-0.3ex]DummyFieldNode.south west); + + % Label underneath + \node[anchor=west,font=\small] at (0cm,-1.2ex) {#1}; +\end{tikzpicture}% +} + + +\begin{document} +% HEADER RIGHT +\picpos{4.5cm}{11.5cm}{0cm}{/app/jdav_web/static/general/img/dav_logo_hd.png} +\begin{textblock*}{5cm}(11.5cm, 2.3cm) + \begin{flushright} + \small + \noindent Deutscher Alpenverein e. V. \\ + Sektion {{ settings.SEKTION }} \\ + {{ settings.SEKTION_STREET }} \\ + {{ settings.SEKTION_TOWN }} \\ + Tel.: {{ settings.SEKTION_TELEPHONE }} \\ + Fax: {{ settings.SEKTION_TELEFAX }} \\ + {{ settings.SEKTION_CONTACT_MAIL }} \\ + \end{flushright} +\end{textblock*} + +% HEADLINE + + +\textbf{\LARGE Anmeldung und Einverständniserklärung} + +\textbf{Wir melden unser Kind verbindlich zur Jugendgruppe an:} + +\begin{Form} + \fieldd{Vor- und Nachname des Kindes}{0.65\linewidth}{ {{ member.name|esc_all }} } + + \fieldd{Geburtsdatum}{0.3\linewidth}{ {{ member.birth_date_str|esc_all }} } \hfill + \fieldd{Gender}{0.3\linewidth}{ {{ member.gender_str|esc_all }} } \hspace{0.35\linewidth} + + \fieldpf{DAV-Mitglieds-Nr.}{0.3\linewidth}{ {{ member.dav_badge_no|esc_all }} } \hfill + \fieldd{Telefon (mobil)*}{0.3\linewidth}{ {{ member.phone_number }} } \hspace{0.35\linewidth} + + \fieldd{Adresse}{0.65\linewidth}{ {{ member.street }}, {{ member.plz }} {{ member.town }} } + + \fieldd{E-Mail}{0.65\linewidth}{ {{ member.email|esc_all }} } + +{\small *wenn vorhanden, Kontaktdaten des Kindes, ansonsten einer Kontaktperson} + +\textbf{Notfallkontakte:} + +\begin{tabular*}{\linewidth}{@{\extracolsep{\fill}}lll} + Vollständiger Name & E-Mail & Telefon (mobil) \\ + \midrule +{% for c in member.emergencycontact_set.all %} +{{ c.name }} & {{ c.email }} & {{ c.phone_number }} \\ +{% endfor %} +\bottomrule +\end{tabular*} + +\textbf{Medizinische Informationen:} + +Gemäß den Teilnahmebedingungen verpflichten wir uns, vollständige +Angaben zu etwaigen gesundheitlichen Einschränkungen oder Erkrankungen unseres +Kindes zu machen: + +\field{Allergien}{\linewidth} + +\field{Medikamenten-Einnahmen}{\linewidth} + +\field{Weitere Informationen zu Einschränkungen}{\linewidth} + +\yesno{Unser Kind hat eine aktuelle Tetanus-Schutzimpfung}{tetanus} + +\yesno{Unser Kind hat sichere Schwimmkenntnisse}{schwimmen} + +\textbf{Einwilligung zu den Teilnahmebedingungen} + +Mit unserer Unterschrift bestätigen wird, dass wir die beigelegten +Teilnahmebedingungen (Stand 06.12.2024) gelesen und verstanden haben. Diesen Bedingungen +stimmen wir zu. Wir versichern, jegliche Änderungen an oben angegebenen +Daten umgehend den Jugendleiter*innen mitzuteilen. + + +\yesno{Wir stimmen der Bildnutzung in den Sektionsmedien gemäß +Teilnahmebedingungen zu}{bildnutzung} +\yesno{Unser Kind darf sich selbstständig von der Gruppenstunde abmelden.}{abmelden} + +\vspace{10pt} +\vfill + +\field{Ort, Datum}{0.28\linewidth}{}\hfill +\fieldd{Unterschrift Kind}{0.28\linewidth}{}\hfill +\fieldd{Unterschrift des/der Erziehungsberechtigten}{0.4\linewidth}{} + +Bitte diese Seite ausgefüllt und unterschrieben im Registrierungsformular hochladen. +\end{Form} + +\newpage + +\textbf{\large Informationen und Bedingungen zur Teilnahme an den +JDAV-Jugendgruppen der DAV-Sektion Heidelberg} + +{\small Stand: 06.12.2024} + + +Liebes neues Jugendgruppenmitglied, + +herzlich willkommen als neues aktives Mitglied unserer Sektionsjugend! +Das Zentrum unserer Jugendarbeit sind die wöchentlichen Gruppenstunden, +in denen wir in einer festen Gruppe gemeinsam Klettern oder Fahrrad fahren, Spiele spielen +und Spaß haben. Uns ist wichtig, dass du regelmäßig dabei bist und +deinen Jugendleiter*innen immer bescheid gibst, wenn du mal nicht kommen +kannst. + +Zu unserer Jugendarbeit gehören aber auch regelmäßig Ausfahrten und +Veranstaltungen rund um die Kletterhalle. Ausfahrten können ein- oder +mehrtägige Ausflüge zum Klettern in der Region, aber auch in die +Mittelgebirge oder Alpen sein, wo wir gemeinsam Wandern, Bergsteigen, +Klettern... Veranstaltungen in der Kletterhalle können zum Beispiel +gemeinsame Übernachtungen in der Gruppe oder größere Aktivitäten mit der +ganzen Sektionsjugend sein, z.B. unsere jährliche Jugendvollversammlung. +Hier treffen wir basisdemokratisch Entscheidungen über die Zukunft der +Jugendarbeit und wählen Stellvertreter*innen, die die Jugendarbeit +organisieren. Auch du hast hier eine Stimme! Wir freuen uns, wenn du bei +möglichst vielen Aktivitäten dabei sein kannst. + +Deine Jugendleiter*innen +\\[3mm] +\_\_ +\\[3mm] +Liebe Eltern, + +Bitte lesen Sie diese Teilnahmebedingungen für unsere Jugendarbeit genau +und bestätigen Ihr Einverständnis mit Ihrer Unterschrift auf unserer +Einverständniserklärung. + +\textbf{Durchgeführte Aktivitäten} + +In unserer Jugendgruppe bieten wir im weitesten Sinne verschiedene +Aktivitäten und Aktionen an, zu denen wir die Jugendlichen vorher +entsprechend einweisen, dazu gehören u.a.: + +\begin{itemize} + \setlength\itemsep{1pt} +\item + Jugendgruppenstunden mit Spielen, Übungen usw. +\item + Outdoorspiele in verschiedenen Formen +\item + Klettern an künstlichen Anlagen und natürlichen Felsen +\item + Wanderungen, Bachwanderungen oder Klettersteigbegehungen +\item Fahrradtouren z.B. mit dem Mountainbike +\item + natursportliche Aktivität mit den dort typischen Bedingungen und + Risiken +\item + Gruppenübergreifende Ausfahrten und Veranstaltungen der JDAV + Heidelberg. +\end{itemize} + +Während aller Aktivitäten werden die Jugendlichen von unseren +Jugendleiter*innen, die eine entsprechende Qualifizierung (DAV +Jugendleiterausbildung / DAV Fachübungsleiter usw.) vorweisen können, +betreut und beaufsichtigt. + +Um teilnehmen zu können, müssen die Jugendlichen Mitglied in der Sektion +Heidelberg des DAV sein und eine von den Erziehungsberechtigten +unterschriebene Einverständniserklärung abgeben. Wir erwarten eine +möglichst regelmäßige Teilnahme an den Gruppenstunden. Bei wiederholt +unentschuldigtem Fehlen (ab 3 mal) kann es zum Ausschluss aus der Gruppe +kommen. + +Mit Ihrer Unterschrift wird außerdem die aktuelle Fassung der +\textbf{Benutzer- und Hallenordnung der Kletterhalle} der Sektion +Heidelberg (Harbigweg 20, 69124 Heidelberg), anerkannt. Die Benutzer- +und Hallenordnung hängt ständig in der Kletterhalle aus. Den Anweisungen +des Personals ist Folge zu leisten. Die Gruppenstunden finden +gelegentlich auch \textbf{außerhalb des Vereinszentrums} im Harbigweg +20, 69124 Heidelberg, statt. Mit Ihrer Unterschrift wird auch +zugestimmt, dass diese Gruppenstunden zu anderen Zeiten und an anderen +Orten durchgeführt werden können. + +\textbf{Haftung} + +Mit Ihrer Unterschrift erklären Sie sich damit einverstanden, dass Ihr +Kind an den oben genannten +Aktivitäten im weitesten Sinne teilnehmen darf. Sie sind sich bewusst, +dass natursportliche und vor allem klettersportliche Aktivitäten mit +Risiken verbunden sind, die sich nicht vollständig ausschließen lassen. +Sie erkennen damit an, dass die Sektion Heidelberg und ihre +verantwortlichen ehrenamtlichen +Jugendleiter*innen - soweit gesetzlich zulässig - von jeglicher Haftung +sowohl im Grunde als auch +der Höhe nach freigestellt werden, die über den im Rahmen der +Mitgliedschaft im DAV, +sowie für die ehrenamtliche Tätigkeit bestehenden Versicherungsschutz +hinausgehen. Dies +gilt nicht für die Verursachung von Unfällen durch Vorsatz oder grobe +Fahrlässigkeit. + +Weitere Informationen zum DAV und dessen Jugendarbeit aber auch z.B. zu +den +Versicherungsbedingungen oder aktuellen Informationen finden Sie unter +\href{http://www.alpenverein.de}{www.alpenverein.de} + +\textbf{Weitere Informationen zu Ihrem Kind} + +Sie verpflichten sich, die Jugendleiter*innen insbesondere über folgende +persönliche Einschränkungen und zu informieren (über die angehängte +Einverständniserklärung): + +\begin{itemize} + \setlength\itemsep{1pt} +\item + relevante allergische Reaktionen +\item + relevante asthmatische Erkrankungen oder Beschwerden +\item + relevante Herzkreislauferkrankungen oder Beschwerden +\item + Diabetes +\item + Epilepsie oder relevante Nervenerkrankungen +\item + relevante orthopädische Probleme (Bandscheibenvorfall, Verrenkungen, + Knochenbrüche\ldots) +\item + relevante Infektionskrankheiten +\item + ADHS oder sonstige Aufmerksamkeitsstörungen +\item + Einnahme von dringend notwendigen Medikamenten +\item + relevante Suchterkrankungen, psychische Erkrankungen oder + Einschränkungen +\item + sonstige relevante Beeinträchtigungen oder Erkrankungen (Bspw. + Inkontinenz) +\end{itemize} + +Die JDAV weist darauf hin, dass durchgeführte Aktivitäten auch im Freien +in Risikogebieten für +von Zecken übertragene FSME oder Borreliose stattfinden können +(Rhein-Neckar Kreis gehört zu den Risikogebieten). Eine Impfung wird +empfohlen. + +Ergeben sich Veränderungen bei den angegebenen Informationen, dann +müssen die Jugendleiter*innen umgehend darüber informiert werden. + +\textbf{Datenschutz} + +Sie sind damit einverstanden, dass die JDAV Heidelberg die von Ihnen +angegebenen Daten elektronisch erfasst, verarbeitet und speichert. Diese +Datenverarbeitung erfolgt in Rechenzentren in der Schweiz oder Staaten +des Europäischen Wirtschaftsraums (EWR). Nach einer Beendigung der +Mitgliedschaft werden Ihre personenbezogenen Daten gelöscht, soweit sie +nicht, entsprechend den steuerrechtlichen Vorgaben, aufbewahrt werden +müssen. Die Datenverarbeitung erfolgt auf Grundlage des Art. 6 Abs. 1 S. +1 lit. b DSGVO. Die jeweils aktuelle Datenschutzerklärung kann jederzeit +auf der Website unter \href{https://www.jdav-hd.de/datenschutz}{www.jdav-hd.de/datenschutz} abgerufen +werden. + +Die Jugendleiter*innen sind im Rahmen ihrer Tätigkeiten über +Sektions-E-Mailadressen nach dem Schema +vorname.nachname@alpenverein-heidelberg.de erreichbar, die Jugendleiter*innen einer Gruppe über +Adressen nach dem Schema leitung.gruppenname@jdav-hd.de. Bitte nutzen Sie +für die Kontaktaufnahme vorrangig diese E-Mailadressen. + +Zur Weitergabe der Daten im Rahmen einer Mitgliedschaft im Alpenverein +Heidelberg beachten Sie bitte auch die Datenschutzerklärung der Sektion +unter \href{https://www.alpenverein-heidelberg.de/datenschutz}{www.alpenverein-heidelberg.de/datenschutz}. + +\textbf{Abbildungen in Sektionsmedien:} + +Selbstverständlich gehören auf eine lebendig gestaltete Homepage sowie +andere Medien der Sektion (Aushänge im Vereinsheim, Sektionsnachrichten, +etc.) auch Berichte und Fotos von Veranstaltungen der Jugend, bei denen +vielleicht auch Ihr Kind dabei ist. Da gemäß § 22 KunstUrhG, Bilder +jedoch nur mit Einwilligung des Abgebildeten bzw. seiner gesetzlichen +Vertreter verbreitet oder öffentlich zur Schau gestellt werden dürfen, +bitten wir Sie um Erlaubnis. Mit Ihrer Einverständniserklärung +erleichtern Sie uns wesentlich die Arbeit und wir können so unseren +lebendigen Verein gut nach außen darstellen. + +Wenn sie in der Einverständniserklärung ihre Einwilligung geben, +erklären Sie sich damit einverstanden, dass von den Jugendleiter*innen +ausgewählte Fotos und Aufnahmen, auf denen Ihr Kind zu sehen ist, mit +den anderen Kindern geteilt werden, auf der Homepage, sowie im +Sektionsheft der DAV-Sektion Heidelberg und allen anderen Vereinsmedien +erscheinen und veröffentlicht werden dürfen. Diese Einwilligung kann +jederzeit widerrufen werden. + + +\end{document} diff --git a/jdav_web/members/templates/members/registration_form_empty.tex b/jdav_web/members/templates/members/registration_form_empty.tex new file mode 100644 index 0000000..e79025a --- /dev/null +++ b/jdav_web/members/templates/members/registration_form_empty.tex @@ -0,0 +1,405 @@ +{% load tex_extras %} + +\documentclass{article} + +\usepackage[utf8]{inputenc} +\usepackage{booktabs} +\usepackage{amssymb} +\usepackage{cmbright} +\usepackage{graphicx} +\usepackage{textpos} +\usepackage[colorlinks, breaklinks]{hyperref} +\usepackage{float} +\usepackage[margin=1in]{geometry} +\usepackage{array} +\usepackage{tabularx} +\usepackage{ltablex} + +\usepackage{tikz} +\usepackage{setspace} +\usepackage{pbox} + +\newcommand{\picpos}[4]{ + \begin{textblock*}{#1}(#2, #3) + \includegraphics[width=\textwidth]{#4} + \end{textblock*} +} + +% set formatting +\setlength\parindent{0pt} +\setlength\parskip{0.6em plus 0.1em minus 0.1em} + +% custom url command for properly formatting emails +\DeclareUrlCommand\Email{\urlstyle{same}} +% allow linebreak after every character +\expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks +\do\/\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k +\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v +\do\w\do\x\do\y\do\z +\do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K +\do\L\do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V +\do\W\do\X\do\Y\do\Z} + +\renewcommand{\arraystretch}{1} + +\newcolumntype{L}{>{\hspace{0pt}}X} +\newcommand{\tickedbox}{ + \makebox[0pt][l]{$\square$}\raisebox{.15ex}{\hspace{0.1em}$\checkmark$} +} +\newcommand{\checkbox}{ + \makebox[0pt][l]{$\square$} +} + +% algemeines Layout Formular-Elemente +\renewcommand*{\DefaultOptionsofRadio}{print,radio, radiosymbol=6, width=\baselineskip, bordercolor={black}, borderwidth=0pt} +\renewcommand*{\DefaultOptionsofText}{print,bordercolor={black}, backgroundcolor=white, borderwidth=0pt} + +\renewcommand{\LayoutTextField}[2]{% label, field +\setbox0=\hbox{#1\unskip}\ifdim\wd0=0pt +\setbox1=\hbox{#2\unskip}\ifdim\ht1>3ex +% Multiline +\begin{tikzpicture}[every node/.style={inner sep=0,outer sep=0}] + \node[anchor=west] (TextFieldNode) at (0cm,0cm) {#2}; + \draw [thick] (current bounding box.south west) rectangle (current bounding box.north east); +\end{tikzpicture}% +\else +% Inline field, lowered a little bit to be better integrated into the text +\raisebox{-3.2pt}{\begin{tikzpicture}[every node/.style={inner sep=0,outer sep=0}] + \node[anchor=west] (TextFieldNode) at (0cm,0cm) {#2}; + \draw[thick] ([yshift=-0.3ex]TextFieldNode.south west) -- ([yshift=-0.3ex]TextFieldNode.south east); +\end{tikzpicture}}% +\fi +\else +% Field with label below it +\begin{tikzpicture}[every node/.style={inner sep=0,outer sep=0}] + \node[anchor=west] (TextFieldNode) at (0cm,2ex) {#2}; + \draw[thick] ([yshift=-0.3ex]TextFieldNode.south west) -- ([yshift=-0.3ex]TextFieldNode.south east); + \node[anchor=west,font=\small] at (0cm,-0.9ex) {#1}; +\end{tikzpicture}% +\fi +} + +\newcommand{\radiosize}{0.33cm} +\newcommand{\yesnoticks}[1]{% +\raisebox{-3.2pt}{\begin{tikzpicture}[every node/.style={inner sep=0,outer sep=0}] + \node[anchor=west,style={inner sep=2px}] (FieldYes) at (0cm,0cm) {\ChoiceMenu[radio=true,name=#1,width=\radiosize,height=\radiosize]{}{=Yes}}; + \node[anchor=west] (LabelYes) at ([xshift=0.7ex]FieldYes.east) {Ja}; + \node[anchor=west,style={inner sep=2px}] (FieldNo) at ([xshift=1ex]LabelYes.east) {\ChoiceMenu[radio=true,name=#1,width=\radiosize,height=\radiosize]{}{=No}}; + \node[anchor=west] (LabelNo) at ([xshift=0.7ex]FieldNo.east) {Nein}; + \draw [thick] ([xshift=-(\radiosize+0.15cm),yshift=-(\radiosize+0.15cm)]FieldYes.north east) rectangle (FieldYes.north east); + \draw [thick] ([xshift=-(\radiosize+0.15cm),yshift=-(\radiosize+0.15cm)]FieldNo.north east) rectangle (FieldNo.north east); +\end{tikzpicture}}% +} + +% Formularfeld, leer, editierbar +\newcommand{\field}[2]{\TextField[width=#2]{#1}} + +% Formularfeld, vorbefüllt, editierbar +\newcommand{\fieldpf}[3]{\TextField[width=#2,value=#3]{#1}} + +% Formularfeld, vorbefüllt, nicht editierbar +\newcommand{\fieldpfro}[3]{\TextField[width=#2,value=#3,readonly]{#1}} + +% Formularfeld, in den Fließtext integriert +\newcommand{\fieldinline}[2]{\TextField[width=#2,name=#1]{}} + +% Ja-Nein Antwort +\newcommand{\yesno}[2]{\pbox{0.8\textwidth}{\setstretch{1}#1}\hfill\yesnoticks{#2}} + +% Dummy-Formularfeld: Sieht genauso aus, ist aber statisch, vorbefüllt, nicht editierbar. +\newcommand{\fieldd}[3]{% Label, width, prefilled text +\begin{tikzpicture}[every node/.style={inner sep=0,outer sep=0}] + % Draw the static field rectangle + \node[anchor=west] (DummyFieldNode) at (0cm,2ex) {\strut #3}; % Prefilled text + \draw[thick] ([xshift=0cm,yshift=-0.3ex]DummyFieldNode.south west) -- ([xshift=#2,yshift=-0.3ex]DummyFieldNode.south west); + + % Label underneath + \node[anchor=west,font=\small] at (0cm,-1.2ex) {#1}; +\end{tikzpicture}% +} + + +\begin{document} +% HEADER RIGHT +\picpos{4.5cm}{11.5cm}{0cm}{/app/jdav_web/static/general/img/dav_logo_hd.png} +\begin{textblock*}{5cm}(11.5cm, 2.3cm) + \begin{flushright} + \small + \noindent Deutscher Alpenverein e. V. \\ + Sektion Heidelberg \\ + Harbigweg 20 \\ + 69124 Heidelberg \\ + Tel.: 06221 284076 \\ + Fax: 06221 437338 \\ + geschaeftsstelle@alpenverein-heidelberg.de \\ + \end{flushright} +\end{textblock*} + +% HEADLINE + + +\textbf{\LARGE Anmeldung und Einverständniserklärung} + +\textbf{Wir melden unser Kind verbindlich zur Jugendgruppe an:} + +\begin{Form} + \fieldpf{Vor- und Nachname des Kindes}{0.65\linewidth}{} + + \fieldpf{Geburtsdatum}{0.3\linewidth}{} \hfill + \fieldpf{Gender}{0.3\linewidth}{} \hspace{0.35\linewidth} + + \fieldpf{DAV-Mitglieds-Nr.}{0.3\linewidth}{114/00/} \hfill + \fieldpf{Telefon (mobil)*}{0.3\linewidth}{} \hspace{0.35\linewidth} + + \fieldpf{Adresse}{0.65\linewidth}{} + + \fieldpf{E-Mail}{0.65\linewidth}{} + +{\small *wenn vorhanden, Kontaktdaten des Kindes, ansonsten einer Kontaktperson} + +\textbf{Notfallkontakte:} + +\begin{tabular*}{\linewidth}{@{\extracolsep{\fill}}lll} + Vollständiger Name & E-Mail & Telefon (mobil) \\ + \midrule + \field{Name 1}{0.3\linewidth} & \field{E-Mail 1}{0.3\linewidth} & \field{Telefon 1}{0.3\linewidth} \\ + \field{Name 2}{0.3\linewidth} & \field{E-Mail 2}{0.3\linewidth} & \field{Telefon 2}{0.3\linewidth} \\ +\bottomrule +\end{tabular*} + +\textbf{Medizinische Informationen:} + +Gemäß den Teilnahmebedingungen verpflichten wir uns, vollständige +Angaben zu etwaigen gesundheitlichen Einschränkungen oder Erkrankungen unseres +Kindes zu machen: + +\field{Allergien}{\linewidth} + +\field{Medikamenten-Einnahmen}{\linewidth} + +\field{Weitere Informationen zu Einschränkungen}{\linewidth} + +\yesno{Unser Kind hat eine aktuelle Tetanus-Schutzimpfung}{tetanus} + +\yesno{Unser Kind hat sichere Schwimmkenntnisse}{schwimmen} + +\textbf{Einwilligung zu den Teilnahmebedingungen} + +Mit unserer Unterschrift bestätigen wird, dass wir die beigelegten +Teilnahmebedingungen (Stand 06.12.2024) gelesen und verstanden haben. Diesen Bedingungen +stimmen wir zu. Wir versichern, jegliche Änderungen an oben angegebenen +Daten umgehend den Jugendleiter*innen mitzuteilen. + + +\yesno{Wir stimmen der Bildnutzung in den Sektionsmedien gemäß +Teilnahmebedingungen zu}{bildnutzung} +\yesno{Unser Kind darf sich selbstständig von der Gruppenstunde abmelden.}{abmelden} + +\vspace{10pt} +\vfill + +\field{Ort, Datum}{0.28\linewidth}{}\hfill +\fieldd{Unterschrift Kind}{0.28\linewidth}{}\hfill +\fieldd{Unterschrift des/der Erziehungsberechtigten}{0.4\linewidth}{} + +Bitte diese Seite ausgefüllt und unterschrieben im Registrierungsformular hochladen. +\end{Form} + +\newpage + +\textbf{\large Informationen und Bedingungen zur Teilnahme an den +JDAV-Jugendgruppen der DAV-Sektion Heidelberg} + +{\small Stand: 06.12.2024} + + +Liebes neues Jugendgruppenmitglied, + +herzlich willkommen als neues aktives Mitglied unserer Sektionsjugend! +Das Zentrum unserer Jugendarbeit sind die wöchentlichen Gruppenstunden, +in denen wir in einer festen Gruppe gemeinsam Klettern oder Fahrrad fahren, Spiele spielen +und Spaß haben. Uns ist wichtig, dass du regelmäßig dabei bist und +deinen Jugendleiter*innen immer bescheid gibst, wenn du mal nicht kommen +kannst. + +Zu unserer Jugendarbeit gehören aber auch regelmäßig Ausfahrten und +Veranstaltungen rund um die Kletterhalle. Ausfahrten können ein- oder +mehrtägige Ausflüge zum Klettern in der Region, aber auch in die +Mittelgebirge oder Alpen sein, wo wir gemeinsam Wandern, Bergsteigen, +Klettern... Veranstaltungen in der Kletterhalle können zum Beispiel +gemeinsame Übernachtungen in der Gruppe oder größere Aktivitäten mit der +ganzen Sektionsjugend sein, z.B. unsere jährliche Jugendvollversammlung. +Hier treffen wir basisdemokratisch Entscheidungen über die Zukunft der +Jugendarbeit und wählen Stellvertreter*innen, die die Jugendarbeit +organisieren. Auch du hast hier eine Stimme! Wir freuen uns, wenn du bei +möglichst vielen Aktivitäten dabei sein kannst. + +Deine Jugendleiter*innen +\\[3mm] +\_\_ +\\[3mm] +Liebe Eltern, + +Bitte lesen Sie diese Teilnahmebedingungen für unsere Jugendarbeit genau +und bestätigen Ihr Einverständnis mit Ihrer Unterschrift auf unserer +Einverständniserklärung. + +\textbf{Durchgeführte Aktivitäten} + +In unserer Jugendgruppe bieten wir im weitesten Sinne verschiedene +Aktivitäten und Aktionen an, zu denen wir die Jugendlichen vorher +entsprechend einweisen, dazu gehören u.a.: + +\begin{itemize} + \setlength\itemsep{1pt} +\item + Jugendgruppenstunden mit Spielen, Übungen usw. +\item + Outdoorspiele in verschiedenen Formen +\item + Klettern an künstlichen Anlagen und natürlichen Felsen +\item + Wanderungen, Bachwanderungen oder Klettersteigbegehungen +\item Fahrradtouren z.B. mit dem Mountainbike +\item + natursportliche Aktivität mit den dort typischen Bedingungen und + Risiken +\item + Gruppenübergreifende Ausfahrten und Veranstaltungen der JDAV + Heidelberg. +\end{itemize} + +Während aller Aktivitäten werden die Jugendlichen von unseren +Jugendleiter*innen, die eine entsprechende Qualifizierung (DAV +Jugendleiterausbildung / DAV Fachübungsleiter usw.) vorweisen können, +betreut und beaufsichtigt. + +Um teilnehmen zu können, müssen die Jugendlichen Mitglied in der Sektion +Heidelberg des DAV sein und eine von den Erziehungsberechtigten +unterschriebene Einverständniserklärung abgeben. Wir erwarten eine +möglichst regelmäßige Teilnahme an den Gruppenstunden. Bei wiederholt +unentschuldigtem Fehlen (ab 3 mal) kann es zum Ausschluss aus der Gruppe +kommen. + +Mit Ihrer Unterschrift wird außerdem die aktuelle Fassung der +\textbf{Benutzer- und Hallenordnung der Kletterhalle} der Sektion +Heidelberg (Harbigweg 20, 69124 Heidelberg), anerkannt. Die Benutzer- +und Hallenordnung hängt ständig in der Kletterhalle aus. Den Anweisungen +des Personals ist Folge zu leisten. Die Gruppenstunden finden +gelegentlich auch \textbf{außerhalb des Vereinszentrums} im Harbigweg +20, 69124 Heidelberg, statt. Mit Ihrer Unterschrift wird auch +zugestimmt, dass diese Gruppenstunden zu anderen Zeiten und an anderen +Orten durchgeführt werden können. + +\textbf{Haftung} + +Mit Ihrer Unterschrift erklären Sie sich damit einverstanden, dass Ihr +Kind an den oben genannten +Aktivitäten im weitesten Sinne teilnehmen darf. Sie sind sich bewusst, +dass natursportliche und vor allem klettersportliche Aktivitäten mit +Risiken verbunden sind, die sich nicht vollständig ausschließen lassen. +Sie erkennen damit an, dass die Sektion Heidelberg und ihre +verantwortlichen ehrenamtlichen +Jugendleiter*innen - soweit gesetzlich zulässig - von jeglicher Haftung +sowohl im Grunde als auch +der Höhe nach freigestellt werden, die über den im Rahmen der +Mitgliedschaft im DAV, +sowie für die ehrenamtliche Tätigkeit bestehenden Versicherungsschutz +hinausgehen. Dies +gilt nicht für die Verursachung von Unfällen durch Vorsatz oder grobe +Fahrlässigkeit. + +Weitere Informationen zum DAV und dessen Jugendarbeit aber auch z.B. zu +den +Versicherungsbedingungen oder aktuellen Informationen finden Sie unter +\href{http://www.alpenverein.de}{www.alpenverein.de} + +\textbf{Weitere Informationen zu Ihrem Kind} + +Sie verpflichten sich, die Jugendleiter*innen insbesondere über folgende +persönliche Einschränkungen und zu informieren (über die angehängte +Einverständniserklärung): + +\begin{itemize} + \setlength\itemsep{1pt} +\item + relevante allergische Reaktionen +\item + relevante asthmatische Erkrankungen oder Beschwerden +\item + relevante Herzkreislauferkrankungen oder Beschwerden +\item + Diabetes +\item + Epilepsie oder relevante Nervenerkrankungen +\item + relevante orthopädische Probleme (Bandscheibenvorfall, Verrenkungen, + Knochenbrüche\ldots) +\item + relevante Infektionskrankheiten +\item + ADHS oder sonstige Aufmerksamkeitsstörungen +\item + Einnahme von dringend notwendigen Medikamenten +\item + relevante Suchterkrankungen, psychische Erkrankungen oder + Einschränkungen +\item + sonstige relevante Beeinträchtigungen oder Erkrankungen (Bspw. + Inkontinenz) +\end{itemize} + +Die JDAV weist darauf hin, dass durchgeführte Aktivitäten auch im Freien +in Risikogebieten für +von Zecken übertragene FSME oder Borreliose stattfinden können +(Rhein-Neckar Kreis gehört zu den Risikogebieten). Eine Impfung wird +empfohlen. + +Ergeben sich Veränderungen bei den angegebenen Informationen, dann +müssen die Jugendleiter*innen umgehend darüber informiert werden. + +\textbf{Datenschutz} + +Sie sind damit einverstanden, dass die JDAV Heidelberg die von Ihnen +angegebenen Daten elektronisch erfasst, verarbeitet und speichert. Diese +Datenverarbeitung erfolgt in Rechenzentren in der Schweiz oder Staaten +des Europäischen Wirtschaftsraums (EWR). Nach einer Beendigung der +Mitgliedschaft werden Ihre personenbezogenen Daten gelöscht, soweit sie +nicht, entsprechend den steuerrechtlichen Vorgaben, aufbewahrt werden +müssen. Die Datenverarbeitung erfolgt auf Grundlage des Art. 6 Abs. 1 S. +1 lit. b DSGVO. Die jeweils aktuelle Datenschutzerklärung kann jederzeit +auf der Website unter \href{https://www.jdav-hd.de/datenschutz}{www.jdav-hd.de/datenschutz} abgerufen +werden. + +Die Jugendleiter*innen sind im Rahmen ihrer Tätigkeiten über +Sektions-E-Mailadressen nach dem Schema +vorname.nachname@alpenverein-heidelberg.de erreichbar, die Jugendleiter*innen einer Gruppe über +Adressen nach dem Schema leitung.gruppenname@jdav-hd.de. Bitte nutzen Sie +für die Kontaktaufnahme vorrangig diese E-Mailadressen. + +Zur Weitergabe der Daten im Rahmen einer Mitgliedschaft im Alpenverein +Heidelberg beachten Sie bitte auch die Datenschutzerklärung der Sektion +unter \href{https://www.alpenverein-heidelberg.de/datenschutz}{www.alpenverein-heidelberg.de/datenschutz}. + +\textbf{Abbildungen in Sektionsmedien:} + +Selbstverständlich gehören auf eine lebendig gestaltete Homepage sowie +andere Medien der Sektion (Aushänge im Vereinsheim, Sektionsnachrichten, +etc.) auch Berichte und Fotos von Veranstaltungen der Jugend, bei denen +vielleicht auch Ihr Kind dabei ist. Da gemäß § 22 KunstUrhG, Bilder +jedoch nur mit Einwilligung des Abgebildeten bzw. seiner gesetzlichen +Vertreter verbreitet oder öffentlich zur Schau gestellt werden dürfen, +bitten wir Sie um Erlaubnis. Mit Ihrer Einverständniserklärung +erleichtern Sie uns wesentlich die Arbeit und wir können so unseren +lebendigen Verein gut nach außen darstellen. + +Wenn sie in der Einverständniserklärung ihre Einwilligung geben, +erklären Sie sich damit einverstanden, dass von den Jugendleiter*innen +ausgewählte Fotos und Aufnahmen, auf denen Ihr Kind zu sehen ist, mit +den anderen Kindern geteilt werden, auf der Homepage, sowie im +Sektionsheft der DAV-Sektion Heidelberg und allen anderen Vereinsmedien +erscheinen und veröffentlicht werden dürfen. Diese Einwilligung kann +jederzeit widerrufen werden. + + +\end{document} diff --git a/jdav_web/members/templates/members/upload_registration_form.html b/jdav_web/members/templates/members/upload_registration_form.html new file mode 100644 index 0000000..9846542 --- /dev/null +++ b/jdav_web/members/templates/members/upload_registration_form.html @@ -0,0 +1,33 @@ +{% extends "members/base.html" %} +{% load i18n %} +{% load static %} + +{% block title %} +{% trans "Registration" %} +{% endblock %} + +{% block content %} + +

{% trans "Register" %}

+ +{% url 'members:download_registration_form' as download_url %} +

{% blocktrans %}We summarized your registration in our registration +form. Please download it, +fill in the remaining fields and read the general conditions. If you agree, +please sign the document and upload a scan or image here.{% endblocktrans %} +

+

{% blocktrans %}If you are not an adult yet, please let someone responsible for you sign the agreement.{% endblocktrans %} +

+ +
+

+ + {% csrf_token %} + {{form}} +
+

+ + +
+ +{% endblock %} diff --git a/jdav_web/members/templates/members/upload_registration_form_invalid.html b/jdav_web/members/templates/members/upload_registration_form_invalid.html new file mode 100644 index 0000000..1a1c671 --- /dev/null +++ b/jdav_web/members/templates/members/upload_registration_form_invalid.html @@ -0,0 +1,16 @@ +{% extends "members/base.html" %} +{% load i18n %} +{% load static %} + +{% block title %} +{% trans "Registration" %} +{% endblock %} + +{% block content %} + +

{% trans "Register" %}

+ +

{% blocktrans %}The supplied key for uploading a registration form is invalid.{% endblocktrans %} +

+ +{% endblock %} diff --git a/jdav_web/members/templates/members/upload_registration_form_success.html b/jdav_web/members/templates/members/upload_registration_form_success.html new file mode 100644 index 0000000..30f9aeb --- /dev/null +++ b/jdav_web/members/templates/members/upload_registration_form_success.html @@ -0,0 +1,16 @@ +{% extends "members/base.html" %} +{% load i18n %} +{% load static %} + +{% block title %} +{% trans "Registration" %} +{% endblock %} + +{% block content %} + +

{% trans "Register" %}

+ +

{% blocktrans %}Thank you for uploading the registration form. Our team will process your registration shortly.{% endblocktrans %} +

+ +{% endblock %} diff --git a/jdav_web/members/urls.py b/jdav_web/members/urls.py index 1a8d24a..8e0e773 100644 --- a/jdav_web/members/urls.py +++ b/jdav_web/members/urls.py @@ -6,6 +6,8 @@ app_name = "mailer" urlpatterns = [ re_path(r'^echo', views.echo , name='echo'), re_path(r'^registration', views.invited_registration , name='registration'), + re_path(r'^register/download', views.download_registration_form, name='download_registration_form'), + re_path(r'^register/upload', views.upload_registration_form , name='upload_registration_form'), re_path(r'^register', views.register , name='register'), re_path(r'^waitinglist/confirm', views.confirm_waiting , name='confirm_waiting'), re_path(r'^waitinglist/invitation/reject', views.reject_invitation , name='reject_invitation'), diff --git a/jdav_web/members/views.py b/jdav_web/members/views.py index 4824c15..2364a0e 100644 --- a/jdav_web/members/views.py +++ b/jdav_web/members/views.py @@ -1,6 +1,7 @@ from startpage.views import render from django.utils.translation import gettext_lazy as _ from django.http import HttpResponseRedirect +from django import forms from django.forms import ModelForm, TextInput, DateInput, BaseInlineFormSet,\ inlineformset_factory, HiddenInput, FileInput from members.models import Member, RegistrationPassword, MemberUnconfirmedProxy, MemberWaitingList, Group,\ @@ -8,6 +9,7 @@ from members.models import Member, RegistrationPassword, MemberUnconfirmedProxy, from django.urls import reverse from django.utils import timezone from django.conf import settings +from .pdf import render_tex, media_path class MemberForm(ModelForm): @@ -16,6 +18,7 @@ class MemberForm(ModelForm): fields = ['prename', 'lastname', 'gender', 'street', 'plz', 'town', 'address_extra', 'phone_number', 'dav_badge_no'] + class MemberRegistrationForm(ModelForm): def __init__(self, *args, **kwargs): super(MemberRegistrationForm, self).__init__(*args, **kwargs) @@ -26,11 +29,9 @@ class MemberRegistrationForm(ModelForm): class Meta: model = Member fields = ['prename', 'lastname', 'street', 'plz', 'town', 'address_extra', - 'phone_number', 'birth_date', 'gender', 'email', 'alternative_email', - 'registration_form'] + 'phone_number', 'birth_date', 'gender', 'email', 'alternative_email'] widgets = { 'birth_date': DateInput(format='%Y-%m-%d', attrs={'type': 'date'}), - 'registration_form': FileInput(attrs={'accept': 'application/pdf,image/jpeg,image/png'}), } help_texts = { 'prename': _('Prename of the member.'), @@ -39,7 +40,23 @@ class MemberRegistrationForm(ModelForm): 'email': _('email of child if available, otherwise parental email address'), 'alternative_email': _('optional additional email address'), } - required = ['registration_form', 'street', 'plz', 'town'] + required = ['street', 'plz', 'town'] + + +class UploadRegistrationForm(ModelForm): + def __init__(self, *args, **kwargs): + super(UploadRegistrationForm, self).__init__(*args, **kwargs) + + for field in self.Meta.required: + self.fields[field].required = True + + class Meta: + model = Member + fields = ['registration_form'] + widgets = { + 'registration_form': FileInput(attrs={'accept': 'application/pdf,image/jpeg,image/png'}), + } + required = ['registration_form'] class MemberRegistrationWaitingListForm(ModelForm): @@ -264,7 +281,8 @@ def register(request): else: raise ValueError needs_mail_confirmation = new_member.create_from_registration(waiter, group) - return render_register_success(request, group.name, new_member.prename, needs_mail_confirmation) + new_member.send_upload_registration_form_link() + return HttpResponseRedirect(reverse('members:upload_registration_form') + "?key=" + new_member.upload_registration_form_key) except ValueError as e: print("value error", e) # when input is invalid @@ -277,6 +295,68 @@ def register(request): return render_register(request, group, form=None, pwd=pwd.password, waiter_key=waiter_key) +def render_download_registration_form(request, member): + context = dict(member=member, settings=settings) + return render_tex('Anmeldeformular_' + member.name, 'members/registration_form.tex', context) + + +def download_registration_form(request): + if request.method != 'GET' or 'key' not in request.GET: + return render_upload_registration_form_invalid(request) + key = request.GET['key'] + try: + member = MemberUnconfirmedProxy.objects.get(upload_registration_form_key=key) + return render_download_registration_form(request, member) + except Member.DoesNotExist: + return render_upload_registration_form_invalid(request) + return render_upload_registration_form_invalid(request) + + +def render_upload_registration_form_invalid(request): + return render(request, 'members/upload_registration_form_invalid.html') + + +def render_upload_registration_form_success(request, member): + return render(request, 'members/upload_registration_form_success.html', + context={'member': member}) + + +def render_upload_registration_form(request, member, form, key): + return render(request, 'members/upload_registration_form.html', + context={'form': form, 'member': member, 'key': key}) + + +def upload_registration_form(request): + if request.method == 'GET': + if not 'key' in request.GET: + return render_upload_registration_form_invalid(request) + key = request.GET['key'] + try: + member = MemberUnconfirmedProxy.objects.get(upload_registration_form_key=key) + except Member.DoesNotExist: + return render_upload_registration_form_invalid(request) + form = UploadRegistrationForm(instance=member) + return render_upload_registration_form(request, member, form, key) + if not 'key' in request.POST: + return render_upload_registration_form_invalid(request) + key = request.POST['key'] + try: + member = MemberUnconfirmedProxy.objects.get(upload_registration_form_key=key) + except Member.DoesNotExist: + return render_upload_registration_form_invalid(request) + + form = UploadRegistrationForm(request.POST, request.FILES, instance=member) + if not form.is_valid(): + return render_upload_registration_form(request, member, form, key) + try: + form.save() + member.validate_registration_form() + return render_upload_registration_form_success(request, member) + except ValueError as e: + return render_upload_registration_form(request, member, form, key) + return render_upload_registration_form_invalid(request) + + def confirm_mail(request): if request.method == 'GET' and 'key' in request.GET: res = confirm_mail_by_key(request.GET['key'])