forked from CGM_Public/pretix_original
Allow to create invoices before bank transfer runs (#1734)
Co-authored-by: Raphael Michel <michel@rami.io>
This commit is contained in:
@@ -168,13 +168,23 @@ class BasePaymentProvider:
|
||||
@property
|
||||
def abort_pending_allowed(self) -> bool:
|
||||
"""
|
||||
Whether or not a user can abort a payment in pending start to switch to another
|
||||
Whether or not a user can abort a payment in pending state to switch to another
|
||||
payment method. This returns ``False`` by default which is no guarantee that
|
||||
aborting a pending payment can never happen, it just hides the frontend button
|
||||
to avoid users accidentally committing double payments.
|
||||
"""
|
||||
return False
|
||||
|
||||
@property
|
||||
def requires_invoice_immediately(self):
|
||||
"""
|
||||
Return whether this payment method requires an invoice to exist for an order, even though the event
|
||||
is configured to only create invoices for paid orders.
|
||||
By default this is False, but it might be overwritten for e.g. bank transfer.
|
||||
`execute_payment` is called after the invoice is created.
|
||||
"""
|
||||
return False
|
||||
|
||||
@property
|
||||
def settings_form_fields(self) -> dict:
|
||||
"""
|
||||
@@ -770,7 +780,7 @@ class BasePaymentProvider:
|
||||
|
||||
def matching_id(self, payment: OrderPayment):
|
||||
"""
|
||||
Will be called to get an ID for a matching this payment when comparing pretix records with records of an external
|
||||
Will be called to get an ID for matching this payment when comparing pretix records with records of an external
|
||||
source. This should return the main transaction ID for your API.
|
||||
|
||||
:param payment: The payment in question.
|
||||
|
||||
@@ -933,8 +933,9 @@ def _perform_order(event: Event, payment_provider: str, position_ids: List[str],
|
||||
pass
|
||||
|
||||
invoice = order.invoices.last() # Might be generated by plugin already
|
||||
if event.settings.get('invoice_generate') == 'True' and invoice_qualified(order):
|
||||
if not invoice:
|
||||
if not invoice and invoice_qualified(order):
|
||||
if event.settings.get('invoice_generate') == 'True' or (
|
||||
event.settings.get('invoice_generate') == 'paid' and payment.payment_provider.requires_invoice_immediately):
|
||||
invoice = generate_invoice(
|
||||
order,
|
||||
trigger_pdf=not event.settings.invoice_email_attachment or not order.email
|
||||
@@ -1876,7 +1877,11 @@ class OrderChangeManager:
|
||||
if self.reissue_invoice and self._invoice_dirty:
|
||||
if i:
|
||||
self._invoices.append(generate_cancellation(i))
|
||||
if (i or self.event.settings.invoice_generate == 'True') and invoice_qualified(self.order):
|
||||
if invoice_qualified(self.order) and \
|
||||
(i or
|
||||
self.event.settings.invoice_generate == 'True' or (
|
||||
self.open_payment is not None and self.event.settings.invoice_generate == 'paid' and
|
||||
self.open_payment.payment_provider.requires_invoice_immediately)):
|
||||
self._invoices.append(generate_invoice(self.order))
|
||||
|
||||
def _check_complete_cancel(self):
|
||||
|
||||
@@ -525,7 +525,7 @@ DEFAULTS = {
|
||||
('admin', _('Only manually in admin panel')),
|
||||
('user', _('Automatically on user request')),
|
||||
('True', _('Automatically for all created orders')),
|
||||
('paid', _('Automatically on payment')),
|
||||
('paid', _('Automatically on payment or when required by payment method')),
|
||||
),
|
||||
),
|
||||
'form_kwargs': dict(
|
||||
@@ -536,7 +536,7 @@ DEFAULTS = {
|
||||
('admin', _('Only manually in admin panel')),
|
||||
('user', _('Automatically on user request')),
|
||||
('True', _('Automatically for all created orders')),
|
||||
('paid', _('Automatically on payment')),
|
||||
('paid', _('Automatically on payment or when required by payment method')),
|
||||
),
|
||||
help_text=_("Invoices will never be automatically generated for free orders.")
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user