mirror of
https://github.com/pretix/pretix.git
synced 2026-05-08 15:44:02 +00:00
Check-in list: Allow to filter by date
This commit is contained in:
@@ -1352,7 +1352,7 @@ class EventFilterForm(FilterForm):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class CheckInFilterForm(FilterForm):
|
class CheckinListAttendeeFilterForm(FilterForm):
|
||||||
orders = {
|
orders = {
|
||||||
'code': ('order__code', 'item__name'),
|
'code': ('order__code', 'item__name'),
|
||||||
'-code': ('-order__code', '-item__name'),
|
'-code': ('-order__code', '-item__name'),
|
||||||
@@ -1399,6 +1399,24 @@ class CheckInFilterForm(FilterForm):
|
|||||||
required=False,
|
required=False,
|
||||||
empty_label=_('All products')
|
empty_label=_('All products')
|
||||||
)
|
)
|
||||||
|
subevent = forms.ModelChoiceField(
|
||||||
|
label=pgettext_lazy('subevent', 'Date'),
|
||||||
|
queryset=SubEvent.objects.none(),
|
||||||
|
required=False,
|
||||||
|
empty_label=pgettext_lazy('subevent', 'All dates')
|
||||||
|
)
|
||||||
|
subevent_from = forms.SplitDateTimeField(
|
||||||
|
widget=SplitDateTimePickerWidget(attrs={
|
||||||
|
}),
|
||||||
|
label=pgettext_lazy('subevent', 'Date start from'),
|
||||||
|
required=False,
|
||||||
|
)
|
||||||
|
subevent_until = forms.SplitDateTimeField(
|
||||||
|
widget=SplitDateTimePickerWidget(attrs={
|
||||||
|
}),
|
||||||
|
label=pgettext_lazy('subevent', 'Date start until'),
|
||||||
|
required=False,
|
||||||
|
)
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self.event = kwargs.pop('event')
|
self.event = kwargs.pop('event')
|
||||||
@@ -1409,6 +1427,24 @@ class CheckInFilterForm(FilterForm):
|
|||||||
else:
|
else:
|
||||||
self.fields['item'].queryset = self.list.limit_products.all()
|
self.fields['item'].queryset = self.list.limit_products.all()
|
||||||
|
|
||||||
|
if self.event.has_subevents:
|
||||||
|
self.fields['subevent'].queryset = self.event.subevents.all()
|
||||||
|
self.fields['subevent'].widget = Select2(
|
||||||
|
attrs={
|
||||||
|
'data-model-select2': 'event',
|
||||||
|
'data-select2-url': reverse('control:event.subevents.select2', kwargs={
|
||||||
|
'event': self.event.slug,
|
||||||
|
'organizer': self.event.organizer.slug,
|
||||||
|
}),
|
||||||
|
'data-placeholder': pgettext_lazy('subevent', 'All dates')
|
||||||
|
}
|
||||||
|
)
|
||||||
|
self.fields['subevent'].widget.choices = self.fields['subevent'].choices
|
||||||
|
else:
|
||||||
|
del self.fields['subevent']
|
||||||
|
del self.fields['subevent_from']
|
||||||
|
del self.fields['subevent_until']
|
||||||
|
|
||||||
def filter_qs(self, qs):
|
def filter_qs(self, qs):
|
||||||
fdata = self.cleaned_data
|
fdata = self.cleaned_data
|
||||||
|
|
||||||
@@ -1455,6 +1491,14 @@ class CheckInFilterForm(FilterForm):
|
|||||||
if fdata.get('item'):
|
if fdata.get('item'):
|
||||||
qs = qs.filter(item=fdata.get('item'))
|
qs = qs.filter(item=fdata.get('item'))
|
||||||
|
|
||||||
|
if fdata.get('subevent'):
|
||||||
|
qs = qs.filter(subevent_id=fdata.get('subevent').pk)
|
||||||
|
|
||||||
|
if fdata.get('subevent_from'):
|
||||||
|
qs = qs.filter(subevent__date_from__gte=fdata.get('subevent_from'))
|
||||||
|
if fdata.get('subevent_until'):
|
||||||
|
qs = qs.filter(subevent__date_from__lte=fdata.get('subevent_until'))
|
||||||
|
|
||||||
return qs
|
return qs
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -42,6 +42,17 @@
|
|||||||
<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.item %}
|
{% bootstrap_field filter_form.item %}
|
||||||
</div>
|
</div>
|
||||||
|
{% if filter_form.subevent %}
|
||||||
|
<div class="col-md-6 col-sm-6 col-xs-12">
|
||||||
|
{% bootstrap_field filter_form.subevent %}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 col-sm-6 col-xs-12">
|
||||||
|
{% bootstrap_field filter_form.subevent_from %}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 col-sm-6 col-xs-12">
|
||||||
|
{% bootstrap_field filter_form.subevent_until %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<div class="text-right">
|
<div class="text-right">
|
||||||
<button class="btn btn-primary btn-lg" type="submit">
|
<button class="btn btn-primary btn-lg" type="submit">
|
||||||
|
|||||||
@@ -50,7 +50,9 @@ from pretix.base.models import Checkin, Order, OrderPosition
|
|||||||
from pretix.base.models.checkin import CheckinList
|
from pretix.base.models.checkin import CheckinList
|
||||||
from pretix.base.signals import checkin_created
|
from pretix.base.signals import checkin_created
|
||||||
from pretix.control.forms.checkin import CheckinListForm
|
from pretix.control.forms.checkin import CheckinListForm
|
||||||
from pretix.control.forms.filter import CheckInFilterForm, CheckinFilterForm
|
from pretix.control.forms.filter import (
|
||||||
|
CheckinFilterForm, CheckinListAttendeeFilterForm,
|
||||||
|
)
|
||||||
from pretix.control.permissions import EventPermissionRequiredMixin
|
from pretix.control.permissions import EventPermissionRequiredMixin
|
||||||
from pretix.control.views import CreateView, PaginationMixin, UpdateView
|
from pretix.control.views import CreateView, PaginationMixin, UpdateView
|
||||||
from pretix.helpers.models import modelcopy
|
from pretix.helpers.models import modelcopy
|
||||||
@@ -107,7 +109,7 @@ class CheckInListShow(EventPermissionRequiredMixin, PaginationMixin, ListView):
|
|||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def filter_form(self):
|
def filter_form(self):
|
||||||
return CheckInFilterForm(
|
return CheckinListAttendeeFilterForm(
|
||||||
data=self.request.GET,
|
data=self.request.GET,
|
||||||
event=self.request.event,
|
event=self.request.event,
|
||||||
list=self.list
|
list=self.list
|
||||||
|
|||||||
Reference in New Issue
Block a user