diff --git a/ticdesk_events/forms.py b/ticdesk_events/forms.py index 14e5c34af5fc6fee44a53820cdf4ac30a810d59c..6789cf08acc5fbf711713343e7dbdf933cfba412 100644 --- a/ticdesk_events/forms.py +++ b/ticdesk_events/forms.py @@ -6,7 +6,7 @@ from localflavor.generic.forms import IBANFormField from localflavor.generic.countries.sepa import IBAN_SEPA_COUNTRIES import phonenumbers -from .models import Voucher +from .models import RegistrationField, Voucher CHANNEL_CHOICES = [ ('none', _('Keine Angabe')), @@ -129,16 +129,24 @@ class EventRegisterForm(forms.Form): clean_mobile = clean_phonenumber('mobile') clean_guardian_mobile = clean_phonenumber('guardian_mobile') - def __init__(self, project, *args, **kwargs): + def __init__(self, project, person, *args, **kwargs): super(EventRegisterForm, self).__init__(*args, **kwargs) + self._project = project + self._person = person self.fields['voucher_code'].validators.append(is_valid_voucher_for(project.cn)) - EventAdditionSurveyForm.__init__(self, project, *args, **kwargs) + EventAdditionSurveyForm.__init__(self, project, person, *args, **kwargs) + + def save(self): + super(EventRegisterForm, self).save() + EventAdditionSurveyForm.save(self) class EventAdditionalSurveyForm(forms.Form): - def __init__(self, project, *args, **kwargs): + def __init__(self, project, person, *args, **kwargs): super(EventAdditionalSurveyForm, self).__init__(*args, **kwargs) + self._project = project + self._person = person for field in project.registration_fields: label, help_text, *choices = field.split('|') @@ -152,6 +160,19 @@ class EventAdditionalSurveyForm(forms.Form): self.fields[var] = field_attr + def save(self): + for field in self._project.registration_fields: + label, help_text, *choices = field.split('|') + var = re.sub(r'\W|^(?=\d)', '_', label) + + try: + field = RegistrationField.objects.get(project_cn = self._project.cn, person_uid=self._person.uid, title=label) + except RegistrationField.DoesNotExist: + field = RegistrationFeild.objects.create(project_cn = self._project.cn, person_uid=self._person.uid, title=label) + + field.content = self.cleaned_data[var] + field.save() + class EventFeedbackForm(forms.Form): comment_private = forms.CharField(required=False, label=_('Kommentar für das Team'), help_text=_('Dieser Kommentar ist nur für das Team. Du kannst hier alles aufschreiben, was du uns noch als Feedback mitteilen möchtest.'), @@ -177,6 +198,7 @@ class EventFeedbackForm(forms.Form): def __init__(self, project, *args, **kwargs): super(EventFeedbackForm, self).__init__(*args, **kwargs) + self._project = project for aspect in project.feedback_aspects: var = re.sub(r'\W|^(?=\d)', '_', aspect) diff --git a/ticdesk_events/views.py b/ticdesk_events/views.py index 173dc6379fda7716ba9b4c3fc581e66f68804d90..98370b588b9307baf20aacb271198b19ac53a0c3 100644 --- a/ticdesk_events/views.py +++ b/ticdesk_events/views.py @@ -57,7 +57,7 @@ def register_event(request, cn): 'school_class': current_person.ou, 'channel': 'none' } - register_form = EventRegisterForm(event, initial=initial) + register_form = EventRegisterForm(event, current_person, initial=initial) # Produce error if registration is not possible if not event.can_register(request): @@ -70,7 +70,7 @@ def register_event(request, cn): return render(request, 'ticdesk_events/register_event.html', context) if request.method == 'POST': - register_form = EventRegisterForm(event, request.POST, initial=initial) + register_form = EventRegisterForm(event, current_person, request.POST, initial=initial) if register_form.is_valid(): # Add the current person to the event event.add_member(current_person)