mirror of
https://github.com/pretix/pretix.git
synced 2026-05-11 16:13:59 +00:00
Subevents: Validate time order of product availability
This commit is contained in:
@@ -23,6 +23,7 @@ from datetime import datetime
|
|||||||
from urllib.parse import urlencode
|
from urllib.parse import urlencode
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
|
from django.core.exceptions import ValidationError
|
||||||
from django.forms import formset_factory
|
from django.forms import formset_factory
|
||||||
from django.forms.utils import ErrorDict
|
from django.forms.utils import ErrorDict
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
@@ -273,6 +274,13 @@ class SubEventItemForm(SubEventItemOrVariationFormMixin, forms.ModelForm):
|
|||||||
'available_until': SplitDateTimeField,
|
'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):
|
class SubEventItemVariationForm(SubEventItemOrVariationFormMixin, forms.ModelForm):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
@@ -293,6 +301,13 @@ class SubEventItemVariationForm(SubEventItemOrVariationFormMixin, forms.ModelFor
|
|||||||
'available_until': SplitDateTimeField,
|
'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):
|
class BulkSubEventItemForm(SubEventItemForm):
|
||||||
rel_available_from = RelativeDateTimeField(
|
rel_available_from = RelativeDateTimeField(
|
||||||
|
|||||||
@@ -487,6 +487,7 @@
|
|||||||
{% trans "These settings are optional, if you leave them empty, the default values from the product settings will be used." %}
|
{% trans "These settings are optional, if you leave them empty, the default values from the product settings will be used." %}
|
||||||
</p>
|
</p>
|
||||||
{% for f in itemvar_forms %}
|
{% for f in itemvar_forms %}
|
||||||
|
{% bootstrap_form_errors f %}
|
||||||
<div class="form-group subevent-itemvar-group">
|
<div class="form-group subevent-itemvar-group">
|
||||||
<label class="col-md-3 control-label" for="id_{{ f.prefix }}-price">
|
<label class="col-md-3 control-label" for="id_{{ f.prefix }}-price">
|
||||||
{% if f.variation %}{{ f.item }} – {{ f.variation }}{% else %}{{ f.item }}{% endif %}
|
{% if f.variation %}{{ f.item }} – {{ f.variation }}{% else %}{{ f.item }}{% endif %}
|
||||||
|
|||||||
@@ -151,6 +151,7 @@
|
|||||||
<fieldset>
|
<fieldset>
|
||||||
<legend>{% trans "Item prices" %}</legend>
|
<legend>{% trans "Item prices" %}</legend>
|
||||||
{% for f in itemvar_forms %}
|
{% for f in itemvar_forms %}
|
||||||
|
{% bootstrap_form_errors f %}
|
||||||
<div class="form-group subevent-itemvar-group">
|
<div class="form-group subevent-itemvar-group">
|
||||||
<label class="col-md-3 control-label" for="id_{{ f.prefix }}-price">
|
<label class="col-md-3 control-label" for="id_{{ f.prefix }}-price">
|
||||||
{% if f.variation %}{{ f.item }} – {{ f.variation }}{% else %}{{ f.item }}{% endif %}
|
{% if f.variation %}{{ f.item }} – {{ f.variation }}{% else %}{{ f.item }}{% endif %}
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
{% trans "These settings are optional, if you leave them empty, the default values from the product settings will be used." %}
|
{% trans "These settings are optional, if you leave them empty, the default values from the product settings will be used." %}
|
||||||
</p>
|
</p>
|
||||||
{% for f in itemvar_forms %}
|
{% for f in itemvar_forms %}
|
||||||
|
{% bootstrap_form_errors f %}
|
||||||
<div class="form-group subevent-itemvar-group">
|
<div class="form-group subevent-itemvar-group">
|
||||||
<label class="col-md-3 control-label" for="id_{{ f.prefix }}-price">
|
<label class="col-md-3 control-label" for="id_{{ f.prefix }}-price">
|
||||||
{% if f.variation %}{{ f.item }} – {{ f.variation }}{% else %}{{ f.item }}{% endif %}
|
{% if f.variation %}{{ f.item }} – {{ f.variation }}{% else %}{{ f.item }}{% endif %}
|
||||||
|
|||||||
Reference in New Issue
Block a user