From c150ab6c8332bc813b07573a21d44818da0c65d8 Mon Sep 17 00:00:00 2001
From: Tom Teichler <tom.teichler@teckids.org>
Date: Sun, 20 Feb 2022 23:23:43 +0100
Subject: [PATCH] Link accepted terms to registration

---
 .../migrations/0010_term_confirmation_text.py | 19 ++++++++++++++++
 .../0011_registration_accepted_terms.py       | 18 +++++++++++++++
 aleksis/apps/paweljong/models.py              |  6 +++++
 aleksis/apps/paweljong/views.py               | 22 +++++++++++++------
 4 files changed, 58 insertions(+), 7 deletions(-)
 create mode 100644 aleksis/apps/paweljong/migrations/0010_term_confirmation_text.py
 create mode 100644 aleksis/apps/paweljong/migrations/0011_registration_accepted_terms.py

diff --git a/aleksis/apps/paweljong/migrations/0010_term_confirmation_text.py b/aleksis/apps/paweljong/migrations/0010_term_confirmation_text.py
new file mode 100644
index 0000000..27a4643
--- /dev/null
+++ b/aleksis/apps/paweljong/migrations/0010_term_confirmation_text.py
@@ -0,0 +1,19 @@
+# Generated by Django 3.2.12 on 2022-02-20 21:23
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('paweljong', '0009_remove_feedback'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='terms',
+            name='confirmation_text',
+            field=models.TextField(default='', verbose_name='Confirmation text'),
+            preserve_default=False,
+        ),
+    ]
diff --git a/aleksis/apps/paweljong/migrations/0011_registration_accepted_terms.py b/aleksis/apps/paweljong/migrations/0011_registration_accepted_terms.py
new file mode 100644
index 0000000..7114f5c
--- /dev/null
+++ b/aleksis/apps/paweljong/migrations/0011_registration_accepted_terms.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.2.12 on 2022-02-20 22:01
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('paweljong', '0010_term_confirmation_text'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='eventregistration',
+            name='accepted_terms',
+            field=models.ManyToManyField(related_name='registrations', to='paweljong.Terms', verbose_name='Accepted terms'),
+        ),
+    ]
diff --git a/aleksis/apps/paweljong/models.py b/aleksis/apps/paweljong/models.py
index 777d629..0cbaacc 100644
--- a/aleksis/apps/paweljong/models.py
+++ b/aleksis/apps/paweljong/models.py
@@ -14,6 +14,7 @@ from aleksis.core.util.core_helpers import generate_random_code
 class Terms(ExtensibleModel):
     title = models.CharField(max_length=255, verbose_name=_("Title"))
     term = RichTextField(verbose_name=_("Term"))
+    confirmation_text = models.TextField(verbose_name=_("Confirmation text"))
 
     def __str__(self) -> str:
         return self.title
@@ -141,6 +142,11 @@ class EventRegistration(ExtensibleModel):
         null=True,
     )
     donation = models.PositiveIntegerField(verbose_name=_("Donation"), blank=True, null=True)
+    accepted_terms = models.ManyToManyField(
+        Terms,
+        verbose_name=_("Accepted terms"),
+        related_name="registrations",
+    )
 
     accept_sepa = models.BooleanField(verbose_name=_("SEPA direct debit"))
     iban = IBANField(
diff --git a/aleksis/apps/paweljong/views.py b/aleksis/apps/paweljong/views.py
index 647739a..9be6a22 100644
--- a/aleksis/apps/paweljong/views.py
+++ b/aleksis/apps/paweljong/views.py
@@ -272,7 +272,7 @@ def is_email_needed(wizard):
         return True
 
 
-register_forms = }
+TEMPLATES = {
     "email": "paweljong/event/register_wizard.html",
     "register": "paweljong/event/register_wizard.html",
     "contact_details": "paweljong/event/register_wizard.html",
@@ -286,6 +286,9 @@ class RegisterEventWizardView(SessionWizardView):
     template_name = "paweljong/event/register_wizard.html"
     file_storage = settings.DEFAULT_FILE_STORAGE
 
+    def get_template_names(self):
+        return [TEMPLATES[self.steps.current]]
+
     def get_context_data(self, form, **kwargs):
         context = super().get_context_data(form, **kwargs)
         context["event"] = Event.objects.get(linked_group__short_name=self.kwargs["slug"])
@@ -363,11 +366,15 @@ class RegisterEventWizardView(SessionWizardView):
         kwargs = super().get_form_kwargs()
         if step == "email":
             kwargs["request"] = self.request
-        if step == "additional" or step == "consent":
+        if step == "additional":
+            event = Event.objects.get(linked_group__short_name=self.kwargs["slug"])
+            kwargs["event"] = event
+        if step == "consent":
             event = Event.objects.get(linked_group__short_name=self.kwargs["slug"])
             kwargs["event"] = event
         return kwargs
 
+
     def get_form_initial(self, step):
 
         initial = self.initial_dict.get(step, {})
@@ -543,10 +550,10 @@ class RegisterEventWizardView(SessionWizardView):
                 slugify(field.title).replace("-", "_")
             ] = cleaned_data_additional[field.title]
 
-        for field in event.terms.all():
-            registration.extended_data[
-                slugify(field.title).replace("-", "_")
-            ] = cleaned_data_consent[field.title]
+        for field in cleaned_data_consent:
+            pk = int(field.split("_")[1])
+            term = Terms.objects.get(id=pk)
+            registration.accepted_terms.add(term)
 
         registration.save()
 
@@ -590,7 +597,7 @@ class RegisterEventWizardView(SessionWizardView):
         )
 
         act = Activity(
-[5~            title=_("You registred for an event"),
+            title=_("You registred for an event"),
             description=_("You registred for the event %s" % event.display_name),
             app="Paweljong",
             user=person,
@@ -611,6 +618,7 @@ class EventFullView(DetailView):
         context = super().get_context_data(**kwargs)
 
         context["can_register"] = context["event"].can_register(request=self.request)
+        context["is_authenticated"] = self.request.user.is_authenticated
         return context
 
 
-- 
GitLab