mirror of
https://github.com/pretix/pretix.git
synced 2026-05-09 15:54:03 +00:00
Allow to filter subevents by date
This commit is contained in:
@@ -1,11 +1,14 @@
|
|||||||
|
from datetime import datetime, time
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.db.models import Exists, F, OuterRef, Q
|
from django.db.models import Exists, F, OuterRef, Q
|
||||||
from django.db.models.functions import Coalesce, ExtractWeekDay
|
from django.db.models.functions import Coalesce, ExtractWeekDay
|
||||||
from django.urls import reverse, reverse_lazy
|
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 django.utils.translation import pgettext_lazy, ugettext_lazy as _
|
||||||
|
|
||||||
|
from pretix.base.forms.widgets import DatePickerWidget
|
||||||
from pretix.base.models import (
|
from pretix.base.models import (
|
||||||
Checkin, Event, Invoice, Item, Order, OrderPayment, OrderPosition,
|
Checkin, Event, Invoice, Item, Order, OrderPayment, OrderPosition,
|
||||||
OrderRefund, Organizer, Question, QuestionAnswer, SubEvent,
|
OrderRefund, Organizer, Question, QuestionAnswer, SubEvent,
|
||||||
@@ -355,6 +358,11 @@ class SubEventFilterForm(FilterForm):
|
|||||||
),
|
),
|
||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
|
date = forms.DateField(
|
||||||
|
label=_('Date'),
|
||||||
|
required=False,
|
||||||
|
widget=DatePickerWidget
|
||||||
|
)
|
||||||
weekday = forms.ChoiceField(
|
weekday = forms.ChoiceField(
|
||||||
label=_('Weekday'),
|
label=_('Weekday'),
|
||||||
choices=(
|
choices=(
|
||||||
@@ -378,6 +386,10 @@ class SubEventFilterForm(FilterForm):
|
|||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.fields['date'].widget = DatePickerWidget()
|
||||||
|
|
||||||
def filter_qs(self, qs):
|
def filter_qs(self, qs):
|
||||||
fdata = self.cleaned_data
|
fdata = self.cleaned_data
|
||||||
|
|
||||||
@@ -407,6 +419,20 @@ class SubEventFilterForm(FilterForm):
|
|||||||
Q(name__icontains=i18ncomp(query)) | Q(location__icontains=query)
|
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'):
|
if fdata.get('ordering'):
|
||||||
qs = qs.order_by(self.get_order_by())
|
qs = qs.order_by(self.get_order_by())
|
||||||
|
|
||||||
|
|||||||
@@ -22,13 +22,16 @@
|
|||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<form class="row filter-form" action="" method="get">
|
<form class="row filter-form" action="" method="get">
|
||||||
<div class="col-md-4 col-sm-6 col-xs-12">
|
<div class="col-md-3 col-sm-6 col-xs-12">
|
||||||
{% bootstrap_field filter_form.query layout='inline' %}
|
{% bootstrap_field filter_form.query layout='inline' %}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-3 col-sm-6 col-xs-12">
|
<div class="col-md-3 col-sm-6 col-xs-12">
|
||||||
{% bootstrap_field filter_form.status layout='inline' %}
|
{% bootstrap_field filter_form.status layout='inline' %}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-3 col-sm-6 col-xs-12">
|
<div class="col-md-2 col-sm-6 col-xs-12">
|
||||||
|
{% bootstrap_field filter_form.date layout='inline' %}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-2 col-sm-6 col-xs-12">
|
||||||
{% bootstrap_field filter_form.weekday layout='inline' %}
|
{% bootstrap_field filter_form.weekday layout='inline' %}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-2 col-sm-6 col-xs-12">
|
<div class="col-md-2 col-sm-6 col-xs-12">
|
||||||
|
|||||||
Reference in New Issue
Block a user