diff --git a/src/pretix/control/forms/filter.py b/src/pretix/control/forms/filter.py index b7b44a05a4..c601079366 100644 --- a/src/pretix/control/forms/filter.py +++ b/src/pretix/control/forms/filter.py @@ -52,7 +52,7 @@ from django_scopes.forms import SafeModelChoiceField from pretix.base.channels import get_all_sales_channels from pretix.base.forms.widgets import ( - DatePickerWidget, SplitDateTimePickerWidget, + DatePickerWidget, SplitDateTimePickerWidget, TimePickerWidget, ) from pretix.base.models import ( Checkin, CheckinList, Device, Event, EventMetaProperty, EventMetaValue, @@ -832,17 +832,34 @@ class SubEventFilterForm(FilterForm): date_from = forms.DateField( label=_('Date from'), required=False, - widget=DatePickerWidget, + widget=DatePickerWidget({ + 'placeholder': _('Date from'), + }), ) date_until = forms.DateField( label=_('Date until'), required=False, - widget=DatePickerWidget, + widget=DatePickerWidget({ + 'placeholder': _('Date until'), + }), ) - weekday = forms.ChoiceField( + time_from = forms.TimeField( + label=_('Time from'), + required=False, + widget=TimePickerWidget({ + 'placeholder': _('Date from'), + }), + ) + time_until = forms.TimeField( + label=_('Time until'), + required=False, + widget=TimePickerWidget({ + 'placeholder': _('Time until'), + }), + ) + weekday = forms.MultipleChoiceField( label=_('Weekday'), choices=( - ('', _('All days')), ('2', _('Monday')), ('3', _('Tuesday')), ('4', _('Wednesday')), @@ -851,6 +868,7 @@ class SubEventFilterForm(FilterForm): ('7', _('Saturday')), ('1', _('Sunday')), ), + widget=forms.CheckboxSelectMultiple, required=False ) query = forms.CharField( @@ -899,7 +917,7 @@ class SubEventFilterForm(FilterForm): ) if fdata.get('weekday'): - qs = qs.annotate(wday=ExtractWeekDay('date_from')).filter(wday=fdata.get('weekday')) + qs = qs.annotate(wday=ExtractWeekDay('date_from')).filter(wday__in=fdata.get('weekday')) if fdata.get('query'): query = fdata.get('query') @@ -923,6 +941,14 @@ class SubEventFilterForm(FilterForm): ), get_current_timezone()) qs = qs.filter(date_from__gte=date_start) + if fdata.get('time_until'): + qs = qs.filter( + Q(date_to__isnull=True, date_from__time__lte=fdata.get('time_until')) | + Q(date_to__isnull=False, date_to__time__lte=fdata.get('time_until')) + ) + if fdata.get('time_from'): + qs = qs.filter(date_from__time__gte=fdata.get('time_from')) + if fdata.get('ordering'): qs = qs.order_by(self.get_order_by()) else: diff --git a/src/pretix/control/templates/pretixcontrol/subevents/index.html b/src/pretix/control/templates/pretixcontrol/subevents/index.html index fbd52bf0d0..1a6a835ce0 100644 --- a/src/pretix/control/templates/pretixcontrol/subevents/index.html +++ b/src/pretix/control/templates/pretixcontrol/subevents/index.html @@ -21,31 +21,47 @@ {% trans "Create many new dates" context "subevent" %} {% else %} -
-
- {% bootstrap_field filter_form.query layout='inline' %} +
+
+

+ {% trans "Filter" %} +

-
- {% bootstrap_field filter_form.status layout='inline' %} -
-
- {% bootstrap_field filter_form.date_from layout='inline' %} -
-
- {% bootstrap_field filter_form.date_until layout='inline' %} -
-
- {% bootstrap_field filter_form.weekday layout='inline' %} -
-
- -
- + +
+ +
{% if "can_change_event_settings" in request.eventpermset %}

{{ s.name }} - {{ s.get_date_from_display }} + + {{ s.get_date_from_display }}
+ + {{ s.date_from|date:"l" }} + + {% for q in s.first_quotas|slice:":3" %} {% include "pretixcontrol/fragment_quota_box_paid.html" with quota=q %} @@ -165,21 +186,21 @@ {% if "can_change_event_settings" in request.eventpermset %} -

- - - - -
+
+ + + + +
{% endif %} {% include "pretixcontrol/pagination.html" %} diff --git a/src/pretix/static/pretixcontrol/scss/_forms.scss b/src/pretix/static/pretixcontrol/scss/_forms.scss index 5d5f773249..9a939d0d37 100644 --- a/src/pretix/static/pretixcontrol/scss/_forms.scss +++ b/src/pretix/static/pretixcontrol/scss/_forms.scss @@ -638,6 +638,20 @@ table td > .checkbox input[type="checkbox"] { .form-group { margin-bottom: 10px; } + + label.control-label { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + .one-line-checkboxes { + div.checkbox { + display: inline-block; + margin-right: 10px; + margin-top: 0; + } + } } #rules-editor {