From 9d68e5ddd64dbfcd483d7b3d886e9af53baa5f4d Mon Sep 17 00:00:00 2001
From: Tom Teichler <tom.teichler@teckids.org>
Date: Sat, 7 Jan 2023 23:44:33 +0100
Subject: [PATCH] Fix calculation of individual cost and voucher prefilling

---
 aleksis/apps/paweljong/models.py |  2 +-
 aleksis/apps/paweljong/views.py  | 15 ++++++++-------
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/aleksis/apps/paweljong/models.py b/aleksis/apps/paweljong/models.py
index eda36d6..8121c65 100644
--- a/aleksis/apps/paweljong/models.py
+++ b/aleksis/apps/paweljong/models.py
@@ -194,7 +194,7 @@ class Event(ExtensibleModel):
     def individual_cost(self, request=None):
         if request and request.user.is_authenticated and Voucher.objects.filter(event=self, person=request.user.person, used=False).exists():
             voucher = Voucher.objects.get(event=self, person=request.user.person, used=False)
-            individual_cost = voucher.discount * self.cost / 100
+            individual_cost = (100 - voucher.discount) * self.cost / 100
             return individual_cost
         else:
             return self.cost
diff --git a/aleksis/apps/paweljong/views.py b/aleksis/apps/paweljong/views.py
index a1d84e0..e077341 100644
--- a/aleksis/apps/paweljong/views.py
+++ b/aleksis/apps/paweljong/views.py
@@ -541,13 +541,14 @@ class RegisterEventWizardView(SessionWizardView):
         cleaned_data_consent = self.get_cleaned_data_for_step("consent")
 
         if cleaned_data_financial["voucher_code"]:
-            vouchers = Voucher.objects.filter(
-                person=person, event=event, used=False, code=cleaned_data_financial["voucher_code"]
-            )
-            if vouchers:
-                voucher = vouchers.first()
-            else:
-                messages.error(self.request, _("You entered an invalid voucher code!"))
+            if getattr(self.request.user, "person", None):
+                vouchers = Voucher.objects.filter(
+                    person=self.request.user.person, event=event, used=False, code=cleaned_data_financial["voucher_code"]
+                )
+                if vouchers:
+                    voucher = vouchers.first()
+                else:
+                    messages.error(self.request, _("You entered an invalid voucher code!"))
 
         # Create email address
         if cleaned_data_email:
-- 
GitLab