diff --git a/src/pretix/control/forms/event.py b/src/pretix/control/forms/event.py index a521d5d75..b2a091f5f 100644 --- a/src/pretix/control/forms/event.py +++ b/src/pretix/control/forms/event.py @@ -294,6 +294,17 @@ class PaymentSettingsForm(SettingsForm): "(in percent)."), ) + def clean(self): + cleaned_data = super().clean() + payment_term_last = cleaned_data.get('payment_term_last') + if payment_term_last and self.obj.presale_end: + if payment_term_last < self.obj.presale_end.date(): + self.add_error( + 'payment_term_last', + _('The last payment date cannot be before the end of presale.'), + ) + return cleaned_data + class ProviderForm(SettingsForm): """ diff --git a/src/tests/control/test_events.py b/src/tests/control/test_events.py index 801d50f83..d272987e0 100644 --- a/src/tests/control/test_events.py +++ b/src/tests/control/test_events.py @@ -132,6 +132,21 @@ class EventsTest(SoupTest): }) assert doc.select('.alert-danger') + def test_payment_settings_last_date_payment_after_presale_end(self): + self.event1.presale_end = datetime.datetime.now() + self.event1.save(update_fields=['presale_end']) + doc = self.post_doc('/control/event/%s/%s/settings/payment' % (self.orga1.slug, self.event1.slug), { + 'payment_banktransfer__enabled': 'true', + 'payment_banktransfer__fee_abs': '12.23', + 'payment_banktransfer_bank_details_0': 'Test', + 'settings-payment_term_days': '2', + 'settings-payment_term_last': (self.event1.presale_end - datetime.timedelta(1)).strftime('%Y-%m-%d'), + 'settings-tax_rate_default': '19.00', + }) + assert doc.select('.alert-danger') + self.event1.presale_end = None + self.event1.save(update_fields=['presale_end']) + def test_invoice_settings(self): doc = self.get_doc('/control/event/%s/%s/settings/invoice' % (self.orga1.slug, self.event1.slug)) data = extract_form_fields(doc.select("form")[0])