From 70270f27670c3d504f9b088d5ca33719ba026f66 Mon Sep 17 00:00:00 2001
From: Dominik George <dominik.george@teckids.org>
Date: Fri, 11 Mar 2022 23:52:24 +0100
Subject: [PATCH] Rewrite do_payment as class-based view

---
 aleksis/apps/tezor/views.py | 34 ++++++++++++++++++++--------------
 1 file changed, 20 insertions(+), 14 deletions(-)

diff --git a/aleksis/apps/tezor/views.py b/aleksis/apps/tezor/views.py
index 9517888..06a4df8 100644
--- a/aleksis/apps/tezor/views.py
+++ b/aleksis/apps/tezor/views.py
@@ -21,7 +21,7 @@ from .models.invoice import Invoice, InvoiceGroup
 
 class GetInvoicePDF(PermissionRequiredMixin, RenderPDFView):
 
-    permission_required = "tezor.can_print_invoice"
+    permission_required = "tezor.print_invoice_rule"
 
     def get_context_data(self, *args, **kwargs):
         context = super().get_context_data(*args, **kwargs)
@@ -33,23 +33,29 @@ class GetInvoicePDF(PermissionRequiredMixin, RenderPDFView):
         return context
 
 
-def do_payment(request, token):
-    payment = get_object_or_404(get_payment_model(), token=token)
+class DoPaymentView(PermissionRequiredMixin, View):
 
-    if payment.status not in [PaymentStatus.WAITING, PaymentStatus.INPUT, PaymentStatus.REJECTED]:
-        return redirect(payment.get_success_url())
+    model = Invoice
+    permission_required = "tezor.do_payment_rule"
+    template_name = "tezor/invoice/payment.html"
+
+    def dispatch(self, request, token):
+        self.object = get_object_or_404(self.model, token=token)
+
+        if self.object.status not in [PaymentStatus.WAITING, PaymentStatus.INPUT, PaymentStatus.REJECTED]:
+            return redirect(self.object.get_success_url())
 
-    try:
-       form = payment.get_form(data=request.POST or None)
-    except RedirectNeeded as redirect_to:
-        return redirect(str(redirect_to))
+        try:
+            form = self.object.get_form(data=request.POST or None)
+        except RedirectNeeded as redirect_to:
+            return redirect(str(redirect_to))
 
-    context = {
-        "form": form,
-        "payment": payment,
-    }
+        context = {
+            "form": form,
+            "payment": self.object,
+        }
 
-    return render(request, "tezor/invoice/payment.html", context)
+        return render(request, self.template_name, context)
 
 
 class ClientListView(PermissionRequiredMixin, SingleTableView):
-- 
GitLab