diff --git a/src/pretix/base/settings.py b/src/pretix/base/settings.py
index 0fa4af05c..93ae9af4b 100644
--- a/src/pretix/base/settings.py
+++ b/src/pretix/base/settings.py
@@ -1033,10 +1033,10 @@ DEFAULTS = {
widget=forms.RadioSelect,
choices=(
('False', _('Do not generate invoices')),
- ('admin', _('Only manually in admin panel')),
+ ('paid', _('Automatically after payment or when required by payment method')),
+ ('True', _('Automatically before payment for all created orders')),
('user', _('Automatically on user request')),
- ('True', _('Automatically for all created orders')),
- ('paid', _('Automatically on payment or when required by payment method')),
+ ('admin', _('Only manually in admin panel')),
),
help_text=_("Invoices will never be automatically generated for free orders.")
)
diff --git a/src/pretix/control/forms/event.py b/src/pretix/control/forms/event.py
index f1da406bb..4ccb53141 100644
--- a/src/pretix/control/forms/event.py
+++ b/src/pretix/control/forms/event.py
@@ -49,7 +49,7 @@ from django.forms import (
)
from django.urls import reverse
from django.utils.functional import cached_property
-from django.utils.html import escape
+from django.utils.html import escape, format_html
from django.utils.safestring import mark_safe
from django.utils.timezone import get_current_timezone_name
from django.utils.translation import gettext, gettext_lazy as _, pgettext_lazy
@@ -66,7 +66,7 @@ from pretix.base.models import Event, Organizer, TaxRule, Team
from pretix.base.models.event import EventFooterLink, EventMetaValue, SubEvent
from pretix.base.reldate import RelativeDateField, RelativeDateTimeField
from pretix.base.settings import (
- COUNTRIES_WITH_STATE_IN_ADDRESS, PERSON_NAME_SCHEMES,
+ COUNTRIES_WITH_STATE_IN_ADDRESS, DEFAULTS, PERSON_NAME_SCHEMES,
PERSON_NAME_TITLE_GROUPS, validate_event_settings,
)
from pretix.base.validators import multimail_validate
@@ -900,6 +900,27 @@ class InvoiceSettingsForm(EventSettingsValidationMixin, SettingsForm):
)
self.fields['invoice_numbers_counter_length'].validators.append(MaxValueValidator(15))
+ pps = [str(pp.verbose_name) for pp in event.get_payment_providers().values() if pp.requires_invoice_immediately]
+ if pps:
+ generate_paid_help_text = _('An invoice will be issued before payment if the customer selects one of the following payment methods: {list}').format(
+ list=', '.join(pps)
+ )
+ else:
+ generate_paid_help_text = _('None of the currently configured payment methods will cause an invoice to be issued before payment.')
+
+ generate_choices = list(DEFAULTS['invoice_generate']['form_kwargs']['choices'])
+ idx = [i for i, t in enumerate(generate_choices) if t[0] == 'paid'][0]
+ generate_choices[idx] = (
+ 'paid',
+ format_html(
+ '{} {}
{}',
+ generate_choices[idx][1],
+ _('Recommended'),
+ generate_paid_help_text
+ )
+ )
+ self.fields['invoice_generate'].choices = generate_choices
+
def contains_web_channel_validate(val):
if "web" not in val: