From 9a5687408310b254bf767d2661f8b5c198ee257a Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 7 Feb 2023 15:29:11 +0100 Subject: [PATCH] Subevents: Validate time order of product availability --- src/pretix/control/forms/subevents.py | 15 +++++++++++++++ .../templates/pretixcontrol/subevents/bulk.html | 1 + .../pretixcontrol/subevents/bulk_edit.html | 1 + .../templates/pretixcontrol/subevents/detail.html | 1 + 4 files changed, 18 insertions(+) diff --git a/src/pretix/control/forms/subevents.py b/src/pretix/control/forms/subevents.py index 4b2fb3914..ef741e675 100644 --- a/src/pretix/control/forms/subevents.py +++ b/src/pretix/control/forms/subevents.py @@ -23,6 +23,7 @@ from datetime import datetime from urllib.parse import urlencode from django import forms +from django.core.exceptions import ValidationError from django.forms import formset_factory from django.forms.utils import ErrorDict from django.urls import reverse @@ -273,6 +274,13 @@ class SubEventItemForm(SubEventItemOrVariationFormMixin, forms.ModelForm): 'available_until': SplitDateTimeField, } + def clean(self): + d = super().clean() + if d.get('available_from') and d.get('available_until'): + if d.get('available_from') > d.get('available_until'): + raise ValidationError(_('The end of availability should be after the start of availability.')) + return d + class SubEventItemVariationForm(SubEventItemOrVariationFormMixin, forms.ModelForm): def __init__(self, *args, **kwargs): @@ -293,6 +301,13 @@ class SubEventItemVariationForm(SubEventItemOrVariationFormMixin, forms.ModelFor 'available_until': SplitDateTimeField, } + def clean(self): + d = super().clean() + if d.get('available_from') and d.get('available_until'): + if d.get('available_from') > d.get('available_until'): + raise ValidationError(_('The end of availability should be after the start of availability.')) + return d + class BulkSubEventItemForm(SubEventItemForm): rel_available_from = RelativeDateTimeField( diff --git a/src/pretix/control/templates/pretixcontrol/subevents/bulk.html b/src/pretix/control/templates/pretixcontrol/subevents/bulk.html index e113b6abf..6b58feb5a 100644 --- a/src/pretix/control/templates/pretixcontrol/subevents/bulk.html +++ b/src/pretix/control/templates/pretixcontrol/subevents/bulk.html @@ -487,6 +487,7 @@ {% trans "These settings are optional, if you leave them empty, the default values from the product settings will be used." %}

{% for f in itemvar_forms %} + {% bootstrap_form_errors f %}