From c7f345e98e0113b9986c0c991aea701e39ccbb87 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 26 Jun 2019 14:27:02 +0200 Subject: [PATCH] Allow to filter order list by variations --- src/pretix/control/forms/filter.py | 24 ++++++++++++---- .../pretixcontrol/orders/overview.html | 28 +++++++++++++++---- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/pretix/control/forms/filter.py b/src/pretix/control/forms/filter.py index 0e4875e62..5d4b2aad1 100644 --- a/src/pretix/control/forms/filter.py +++ b/src/pretix/control/forms/filter.py @@ -177,11 +177,9 @@ class EventOrderFilterForm(OrderFilterForm): orders = {'code': 'code', 'email': 'email', 'total': 'total', 'datetime': 'datetime', 'status': 'status'} - item = forms.ModelChoiceField( + item = forms.ChoiceField( label=_('Products'), - queryset=Item.objects.none(), required=False, - empty_label=_('All products') ) subevent = forms.ModelChoiceField( label=pgettext_lazy('subevent', 'Date'), @@ -241,12 +239,28 @@ class EventOrderFilterForm(OrderFilterForm): elif '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)) + self.fields['item'].choices = choices + def filter_qs(self, qs): fdata = self.cleaned_data qs = super().filter_qs(qs) - if fdata.get('item'): - qs = qs.filter(all_positions__item=fdata.get('item'), all_positions__canceled=False).distinct() + item = fdata.get('item') + if item: + if '-' in item: + var = item.split('-')[1] + qs = qs.filter(all_positions__variation_id=var, all_positions__canceled=False).distinct() + else: + qs = qs.filter(all_positions__item_id=fdata.get('item'), all_positions__canceled=False).distinct() if fdata.get('subevent'): qs = qs.filter(all_positions__subevent=fdata.get('subevent'), all_positions__canceled=False).distinct() diff --git a/src/pretix/control/templates/pretixcontrol/orders/overview.html b/src/pretix/control/templates/pretixcontrol/orders/overview.html index 45494f473..bfe87b89f 100644 --- a/src/pretix/control/templates/pretixcontrol/orders/overview.html +++ b/src/pretix/control/templates/pretixcontrol/orders/overview.html @@ -86,11 +86,29 @@ {% for var in item.all_variations %} {{ var }} - {{ var.num.canceled|togglesum:request.event.currency }} - {{ var.num.expired|togglesum:request.event.currency }} - {{ var.num.pending|togglesum:request.event.currency }} - {{ var.num.paid|togglesum:request.event.currency }} - {{ var.num.total|togglesum:request.event.currency }} + + + {{ var.num.canceled|togglesum:request.event.currency }} + + + + + {{ var.num.expired|togglesum:request.event.currency }} + + + + + {{ var.num.pending|togglesum:request.event.currency }} + + + + + {{ var.num.paid|togglesum:request.event.currency }} + + + + {{ var.num.total|togglesum:request.event.currency }} + {% endfor %} {% endif %}