diff --git a/src/pretix/base/payment.py b/src/pretix/base/payment.py
index d50495481..0cf01e8f7 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 cdff2a9e2..da7af3774 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 9f808793d..7bc578841 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 1e983e22a..3cb921229 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)