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
+8 -3
View File
@@ -628,9 +628,14 @@ class Order(LockModel, LoggedModel):
def set_expires(self, now_dt=None, subevents=None):
now_dt = now_dt or now()
tz = ZoneInfo(self.event.settings.timezone)
mode = self.event.settings.get('payment_term_mode')
sales_channel_suffix = "_" + self.sales_channel.identifier.replace(".", "_")
if not (mode := self.event.settings.get(f'payment_term_mode{sales_channel_suffix}')):
mode = self.event.settings.get('payment_term_mode')
sales_channel_suffix = ""
if mode == 'days':
exp_by_date = now_dt.astimezone(tz) + timedelta(days=self.event.settings.get('payment_term_days', as_type=int))
exp_by_date = now_dt.astimezone(tz) + timedelta(days=self.event.settings.get(f'payment_term_days{sales_channel_suffix}', as_type=int))
exp_by_date = exp_by_date.astimezone(tz).replace(hour=23, minute=59, second=59, microsecond=0)
if self.event.settings.get('payment_term_weekdays'):
if exp_by_date.weekday() == 5:
@@ -638,7 +643,7 @@ class Order(LockModel, LoggedModel):
elif exp_by_date.weekday() == 6:
exp_by_date += timedelta(days=1)
elif mode == 'minutes':
exp_by_date = now_dt.astimezone(tz) + timedelta(minutes=self.event.settings.get('payment_term_minutes', as_type=int))
exp_by_date = now_dt.astimezone(tz) + timedelta(minutes=self.event.settings.get(f'payment_term_minutes{sales_channel_suffix}', as_type=int))
else:
raise ValueError("'payment_term_mode' has an invalid value '{}'.".format(mode))
+6 -6
View File
@@ -979,12 +979,12 @@ DEFAULTS = {
'form_class': forms.IntegerField,
'serializer_class': serializers.IntegerField,
'write_permission': 'event.settings.payment:write',
'form_kwargs': dict(
'form_kwargs': lambda suffix="", parent=0: dict(
label=_('Payment term in days'),
widget=forms.NumberInput(
attrs={
'data-display-dependency': '#id_payment_term_mode_0',
'data-required-if': '#id_payment_term_mode_0'
'data-display-dependency': f'#id_payment_term_mode{suffix}_{parent}',
'data-required-if': f'#id_payment_term_mode{suffix}_{parent}'
},
),
help_text=_("The number of days after placing an order the user has to pay to preserve their reservation. If "
@@ -1023,7 +1023,7 @@ DEFAULTS = {
'form_class': forms.IntegerField,
'serializer_class': serializers.IntegerField,
'write_permission': 'event.settings.payment:write',
'form_kwargs': dict(
'form_kwargs': lambda suffix="", parent=1: dict(
label=_('Payment term in minutes'),
help_text=_("The number of minutes after placing an order the user has to pay to preserve their reservation. "
"Only use this if you exclusively offer real-time payment methods. Please note that for technical reasons, "
@@ -1032,8 +1032,8 @@ DEFAULTS = {
MaxValueValidator(1440)],
widget=forms.NumberInput(
attrs={
'data-display-dependency': '#id_payment_term_mode_1',
'data-required-if': '#id_payment_term_mode_1'
'data-display-dependency': f'#id_payment_term_mode{suffix}_{parent}',
'data-required-if': f'#id_payment_term_mode{suffix}_{parent}'
},
),
),