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 %}