forked from CGM_Public/pretix_original
Voucher list: add more filters
This commit is contained in:
@@ -612,6 +612,15 @@ class VoucherFilterForm(FilterForm):
|
|||||||
),
|
),
|
||||||
required=False
|
required=False
|
||||||
)
|
)
|
||||||
|
qm = forms.ChoiceField(
|
||||||
|
label=_('Quota handling'),
|
||||||
|
choices=(
|
||||||
|
('', _('All')),
|
||||||
|
('b', _('Reserve ticket from quota')),
|
||||||
|
('i', _('Allow to ignore quota')),
|
||||||
|
),
|
||||||
|
required=False
|
||||||
|
)
|
||||||
tag = forms.CharField(
|
tag = forms.CharField(
|
||||||
label=_('Filter by tag'),
|
label=_('Filter by tag'),
|
||||||
widget=forms.TextInput(attrs={
|
widget=forms.TextInput(attrs={
|
||||||
@@ -633,6 +642,10 @@ class VoucherFilterForm(FilterForm):
|
|||||||
required=False,
|
required=False,
|
||||||
empty_label=pgettext_lazy('subevent', 'All dates')
|
empty_label=pgettext_lazy('subevent', 'All dates')
|
||||||
)
|
)
|
||||||
|
itemvar = forms.ChoiceField(
|
||||||
|
label=_("Product"),
|
||||||
|
required=False
|
||||||
|
)
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self.event = kwargs.pop('event')
|
self.event = kwargs.pop('event')
|
||||||
@@ -654,6 +667,19 @@ class VoucherFilterForm(FilterForm):
|
|||||||
elif 'subevent':
|
elif 'subevent':
|
||||||
del self.fields['subevent']
|
del self.fields['subevent']
|
||||||
|
|
||||||
|
choices = [('', _('All products'))]
|
||||||
|
for i in self.event.items.prefetch_related('variations').all():
|
||||||
|
variations = list(i.variations.all())
|
||||||
|
if variations:
|
||||||
|
choices.append((str(i.pk), _('{product} – Any variation').format(product=i.name)))
|
||||||
|
for v in variations:
|
||||||
|
choices.append(('%d-%d' % (i.pk, v.pk), '%s – %s' % (i.name, v.value)))
|
||||||
|
else:
|
||||||
|
choices.append((str(i.pk), i.name))
|
||||||
|
for q in self.event.quotas.all():
|
||||||
|
choices.append(('q-%d' % q.pk, _('Any product in quota "{quota}"').format(quota=q)))
|
||||||
|
self.fields['itemvar'].choices = choices
|
||||||
|
|
||||||
def filter_qs(self, qs):
|
def filter_qs(self, qs):
|
||||||
fdata = self.cleaned_data
|
fdata = self.cleaned_data
|
||||||
|
|
||||||
@@ -665,6 +691,13 @@ class VoucherFilterForm(FilterForm):
|
|||||||
s = fdata.get('tag').strip()
|
s = fdata.get('tag').strip()
|
||||||
qs = qs.filter(tag__icontains=s)
|
qs = qs.filter(tag__icontains=s)
|
||||||
|
|
||||||
|
if fdata.get('qm'):
|
||||||
|
s = fdata.get('qm')
|
||||||
|
if s == 'b':
|
||||||
|
qs = qs.filter(block_quota=True)
|
||||||
|
elif s == 'i':
|
||||||
|
qs = qs.filter(allow_ignore_quota=True)
|
||||||
|
|
||||||
if fdata.get('status'):
|
if fdata.get('status'):
|
||||||
s = fdata.get('status')
|
s = fdata.get('status')
|
||||||
if s == 'v':
|
if s == 'v':
|
||||||
@@ -681,6 +714,15 @@ class VoucherFilterForm(FilterForm):
|
|||||||
redeemed__gt=0, has_checkin=True
|
redeemed__gt=0, has_checkin=True
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if fdata.get('itemvar'):
|
||||||
|
if fdata.get('itemvar').startswith('q-'):
|
||||||
|
qs = qs.filter(quota_id=fdata.get('itemvar').split('-')[1])
|
||||||
|
elif '-' in fdata.get('itemvar'):
|
||||||
|
qs = qs.filter(item_id=fdata.get('itemvar').split('-')[0],
|
||||||
|
variation_id=fdata.get('itemvar').split('-')[1])
|
||||||
|
else:
|
||||||
|
qs = qs.filter(item_id=fdata.get('itemvar'))
|
||||||
|
|
||||||
if fdata.get('subevent'):
|
if fdata.get('subevent'):
|
||||||
qs = qs.filter(subevent_id=fdata.get('subevent').pk)
|
qs = qs.filter(subevent_id=fdata.get('subevent').pk)
|
||||||
|
|
||||||
|
|||||||
@@ -12,24 +12,30 @@
|
|||||||
</p>
|
</p>
|
||||||
<div class="row filter-form">
|
<div class="row filter-form">
|
||||||
<form class="" action="" method="get">
|
<form class="" action="" method="get">
|
||||||
<div class="col-md-3 col-xs-6">
|
<div class="col-md-2 col-xs-6">
|
||||||
{% bootstrap_field filter_form.search layout='inline' %}
|
{% bootstrap_field filter_form.search layout='inline' %}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-3 col-xs-6">
|
<div class="col-md-2 col-xs-6">
|
||||||
{% bootstrap_field filter_form.tag layout='inline' %}
|
{% bootstrap_field filter_form.tag layout='inline' %}
|
||||||
</div>
|
</div>
|
||||||
{% if request.event.has_subevents %}
|
{% if request.event.has_subevents %}
|
||||||
<div class="col-md-2 col-xs-6">
|
<div class="col-md-1 col-xs-6">
|
||||||
{% bootstrap_field filter_form.status layout='inline' %}
|
{% bootstrap_field filter_form.status layout='inline' %}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-2 col-xs-6">
|
<div class="col-md-2 col-xs-6">
|
||||||
{% bootstrap_field filter_form.subevent layout='inline' %}
|
{% bootstrap_field filter_form.subevent layout='inline' %}
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="col-md-4 col-xs-6">
|
<div class="col-md-3 col-xs-6">
|
||||||
{% bootstrap_field filter_form.status layout='inline' %}
|
{% bootstrap_field filter_form.status layout='inline' %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<div class="col-md-2 col-xs-6">
|
||||||
|
{% bootstrap_field filter_form.itemvar layout='inline' %}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 col-xs-6">
|
||||||
|
{% bootstrap_field filter_form.qm layout='inline' %}
|
||||||
|
</div>
|
||||||
<div class="col-md-2 col-xs-6">
|
<div class="col-md-2 col-xs-6">
|
||||||
<button class="btn btn-primary btn-block" type="submit">
|
<button class="btn btn-primary btn-block" type="submit">
|
||||||
<span class="fa fa-filter"></span>
|
<span class="fa fa-filter"></span>
|
||||||
|
|||||||
Reference in New Issue
Block a user