From ef55a018f8240d86b9c825788fbaa64b41ee10bd Mon Sep 17 00:00:00 2001 From: johan12345 Date: Mon, 25 Jun 2018 19:32:31 +0200 Subject: [PATCH] fix datetime fields --- src/pretix/base/forms/questions.py | 2 +- src/pretix/control/forms/item.py | 15 ++++++++++- src/pretix/static/pretixcontrol/js/ui/main.js | 27 ++++++++++++++----- 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/pretix/base/forms/questions.py b/src/pretix/base/forms/questions.py index 1d7184531..744cfe2c7 100644 --- a/src/pretix/base/forms/questions.py +++ b/src/pretix/base/forms/questions.py @@ -263,7 +263,7 @@ class BaseQuestionsForm(forms.Form): label=label, required=required, help_text=help_text, initial=dateutil.parser.parse(initial.answer).astimezone(tz) if initial and initial.answer else ( - dateutil.parser.parse(default).astimezone(tz) if default else None), + dateutil.parser.parse(default) if default else None), widget=SplitDateTimePickerWidget(time_format=get_format_without_seconds('TIME_INPUT_FORMATS')), ) field.question = q diff --git a/src/pretix/control/forms/item.py b/src/pretix/control/forms/item.py index ad3069d2a..fe5534d2e 100644 --- a/src/pretix/control/forms/item.py +++ b/src/pretix/control/forms/item.py @@ -2,6 +2,7 @@ from django import forms from django.core.exceptions import ValidationError from django.db.models import Max from django.forms.formsets import DELETION_FIELD_NAME +from django.forms.utils import ErrorList from django.urls import reverse from django.utils.translation import ( pgettext_lazy, ugettext as __, ugettext_lazy as _, @@ -33,6 +34,17 @@ class CategoryForm(I18nModelForm): ] +class AdjustableTypeField(forms.Textarea): + def __init__(self, *args, type=None, **kwargs): + super().__init__(*args, **kwargs) + + def value_from_datadict(self, data, files, name): + if 'type' in data and data['type'] == 'W' and 'default_value_date' in data and 'default_value_time' in data: + return '{} {}'.format(data['default_value_date'], data['default_value_time']) + else: + return super().value_from_datadict(data, files, name) + + class QuestionForm(I18nModelForm): question = I18nFormField( label=_("Question"), @@ -91,7 +103,8 @@ class QuestionForm(I18nModelForm): 'items': forms.CheckboxSelectMultiple( attrs={'class': 'scrolling-multiple-choice'} ), - 'dependency_value': forms.Select, + 'default_value': AdjustableTypeField(), + 'dependency_value': forms.Select } diff --git a/src/pretix/static/pretixcontrol/js/ui/main.js b/src/pretix/static/pretixcontrol/js/ui/main.js index a446090cf..9b9476c67 100644 --- a/src/pretix/static/pretixcontrol/js/ui/main.js +++ b/src/pretix/static/pretixcontrol/js/ui/main.js @@ -2,8 +2,11 @@ function update_default_value_field() { let input = $('#id_default_value'); - let common_attrs = ' name="default_value" placeholder="' + input.attr('placeholder') + '" title="' + input.attr('title') + '" id="id_default_value"'; - let value = input.val(); + let parent = input.parent(); + + let field = input.prop("tagName") == 'DIV' ? input.children().first() : input; + let common_attrs = ' name="default_value" placeholder="' + field.attr('placeholder') + '" title="' + field.attr('title') + '" id="id_default_value"'; + let value = field.val(); switch ($("#id_type").val()) { case 'N': input.replaceWith(''); @@ -24,17 +27,29 @@ function update_default_value_field() { break; case 'D': let dateField = input.replaceWith(''); - form_handlers(dateField.parent()); + form_handlers(parent); $('.form-group:has(#id_default_value)').show(); break; case 'H': let timeField = input.replaceWith(''); - form_handlers(timeField.parent()); + form_handlers(parent); $('.form-group:has(#id_default_value)').show(); break; case 'W': - let dtField = input.replaceWith(''); - form_handlers(dtField.parent()); + let split = value.split(' '); + let date, time; + if (split.length > 1) { + date = split[0]; + time = split[1]; + } else { + date = null; + time = null; + } + let dtField = input.replaceWith('
\n' + + '\n' + + '\n' + + '
\n'); + form_handlers(parent); $('.form-group:has(#id_default_value)').show(); break; default: