diff --git a/jdav_web/members/locale/de/LC_MESSAGES/django.po b/jdav_web/members/locale/de/LC_MESSAGES/django.po index 095088d..58b13f6 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: 2025-04-10 23:51+0200\n" +"POT-Creation-Date: 2025-04-11 00:39+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -140,7 +140,8 @@ msgstr "" #: members/admin.py msgid "Unconfirm selected members." -msgstr "Ausgewählte Teilnehmer*innen zu unbestätigten Registrierungen zurücksetzen." +msgstr "" +"Ausgewählte Teilnehmer*innen zu unbestätigten Registrierungen zurücksetzen." #: members/admin.py members/tests.py msgid "Successfully requested mail confirmation from selected registrations." @@ -1787,6 +1788,8 @@ msgstr "" #: members/templates/members/echo_password.html #: members/templates/members/echo_success.html #: members/templates/members/echo_wrong_password.html +#: members/templates/members/upload_registration_form.html +#: members/templates/members/upload_registration_form_success.html msgid "Echo" msgstr "Rückmeldung" @@ -2109,6 +2112,25 @@ 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 +#, python-format +msgid "" +"Thank you for echoing back, your data was updated. For legal\n" +"reasons, we also need a signed participation form. In your case, a recent\n" +"participation form is missing. Please download\n" +"the pre-filled form, 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 "" +"Danke für das Aktualisieren deiner Daten. Aus rechtlichen Gründen, " +"benötigen wir zusätzlich ein schriftliches Anmeldeformular. Für dich liegt uns " +"kein aktuelles Formular vor. Bitte " +"lade das Formular 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 #, python-format msgid "" @@ -2141,13 +2163,14 @@ 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 -#: members/tests.py -msgid "" -"Thank you for uploading the registration form. Our team will process your " -"registration shortly." +msgid "Thank you for uploading the registration form." +msgstr "Danke für das Hochladen des Anmeldeformulars." + +#: members/templates/members/upload_registration_form_success.html +msgid "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." +"Unser Jugendleiter*innenteam wird deine Registrierung so schnell wie möglich " +"bearbeiten." #: members/templates/members/waiting_confirmation_invalid.html msgid "Waiting confirmation failed" @@ -2195,6 +2218,14 @@ msgstr "" msgid "The entered password is wrong." msgstr "Das eingegebene Passwort ist falsch." +#: members/tests.py +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/tests.py members/views.py msgid "invalid" msgstr "ungültig" diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index 8d99151..aedcf49 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -354,6 +354,7 @@ class Member(Person): help_text=_('If the person registered from the waitinglist, this is their application date.')) objects = MemberManager() + all_objects = models.Manager() @property def email_fields(self): @@ -509,6 +510,10 @@ class Member(Person): # get activity overview return Freizeit.objects.filter(membersonlist__member=self) + def generate_upload_registration_form_key(self): + self.upload_registration_form_key = uuid.uuid4().hex + self.save() + def create_from_registration(self, waiter, group): """Given a member, a corresponding waiting-list object and a group, this completes the registration and requests email confirmations if necessary. diff --git a/jdav_web/members/templates/members/upload_registration_form.html b/jdav_web/members/templates/members/upload_registration_form.html index 9846542..3e12646 100644 --- a/jdav_web/members/templates/members/upload_registration_form.html +++ b/jdav_web/members/templates/members/upload_registration_form.html @@ -3,19 +3,36 @@ {% load static %} {% block title %} +{% if member.confirmed %} +{% trans "Echo" %} +{% else %} {% trans "Registration" %} +{% endif %} {% endblock %} {% block content %} +{% if member.confirmed %} +

{% trans "Echo" %}

+{% else %}

{% trans "Register" %}

+{% endif %} {% url 'members:download_registration_form' as download_url %} +{% if member.confirmed %} +

{% blocktrans %}Thank you for echoing back, your data was updated. For legal +reasons, we also need a signed participation form. In your case, a recent +participation form is missing. Please download +the pre-filled form, 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 %} +

+{% else %}

{% 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 %}

+{% endif %}

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

diff --git a/jdav_web/members/templates/members/upload_registration_form_success.html b/jdav_web/members/templates/members/upload_registration_form_success.html index 30f9aeb..e593f4c 100644 --- a/jdav_web/members/templates/members/upload_registration_form_success.html +++ b/jdav_web/members/templates/members/upload_registration_form_success.html @@ -3,14 +3,26 @@ {% load static %} {% block title %} +{% if member.confirmed %} +{% trans "Echo" %} +{% else %} {% trans "Registration" %} +{% endif %} {% endblock %} {% block content %} +{% if member.confirmed %} +

{% trans "Echo" %}

+{% else %}

{% trans "Register" %}

+{% endif %} -

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

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

{% endblock %} diff --git a/jdav_web/members/tests.py b/jdav_web/members/tests.py index 3e90a67..55c7211 100644 --- a/jdav_web/members/tests.py +++ b/jdav_web/members/tests.py @@ -1354,7 +1354,7 @@ class UploadRegistrationFormViewTestCase(BasicMemberTestCase): }) self.assertEqual(response.status_code, HTTPStatus.OK) self.assertContains(response, - _("Thank you for uploading the registration form. Our team will process your registration shortly.")) + _("Our team will process your registration shortly.")) class DownloadRegistrationFormViewTestCase(BasicMemberTestCase): def setUp(self): @@ -1597,6 +1597,9 @@ class EchoViewTestCase(BasicMemberTestCase): def setUp(self): super().setUp() self.key = self.fritz.generate_echo_key() + file = SimpleUploadedFile("form.pdf", b"file_content", content_type="application/pdf") + self.fritz.registration_form = file + self.fritz.save() def _assert_failed(self, response): self.assertEqual(response.status_code, HTTPStatus.OK) diff --git a/jdav_web/members/views.py b/jdav_web/members/views.py index 7f9abee..a4789d6 100644 --- a/jdav_web/members/views.py +++ b/jdav_web/members/views.py @@ -180,7 +180,13 @@ def echo(request): # member.echo_key, member.echo_expire = "", timezone.now() member.echoed = True member.save() - return render_echo_success(request, member.prename) + if not member.registration_form: + # If the member does not have a registration form, forward them to the upload page. + member.generate_upload_registration_form_key() + member.send_upload_registration_form_link() + return HttpResponseRedirect(reverse('members:upload_registration_form') + "?key=" + member.upload_registration_form_key) + else: + return render_echo_success(request, member.prename) except ValueError: # when input is invalid form = MemberForm(request.POST) @@ -305,7 +311,7 @@ def download_registration_form(request): return render_upload_registration_form_invalid(request) key = request.GET['key'] try: - member = MemberUnconfirmedProxy.objects.get(upload_registration_form_key=key) + member = Member.all_objects.get(upload_registration_form_key=key) return render_download_registration_form(request, member) except Member.DoesNotExist: return render_upload_registration_form_invalid(request) @@ -332,7 +338,7 @@ def upload_registration_form(request): return render_upload_registration_form_invalid(request) key = request.GET['key'] try: - member = MemberUnconfirmedProxy.objects.get(upload_registration_form_key=key) + member = Member.all_objects.get(upload_registration_form_key=key) except Member.DoesNotExist: return render_upload_registration_form_invalid(request) form = UploadRegistrationForm(instance=member) @@ -341,7 +347,7 @@ def upload_registration_form(request): return render_upload_registration_form_invalid(request) key = request.POST['key'] try: - member = MemberUnconfirmedProxy.objects.get(upload_registration_form_key=key) + member = Member.all_objects.get(upload_registration_form_key=key) except Member.DoesNotExist: return render_upload_registration_form_invalid(request)