feat(members/views): show upload registration form after echo if missing

pull/153/head
Christian Merten 8 months ago
parent 2fcdf1ee25
commit fb14c2f060
Signed by: christian.merten
GPG Key ID: D953D69721B948B3

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-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" "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"
@ -140,7 +140,8 @@ msgstr ""
#: members/admin.py #: members/admin.py
msgid "Unconfirm selected members." 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 #: members/admin.py members/tests.py
msgid "Successfully requested mail confirmation from selected registrations." msgid "Successfully requested mail confirmation from selected registrations."
@ -1787,6 +1788,8 @@ msgstr ""
#: members/templates/members/echo_password.html #: members/templates/members/echo_password.html
#: members/templates/members/echo_success.html #: members/templates/members/echo_success.html
#: members/templates/members/echo_wrong_password.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" msgid "Echo"
msgstr "Rückmeldung" msgstr "Rückmeldung"
@ -2109,6 +2112,25 @@ msgstr ""
"abgelehnt. Wenn ein Platz in einer anderen Gruppe frei wird, erhältst du " "abgelehnt. Wenn ein Platz in einer anderen Gruppe frei wird, erhältst du "
"eine neue Einladung.\n" "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 <a href=\"%(download_url)s?"
"key=%(key)s\">download</a>\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 "
"<a href=\"%(download_url)s?key=%(key)s\">lade das Formular herunter</a>, "
"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 #: members/templates/members/upload_registration_form.html
#, python-format #, python-format
msgid "" 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." msgstr "Der verwendete Link zum Hochladen eines Anmeldeformulars ist ungültig."
#: members/templates/members/upload_registration_form_success.html #: members/templates/members/upload_registration_form_success.html
#: members/tests.py msgid "Thank you for uploading the registration form."
msgid "" msgstr "Danke für das Hochladen des Anmeldeformulars."
"Thank you for uploading the registration form. Our team will process your "
"registration shortly." #: members/templates/members/upload_registration_form_success.html
msgid "Our team will process your registration shortly."
msgstr "" msgstr ""
"Danke für das Hochladen des Anmeldeformulars. Unser Jugendleiterteam wird " "Unser Jugendleiter*innenteam wird deine Registrierung so schnell wie möglich "
"deine Registrierung so schnell wie möglich bearbeiten." "bearbeiten."
#: members/templates/members/waiting_confirmation_invalid.html #: members/templates/members/waiting_confirmation_invalid.html
msgid "Waiting confirmation failed" msgid "Waiting confirmation failed"
@ -2195,6 +2218,14 @@ msgstr ""
msgid "The entered password is wrong." msgid "The entered password is wrong."
msgstr "Das eingegebene Passwort ist falsch." 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 #: members/tests.py members/views.py
msgid "invalid" msgid "invalid"
msgstr "ungültig" msgstr "ungültig"

@ -354,6 +354,7 @@ class Member(Person):
help_text=_('If the person registered from the waitinglist, this is their application date.')) help_text=_('If the person registered from the waitinglist, this is their application date.'))
objects = MemberManager() objects = MemberManager()
all_objects = models.Manager()
@property @property
def email_fields(self): def email_fields(self):
@ -509,6 +510,10 @@ class Member(Person):
# get activity overview # get activity overview
return Freizeit.objects.filter(membersonlist__member=self) 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): def create_from_registration(self, waiter, group):
"""Given a member, a corresponding waiting-list object and a group, this completes """Given a member, a corresponding waiting-list object and a group, this completes
the registration and requests email confirmations if necessary. the registration and requests email confirmations if necessary.

@ -3,19 +3,36 @@
{% load static %} {% load static %}
{% block title %} {% block title %}
{% if member.confirmed %}
{% trans "Echo" %}
{% else %}
{% trans "Registration" %} {% trans "Registration" %}
{% endif %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
{% if member.confirmed %}
<h1>{% trans "Echo" %}</h1>
{% else %}
<h1>{% trans "Register" %}</h1> <h1>{% trans "Register" %}</h1>
{% endif %}
{% url 'members:download_registration_form' as download_url %} {% url 'members:download_registration_form' as download_url %}
{% if member.confirmed %}
<p>{% 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 <a href="{{ download_url }}?key={{ key }}">download</a>
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 %}
</p>
{% else %}
<p>{% blocktrans %}We summarized your registration in our registration <p>{% blocktrans %}We summarized your registration in our registration
form. Please <a href="{{ download_url }}?key={{ key }}">download</a> it, form. Please <a href="{{ download_url }}?key={{ key }}">download</a> it,
fill in the remaining fields and read the general conditions. If you agree, 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 %} please sign the document and upload a scan or image here.{% endblocktrans %}
</p> </p>
{% endif %}
<p>{% blocktrans %}If you are not an adult yet, please let someone responsible for you sign the agreement.{% endblocktrans %} <p>{% blocktrans %}If you are not an adult yet, please let someone responsible for you sign the agreement.{% endblocktrans %}
</p> </p>

@ -3,14 +3,26 @@
{% load static %} {% load static %}
{% block title %} {% block title %}
{% if member.confirmed %}
{% trans "Echo" %}
{% else %}
{% trans "Registration" %} {% trans "Registration" %}
{% endif %}
{% endblock %} {% endblock %}
{% block content %} {% block content %}
{% if member.confirmed %}
<h1>{% trans "Echo" %}</h1>
{% else %}
<h1>{% trans "Register" %}</h1> <h1>{% trans "Register" %}</h1>
{% endif %}
<p>{% blocktrans %}Thank you for uploading the registration form. Our team will process your registration shortly.{% endblocktrans %} <p>
{% blocktrans %}Thank you for uploading the registration form.{% endblocktrans %}
{% if not member.confirmed %}
{% blocktrans %}Our team will process your registration shortly.{% endblocktrans %}
{% endif %}
</p> </p>
{% endblock %} {% endblock %}

@ -1354,7 +1354,7 @@ class UploadRegistrationFormViewTestCase(BasicMemberTestCase):
}) })
self.assertEqual(response.status_code, HTTPStatus.OK) self.assertEqual(response.status_code, HTTPStatus.OK)
self.assertContains(response, 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): class DownloadRegistrationFormViewTestCase(BasicMemberTestCase):
def setUp(self): def setUp(self):
@ -1597,6 +1597,9 @@ class EchoViewTestCase(BasicMemberTestCase):
def setUp(self): def setUp(self):
super().setUp() super().setUp()
self.key = self.fritz.generate_echo_key() 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): def _assert_failed(self, response):
self.assertEqual(response.status_code, HTTPStatus.OK) self.assertEqual(response.status_code, HTTPStatus.OK)

@ -180,6 +180,12 @@ def echo(request):
# member.echo_key, member.echo_expire = "", timezone.now() # member.echo_key, member.echo_expire = "", timezone.now()
member.echoed = True member.echoed = True
member.save() member.save()
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) return render_echo_success(request, member.prename)
except ValueError: except ValueError:
# when input is invalid # when input is invalid
@ -305,7 +311,7 @@ def download_registration_form(request):
return render_upload_registration_form_invalid(request) return render_upload_registration_form_invalid(request)
key = request.GET['key'] key = request.GET['key']
try: 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) return render_download_registration_form(request, member)
except Member.DoesNotExist: except Member.DoesNotExist:
return render_upload_registration_form_invalid(request) return render_upload_registration_form_invalid(request)
@ -332,7 +338,7 @@ def upload_registration_form(request):
return render_upload_registration_form_invalid(request) return render_upload_registration_form_invalid(request)
key = request.GET['key'] key = request.GET['key']
try: try:
member = MemberUnconfirmedProxy.objects.get(upload_registration_form_key=key) member = Member.all_objects.get(upload_registration_form_key=key)
except Member.DoesNotExist: except Member.DoesNotExist:
return render_upload_registration_form_invalid(request) return render_upload_registration_form_invalid(request)
form = UploadRegistrationForm(instance=member) form = UploadRegistrationForm(instance=member)
@ -341,7 +347,7 @@ def upload_registration_form(request):
return render_upload_registration_form_invalid(request) return render_upload_registration_form_invalid(request)
key = request.POST['key'] key = request.POST['key']
try: try:
member = MemberUnconfirmedProxy.objects.get(upload_registration_form_key=key) member = Member.all_objects.get(upload_registration_form_key=key)
except Member.DoesNotExist: except Member.DoesNotExist:
return render_upload_registration_form_invalid(request) return render_upload_registration_form_invalid(request)

Loading…
Cancel
Save