Allow to set payment term per sales channel (#6459)

* Allow to set payment term per sales channel

* Apply suggestion from @luelista

Co-authored-by: luelista <weller@rami.io>

---------

Co-authored-by: luelista <weller@rami.io>
This commit is contained in:
Raphael Michel
2026-08-24 09:09:47 +02:00
committed by GitHub
co-authored by luelista
parent 91a3993cef
commit 58f331ba1f
5 changed files with 108 additions and 11 deletions
+44
View File
@@ -856,6 +856,50 @@ class PaymentSettingsForm(EventSettingsValidationMixin, SettingsForm):
'tax_rule_payment',
]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.term_channel_fields = {}
for c in self.obj.organizer.sales_channels.all():
if c.type_instance.payment_restrictions_supported and c.identifier != "web":
# At the moment, it seems sufficient to allow this for the same channel types as other payment settings
# We can always introduce more flags later if needed
suffix = '_' + c.identifier.replace(".", "_")
self.term_channel_fields[c] = [
'payment_term_mode' + suffix,
'payment_term_days' + suffix,
'payment_term_minutes' + suffix,
]
self.fields['payment_term_mode' + suffix] = DEFAULTS['payment_term_mode']['form_class'](
label=_("Payment term"),
widget=forms.RadioSelect,
required=False,
choices=(
('', _("same as above")),
('days', _("different payment term in days")),
('minutes', _("different payment term in minutes"))
),
)
self.fields['payment_term_days' + suffix] = DEFAULTS['payment_term_days']['form_class'](
required=False,
**DEFAULTS['payment_term_days']['form_kwargs'](suffix, 1),
)
self.fields['payment_term_minutes' + suffix] = DEFAULTS['payment_term_minutes']['form_class'](
required=False,
**DEFAULTS['payment_term_minutes']['form_kwargs'](suffix, 2),
)
def clean(self):
data = super().clean()
for c in self.term_channel_fields.keys():
suffix = '_' + c.identifier.replace(".", "_")
mode = self.cleaned_data.get(f'payment_term_mode{suffix}')
if mode == 'days' and self.cleaned_data.get(f'payment_term_days{suffix}') is None:
raise ValidationError({f'payment_term_days{suffix}': _("This field is required.")})
if mode == 'minutes' and self.cleaned_data.get(f'payment_term_minutes{suffix}') is None:
raise ValidationError({f'payment_term_minutes{suffix}': _("This field is required.")})
return data
def clean_payment_term_days(self):
value = self.cleaned_data.get('payment_term_days')
if self.cleaned_data.get('payment_term_mode') == 'days' and value is None: