From e5a77dc482d3cc7c5761ab2932df43193d153bfb Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 10 Nov 2020 15:36:56 +0100 Subject: [PATCH] Banktransfer: Show reference when switching payment method to bank transfer --- src/pretix/base/payment.py | 8 ++++++-- src/pretix/plugins/banktransfer/payment.py | 7 ++++--- .../banktransfer/checkout_payment_form.html | 10 +++++++--- src/pretix/presale/views/order.py | 9 +++++++-- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/pretix/base/payment.py b/src/pretix/base/payment.py index d50495481a..0cf01e8f73 100644 --- a/src/pretix/base/payment.py +++ b/src/pretix/base/payment.py @@ -513,7 +513,7 @@ class BasePaymentProvider: return timing and pricing - def payment_form_render(self, request: HttpRequest, total: Decimal) -> str: + def payment_form_render(self, request: HttpRequest, total: Decimal, order: Order=None) -> str: """ When the user selects this provider as their preferred payment method, they will be shown the HTML you return from this method. @@ -522,13 +522,15 @@ class BasePaymentProvider: and render the returned form. If your payment method doesn't require the user to fill out form fields, you should just return a paragraph of explanatory text. + + :param order: Only set when this is a change to a new payment method for an existing order. """ form = self.payment_form(request) template = get_template('pretixpresale/event/checkout_payment_form_default.html') ctx = {'request': request, 'form': form} return template.render(ctx) - def checkout_confirm_render(self, request) -> str: + def checkout_confirm_render(self, request, order: Order=None) -> str: """ If the user has successfully filled in their payment data, they will be redirected to a confirmation page which lists all details of their order for a final review. @@ -537,6 +539,8 @@ class BasePaymentProvider: In most cases, this should include a short summary of the user's input and a short explanation on how the payment process will continue. + + :param order: Only set when this is a change to a new payment method for an existing order. """ raise NotImplementedError() # NOQA diff --git a/src/pretix/plugins/banktransfer/payment.py b/src/pretix/plugins/banktransfer/payment.py index cdff2a9e2f..da7af37740 100644 --- a/src/pretix/plugins/banktransfer/payment.py +++ b/src/pretix/plugins/banktransfer/payment.py @@ -155,12 +155,13 @@ class BankTransfer(BasePaymentProvider): {'payment_banktransfer_bank_details': _('Please enter your bank account details.')}) return cleaned_data - def payment_form_render(self, request) -> str: + def payment_form_render(self, request, total=None, order=None) -> str: template = get_template('pretixplugins/banktransfer/checkout_payment_form.html') ctx = { 'request': request, 'event': self.event, 'settings': self.settings, + 'code': self._code(order) if order else None, 'details': self.settings.get('bank_details', as_type=LazyI18nString), } return template.render(ctx) @@ -174,8 +175,8 @@ class BankTransfer(BasePaymentProvider): def payment_is_valid_session(self, request): return True - def checkout_confirm_render(self, request): - return self.payment_form_render(request) + def checkout_confirm_render(self, request, order=None): + return self.payment_form_render(request, order=order) def order_pending_mail_render(self, order, payment) -> str: template = get_template('pretixplugins/banktransfer/email/order_pending.txt') diff --git a/src/pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html b/src/pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html index 9f808793d0..7bc578841b 100644 --- a/src/pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html +++ b/src/pretix/plugins/banktransfer/templates/pretixplugins/banktransfer/checkout_payment_form.html @@ -16,7 +16,11 @@ {% if details %} {{ details|linebreaksbr }}
{% endif %} - - {% trans "We will assign you a personal reference code to use after you completed the order." %} - + {% if code %} + {% trans "Reference code (important):" %} {{ code }} + {% else %} + + {% trans "We will assign you a personal reference code to use after you completed the order." %} + + {% endif %} diff --git a/src/pretix/presale/views/order.py b/src/pretix/presale/views/order.py index 1e983e22a5..3cb9212294 100644 --- a/src/pretix/presale/views/order.py +++ b/src/pretix/presale/views/order.py @@ -416,7 +416,10 @@ class OrderPaymentConfirm(EventViewMixin, OrderDetailMixin, TemplateView): ctx = super().get_context_data(**kwargs) ctx['order'] = self.order ctx['payment'] = self.payment - ctx['payment_info'] = self.payment.payment_provider.checkout_confirm_render(self.request) + if 'order' in inspect.signature(self.payment.payment_provider.checkout_confirm_render).parameters: + ctx['payment_info'] = self.payment.payment_provider.checkout_confirm_render(self.request, order=self.order) + else: + ctx['payment_info'] = self.payment.payment_provider.checkout_confirm_render(self.request) ctx['payment_provider'] = self.payment.payment_provider return ctx @@ -568,7 +571,9 @@ class OrderPayChangeMethod(EventViewMixin, OrderDetailMixin, TemplateView): continue current_fee = sum(f.value for f in self.open_fees) or Decimal('0.00') fee = provider.calculate_fee(pending_sum - current_fee) - if 'total' in inspect.signature(provider.payment_form_render).parameters: + if 'order' in inspect.signature(provider.payment_form_render).parameters: + form = provider.payment_form_render(self.request, abs(pending_sum + fee - current_fee), order=self.order) + elif 'total' in inspect.signature(provider.payment_form_render).parameters: form = provider.payment_form_render(self.request, abs(pending_sum + fee - current_fee)) else: form = provider.payment_form_render(self.request)