members: adapt fields to latest clubdesk fields

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

2
.gitignore vendored

@ -124,3 +124,5 @@ docker/test/db
docker/development/media docker/development/media
docker/production/media docker/production/media
docker/test/media docker/test/media
*.csv

@ -188,7 +188,8 @@ class MemberAdmin(CommonAdminMixin, admin.ModelAdmin):
), ),
(_("Others"), (_("Others"),
{ {
'fields': ['allergies', 'tetanus_vaccination', 'medication', 'photos_may_be_taken'] 'fields': ['allergies', 'tetanus_vaccination', 'medication', 'photos_may_be_taken',
'may_cancel_appointment_independently']
} }
), ),
(_("Organizational"), (_("Organizational"),
@ -331,7 +332,7 @@ class MemberUnconfirmedAdmin(admin.ModelAdmin):
{ {
'fields': [ 'fields': [
('good_conduct_certificate_presented_date', ('good_conduct_certificate_presented_date',
'good_conduct_certificate_presentation_needed'), 'good_conduct_certificate_valid'),
'has_key', 'has_free_ticket_gym'] 'has_key', 'has_free_ticket_gym']
} }
), ),
@ -339,7 +340,8 @@ class MemberUnconfirmedAdmin(admin.ModelAdmin):
list_display = ('name', 'birth_date', 'age', 'get_group', 'confirmed_mail', 'confirmed_alternative_mail') list_display = ('name', 'birth_date', 'age', 'get_group', 'confirmed_mail', 'confirmed_alternative_mail')
search_fields = ('prename', 'lastname', 'email') search_fields = ('prename', 'lastname', 'email')
list_filter = ('group', 'confirmed_mail', 'confirmed_alternative_mail') list_filter = ('group', 'confirmed_mail', 'confirmed_alternative_mail')
readonly_fields = ['confirmed_mail', 'confirmed_alternative_mail'] readonly_fields = ['confirmed_mail', 'confirmed_alternative_mail',
'good_conduct_certificate_valid']
actions = ['request_mail_confirmation', 'confirm', 'demote_to_waiter'] actions = ['request_mail_confirmation', 'confirm', 'demote_to_waiter']
inlines = [EmergencyContactInline] inlines = [EmergencyContactInline]
change_form_template = "members/change_member_unconfirmed.html" change_form_template = "members/change_member_unconfirmed.html"

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-11-17 22:30+0100\n" "POT-Creation-Date: 2024-11-18 21:17+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: members/admin.py:122 members/models.py:367 #: members/admin.py:122 members/models.py:369
msgid "Registration complete" msgid "Registration complete"
msgstr "Anmeldung vollständig" msgstr "Anmeldung vollständig"
@ -34,166 +34,166 @@ msgstr "Nein"
msgid "All" msgid "All"
msgstr "Alle" msgstr "Alle"
#: members/admin.py:179 members/admin.py:315 #: members/admin.py:179 members/admin.py:316
msgid "Contact information" msgid "Contact information"
msgstr "Kontaktinformationen" msgstr "Kontaktinformationen"
#: members/admin.py:184 members/admin.py:320 #: members/admin.py:184 members/admin.py:321
msgid "Skills" msgid "Skills"
msgstr "Fähigkeiten" msgstr "Fähigkeiten"
#: members/admin.py:189 members/admin.py:325 #: members/admin.py:189 members/admin.py:326
msgid "Others" msgid "Others"
msgstr "Sonstiges" msgstr "Sonstiges"
#: members/admin.py:194 members/admin.py:330 #: members/admin.py:195 members/admin.py:331
msgid "Organizational" msgid "Organizational"
msgstr "Organisatorisches" msgstr "Organisatorisches"
#: members/admin.py:257 #: members/admin.py:258
msgid "Compose new mail to selected members" msgid "Compose new mail to selected members"
msgstr "Neue Nachricht an ausgewählte Teilnehmer verfassen" msgstr "Neue Nachricht an ausgewählte Teilnehmer verfassen"
#: members/admin.py:263 #: members/admin.py:264
msgid "Echo required" msgid "Echo required"
msgstr "Rückmeldung erforderlich" msgstr "Rückmeldung erforderlich"
#: members/admin.py:265 #: members/admin.py:266
msgid "Successfully requested echo from selected members." msgid "Successfully requested echo from selected members."
msgstr "" msgstr ""
"Rückmeldungsaufforderung erfolgreich an ausgewählte Teilnehmer verschickt." "Rückmeldungsaufforderung erfolgreich an ausgewählte Teilnehmer verschickt."
#: members/admin.py:266 #: members/admin.py:267
msgid "Request echo from selected members" msgid "Request echo from selected members"
msgstr "Rückmeldungsaufforderung an ausgewählte Teilnehmer verschicken" msgstr "Rückmeldungsaufforderung an ausgewählte Teilnehmer verschicken"
#: members/admin.py:283 #: members/admin.py:284
msgid "activity" msgid "activity"
msgstr "Aktivität" msgstr "Aktivität"
#: members/admin.py:293 members/models.py:53 members/models.py:1361 #: members/admin.py:294 members/models.py:53 members/models.py:1363
msgid "Name" msgid "Name"
msgstr "Name" msgstr "Name"
#: members/admin.py:363 #: members/admin.py:365
msgid "Successfully requested mail confirmation from selected registrations." msgid "Successfully requested mail confirmation from selected registrations."
msgstr "Aufforderung zur Bestätigung der Email Adresse versendet." msgstr "Aufforderung zur Bestätigung der Email Adresse versendet."
#: members/admin.py:364 #: members/admin.py:366
msgid "Request mail confirmation from selected registrations" msgid "Request mail confirmation from selected registrations"
msgstr "Aufforderung zur Bestätigung der Email Adresse versenden" msgstr "Aufforderung zur Bestätigung der Email Adresse versenden"
#: members/admin.py:371 members/admin.py:405 #: members/admin.py:373 members/admin.py:407
#, python-format #, python-format
msgid "Successfully confirmed %(name)s." msgid "Successfully confirmed %(name)s."
msgstr "Registrierung von %(name)s erfolgreich bestätigt." msgstr "Registrierung von %(name)s erfolgreich bestätigt."
#: members/admin.py:375 members/admin.py:408 #: members/admin.py:377 members/admin.py:410
#, python-format #, python-format
msgid "Can't confirm. %(name)s has unconfirmed email addresses." msgid "Can't confirm. %(name)s has unconfirmed email addresses."
msgstr "Bestätigung nicht möglich. %(name)s hat unbestätigte Emailadressen." msgstr "Bestätigung nicht möglich. %(name)s hat unbestätigte Emailadressen."
#: members/admin.py:380 #: members/admin.py:382
msgid "Successfully confirmed multiple registrations." msgid "Successfully confirmed multiple registrations."
msgstr "Erfolgreich mehrere Registrierungen bestätigt." msgstr "Erfolgreich mehrere Registrierungen bestätigt."
#: members/admin.py:382 #: members/admin.py:384
msgid "" msgid ""
"Failed to confirm some registrations because of unconfirmed email addresses." "Failed to confirm some registrations because of unconfirmed email addresses."
msgstr "" msgstr ""
"Einige Bestätigungen fehlgeschlagen, weil Emailadressen noch nicht bestätigt " "Einige Bestätigungen fehlgeschlagen, weil Emailadressen noch nicht bestätigt "
"sind." "sind."
#: members/admin.py:383 #: members/admin.py:385
msgid "Confirm selected registrations" msgid "Confirm selected registrations"
msgstr "Ausgewählte Registrierungen bestätigen" msgstr "Ausgewählte Registrierungen bestätigen"
#: members/admin.py:399 #: members/admin.py:401
#, python-format #, python-format
msgid "Successfully demoted %(name)s to waiter." msgid "Successfully demoted %(name)s to waiter."
msgstr "%(name)s zurück auf die Warteliste gesetzt." msgstr "%(name)s zurück auf die Warteliste gesetzt."
#: members/admin.py:400 #: members/admin.py:402
msgid "Demote selected registrations to waiters." msgid "Demote selected registrations to waiters."
msgstr "Ausgewählte Registrierungen zurück auf die Warteliste setzen." msgstr "Ausgewählte Registrierungen zurück auf die Warteliste setzen."
#: members/admin.py:415 members/models.py:374 members/models.py:700 #: members/admin.py:417 members/models.py:376 members/models.py:702
#: members/models.py:1106 #: members/models.py:1108
msgid "Group" msgid "Group"
msgstr "Gruppe" msgstr "Gruppe"
#: members/admin.py:449 #: members/admin.py:451
#, python-format #, python-format
msgid "Successfully asked %(name)s to confirm their waiting status." msgid "Successfully asked %(name)s to confirm their waiting status."
msgstr "Erfolgreich %(name)s aufgefordert den Wartelistenplatz zu bestätigen." msgstr "Erfolgreich %(name)s aufgefordert den Wartelistenplatz zu bestätigen."
#: members/admin.py:450 #: members/admin.py:452
msgid "Ask selected waiters to confirm their waiting status" msgid "Ask selected waiters to confirm their waiting status"
msgstr "Wartende auffordern den Wartelistenplatz zu bestätigen" msgstr "Wartende auffordern den Wartelistenplatz zu bestätigen"
#: members/admin.py:459 members/admin.py:515 #: members/admin.py:461 members/admin.py:517
msgid "" msgid ""
"An error occurred while trying to invite said members. Please try again." "An error occurred while trying to invite said members. Please try again."
msgstr "" msgstr ""
"Beim Einladen dieser Personen ist ein Fehler aufgetreten. Bitte versuche es " "Beim Einladen dieser Personen ist ein Fehler aufgetreten. Bitte versuche es "
"nochmal. " "nochmal. "
#: members/admin.py:467 members/admin.py:522 #: members/admin.py:469 members/admin.py:524
#, python-format #, python-format
msgid "Successfully invited %(name)s to %(group)s." msgid "Successfully invited %(name)s to %(group)s."
msgstr "Erfolgreich %(name)s zu Gruppe %(group)s eingeladen." msgstr "Erfolgreich %(name)s zu Gruppe %(group)s eingeladen."
#: members/admin.py:471 members/admin.py:527 #: members/admin.py:473 members/admin.py:529
msgid "Select group for invitation" msgid "Select group for invitation"
msgstr "Wähle Gruppe für Einladung aus" msgstr "Wähle Gruppe für Einladung aus"
#: members/admin.py:478 #: members/admin.py:480
msgid "Offer waiter a place in a group." msgid "Offer waiter a place in a group."
msgstr "Personen auf der Warteliste einen Gruppenplatz anbieten." msgstr "Personen auf der Warteliste einen Gruppenplatz anbieten."
#: members/admin.py:568 #: members/admin.py:570
msgid "Difficulty" msgid "Difficulty"
msgstr "Schwierigkeit" msgstr "Schwierigkeit"
#: members/admin.py:571 #: members/admin.py:573
msgid "Tour type" msgid "Tour type"
msgstr "Art der Tour" msgstr "Art der Tour"
#: members/admin.py:574 members/models.py:916 #: members/admin.py:576 members/models.py:918
msgid "Means of transportation" msgid "Means of transportation"
msgstr "Verkehrsmittel" msgstr "Verkehrsmittel"
#: members/admin.py:669 #: members/admin.py:671
#, python-format #, python-format
msgid "You are not allowed to view all members on note list %(name)s." msgid "You are not allowed to view all members on note list %(name)s."
msgstr "" msgstr ""
"Du hast nicht die nötigen Rechte um alle Teilnehmer:innen der Notizliste " "Du hast nicht die nötigen Rechte um alle Teilnehmer:innen der Notizliste "
"%(name)s anzusehen." "%(name)s anzusehen."
#: members/admin.py:679 #: members/admin.py:681
msgid "Generate PDF summary" msgid "Generate PDF summary"
msgstr "Übersicht erstellen" msgstr "Übersicht erstellen"
#: members/admin.py:717 #: members/admin.py:719
#, python-format #, python-format
msgid "You are not allowed to view all members on excursion %(name)s." msgid "You are not allowed to view all members on excursion %(name)s."
msgstr "" msgstr ""
"Du hast nicht die nötigen Rechte um alle Teilnehmer:innen der Ausfahrt " "Du hast nicht die nötigen Rechte um alle Teilnehmer:innen der Ausfahrt "
"%(name)s anzusehen." "%(name)s anzusehen."
#: members/admin.py:727 #: members/admin.py:729
msgid "Generate crisis intervention list" msgid "Generate crisis intervention list"
msgstr "Kriseninterventionsliste erstellen" msgstr "Kriseninterventionsliste erstellen"
#: members/admin.py:737 #: members/admin.py:739
msgid "Generate overview" msgid "Generate overview"
msgstr "Hinweise für Jugendleiter erstellen" msgstr "Hinweise für Jugendleiter erstellen"
#: members/admin.py:747 #: members/admin.py:749
msgid "Generate seminar report" msgid "Generate seminar report"
msgstr "Seminarbericht erstellen" msgstr "Seminarbericht erstellen"
#: members/admin.py:761 #: members/admin.py:763
msgid "Generate SJR application" msgid "Generate SJR application"
msgstr "SJR Antrag erstellen" msgstr "SJR Antrag erstellen"
@ -229,11 +229,11 @@ msgstr "Samstag"
msgid "Sunday" msgid "Sunday"
msgstr "Sonntag" msgstr "Sonntag"
#: members/models.py:54 members/models.py:902 #: members/models.py:54 members/models.py:904
msgid "Description" msgid "Description"
msgstr "Beschreibung" msgstr "Beschreibung"
#: members/models.py:60 members/models.py:894 #: members/models.py:60 members/models.py:896
#: members/templates/members/change_member.html:18 #: members/templates/members/change_member.html:18
msgid "Activity" msgid "Activity"
msgstr "Aktivität" msgstr "Aktivität"
@ -266,7 +266,7 @@ msgstr "Bis Jahrgang"
msgid "youth leaders" msgid "youth leaders"
msgstr "Jugendleiter" msgstr "Jugendleiter"
#: members/models.py:77 members/models.py:1188 #: members/models.py:77 members/models.py:1190
msgid "Starting time" msgid "Starting time"
msgstr "Zeitpunkt" msgstr "Zeitpunkt"
@ -274,7 +274,7 @@ msgstr "Zeitpunkt"
msgid "Ending time" msgid "Ending time"
msgstr "Endzeitpunkt" msgstr "Endzeitpunkt"
#: members/models.py:85 members/models.py:245 #: members/models.py:85 members/models.py:247
msgid "group" msgid "group"
msgstr "Gruppe" msgstr "Gruppe"
@ -339,425 +339,425 @@ msgid "Country"
msgstr "Land" msgstr "Land"
#: members/models.py:229 #: members/models.py:229
msgid "Good conduct certificate presentation needed"
msgstr "Vorlage Führungszeugnis notwendig"
#: members/models.py:230
msgid "Good conduct certificate presented on" msgid "Good conduct certificate presented on"
msgstr "Führungszeugnis vorgelegt am" msgstr "Führungszeugnis vorgelegt am"
#: members/models.py:231 #: members/models.py:230
msgid "Joined on" msgid "Joined on"
msgstr "Eintritt" msgstr "Eintritt"
#: members/models.py:232 #: members/models.py:231
msgid "Left on" msgid "Left on"
msgstr "Austritt" msgstr "Austritt"
#: members/models.py:233 #: members/models.py:232
msgid "Has key" msgid "Has key"
msgstr "Hat Jugendraumschlüssel" msgstr "Hat Jugendraumschlüssel"
#: members/models.py:234 #: members/models.py:233
msgid "Has a free ticket for the climbing gym" msgid "Has a free ticket for the climbing gym"
msgstr "Hat Freikarte für Kletterhalle" msgstr "Hat Freikarte für Kletterhalle"
#: members/models.py:235 #: members/models.py:234
msgid "DAV badge number" msgid "DAV badge number"
msgstr "DAV Mitgliedsnummer" msgstr "DAV Mitgliedsnummer"
#: members/models.py:236 #: members/models.py:235
msgid "Knows how to swim" msgid "Knows how to swim"
msgstr "Kann schwimmen" msgstr "Kann schwimmen"
#: members/models.py:237 #: members/models.py:236
msgid "Climbing badge" msgid "Climbing badge"
msgstr "Kletterschein" msgstr "Kletterschein"
#: members/models.py:238 #: members/models.py:237
msgid "Alpine experience" msgid "Alpine experience"
msgstr "Alpine Erfahrung" msgstr "Alpine Erfahrung"
#: members/models.py:239 #: members/models.py:238
msgid "Allergies" msgid "Allergies"
msgstr "Allergieen" msgstr "Allergieen"
#: members/models.py:240 #: members/models.py:239
msgid "Medication" msgid "Medication"
msgstr "Medikamente" msgstr "Medikamente"
#: members/models.py:241 #: members/models.py:240
msgid "Tetanus vaccination" msgid "Tetanus vaccination"
msgstr "Tetanusimpfung" msgstr "Tetanusimpfung"
#: members/models.py:242 #: members/models.py:241
msgid "Photos may be taken" msgid "Photos may be taken"
msgstr "Fotoerlaubnis" msgstr "Fotoerlaubnis"
#: members/models.py:243 #: members/models.py:242
msgid "Legal guardians" msgid "Legal guardians"
msgstr "Erziehungsberechtigte" msgstr "Erziehungsberechtigte"
#: members/models.py:249 #: members/models.py:244
msgid "May cancel a group appointment independently"
msgstr "Darf sich allein von der Gruppenstunde abmelden"
#: members/models.py:251
msgid "receives newsletter" msgid "receives newsletter"
msgstr "Erhält den Newsletter" msgstr "Erhält den Newsletter"
#: members/models.py:253 #: members/models.py:255
msgid "created" msgid "created"
msgstr "erstellt" msgstr "erstellt"
#: members/models.py:254 #: members/models.py:256
msgid "Active" msgid "Active"
msgstr "Aktiv" msgstr "Aktiv"
#: members/models.py:255 #: members/models.py:257
msgid "registration form" msgid "registration form"
msgstr "Anmeldeformular" msgstr "Anmeldeformular"
#: members/models.py:263 #: members/models.py:265
msgid "image" msgid "image"
msgstr "Bild" msgstr "Bild"
#: members/models.py:272 #: members/models.py:274
msgid "Echoed" msgid "Echoed"
msgstr "Rückgemeldet" msgstr "Rückgemeldet"
#: members/models.py:273 #: members/models.py:275
msgid "Confirmed" msgid "Confirmed"
msgstr "Bestätigt" msgstr "Bestätigt"
#: members/models.py:303 #: members/models.py:305
msgid "Good conduct certificate valid" msgid "Good conduct certificate valid"
msgstr "Führungszeugnis gültig" msgstr "Führungszeugnis gültig"
#: members/models.py:377 #: members/models.py:379
msgid "member" msgid "member"
msgstr "Teilnehmer" msgstr "Teilnehmer"
#: members/models.py:378 #: members/models.py:380
msgid "members" msgid "members"
msgstr "Teilnehmer" msgstr "Teilnehmer"
#: members/models.py:450 #: members/models.py:452
#, python-format #, python-format
msgid "New unconfirmed registration for group %(group)s" msgid "New unconfirmed registration for group %(group)s"
msgstr "Neue unbestätigte Registrierung für Gruppe %(group)s" msgstr "Neue unbestätigte Registrierung für Gruppe %(group)s"
#: members/models.py:657 members/models.py:850 members/models.py:861 #: members/models.py:659 members/models.py:852 members/models.py:863
#: members/models.py:1137 members/models.py:1144 #: members/models.py:1139 members/models.py:1146
msgid "Member" msgid "Member"
msgstr "Teilnehmer" msgstr "Teilnehmer"
#: members/models.py:663 #: members/models.py:665
msgid "Emergency contact" msgid "Emergency contact"
msgstr "Notfallkontakt" msgstr "Notfallkontakt"
#: members/models.py:664 #: members/models.py:666
msgid "Emergency contacts" msgid "Emergency contacts"
msgstr "Notfallkontakte" msgstr "Notfallkontakte"
#: members/models.py:684 #: members/models.py:686
msgid "Unconfirmed registration" msgid "Unconfirmed registration"
msgstr "Unbestätigte Registrierung" msgstr "Unbestätigte Registrierung"
#: members/models.py:685 #: members/models.py:687
msgid "Unconfirmed registrations" msgid "Unconfirmed registrations"
msgstr "Unbestätigte Registrierungen" msgstr "Unbestätigte Registrierungen"
#: members/models.py:699 members/models.py:744 #: members/models.py:701 members/models.py:746
msgid "Waiter" msgid "Waiter"
msgstr "Wartende Person" msgstr "Wartende Person"
#: members/models.py:701 #: members/models.py:703
msgid "Invitation date" msgid "Invitation date"
msgstr "Einladungsdatum" msgstr "Einladungsdatum"
#: members/models.py:702 members/templates/members/reject_success.html:6 #: members/models.py:704 members/templates/members/reject_success.html:6
#: members/templates/members/reject_success.html:11 #: members/templates/members/reject_success.html:11
msgid "Invitation rejected" msgid "Invitation rejected"
msgstr "Einladung abgelehnt" msgstr "Einladung abgelehnt"
#: members/models.py:706 #: members/models.py:708
msgid "Invitation to group" msgid "Invitation to group"
msgstr "Gruppeneinladung" msgstr "Gruppeneinladung"
#: members/models.py:707 #: members/models.py:709
msgid "Invitations to groups" msgid "Invitations to groups"
msgstr "Gruppeneinladungen" msgstr "Gruppeneinladungen"
#: members/models.py:714 #: members/models.py:716
msgid "Rejected" msgid "Rejected"
msgstr "Abgelehnt" msgstr "Abgelehnt"
#: members/models.py:716 #: members/models.py:718
msgid "Expired" msgid "Expired"
msgstr "Abgelaufen" msgstr "Abgelaufen"
#: members/models.py:718 #: members/models.py:720
msgid "Undecided" msgid "Undecided"
msgstr "Ausstehend" msgstr "Ausstehend"
#: members/models.py:719 #: members/models.py:721
msgid "Status" msgid "Status"
msgstr "Status" msgstr "Status"
#: members/models.py:730 #: members/models.py:732
msgid "Do you want to tell us something else?" msgid "Do you want to tell us something else?"
msgstr "Möchtest du uns noch etwas mitteilen?" msgstr "Möchtest du uns noch etwas mitteilen?"
#: members/models.py:731 #: members/models.py:733
msgid "application date" msgid "application date"
msgstr "Bewerbungsdatum" msgstr "Bewerbungsdatum"
#: members/models.py:733 #: members/models.py:735
msgid "Last wait confirmation" msgid "Last wait confirmation"
msgstr "Letzte Wartebestätigung" msgstr "Letzte Wartebestätigung"
#: members/models.py:737 #: members/models.py:739
msgid "Last reminder" msgid "Last reminder"
msgstr "Letzte Erinnerung" msgstr "Letzte Erinnerung"
#: members/models.py:738 #: members/models.py:740
msgid "Missed reminders" msgid "Missed reminders"
msgstr "Verpasste Erinnerungen" msgstr "Verpasste Erinnerungen"
#: members/models.py:745 #: members/models.py:747
msgid "Waiters" msgid "Waiters"
msgstr "Warteliste" msgstr "Warteliste"
#: members/models.py:769 #: members/models.py:771
msgid "Waiting status confirmed" msgid "Waiting status confirmed"
msgstr "Wartelistenplatz bestätigt" msgstr "Wartelistenplatz bestätigt"
#: members/models.py:776 #: members/models.py:778
msgid "Waiting confirmation needed" msgid "Waiting confirmation needed"
msgstr "Wartelistenplatzbestätigung erforderlich" msgstr "Wartelistenplatzbestätigung erforderlich"
#: members/models.py:829 #: members/models.py:831
msgid "Invitation to trial group meeting" msgid "Invitation to trial group meeting"
msgstr "Einladung zu Schnupperstunde" msgstr "Einladung zu Schnupperstunde"
#: members/models.py:841 #: members/models.py:843
msgid "Unregistered from waiting list" msgid "Unregistered from waiting list"
msgstr "Von der Warteliste abgemeldet" msgstr "Von der Warteliste abgemeldet"
#: members/models.py:855 #: members/models.py:857
msgid "Comment" msgid "Comment"
msgstr "Kommentar" msgstr "Kommentar"
#: members/models.py:862 members/models.py:1145 #: members/models.py:864 members/models.py:1147
msgid "Members" msgid "Members"
msgstr "Teilnehmer" msgstr "Teilnehmer"
#: members/models.py:896 #: members/models.py:898
msgid "Place" msgid "Place"
msgstr "Stützpunkt / Ort" msgstr "Stützpunkt / Ort"
#: members/models.py:897 #: members/models.py:899
msgid "Destination (optional)" msgid "Destination (optional)"
msgstr "ggf. Ziel" msgstr "ggf. Ziel"
#: members/models.py:899 #: members/models.py:901
msgid "e.g. a peak" msgid "e.g. a peak"
msgstr "z.B. ein Gipfel" msgstr "z.B. ein Gipfel"
#: members/models.py:900 #: members/models.py:902
msgid "Begin" msgid "Begin"
msgstr "Anfang" msgstr "Anfang"
#: members/models.py:901 #: members/models.py:903
msgid "End (optional)" msgid "End (optional)"
msgstr "Ende" msgstr "Ende"
#: members/models.py:904 #: members/models.py:906
msgid "Groups" msgid "Groups"
msgstr "Gruppen" msgstr "Gruppen"
#: members/models.py:917 #: members/models.py:919
msgid "Kilometers traveled" msgid "Kilometers traveled"
msgstr "Fahrstrecke in Kilometer" msgstr "Fahrstrecke in Kilometer"
#: members/models.py:920 #: members/models.py:922
msgid "Categories" msgid "Categories"
msgstr "Kategorien" msgstr "Kategorien"
#: members/models.py:921 #: members/models.py:923
msgid "easy" msgid "easy"
msgstr "leicht" msgstr "leicht"
#: members/models.py:921 #: members/models.py:923
msgid "medium" msgid "medium"
msgstr "mittel" msgstr "mittel"
#: members/models.py:921 #: members/models.py:923
msgid "hard" msgid "hard"
msgstr "schwer" msgstr "schwer"
#: members/models.py:931 members/models.py:1168 #: members/models.py:933 members/models.py:1170
msgid "Excursion" msgid "Excursion"
msgstr "Ausfahrt" msgstr "Ausfahrt"
#: members/models.py:932 #: members/models.py:934
msgid "Excursions" msgid "Excursions"
msgstr "Ausfahrten" msgstr "Ausfahrten"
#: members/models.py:1083 members/models.py:1159 members/models.py:1375 #: members/models.py:1085 members/models.py:1161 members/models.py:1377
msgid "Title" msgid "Title"
msgstr "Titel" msgstr "Titel"
#: members/models.py:1084 members/models.py:1102 members/models.py:1376 #: members/models.py:1086 members/models.py:1104 members/models.py:1378
msgid "Date" msgid "Date"
msgstr "Datum" msgstr "Datum"
#: members/models.py:1103 #: members/models.py:1105
msgid "Location" msgid "Location"
msgstr "Ort" msgstr "Ort"
#: members/models.py:1104 #: members/models.py:1106
msgid "Topic" msgid "Topic"
msgstr "Thema" msgstr "Thema"
#: members/models.py:1128 #: members/models.py:1130
msgid "Jugendleiter" msgid "Jugendleiter"
msgstr "Jugendleiter" msgstr "Jugendleiter"
#: members/models.py:1131 #: members/models.py:1133
msgid "Klettertreff" msgid "Klettertreff"
msgstr "Klettertreff" msgstr "Klettertreff"
#: members/models.py:1132 #: members/models.py:1134
msgid "Klettertreffs" msgid "Klettertreffs"
msgstr "Klettertreffs" msgstr "Klettertreffs"
#: members/models.py:1150 #: members/models.py:1152
msgid "Password" msgid "Password"
msgstr "Passwort" msgstr "Passwort"
#: members/models.py:1153 #: members/models.py:1155
msgid "registration password" msgid "registration password"
msgstr "Registrierungspassort" msgstr "Registrierungspassort"
#: members/models.py:1154 #: members/models.py:1156
msgid "registration passwords" msgid "registration passwords"
msgstr "Registrierungspasswörter" msgstr "Registrierungspasswörter"
#: members/models.py:1161 #: members/models.py:1163
msgid "Alpinistic goals" msgid "Alpinistic goals"
msgstr "Alpintechnische Ziele" msgstr "Alpintechnische Ziele"
#: members/models.py:1162 #: members/models.py:1164
msgid "Pedagogic goals" msgid "Pedagogic goals"
msgstr "Pädagogische Ziele" msgstr "Pädagogische Ziele"
#: members/models.py:1163 #: members/models.py:1165
msgid "Content and methods" msgid "Content and methods"
msgstr "Inhalte und Methoden" msgstr "Inhalte und Methoden"
#: members/models.py:1164 #: members/models.py:1166
msgid "Evaluation" msgid "Evaluation"
msgstr "Wertung" msgstr "Wertung"
#: members/models.py:1165 #: members/models.py:1167
msgid "Experiences and possible improvements" msgid "Experiences and possible improvements"
msgstr "Erfahrungen und Verbesserungsvorschläge" msgstr "Erfahrungen und Verbesserungsvorschläge"
#: members/models.py:1174 members/models.py:1195 #: members/models.py:1176 members/models.py:1197
msgid "LJP Proposal" msgid "LJP Proposal"
msgstr "Seminarbericht" msgstr "Seminarbericht"
#: members/models.py:1175 #: members/models.py:1177
msgid "LJP Proposals" msgid "LJP Proposals"
msgstr "Seminarberichte" msgstr "Seminarberichte"
#: members/models.py:1189 #: members/models.py:1191
msgid "Duration in hours" msgid "Duration in hours"
msgstr "Dauer in Stunden" msgstr "Dauer in Stunden"
#: members/models.py:1192 #: members/models.py:1194
msgid "Activity and method" msgid "Activity and method"
msgstr "Art der Aktion inkl. Methode" msgstr "Art der Aktion inkl. Methode"
#: members/models.py:1200 #: members/models.py:1202
msgid "Intervention" msgid "Intervention"
msgstr "Aktion" msgstr "Aktion"
#: members/models.py:1201 #: members/models.py:1203
msgid "Interventions" msgid "Interventions"
msgstr "Aktionen" msgstr "Aktionen"
#: members/models.py:1303 members/models.py:1333 #: members/models.py:1305 members/models.py:1335
msgid "May list members" msgid "May list members"
msgstr "Darf folgende Teilnehmer:innen listen" msgstr "Darf folgende Teilnehmer:innen listen"
#: members/models.py:1305 members/models.py:1335 #: members/models.py:1307 members/models.py:1337
msgid "May view members" msgid "May view members"
msgstr "Darf folgende Teilnehmer:innen anzeigen" msgstr "Darf folgende Teilnehmer:innen anzeigen"
#: members/models.py:1307 members/models.py:1337 #: members/models.py:1309 members/models.py:1339
msgid "May change members" msgid "May change members"
msgstr "Darf folgende Teilnehmer:innen ändern" msgstr "Darf folgende Teilnehmer:innen ändern"
#: members/models.py:1309 members/models.py:1339 #: members/models.py:1311 members/models.py:1341
msgid "May delete members" msgid "May delete members"
msgstr "Darf folgende Teilnehmer:innen löschen" msgstr "Darf folgende Teilnehmer:innen löschen"
#: members/models.py:1313 members/models.py:1343 #: members/models.py:1315 members/models.py:1345
msgid "May list members of groups" msgid "May list members of groups"
msgstr "Darf Teilnehmer:innen folgender Gruppen listen" msgstr "Darf Teilnehmer:innen folgender Gruppen listen"
#: members/models.py:1315 members/models.py:1345 #: members/models.py:1317 members/models.py:1347
msgid "May view members of groups" msgid "May view members of groups"
msgstr "Darf Teilnehmer:innen folgender Gruppen anzeigen" msgstr "Darf Teilnehmer:innen folgender Gruppen anzeigen"
#: members/models.py:1317 members/models.py:1347 #: members/models.py:1319 members/models.py:1349
msgid "May change members of groups" msgid "May change members of groups"
msgstr "Darf Teilnehmer:innen folgender Gruppen ändern" msgstr "Darf Teilnehmer:innen folgender Gruppen ändern"
#: members/models.py:1319 members/models.py:1349 #: members/models.py:1321 members/models.py:1351
msgid "May delete members of groups" msgid "May delete members of groups"
msgstr "Darf Teilnehmer:innen folgender Gruppen löschen" msgstr "Darf Teilnehmer:innen folgender Gruppen löschen"
#: members/models.py:1322 members/models.py:1323 members/models.py:1326 #: members/models.py:1324 members/models.py:1325 members/models.py:1328
msgid "Permissions" msgid "Permissions"
msgstr "Berechtigungen" msgstr "Berechtigungen"
#: members/models.py:1352 members/models.py:1353 members/models.py:1356 #: members/models.py:1354 members/models.py:1355 members/models.py:1358
msgid "Group permissions" msgid "Group permissions"
msgstr "Gruppenberechtigungen" msgstr "Gruppenberechtigungen"
#: members/models.py:1362 #: members/models.py:1364
msgid "Permission needed" msgid "Permission needed"
msgstr "Freigabe erforderlich" msgstr "Freigabe erforderlich"
#: members/models.py:1365 #: members/models.py:1367
msgid "Training category" msgid "Training category"
msgstr "Fortbildungstyp" msgstr "Fortbildungstyp"
#: members/models.py:1366 #: members/models.py:1368
msgid "Training categories" msgid "Training categories"
msgstr "Fortbildungstypen" msgstr "Fortbildungstypen"
#: members/models.py:1377 #: members/models.py:1379
msgid "Category" msgid "Category"
msgstr "Kategorien" msgstr "Kategorien"
#: members/models.py:1378 #: members/models.py:1380
msgid "Comments" msgid "Comments"
msgstr "Kommentar" msgstr "Kommentar"
#: members/models.py:1379 #: members/models.py:1381
msgid "Participated" msgid "Participated"
msgstr "Teilgenommmen" msgstr "Teilgenommmen"
#: members/models.py:1380 #: members/models.py:1382
msgid "Passed" msgid "Passed"
msgstr "Bestanden" msgstr "Bestanden"
#: members/models.py:1383 #: members/models.py:1385
msgid "Training" msgid "Training"
msgstr "Fortbildung" msgstr "Fortbildung"
#: members/models.py:1384 #: members/models.py:1386
msgid "Trainings" msgid "Trainings"
msgstr "Fortbildungen" msgstr "Fortbildungen"
@ -1193,6 +1193,9 @@ msgstr "abgelaufen"
msgid "Invalid emergency contacts" msgid "Invalid emergency contacts"
msgstr "Ungültige Notfallkontakte" msgstr "Ungültige Notfallkontakte"
#~ msgid "Good conduct certificate presentation needed"
#~ msgstr "Vorlage Führungszeugnis notwendig"
#, python-format #, python-format
#~ msgid "" #~ msgid ""
#~ "Do you want to reject the invitation to a trial group meeting of the\n" #~ "Do you want to reject the invitation to a trial group meeting of the\n"

@ -0,0 +1,43 @@
# Generated by Django 4.0.1 on 2024-11-18 20:29
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('members', '0021_group_invitations'),
]
operations = [
migrations.RemoveField(
model_name='member',
name='good_conduct_certificate_presentation_needed',
),
migrations.AlterField(
model_name='member',
name='allergies',
field=models.TextField(blank=True, default='', verbose_name='Allergies'),
),
migrations.AlterField(
model_name='member',
name='medication',
field=models.TextField(blank=True, default='', verbose_name='Medication'),
),
migrations.AddField(
model_name='member',
name='may_cancel_appointment_independently',
field=models.BooleanField(blank=True, default=None, null=True, verbose_name='May cancel a group appointment independently'),
),
migrations.AlterField(
model_name='member',
name='phone_number',
field=models.CharField(blank=True, default='', max_length=100, verbose_name='phone number'),
),
migrations.AlterField(
model_name='memberwaitinglist',
name='application_date',
field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='application date'),
),
]

@ -218,7 +218,7 @@ class Member(Person):
verbose_name=_('Alternative email confirmed')) verbose_name=_('Alternative email confirmed'))
confirm_alternative_mail_key = models.CharField(max_length=32, default="") confirm_alternative_mail_key = models.CharField(max_length=32, default="")
phone_number = models.CharField(max_length=100, verbose_name=_('phone number')) phone_number = models.CharField(max_length=100, verbose_name=_('phone number'), default='', blank=True)
street = models.CharField(max_length=30, verbose_name=_('street and house number'), default='', blank=True) street = models.CharField(max_length=30, verbose_name=_('street and house number'), default='', blank=True)
plz = models.CharField(max_length=10, verbose_name=_('Postcode'), plz = models.CharField(max_length=10, verbose_name=_('Postcode'),
default='', blank=True) default='', blank=True)
@ -226,7 +226,6 @@ class Member(Person):
address_extra = models.CharField(max_length=100, verbose_name=_('Address extra'), default='', blank=True) address_extra = models.CharField(max_length=100, verbose_name=_('Address extra'), default='', blank=True)
country = models.CharField(max_length=30, verbose_name=_('Country'), default='', blank=True) country = models.CharField(max_length=30, verbose_name=_('Country'), default='', blank=True)
good_conduct_certificate_presentation_needed = models.BooleanField(_('Good conduct certificate presentation needed'), default=False)
good_conduct_certificate_presented_date = models.DateField(_('Good conduct certificate presented on'), default=None, blank=True, null=True) good_conduct_certificate_presented_date = models.DateField(_('Good conduct certificate presented on'), default=None, blank=True, null=True)
join_date = models.DateField(_('Joined on'), default=None, blank=True, null=True) join_date = models.DateField(_('Joined on'), default=None, blank=True, null=True)
leave_date = models.DateField(_('Left on'), default=None, blank=True, null=True) leave_date = models.DateField(_('Left on'), default=None, blank=True, null=True)
@ -236,11 +235,14 @@ class Member(Person):
swimming_badge = models.BooleanField(verbose_name=_('Knows how to swim'), default=False) swimming_badge = models.BooleanField(verbose_name=_('Knows how to swim'), default=False)
climbing_badge = models.CharField(max_length=100, verbose_name=_('Climbing badge'), default='', blank=True) climbing_badge = models.CharField(max_length=100, verbose_name=_('Climbing badge'), default='', blank=True)
alpine_experience = models.TextField(verbose_name=_('Alpine experience'), default='', blank=True) alpine_experience = models.TextField(verbose_name=_('Alpine experience'), default='', blank=True)
allergies = models.CharField(max_length=100, verbose_name=_('Allergies'), default='', blank=True) allergies = models.TextField(verbose_name=_('Allergies'), default='', blank=True)
medication = models.CharField(max_length=100, verbose_name=_('Medication'), default='', blank=True) medication = models.TextField(verbose_name=_('Medication'), default='', blank=True)
tetanus_vaccination = models.CharField(max_length=50, verbose_name=_('Tetanus vaccination'), default='', blank=True) tetanus_vaccination = models.CharField(max_length=50, verbose_name=_('Tetanus vaccination'), default='', blank=True)
photos_may_be_taken = models.BooleanField(verbose_name=_('Photos may be taken'), default=False) photos_may_be_taken = models.BooleanField(verbose_name=_('Photos may be taken'), default=False)
legal_guardians = models.CharField(max_length=100, verbose_name=_('Legal guardians'), default='', blank=True) legal_guardians = models.CharField(max_length=100, verbose_name=_('Legal guardians'), default='', blank=True)
may_cancel_appointment_independently =\
models.BooleanField(verbose_name=_('May cancel a group appointment independently'), null=True,
blank=True, default=None)
group = models.ManyToManyField(Group, verbose_name=_('group')) group = models.ManyToManyField(Group, verbose_name=_('group'))
@ -728,7 +730,7 @@ class MemberWaitingList(Person):
WAITING_CONFIRMED = 2 WAITING_CONFIRMED = 2
application_text = models.TextField(_('Do you want to tell us something else?'), default='', blank=True) application_text = models.TextField(_('Do you want to tell us something else?'), default='', blank=True)
application_date = models.DateTimeField(verbose_name=_('application date'), auto_now=True) application_date = models.DateTimeField(verbose_name=_('application date'), default=timezone.now)
last_wait_confirmation = models.DateField(auto_now=True, verbose_name=_('Last wait confirmation')) last_wait_confirmation = models.DateField(auto_now=True, verbose_name=_('Last wait confirmation'))
wait_confirmation_key = models.CharField(max_length=32, default="") wait_confirmation_key = models.CharField(max_length=32, default="")
@ -1391,7 +1393,6 @@ class MemberTraining(CommonModel):
} }
def import_from_csv(path): def import_from_csv(path):
with open(path, encoding='ISO-8859-1') as csvfile: with open(path, encoding='ISO-8859-1') as csvfile:
reader = csv.DictReader(csvfile, delimiter=';') reader = csv.DictReader(csvfile, delimiter=';')
@ -1406,7 +1407,7 @@ def import_from_csv(path):
def transform_row(row): def transform_row(row):
kwargs = dict([ transform_field(k, v) for k, v in row.items() if k in CLUBDESK_TO_KOMPASS ]) kwargs = dict([ transform_field(k, v) for k, v in row.items() if k in CLUBDESK_TO_KOMPASS ])
kwargs_filtered = { k : v for k, v in kwargs.items() if k not in ['group', 'last_training', 'has_fundamental_training', 'special_training'] } kwargs_filtered = { k : v for k, v in kwargs.items() if k not in ['group', 'last_training', 'has_fundamental_training', 'special_training', 'phone_number_private', 'phone_number_parents'] }
mem = Member(**kwargs_filtered) mem = Member(**kwargs_filtered)
mem.save() mem.save()
mem.group.set(kwargs['group']) mem.group.set(kwargs['group'])
@ -1441,6 +1442,16 @@ def import_from_csv(path):
participated=True, passed=True) participated=True, passed=True)
training.save() training.save()
if kwargs['phone_number_private'] != '':
prefix = '\n' if mem.comments else ''
mem.comments += prefix + 'Telefon (Privat): ' + kwargs['phone_number_private']
mem.save()
if kwargs['phone_number_parents'] != '':
prefix = '\n' if mem.comments else ''
mem.comments += prefix + 'Telefon (Eltern): ' + kwargs['phone_number_parents']
mem.save()
for row in rows: for row in rows:
transform_row(row) transform_row(row)
@ -1492,6 +1503,26 @@ def parse_boolean(value):
return value.lower() == "ja" return value.lower() == "ja"
def parse_nullable_boolean(value):
if value == '':
return None
else:
return value.lower() == "ja"
def parse_gender(value):
if value == 'männlich':
return MALE
elif value == 'weiblich':
return FEMALE
else:
return DIVERSE
def parse_can_swim(value):
return True if len(value) > 0 else False
CLUBDESK_TO_KOMPASS = { CLUBDESK_TO_KOMPASS = {
'Nachname': 'lastname', 'Nachname': 'lastname',
'Vorname': 'prename', 'Vorname': 'prename',
@ -1499,10 +1530,9 @@ CLUBDESK_TO_KOMPASS = {
'PLZ': 'plz', 'PLZ': 'plz',
'Ort': 'town', 'Ort': 'town',
'Telefon Privat': 'phone_number_private', 'Telefon Privat': 'phone_number_private',
'Telefon Mobil': 'phone_number_mobile', 'Telefon Mobil': 'phone_number',
'Adress-Zusatz': 'address_extra', 'Adress-Zusatz': 'address_extra',
'Land': 'country', 'Land': 'country',
'Nationalität': 'nationality',
'E-Mail': 'email', 'E-Mail': 'email',
'E-Mail Alternativ': 'alternative_email', 'E-Mail Alternativ': 'alternative_email',
'Status': ('active', parse_status), 'Status': ('active', parse_status),
@ -1510,10 +1540,10 @@ CLUBDESK_TO_KOMPASS = {
'Austritt': ('leave_date', parse_date), 'Austritt': ('leave_date', parse_date),
'Geburtsdatum': ('birth_date', parse_date), 'Geburtsdatum': ('birth_date', parse_date),
'Geburtstag': ('birth_date', parse_date), 'Geburtstag': ('birth_date', parse_date),
'Geschlecht': ('gender', parse_gender),
'Bemerkungen': 'comments', 'Bemerkungen': 'comments',
'IBAN': 'iban', 'IBAN': 'iban',
'Vorlage Führungszeugnis': ('good_conduct_certificate_presented_date', parse_date), 'Vorlage Führungszeugnis': ('good_conduct_certificate_presented_date', parse_date),
'Vorlage Führungszeugnis notwendig': ('good_conduct_certificate_presentation_needed', parse_boolean),
'Letzte Fortbildung': ('last_training', parse_date), 'Letzte Fortbildung': ('last_training', parse_date),
'Grundausbildung': ('has_fundamental_training', parse_boolean), 'Grundausbildung': ('has_fundamental_training', parse_boolean),
'Besondere Ausbildung': 'special_training', 'Besondere Ausbildung': 'special_training',
@ -1521,7 +1551,7 @@ CLUBDESK_TO_KOMPASS = {
'Schlüssel': ('has_key', parse_boolean), 'Schlüssel': ('has_key', parse_boolean),
'Freikarte': ('has_free_ticket_gym', parse_boolean), 'Freikarte': ('has_free_ticket_gym', parse_boolean),
'DAV Ausweis Nr.': 'dav_badge_no', 'DAV Ausweis Nr.': 'dav_badge_no',
'Schwimmabzeichen': 'swimming_badge', 'Schwimmabzeichen': ('swimming_badge', parse_can_swim),
'Kletterschein': 'climbing_badge', 'Kletterschein': 'climbing_badge',
'Felserfahrung': 'alpine_experience', 'Felserfahrung': 'alpine_experience',
'Allergien': 'allergies', 'Allergien': 'allergies',
@ -1529,9 +1559,13 @@ CLUBDESK_TO_KOMPASS = {
'Tetanusimpfung': 'tetanus_vaccination', 'Tetanusimpfung': 'tetanus_vaccination',
'Fotoerlaubnis': ('photos_may_be_taken', parse_boolean), 'Fotoerlaubnis': ('photos_may_be_taken', parse_boolean),
'Erziehungsberechtigte': 'legal_guardians', 'Erziehungsberechtigte': 'legal_guardians',
'Darf sich allein von der Gruppenstunde abmelden':
('may_cancel_appointment_independently', parse_nullable_boolean),
'Mobil Eltern': 'phone_number_parents', 'Mobil Eltern': 'phone_number_parents',
'Sonstiges': 'application_text', 'Sonstiges': 'application_text',
'Erhalten am': ('application_date', parse_datetime), 'Erhalten am': ('application_date', parse_datetime),
'Angeschrieben von': 'contacted_by',
'Angeschrieben von ': 'contacted_by',
} }
@ -1557,8 +1591,18 @@ def import_from_csv_waitinglist(path):
def transform_row(row): def transform_row(row):
kwargs = dict([ transform_field(k, v) for k, v in row.items() if k in CLUBDESK_TO_KOMPASS ]) kwargs = dict([ transform_field(k, v) for k, v in row.items() if k in CLUBDESK_TO_KOMPASS ])
kwargs_filtered = { k : v for k, v in kwargs.items() if k in ['prename', 'lastname', 'email', 'birth_date', 'application_text', 'application_date'] } kwargs_filtered = { k : v for k, v in kwargs.items() if k in ['prename', 'lastname', 'email', 'birth_date', 'application_text', 'application_date'] }
mem = MemberWaitingList(**kwargs_filtered) mem = MemberWaitingList(**kwargs_filtered)
mem.save() mem.save()
if kwargs['contacted_by']:
group_name = kwargs['contacted_by']
try:
group = Group.objects.get(name=group_name)
invitation = InvitationToGroup(group=group, waiter=mem)
invitation.save()
except Group.DoesNotExist:
pass
for row in rows: for row in rows:
transform_row(row) transform_row(row)

Loading…
Cancel
Save