Allow to filter order list by variations

This commit is contained in:
Raphael Michel
2019-06-26 14:27:02 +02:00
parent d30fbf4e6a
commit c7f345e98e
2 changed files with 42 additions and 10 deletions

View File

@@ -177,11 +177,9 @@ class EventOrderFilterForm(OrderFilterForm):
orders = {'code': 'code', 'email': 'email', 'total': 'total', orders = {'code': 'code', 'email': 'email', 'total': 'total',
'datetime': 'datetime', 'status': 'status'} 'datetime': 'datetime', 'status': 'status'}
item = forms.ModelChoiceField( item = forms.ChoiceField(
label=_('Products'), label=_('Products'),
queryset=Item.objects.none(),
required=False, required=False,
empty_label=_('All products')
) )
subevent = forms.ModelChoiceField( subevent = forms.ModelChoiceField(
label=pgettext_lazy('subevent', 'Date'), label=pgettext_lazy('subevent', 'Date'),
@@ -241,12 +239,28 @@ class EventOrderFilterForm(OrderFilterForm):
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))
self.fields['item'].choices = choices
def filter_qs(self, qs): def filter_qs(self, qs):
fdata = self.cleaned_data fdata = self.cleaned_data
qs = super().filter_qs(qs) qs = super().filter_qs(qs)
if fdata.get('item'): item = fdata.get('item')
qs = qs.filter(all_positions__item=fdata.get('item'), all_positions__canceled=False).distinct() 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'): if fdata.get('subevent'):
qs = qs.filter(all_positions__subevent=fdata.get('subevent'), all_positions__canceled=False).distinct() qs = qs.filter(all_positions__subevent=fdata.get('subevent'), all_positions__canceled=False).distinct()

View File

@@ -86,11 +86,29 @@
{% for var in item.all_variations %} {% for var in item.all_variations %}
<tr class="variation {% if tup.0 %}categorized{% endif %}"> <tr class="variation {% if tup.0 %}categorized{% endif %}">
<td>{{ var }}</td> <td>{{ var }}</td>
<td>{{ var.num.canceled|togglesum:request.event.currency }}</td> <td>
<td>{{ var.num.expired|togglesum:request.event.currency }}</td> <a href="{{ listurl }}?item={{ item.id }}-{{ var.id }}&amp;status=c&amp;provider={{ item.provider }}">
<td>{{ var.num.pending|togglesum:request.event.currency }}</td> {{ var.num.canceled|togglesum:request.event.currency }}
<td>{{ var.num.paid|togglesum:request.event.currency }}</td> </a>
<td>{{ var.num.total|togglesum:request.event.currency }}</td> </td>
<td>
<a href="{{ listurl }}?item={{ item.id }}-{{ var.id }}&amp;status=e&amp;provider={{ item.provider }}">
{{ var.num.expired|togglesum:request.event.currency }}
</a>
</td>
<td>
<a href="{{ listurl }}?item={{ item.id }}-{{ var.id }}&amp;status=n&amp;provider={{ item.provider }}">
{{ var.num.pending|togglesum:request.event.currency }}
</a>
</td>
<td>
<a href="{{ listurl }}?item={{ item.id }}-{{ var.id }}&amp;status=p&amp;provider={{ item.provider }}">
{{ var.num.paid|togglesum:request.event.currency }}
</a>
</td>
<td>
{{ var.num.total|togglesum:request.event.currency }}
</td>
</tr> </tr>
{% endfor %} {% endfor %}
{% endif %} {% endif %}