diff --git a/src/pretix/control/forms/filter.py b/src/pretix/control/forms/filter.py index 83846f1df3..0cbb721f76 100644 --- a/src/pretix/control/forms/filter.py +++ b/src/pretix/control/forms/filter.py @@ -1,11 +1,14 @@ +from datetime import datetime, time + from django import forms from django.apps import apps from django.db.models import Exists, F, OuterRef, Q from django.db.models.functions import Coalesce, ExtractWeekDay from django.urls import reverse, reverse_lazy -from django.utils.timezone import now +from django.utils.timezone import get_current_timezone, make_aware, now from django.utils.translation import pgettext_lazy, ugettext_lazy as _ +from pretix.base.forms.widgets import DatePickerWidget from pretix.base.models import ( Checkin, Event, Invoice, Item, Order, OrderPayment, OrderPosition, OrderRefund, Organizer, Question, QuestionAnswer, SubEvent, @@ -355,6 +358,11 @@ class SubEventFilterForm(FilterForm): ), required=False ) + date = forms.DateField( + label=_('Date'), + required=False, + widget=DatePickerWidget + ) weekday = forms.ChoiceField( label=_('Weekday'), choices=( @@ -378,6 +386,10 @@ class SubEventFilterForm(FilterForm): required=False ) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['date'].widget = DatePickerWidget() + def filter_qs(self, qs): fdata = self.cleaned_data @@ -407,6 +419,20 @@ class SubEventFilterForm(FilterForm): Q(name__icontains=i18ncomp(query)) | Q(location__icontains=query) ) + if fdata.get('date'): + date_start = make_aware(datetime.combine( + fdata.get('date'), + time(hour=0, minute=0, second=0, microsecond=0) + ), get_current_timezone()) + date_end = make_aware(datetime.combine( + fdata.get('date'), + time(hour=23, minute=59, second=59, microsecond=999999) + ), get_current_timezone()) + qs = qs.filter( + Q(date_to__isnull=True, date_from__gte=date_start, date_from__lte=date_end) | + Q(date_to__isnull=False, date_from__lte=date_end, date_to__gte=date_start) + ) + if fdata.get('ordering'): qs = qs.order_by(self.get_order_by()) diff --git a/src/pretix/control/templates/pretixcontrol/subevents/index.html b/src/pretix/control/templates/pretixcontrol/subevents/index.html index 82bd088452..39d7663bec 100644 --- a/src/pretix/control/templates/pretixcontrol/subevents/index.html +++ b/src/pretix/control/templates/pretixcontrol/subevents/index.html @@ -22,13 +22,16 @@ {% else %}