Payment provider API: Add payment argument to render_invoice_text and order_pending_mail_render

This commit is contained in:
Raphael Michel
2019-07-09 10:09:44 +02:00
parent 0ac98f5127
commit c1a4b8d343
6 changed files with 22 additions and 11 deletions

View File

@@ -296,11 +296,12 @@ class BasePaymentProvider:
"""
return ""
def render_invoice_text(self, order: Order) -> str:
def render_invoice_text(self, order: Order, payment: OrderPayment) -> str:
"""
This is called when an invoice for an order with this payment provider is generated.
The default implementation returns the content of the _invoice_text configuration
variable (an I18nString), or an empty string if unconfigured.
variable (an I18nString), or an empty string if unconfigured. For paid orders, the
default implementation always renders a string stating that the invoice is already paid.
"""
if order.status == Order.STATUS_PAID:
return pgettext_lazy('invoice', 'The payment for this invoice has already been received.')
@@ -545,13 +546,14 @@ class BasePaymentProvider:
"""
return None
def order_pending_mail_render(self, order: Order) -> str:
def order_pending_mail_render(self, order: Order, payment: OrderPayment) -> str:
"""
After the user has submitted their order, they will receive a confirmation
email. You can return a string from this method if you want to add additional
information to this email.
:param order: The order object
:param payment: The payment object
"""
return ""

View File

@@ -1,3 +1,4 @@
import inspect
import json
import logging
import urllib.error
@@ -53,7 +54,10 @@ def build_invoice(invoice: Invoice) -> Invoice:
additional = invoice.event.settings.get('invoice_additional_text', as_type=LazyI18nString)
footer = invoice.event.settings.get('invoice_footer_text', as_type=LazyI18nString)
if open_payment and open_payment.payment_provider:
payment = open_payment.payment_provider.render_invoice_text(invoice.order)
if 'payment' in inspect.signature(open_payment.payment_provider.render_invoice_text).parameters:
payment = open_payment.payment_provider.render_invoice_text(invoice.order, open_payment)
else:
payment = open_payment.payment_provider.render_invoice_text(invoice.order)
elif invoice.order.status == Order.STATUS_PAID:
payment = pgettext('invoice', 'The payment for this invoice has already been received.')
else:

View File

@@ -1,3 +1,4 @@
import inspect
import json
import logging
from collections import Counter, namedtuple
@@ -670,7 +671,7 @@ def _create_order(event: Event, email: str, positions: List[CartPosition], now_d
def _order_placed_email(event: Event, order: Order, pprov: BasePaymentProvider, email_template, log_entry: str,
invoice):
invoice, payment: OrderPayment):
try:
invoice_name = order.invoice_address.name
invoice_company = order.invoice_address.company
@@ -679,7 +680,10 @@ def _order_placed_email(event: Event, order: Order, pprov: BasePaymentProvider,
invoice_company = ""
if pprov:
payment_info = str(pprov.order_pending_mail_render(order))
if 'payment' in inspect.signature(pprov.order_pending_mail_render).parameters:
payment_info = str(pprov.order_pending_mail_render(order, payment))
else:
payment_info = str(pprov.order_pending_mail_render(order))
else:
payment_info = None
@@ -825,7 +829,7 @@ def _perform_order(event: Event, payment_provider: str, position_ids: List[str],
email_attendees = event.settings.mail_send_order_placed_attendee
email_attendees_template = event.settings.mail_text_order_placed_attendee
_order_placed_email(event, order, pprov, email_template, log_entry, invoice)
_order_placed_email(event, order, pprov, email_template, log_entry, invoice, payment)
if email_attendees:
for p in order.positions.all():
if p.addon_to_id is None and p.attendee_email and p.attendee_email != order.email:

View File

@@ -172,7 +172,7 @@ class BankTransfer(BasePaymentProvider):
def checkout_confirm_render(self, request):
return self.payment_form_render(request)
def order_pending_mail_render(self, order) -> str:
def order_pending_mail_render(self, order, payment) -> str:
template = get_template('pretixplugins/banktransfer/email/order_pending.txt')
bankdetails = []
if self.settings.get('bank_details_type') == 'sepa':
@@ -189,6 +189,7 @@ class BankTransfer(BasePaymentProvider):
'event': self.event,
'order': order,
'code': self._code(order),
'amount': payment.amount,
'details': textwrap.indent(''.join(str(i) for i in bankdetails), ' '),
}
return template.render(ctx)

View File

@@ -1,4 +1,4 @@
{% load i18n %}{% load l10n %}{% load money %}{% blocktrans with bank=details|safe total=order.total|money:event.currency %}
{% load i18n %}{% load l10n %}{% load money %}{% blocktrans with bank=details|safe total=amount|money:event.currency %}
Please transfer the full amount to the following bank account.
Reference: {{ code }}

View File

@@ -31,7 +31,7 @@
{% if settings.bank_details_type == "sepa" %}
<div class="col-md-3 col-sm-6 hidden-xs text-center">
BezahlCode<br>
<a href="bank://singlepaymentsepa?name={{ settings.bank_details_sepa_name|urlencode }}&iban={{ settings.bank_details_sepa_iban }}&bic={{ settings.bank_details_sepa_bic }}&amount={{ order.total|commadecimal }}&reason={{ code }}&currency={{ event.currency }}">
<a href="bank://singlepaymentsepa?name={{ settings.bank_details_sepa_name|urlencode }}&iban={{ settings.bank_details_sepa_iban }}&bic={{ settings.bank_details_sepa_bic }}&amount={{ amount|commadecimal }}&reason={{ code }}&currency={{ event.currency }}">
<script type="text/plain" data-size="150" data-replace-with-qr>bank://singlepaymentsepa?name={{ settings.bank_details_sepa_name|urlencode }}&iban={{ settings.bank_details_sepa_iban }}&bic={{ settings.bank_details_sepa_bic }}&amount={{ amount|commadecimal }}&reason={{ code }}&currency={{ event.currency }}</script>
</a>
<p>&nbsp;</p>
@@ -54,7 +54,7 @@ SCT
</div>
<div class="visible-xs-block text-center">
<p>
<a href="bank://singlepaymentsepa?name={{ settings.bank_details_sepa_name|urlencode }}&iban={{ settings.bank_details_sepa_iban }}&bic={{ settings.bank_details_sepa_bic }}&amount={{ order.total|commadecimal }}&reason={{ code }}&currency={{ event.currency }}" class="btn btn-default">
<a href="bank://singlepaymentsepa?name={{ settings.bank_details_sepa_name|urlencode }}&iban={{ settings.bank_details_sepa_iban }}&bic={{ settings.bank_details_sepa_bic }}&amount={{ amount|commadecimal }}&reason={{ code }}&currency={{ event.currency }}" class="btn btn-default">
{% trans "Open banking app" %}
</a><br>
<small>{% trans "Requires that the app supports BezahlCode" %}</small>