forked from CGM_Public/pretix_original
SplitDateTimeField: Consider field empty if only a time is given
This commit is contained in:
@@ -16,6 +16,7 @@ from pretix.base.forms.widgets import (
|
|||||||
)
|
)
|
||||||
from pretix.base.models import InvoiceAddress, Question
|
from pretix.base.models import InvoiceAddress, Question
|
||||||
from pretix.base.models.tax import EU_COUNTRIES
|
from pretix.base.models.tax import EU_COUNTRIES
|
||||||
|
from pretix.control.forms import SplitDateTimeField
|
||||||
from pretix.helpers.i18n import get_format_without_seconds
|
from pretix.helpers.i18n import get_format_without_seconds
|
||||||
from pretix.presale.signals import question_form_fields
|
from pretix.presale.signals import question_form_fields
|
||||||
|
|
||||||
@@ -143,7 +144,7 @@ class BaseQuestionsForm(forms.Form):
|
|||||||
widget=TimePickerWidget(time_format=get_format_without_seconds('TIME_INPUT_FORMATS')),
|
widget=TimePickerWidget(time_format=get_format_without_seconds('TIME_INPUT_FORMATS')),
|
||||||
)
|
)
|
||||||
elif q.type == Question.TYPE_DATETIME:
|
elif q.type == Question.TYPE_DATETIME:
|
||||||
field = forms.SplitDateTimeField(
|
field = SplitDateTimeField(
|
||||||
label=q.question, required=q.required,
|
label=q.question, required=q.required,
|
||||||
help_text=q.help_text,
|
help_text=q.help_text,
|
||||||
initial=dateutil.parser.parse(initial.answer).astimezone(tz) if initial and initial.answer else None,
|
initial=dateutil.parser.parse(initial.answer).astimezone(tz) if initial and initial.answer else None,
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
|
import datetime
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.core.exceptions import ValidationError
|
||||||
|
from django.forms.utils import from_current_timezone
|
||||||
from django.utils.html import conditional_escape
|
from django.utils.html import conditional_escape
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
@@ -168,3 +171,17 @@ class SingleLanguageWidget(forms.Select):
|
|||||||
def optgroups(self, name, value, attrs=None):
|
def optgroups(self, name, value, attrs=None):
|
||||||
self.modify()
|
self.modify()
|
||||||
return super().optgroups(name, value, attrs)
|
return super().optgroups(name, value, attrs)
|
||||||
|
|
||||||
|
|
||||||
|
class SplitDateTimeField(forms.SplitDateTimeField):
|
||||||
|
|
||||||
|
def compress(self, data_list):
|
||||||
|
# Differs from the default implementation: If only a time is given and no date, we consider the field empty
|
||||||
|
if data_list:
|
||||||
|
if data_list[0] in self.empty_values:
|
||||||
|
return None
|
||||||
|
if data_list[1] in self.empty_values:
|
||||||
|
raise ValidationError(self.error_messages['invalid_date'], code='invalid_date')
|
||||||
|
result = datetime.datetime.combine(*data_list)
|
||||||
|
return from_current_timezone(result)
|
||||||
|
return None
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ from pretix.base.models.event import EventMetaValue, SubEvent
|
|||||||
from pretix.base.reldate import RelativeDateField, RelativeDateTimeField
|
from pretix.base.reldate import RelativeDateField, RelativeDateTimeField
|
||||||
from pretix.control.forms import (
|
from pretix.control.forms import (
|
||||||
ExtFileField, MultipleLanguagesWidget, SingleLanguageWidget, SlugWidget,
|
ExtFileField, MultipleLanguagesWidget, SingleLanguageWidget, SlugWidget,
|
||||||
SplitDateTimePickerWidget,
|
SplitDateTimeField, SplitDateTimePickerWidget,
|
||||||
)
|
)
|
||||||
from pretix.multidomain.urlreverse import build_absolute_uri
|
from pretix.multidomain.urlreverse import build_absolute_uri
|
||||||
from pretix.plugins.banktransfer.payment import BankTransfer
|
from pretix.plugins.banktransfer.payment import BankTransfer
|
||||||
@@ -95,10 +95,10 @@ class EventWizardBasicsForm(I18nModelForm):
|
|||||||
'location',
|
'location',
|
||||||
]
|
]
|
||||||
field_classes = {
|
field_classes = {
|
||||||
'date_from': forms.SplitDateTimeField,
|
'date_from': SplitDateTimeField,
|
||||||
'date_to': forms.SplitDateTimeField,
|
'date_to': SplitDateTimeField,
|
||||||
'presale_start': forms.SplitDateTimeField,
|
'presale_start': SplitDateTimeField,
|
||||||
'presale_end': forms.SplitDateTimeField,
|
'presale_end': SplitDateTimeField,
|
||||||
}
|
}
|
||||||
widgets = {
|
widgets = {
|
||||||
'date_from': SplitDateTimePickerWidget(),
|
'date_from': SplitDateTimePickerWidget(),
|
||||||
@@ -229,11 +229,11 @@ class EventUpdateForm(I18nModelForm):
|
|||||||
'location',
|
'location',
|
||||||
]
|
]
|
||||||
field_classes = {
|
field_classes = {
|
||||||
'date_from': forms.SplitDateTimeField,
|
'date_from': SplitDateTimeField,
|
||||||
'date_to': forms.SplitDateTimeField,
|
'date_to': SplitDateTimeField,
|
||||||
'date_admission': forms.SplitDateTimeField,
|
'date_admission': SplitDateTimeField,
|
||||||
'presale_start': forms.SplitDateTimeField,
|
'presale_start': SplitDateTimeField,
|
||||||
'presale_end': forms.SplitDateTimeField,
|
'presale_end': SplitDateTimeField,
|
||||||
}
|
}
|
||||||
widgets = {
|
widgets = {
|
||||||
'date_from': SplitDateTimePickerWidget(),
|
'date_from': SplitDateTimePickerWidget(),
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ from pretix.base.models import (
|
|||||||
)
|
)
|
||||||
from pretix.base.models.items import ItemAddOn
|
from pretix.base.models.items import ItemAddOn
|
||||||
from pretix.base.signals import item_copy_data
|
from pretix.base.signals import item_copy_data
|
||||||
from pretix.control.forms import SplitDateTimePickerWidget
|
from pretix.control.forms import SplitDateTimeField, SplitDateTimePickerWidget
|
||||||
from pretix.control.forms.widgets import Select2
|
from pretix.control.forms.widgets import Select2
|
||||||
from pretix.helpers.models import modelcopy
|
from pretix.helpers.models import modelcopy
|
||||||
from pretix.helpers.money import change_decimal_field
|
from pretix.helpers.money import change_decimal_field
|
||||||
@@ -330,8 +330,8 @@ class ItemUpdateForm(I18nModelForm):
|
|||||||
'original_price'
|
'original_price'
|
||||||
]
|
]
|
||||||
field_classes = {
|
field_classes = {
|
||||||
'available_from': forms.SplitDateTimeField,
|
'available_from': SplitDateTimeField,
|
||||||
'available_until': forms.SplitDateTimeField,
|
'available_until': SplitDateTimeField,
|
||||||
}
|
}
|
||||||
widgets = {
|
widgets = {
|
||||||
'available_from': SplitDateTimePickerWidget(),
|
'available_from': SplitDateTimePickerWidget(),
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ from pretix.base.models.event import SubEvent, SubEventMetaValue
|
|||||||
from pretix.base.models.items import SubEventItem
|
from pretix.base.models.items import SubEventItem
|
||||||
from pretix.base.reldate import RelativeDateTimeField
|
from pretix.base.reldate import RelativeDateTimeField
|
||||||
from pretix.base.templatetags.money import money_filter
|
from pretix.base.templatetags.money import money_filter
|
||||||
from pretix.control.forms import SplitDateTimePickerWidget
|
from pretix.control.forms import SplitDateTimeField, SplitDateTimePickerWidget
|
||||||
from pretix.helpers.money import change_decimal_field
|
from pretix.helpers.money import change_decimal_field
|
||||||
|
|
||||||
|
|
||||||
@@ -37,11 +37,11 @@ class SubEventForm(I18nModelForm):
|
|||||||
'frontpage_text'
|
'frontpage_text'
|
||||||
]
|
]
|
||||||
field_classes = {
|
field_classes = {
|
||||||
'date_from': forms.SplitDateTimeField,
|
'date_from': SplitDateTimeField,
|
||||||
'date_to': forms.SplitDateTimeField,
|
'date_to': SplitDateTimeField,
|
||||||
'date_admission': forms.SplitDateTimeField,
|
'date_admission': SplitDateTimeField,
|
||||||
'presale_start': forms.SplitDateTimeField,
|
'presale_start': SplitDateTimeField,
|
||||||
'presale_end': forms.SplitDateTimeField,
|
'presale_end': SplitDateTimeField,
|
||||||
}
|
}
|
||||||
widgets = {
|
widgets = {
|
||||||
'date_from': SplitDateTimePickerWidget(),
|
'date_from': SplitDateTimePickerWidget(),
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
|||||||
|
|
||||||
from pretix.base.forms import I18nModelForm
|
from pretix.base.forms import I18nModelForm
|
||||||
from pretix.base.models import Item, Voucher
|
from pretix.base.models import Item, Voucher
|
||||||
from pretix.control.forms import SplitDateTimePickerWidget
|
from pretix.control.forms import SplitDateTimeField, SplitDateTimePickerWidget
|
||||||
from pretix.control.forms.widgets import Select2, Select2ItemVarQuota
|
from pretix.control.forms.widgets import Select2, Select2ItemVarQuota
|
||||||
from pretix.control.signals import voucher_form_validation
|
from pretix.control.signals import voucher_form_validation
|
||||||
from pretix.helpers.models import modelcopy
|
from pretix.helpers.models import modelcopy
|
||||||
@@ -34,7 +34,7 @@ class VoucherForm(I18nModelForm):
|
|||||||
'comment', 'max_usages', 'price_mode', 'subevent'
|
'comment', 'max_usages', 'price_mode', 'subevent'
|
||||||
]
|
]
|
||||||
field_classes = {
|
field_classes = {
|
||||||
'valid_until': forms.SplitDateTimeField,
|
'valid_until': SplitDateTimeField,
|
||||||
}
|
}
|
||||||
widgets = {
|
widgets = {
|
||||||
'valid_until': SplitDateTimePickerWidget(),
|
'valid_until': SplitDateTimePickerWidget(),
|
||||||
@@ -190,7 +190,7 @@ class VoucherBulkForm(VoucherForm):
|
|||||||
'max_usages', 'price_mode', 'subevent'
|
'max_usages', 'price_mode', 'subevent'
|
||||||
]
|
]
|
||||||
field_classes = {
|
field_classes = {
|
||||||
'valid_until': forms.SplitDateTimeField,
|
'valid_until': SplitDateTimeField,
|
||||||
}
|
}
|
||||||
widgets = {
|
widgets = {
|
||||||
'valid_until': SplitDateTimePickerWidget(),
|
'valid_until': SplitDateTimePickerWidget(),
|
||||||
|
|||||||
Reference in New Issue
Block a user