From bf9b6dd5120649bcbdfc6689395c9bbdba7d4fa6 Mon Sep 17 00:00:00 2001
From: Dominik George <dominik.george@teckids.org>
Date: Mon, 2 Jul 2018 12:35:10 +0200
Subject: [PATCH] Add code to save addition registration fields, advances #15,
 #26, #27.

Introduces a change in instantiating the EventRegisterForm (now also needs teh current user passed).
---
 ticdesk_events/forms.py | 30 ++++++++++++++++++++++++++----
 ticdesk_events/views.py |  4 ++--
 2 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/ticdesk_events/forms.py b/ticdesk_events/forms.py
index 14e5c34..6789cf0 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 173dc63..98370b5 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)
-- 
GitLab