From 9945bb588055b32f3d625dd451b8ed28572322b6 Mon Sep 17 00:00:00 2001 From: heinzel Date: Tue, 13 Oct 2020 12:27:42 +0200 Subject: [PATCH 1/7] Close #13 dav_events/Anmeldungen: Mitgliedsmummer wird nun im Info-Tooltip angezeigt. --- dav_registration/models.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dav_registration/models.py b/dav_registration/models.py index a1c7e64..ae22221 100644 --- a/dav_registration/models.py +++ b/dav_registration/models.py @@ -109,6 +109,8 @@ class Registration(models.Model): text = """{fullname} {address}, {postal_code} {city} +DAV Mitgliedsnummer: {dav_number} + Erfahrung: {experience} @@ -120,6 +122,7 @@ Anmerkung: address=self.address, postal_code=self.postal_code, city=self.city, + dav_number=self.dav_number, experience=self.experience, note=self.note, ) From 0819b9a38a3ff2e3aa6d379f21b086e84e930043 Mon Sep 17 00:00:00 2001 From: heinzel Date: Tue, 13 Oct 2020 12:40:40 +0200 Subject: [PATCH 2/7] Close #12 and #17 - Added Help-Texts (Mouse-Over-Questionmarks) to the Event-Registraions-View. - Answered registrations will be shown but muted. --- .../dav_events/event_registrations.html | 66 +++++++++++++++++-- dav_events/views/events.py | 8 ++- 2 files changed, 67 insertions(+), 7 deletions(-) diff --git a/dav_events/templates/dav_events/event_registrations.html b/dav_events/templates/dav_events/event_registrations.html index fc63f20..a0814bd 100644 --- a/dav_events/templates/dav_events/event_registrations.html +++ b/dav_events/templates/dav_events/event_registrations.html @@ -223,11 +223,38 @@
+
+ {% bootstrap_icon 'question-sign' %} +

{% trans 'Teilnehmer' %}

{% if registrations_support %}
-
- {% for registration in registrations %} + {% for registration in registrations_all %}
{% csrf_token %} - {% if has_permission_update_participants %} + {% if registration.answered %} + +   + +   + {% elif has_permission_update_participants %}
@@ -284,6 +330,14 @@ {% if has_permission_update_participants %}
diff --git a/dav_events/views/events.py b/dav_events/views/events.py index 2fd0a44..2e225ac 100644 --- a/dav_events/views/events.py +++ b/dav_events/views/events.py @@ -230,9 +230,11 @@ class EventRegistrationsView(EventPermissionMixin, generic.DetailView): registrations_support = hasattr(event, 'registrations') context['registrations_support'] = registrations_support if registrations_support: - registrations = event.registrations.filter(answered=False) - # registrations = event.registrations.all() - context['registrations'] = registrations + registrations_unanswered = event.registrations.filter(answered=False) + registrations_all = event.registrations.all() + context['registrations_unanswered'] = registrations_unanswered + context['registrations_all'] = registrations_all + context['registrations'] = registrations_all return context From e44cff343f309d058e406c9a27c75767ccfd5213 Mon Sep 17 00:00:00 2001 From: heinzel Date: Tue, 13 Oct 2020 13:14:33 +0200 Subject: [PATCH 3/7] More Information on a failing test. dav_events.tests: sometimes an OneclickActionTest failes without providing enough information. --- dav_events/tests/test_oneclickactions.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dav_events/tests/test_oneclickactions.py b/dav_events/tests/test_oneclickactions.py index c0b1da7..ee0f45e 100644 --- a/dav_events/tests/test_oneclickactions.py +++ b/dav_events/tests/test_oneclickactions.py @@ -121,7 +121,11 @@ class ActionTestCase(EmailTestMixin, RoleMixin, EventMixin, TestCase): 'user': user.get_full_name(), }) html = message.replace('\'', ''') - self.assertInHTML(html, content) + # Sometimes this test fail, and we cannot see the tested content, so we create our own Exception + try: + self.assertInHTML(html, content) + except AssertionError as e: + raise AssertionError('Not in HTML:\n{}\n-----\n{}\n'.format(html, content)) from e self.assertRegex(content, r'alert-success') def setUp(self): From 28a35d98d291b00f6f29a68b6c2275f3bcb1e4f9 Mon Sep 17 00:00:00 2001 From: heinzel Date: Tue, 13 Oct 2020 14:05:44 +0200 Subject: [PATCH 4/7] Fix the previous change --- dav_events/tests/test_oneclickactions.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dav_events/tests/test_oneclickactions.py b/dav_events/tests/test_oneclickactions.py index ee0f45e..beee8c2 100644 --- a/dav_events/tests/test_oneclickactions.py +++ b/dav_events/tests/test_oneclickactions.py @@ -124,8 +124,8 @@ class ActionTestCase(EmailTestMixin, RoleMixin, EventMixin, TestCase): # Sometimes this test fail, and we cannot see the tested content, so we create our own Exception try: self.assertInHTML(html, content) - except AssertionError as e: - raise AssertionError('Not in HTML:\n{}\n-----\n{}\n'.format(html, content)) from e + except AssertionError: + raise AssertionError('Not in HTML:\n{}\n-----\n{}\n'.format(html, content)) self.assertRegex(content, r'alert-success') def setUp(self): From 63026e429b5627643c5335b42f5326b059fdec30 Mon Sep 17 00:00:00 2001 From: heinzel Date: Thu, 15 Oct 2020 17:44:12 +0200 Subject: [PATCH 5/7] Fix #9 Registrations: Add support for non members --- .../dav_event_office/event_detail.html | 29 ++++-- .../includes/participant_form.html | 5 +- .../dav_event_office/participant_list.html | 6 +- .../migrations/0034_auto_20201015_1738.py | 26 +++++ dav_events/models/participant.py | 19 +++- .../dav_events/includes/participant_form.html | 5 +- dav_events/views/events.py | 4 +- dav_registration/forms.py | 19 +++- .../migrations/0005_auto_20201015_1738.py | 26 +++++ dav_registration/models.py | 19 +++- .../dav_registration/emails/inform_self.txt | 2 +- .../emails/inform_trainer.txt | 2 +- .../dav_registration/registration_form.html | 39 +++++++- dav_registration/tests/test_emails.py | 30 ++++-- dav_registration/tests/test_models.py | 99 +++++++++++++++++++ dav_registration/tests/test_utils.py | 14 ++- 16 files changed, 315 insertions(+), 29 deletions(-) create mode 100644 dav_events/migrations/0034_auto_20201015_1738.py create mode 100644 dav_registration/migrations/0005_auto_20201015_1738.py create mode 100644 dav_registration/tests/test_models.py diff --git a/dav_event_office/templates/dav_event_office/event_detail.html b/dav_event_office/templates/dav_event_office/event_detail.html index 5e3e307..d9fc9c4 100644 --- a/dav_event_office/templates/dav_event_office/event_detail.html +++ b/dav_event_office/templates/dav_event_office/event_detail.html @@ -131,11 +131,22 @@ @@ -189,7 +201,12 @@ ({{ participant.email_address }}, {{ participant.phone_number }}) -   {{ participant.dav_number }} +   + {% if participant.dav_member %} + {{ participant.dav_number|default:'Fehler! heinzel Bescheid geben!' }} + {% else %} + {% trans 'Nicht Mitglied' %} + {% endif %}
{% csrf_token %} diff --git a/dav_event_office/templates/dav_event_office/includes/participant_form.html b/dav_event_office/templates/dav_event_office/includes/participant_form.html index 4eb0e04..9279bd4 100644 --- a/dav_event_office/templates/dav_event_office/includes/participant_form.html +++ b/dav_event_office/templates/dav_event_office/includes/participant_form.html @@ -29,9 +29,12 @@
-
+
{% bootstrap_field form.dav_number %}
+
+ {% bootstrap_field form.dav_member %} +
{% bootstrap_field form.emergency_contact %}
diff --git a/dav_event_office/templates/dav_event_office/participant_list.html b/dav_event_office/templates/dav_event_office/participant_list.html index 02fc370..f747551 100644 --- a/dav_event_office/templates/dav_event_office/participant_list.html +++ b/dav_event_office/templates/dav_event_office/participant_list.html @@ -55,7 +55,11 @@ {{ participant.personal_names }} - {{ participant.dav_number }} + {% if participant.dav_member %} + {{ participant.dav_number|default:'Fehler! heinzel Bescheid geben!' }} + {% else %} + {% trans 'Nicht Mitglied' %} + {% endif %} diff --git a/dav_events/migrations/0034_auto_20201015_1738.py b/dav_events/migrations/0034_auto_20201015_1738.py new file mode 100644 index 0000000..b530157 --- /dev/null +++ b/dav_events/migrations/0034_auto_20201015_1738.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.29 on 2020-10-15 15:38 +from __future__ import unicode_literals + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dav_events', '0033_auto_20200925_1543'), + ] + + operations = [ + migrations.AddField( + model_name='participant', + name='dav_member', + field=models.BooleanField(default=True, help_text='In Ausnahmefällen nehmen wir auch Nichtmitglieder mit.', verbose_name='DAV Mitglied'), + ), + migrations.AlterField( + model_name='participant', + name='dav_number', + field=models.CharField(blank=True, max_length=62, validators=[django.core.validators.RegexValidator('^([0-9]{1,10}/[0-9]{2,10}/)?[0-9]{1,10}(\\*[0-9]{1,10})?(\\*[0-9]{4}\\*[0-9]{4})?([* ][0-9]{8})?$', 'Ungültiges Format.')], verbose_name='DAV Mitgliedsnummer'), + ), + ] diff --git a/dav_events/models/participant.py b/dav_events/models/participant.py index 4171c2d..f42ddd4 100644 --- a/dav_events/models/participant.py +++ b/dav_events/models/participant.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals import datetime +from django.core.exceptions import ValidationError from django.db import models from django.utils import timezone from django.utils.encoding import python_2_unicode_compatible @@ -32,8 +33,11 @@ class Participant(models.Model): email_address = models.EmailField(verbose_name=_('E-Mail-Adresse')) phone_number = models.CharField(max_length=254, verbose_name=_('Telefonnummer')) + dav_member = models.BooleanField(default=True, + verbose_name=_('DAV Mitglied'), + help_text=_('In Ausnahmefällen nehmen wir auch Nichtmitglieder mit.')) dav_number = models.CharField(max_length=62, - validators=[DAVNumberValidator], + blank=True, validators=[DAVNumberValidator], verbose_name=_('DAV Mitgliedsnummer')) emergency_contact = models.TextField(blank=True, verbose_name=_('Notfall-Kontakt'), @@ -69,25 +73,38 @@ class Participant(models.Model): text = """{fullname} {address}, {postal_code} {city} + DAV Mitglied: {dav_info} + Notfallkontakt: {emergency_contact} Anmerkung: {note} """ + if not self.dav_member: + dav_info = _('Nein') + else: + dav_info = self.dav_number + return text.format( fullname=self.get_full_name(), address=self.address, postal_code=self.postal_code, city=self.city, + dav_info=dav_info, emergency_contact=self.emergency_contact, note=self.note, ) + def clean(self): + if self.dav_member and not self.dav_number: + raise ValidationError({'dav_number': _('Bei DAV Mitgliedern brauchen wir die Mitgliedsnummer.')}) + def save(self, **kwargs): if not self.purge_at and self.event: self.purge_at = self.__class__.calc_purge_at(self.event) + self.full_clean() super(Participant, self).save(**kwargs) @staticmethod diff --git a/dav_events/templates/dav_events/includes/participant_form.html b/dav_events/templates/dav_events/includes/participant_form.html index 4eb0e04..9279bd4 100644 --- a/dav_events/templates/dav_events/includes/participant_form.html +++ b/dav_events/templates/dav_events/includes/participant_form.html @@ -29,9 +29,12 @@
-
+
{% bootstrap_field form.dav_number %}
+
+ {% bootstrap_field form.dav_member %} +
{% bootstrap_field form.emergency_contact %}
diff --git a/dav_events/views/events.py b/dav_events/views/events.py index 2e225ac..9eeb586 100644 --- a/dav_events/views/events.py +++ b/dav_events/views/events.py @@ -230,9 +230,9 @@ class EventRegistrationsView(EventPermissionMixin, generic.DetailView): registrations_support = hasattr(event, 'registrations') context['registrations_support'] = registrations_support if registrations_support: - registrations_unanswered = event.registrations.filter(answered=False) registrations_all = event.registrations.all() - context['registrations_unanswered'] = registrations_unanswered + registrations_pending = registrations_all.filter(answered=False) + context['registrations_pending'] = registrations_pending context['registrations_all'] = registrations_all context['registrations'] = registrations_all diff --git a/dav_registration/forms.py b/dav_registration/forms.py index 504874b..e80d9e3 100644 --- a/dav_registration/forms.py +++ b/dav_registration/forms.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- import logging from django import forms -from django.utils.translation import ugettext +from django.utils.translation import ugettext, ugettext_lazy as _ from .models import Registration @@ -9,10 +9,17 @@ logger = logging.getLogger(__name__) class RegistrationForm(forms.ModelForm): + not_dav_member = forms.BooleanField(required=False, + label=_('Ich bin noch kein DAV Mitglied.'), + help_text=_('Wenn du noch kein DAV Mitglied bist,' + ' oder deine Aufnahme noch in Arbeit ist,' + ' kreuze dieses Feld hier an.')) + class Meta: model = Registration exclude = ['event', 'created_at', 'privacy_policy', 'purge_at', 'answered'] widgets = { + 'dav_member': forms.HiddenInput(), 'emergency_contact': forms.Textarea(attrs={'rows': 4}), 'experience': forms.Textarea(attrs={'rows': 5}), 'note': forms.Textarea(attrs={'rows': 5}), @@ -41,3 +48,13 @@ class RegistrationForm(forms.ModelForm): code='privacy_policy_not_accepted', ) return val + + def clean(self): + super(RegistrationForm, self).clean() + dav_member = self.cleaned_data.get('dav_member') + dav_number = self.cleaned_data.get('dav_number') + if dav_member and not dav_number: + error_msg = ugettext(u'Wenn du DAV Mitglied bist, brauchen wir deine Mitgliedsnummer.') + self.add_error('not_dav_member', error_msg) + raise forms.ValidationError(error_msg, code='dav_number_missing') + return self.cleaned_data diff --git a/dav_registration/migrations/0005_auto_20201015_1738.py b/dav_registration/migrations/0005_auto_20201015_1738.py new file mode 100644 index 0000000..3d69b2b --- /dev/null +++ b/dav_registration/migrations/0005_auto_20201015_1738.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.29 on 2020-10-15 15:38 +from __future__ import unicode_literals + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dav_registration', '0004_auto_20190605_1400'), + ] + + operations = [ + migrations.AddField( + model_name='registration', + name='dav_member', + field=models.BooleanField(default=True, verbose_name='DAV Mitglied'), + ), + migrations.AlterField( + model_name='registration', + name='dav_number', + field=models.CharField(blank=True, help_text='Deine Mitgliedsnummer findest du unter dem Strichcode auf deinem DAV Ausweis.
Beispiel: 131/00/012345 (der Teil bis zum ersten * genügt)', max_length=62, validators=[django.core.validators.RegexValidator('^([0-9]{1,10}/[0-9]{2,10}/)?[0-9]{1,10}(\\*[0-9]{1,10})?(\\*[0-9]{4}\\*[0-9]{4})?([* ][0-9]{8})?$', 'Ungültiges Format.')], verbose_name='DAV Mitgliedsnummer'), + ), + ] diff --git a/dav_registration/models.py b/dav_registration/models.py index ae22221..3ff8494 100644 --- a/dav_registration/models.py +++ b/dav_registration/models.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals import datetime import logging +from django.core.exceptions import ValidationError from django.db import models from django.urls import reverse from django.utils import timezone @@ -39,8 +40,10 @@ class Registration(models.Model): phone_number = models.CharField(max_length=254, verbose_name=_('Telefonnummer'), help_text=_('Idealerweise eine Mobilfunk-Nummer')) + dav_member = models.BooleanField(default=True, + verbose_name=_('DAV Mitglied')) dav_number = models.CharField(max_length=62, - validators=[DAVNumberValidator], + blank=True, validators=[DAVNumberValidator], verbose_name=_('DAV Mitgliedsnummer'), help_text='%s
%s %s' % ( _('Deine Mitgliedsnummer findest du unter dem Strichcode' @@ -109,7 +112,7 @@ class Registration(models.Model): text = """{fullname} {address}, {postal_code} {city} -DAV Mitgliedsnummer: {dav_number} +DAV Mitglied: {dav_info} Erfahrung: {experience} @@ -117,16 +120,25 @@ Erfahrung: Anmerkung: {note} """ + if not self.dav_member: + dav_info = _('Nein') + else: + dav_info = self.dav_number + return text.format( fullname=self.get_full_name(), address=self.address, postal_code=self.postal_code, city=self.city, - dav_number=self.dav_number, + dav_info=dav_info, experience=self.experience, note=self.note, ) + def clean(self): + if self.dav_member and not self.dav_number: + raise ValidationError({'dav_number': _('Wenn du DAV Mitglied bist, brauchen wir deine Mitgliedsnummer.')}) + def save(self, **kwargs): creating = False if not self.id: @@ -135,6 +147,7 @@ Anmerkung: if not self.purge_at and self.event: self.purge_at = self.__class__.calc_purge_at(self.event) + self.full_clean() super(Registration, self).save(**kwargs) if creating: diff --git a/dav_registration/templates/dav_registration/emails/inform_self.txt b/dav_registration/templates/dav_registration/emails/inform_self.txt index 5db5623..dfdbfeb 100644 --- a/dav_registration/templates/dav_registration/emails/inform_self.txt +++ b/dav_registration/templates/dav_registration/emails/inform_self.txt @@ -22,7 +22,7 @@ Personendaten {{ registration.postal_code }} {{ registration.city }} Telefon: {{ registration.phone_number }} E-Mail: {{ registration.email_address }} -DAV Mitgliedsnummer: {{ registration.dav_number }} +{% if registration.dav_member %}DAV Mitgliedsnummer: {{ registration.dav_number }}{% else %}DAV Mitglied: Nein{% endif %} Notfall-Kontakt --------------- diff --git a/dav_registration/templates/dav_registration/emails/inform_trainer.txt b/dav_registration/templates/dav_registration/emails/inform_trainer.txt index d3e00ba..5da7483 100644 --- a/dav_registration/templates/dav_registration/emails/inform_trainer.txt +++ b/dav_registration/templates/dav_registration/emails/inform_trainer.txt @@ -11,7 +11,7 @@ Teilnehmer*in: {{ registration.address }}, {{ registration.postal_code }} {{ registration.city }} {{ registration.phone_number }} {{ registration.email_address }} -{{ registration.dav_number }} +{% if registration.dav_member %}{{ registration.dav_number }}{% else %}Nicht DAV Mitglied{% endif %} Notfall-Kontakt: {% if registration.emergency_contact %}{{ registration.emergency_contact }}{% else %}-{% endif %} diff --git a/dav_registration/templates/dav_registration/registration_form.html b/dav_registration/templates/dav_registration/registration_form.html index addb143..473e213 100644 --- a/dav_registration/templates/dav_registration/registration_form.html +++ b/dav_registration/templates/dav_registration/registration_form.html @@ -4,6 +4,40 @@ {% block head-title %}{% block form-title %}{% trans 'Anmeldung' %} - {{ event.number }}{% endblock form-title %} - {{ block.super }}{% endblock head-title %} +{% block head-additional %} + +{% endblock head-additional %} + {% block page-container-fluid %}

{% trans 'Anmeldung' %}

@@ -56,9 +90,12 @@
-
+
{% bootstrap_field form.dav_number %}
+
+ {% bootstrap_field form.not_dav_member %} +
{% bootstrap_field form.emergency_contact %}
diff --git a/dav_registration/tests/test_emails.py b/dav_registration/tests/test_emails.py index 75012f3..a8502cc 100644 --- a/dav_registration/tests/test_emails.py +++ b/dav_registration/tests/test_emails.py @@ -32,11 +32,11 @@ Vorgang: {registration_hexstr} (wird nur gebraucht, wenn irgendwas schief geht) Personendaten ------------- {participant_full_name} - - -Telefon: +Here +1 Karlsruhe +Telefon: 12 E-Mail: {participant_email} -DAV Mitgliedsnummer: +DAV Mitgliedsnummer: 0 Notfall-Kontakt --------------- @@ -66,10 +66,10 @@ Vorgang: {registration_hexstr} Teilnehmer*in: {participant_full_name} -, - +Here, 1 Karlsruhe +12 {participant_email} - +0 Notfall-Kontakt: - @@ -107,7 +107,12 @@ class EmailsTestCase(EmailTestMixin, EventMixin, RegistrationMixin, TestCase): 'event': event, 'personal_names': 'Participant', 'family_names': 'One', + 'address': 'Here', + 'postal_code': '1', + 'city': 'Karlsruhe', + 'phone_number': '12', 'email_address': 'participant@localhost', + 'dav_number': '0', } registration = self.create_registration(registration_data) @@ -150,6 +155,7 @@ class EmailsTestCase(EmailTestMixin, EventMixin, RegistrationMixin, TestCase): 'postal_code': '76131', 'city': 'Karlsruhe', 'phone_number': '+49 721 1234567890 AB (Büro)', + 'dav_member': False, 'dav_number': '131/00/007*12345', 'emergency_contact': 'Call 911!', 'experience': 'Yes, we can!', @@ -167,7 +173,7 @@ class EmailsTestCase(EmailTestMixin, EventMixin, RegistrationMixin, TestCase): search += '{} {}\n'.format(registration_data['postal_code'], registration_data['city']) search += 'Telefon: {}\n'.format(registration_data['phone_number']) search += 'E-Mail: {}\n'.format(registration_data['email_address']) - search += 'DAV Mitgliedsnummer: {}\n'.format(registration_data['dav_number']) + search += 'DAV Mitglied: Nein\n' self.assertIn(search, mail.body) search = '\n' @@ -204,7 +210,12 @@ class EmailsTestCase(EmailTestMixin, EventMixin, RegistrationMixin, TestCase): 'event': event, 'personal_names': 'Participant', 'family_names': 'One', + 'address': 'Here', + 'postal_code': '1', + 'city': 'Karlsruhe', + 'phone_number': '12', 'email_address': 'participant@localhost', + 'dav_number': '0', } registration = self.create_registration(registration_data) @@ -247,6 +258,7 @@ class EmailsTestCase(EmailTestMixin, EventMixin, RegistrationMixin, TestCase): 'postal_code': '76131', 'city': 'Karlsruhe', 'phone_number': '+49 721 1234567890 AB (Büro)', + 'dav_member': False, 'dav_number': '131/00/007*12345', 'emergency_contact': 'Call 911!', 'experience': 'Yes, we can!', @@ -265,7 +277,7 @@ class EmailsTestCase(EmailTestMixin, EventMixin, RegistrationMixin, TestCase): search += '\n' search += registration_data['email_address'] search += '\n' - search += registration_data['dav_number'] + search += 'Nicht DAV Mitglied' search += '\n' self.assertIn(search, mail.body) diff --git a/dav_registration/tests/test_models.py b/dav_registration/tests/test_models.py new file mode 100644 index 0000000..932835f --- /dev/null +++ b/dav_registration/tests/test_models.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals +from django.apps import apps +from django.core.exceptions import ValidationError +from django.test import TestCase + +from dav_events.tests.generic import EventMixin + +from .generic import RegistrationMixin + + +class RegistrationTestCase(EventMixin, RegistrationMixin, TestCase): + def setUp(self): + super(RegistrationTestCase, self).setUp() + + app_config = apps.get_app_config('dav_events') + app_config.settings.enable_email_on_status_update = False + + self.event = self.create_event_by_model() + self.submit_event(self.event) + self.accept_event(self.event) + self.confirm_publication_event(self.event) + + def test_create_members(self): + event = self.event + registration_data = { + 'event': event, + 'personal_names': 'Participant', + 'family_names': 'One', + 'address': 'Here', + 'postal_code': '1', + 'city': 'Karlsruhe', + 'phone_number': '12', + 'email_address': 'participant@localhost', + } + dav_numbers = ['0', '12345', '131/00/12345'] + for n in dav_numbers: + d = registration_data + d['dav_number'] = n + self.create_registration(d) + + def test_create_members_without_number(self): + event = self.event + registration_data = { + 'event': event, + 'personal_names': 'Participant', + 'family_names': 'One', + 'address': 'Here', + 'postal_code': '1', + 'city': 'Karlsruhe', + 'phone_number': '12', + 'email_address': 'participant@localhost', + } + with self.assertRaisesMessage(ValidationError, + 'Wenn du DAV Mitglied bist, brauchen wir deine Mitgliedsnummer.'): + self.create_registration(registration_data) + + registration_data['dav_number'] = '' + with self.assertRaisesMessage(ValidationError, + 'Wenn du DAV Mitglied bist, brauchen wir deine Mitgliedsnummer.'): + self.create_registration(registration_data) + + def test_create_members_with_invalid_numbers(self): + event = self.event + registration_data = { + 'event': event, + 'personal_names': 'Participant', + 'family_names': 'One', + 'address': 'Here', + 'postal_code': '1', + 'city': 'Karlsruhe', + 'phone_number': '12', + 'email_address': 'participant@localhost', + } + dav_numbers = ['Nein', '-', '13100123456789'] + for n in dav_numbers: + d = registration_data + d['dav_number'] = n + + with self.assertRaises(ValidationError) as context: + self.create_registration(d) + + self.assertEqual(context.exception.messages, ['Ungültiges Format.']) + + def test_create_non_member(self): + event = self.event + registration_data = { + 'event': event, + 'personal_names': 'Participant', + 'family_names': 'One', + 'address': 'Here', + 'postal_code': '1', + 'city': 'Karlsruhe', + 'phone_number': '12', + 'email_address': 'participant@localhost', + 'dav_member': False, + } + self.create_registration(registration_data) + diff --git a/dav_registration/tests/test_utils.py b/dav_registration/tests/test_utils.py index 81ff5d4..46ec24a 100644 --- a/dav_registration/tests/test_utils.py +++ b/dav_registration/tests/test_utils.py @@ -29,6 +29,16 @@ class UtilsTestCase(RegistrationMixin, EventMixin, TestCase): 'trainer_familyname': 'One', 'trainer_email': 'trainer@localhost', } + registration_data = { + 'personal_names': 'Participant', + 'family_names': 'P.', + 'address': 'Am Fächerbad 2', + 'postal_code': '76131', + 'city': 'Karlsruhe', + 'phone_number': '555 5555', + 'email_address': 'participant@localhost', + 'dav_number': '1', + } first_day = today - (one_day * 367) while first_day < today: @@ -41,7 +51,9 @@ class UtilsTestCase(RegistrationMixin, EventMixin, TestCase): self.accept_event(event) for i in range(0, registrations_per_event): - self.create_registration({'event': event}) + d = registration_data + d['event'] = event + self.create_registration(d) purge_registrations() From 3a3882080b1aa3ad4460f4b83620e0be1e34623f Mon Sep 17 00:00:00 2001 From: heinzel Date: Thu, 15 Oct 2020 18:05:49 +0200 Subject: [PATCH 6/7] Fix 63026e429b5627643c5335b42f5326b059fdec30 --- dav_events/templates/dav_events/event_registrations.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dav_events/templates/dav_events/event_registrations.html b/dav_events/templates/dav_events/event_registrations.html index a0814bd..c280dc6 100644 --- a/dav_events/templates/dav_events/event_registrations.html +++ b/dav_events/templates/dav_events/event_registrations.html @@ -263,7 +263,7 @@ Das musst du selbst (per E-Mail oder telefonisch) machen.
-
{% for registration in registrations_all %} From e3212280b87348ff38d1a3f492381e6f0d55b167 Mon Sep 17 00:00:00 2001 From: heinzel Date: Thu, 15 Oct 2020 18:19:32 +0200 Subject: [PATCH 7/7] Fix 63026e429b5627643c5335b42f5326b059fdec30 --- dav_events/views/events.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dav_events/views/events.py b/dav_events/views/events.py index 9eeb586..24afa0d 100644 --- a/dav_events/views/events.py +++ b/dav_events/views/events.py @@ -281,6 +281,7 @@ class EventRegistrationsView(EventPermissionMixin, generic.DetailView): 'city': registration.city, 'email_address': registration.email_address, 'phone_number': registration.phone_number, + 'dav_member': registration.dav_member, 'dav_number': registration.dav_number, 'emergency_contact': registration.emergency_contact, 'experience': registration.experience,