Bank transfer: Allow to restrict to business customers

This commit is contained in:
Raphael Michel
2023-05-09 18:19:15 +02:00
parent 232366a639
commit e153fa7227

View File

@@ -53,11 +53,12 @@ from text_unidecode import unidecode
from pretix.base.email import get_available_placeholders, get_email_context
from pretix.base.forms import PlaceholderValidator
from pretix.base.i18n import language
from pretix.base.models import Order, OrderPayment, OrderRefund
from pretix.base.models import InvoiceAddress, Order, OrderPayment, OrderRefund
from pretix.base.payment import BasePaymentProvider
from pretix.base.services.mail import SendMailException, mail, render_mail
from pretix.helpers.format import format_map
from pretix.plugins.banktransfer.templatetags.ibanformat import ibanformat
from pretix.presale.views.cart import cart_session
class BankTransfer(BasePaymentProvider):
@@ -249,8 +250,22 @@ class BankTransfer(BasePaymentProvider):
required=False
)),
])
more_fields_first = OrderedDict([
('_restricted_business',
forms.BooleanField(
label=_('Restrict to business customers'),
help_text=_('Only allow choosing this payment provider for customers who enter an invoice address '
'and select "Business or institutional customer".'),
required=False,
)),
])
d = OrderedDict(list(super().settings_form_fields.items()) + list(BankTransfer.form_fields().items()) + list(more_fields.items()))
d = OrderedDict(
list(super().settings_form_fields.items()) +
list(more_fields_first.items()) +
list(BankTransfer.form_fields().items()) +
list(more_fields.items())
)
d.move_to_end('invoice_immediately', last=False)
d.move_to_end('bank_details', last=False)
d.move_to_end('bank_details_sepa_bank', last=False)
@@ -287,6 +302,28 @@ class BankTransfer(BasePaymentProvider):
))
)
def is_allowed(self, request: HttpRequest, total: Decimal=None) -> bool:
def get_invoice_address():
if not hasattr(request, '_checkout_flow_invoice_address'):
cs = cart_session(request)
iapk = cs.get('invoice_address')
if not iapk:
request._checkout_flow_invoice_address = InvoiceAddress()
else:
try:
request._checkout_flow_invoice_address = InvoiceAddress.objects.get(pk=iapk, order__isnull=True)
except InvoiceAddress.DoesNotExist:
request._checkout_flow_invoice_address = InvoiceAddress()
return request._checkout_flow_invoice_address
restricted_business = self.settings.get('_restricted_business', as_type=bool)
if restricted_business:
ia = get_invoice_address()
if not ia.is_business:
return False
return super().is_allowed(request, total)
@property
def payment_form_fields(self) -> dict:
if self._invoice_email_asked: