Fixed broken grouping

This commit is contained in:
Raphael Michel
2015-09-09 10:56:41 +02:00
parent 79410cdb0d
commit 7b179f3ea5

View File

@@ -21,6 +21,7 @@ def tuplesum(tuples):
def mysum(it): def mysum(it):
sit = [i for i in it if not isinstance(i, Dontsum)] sit = [i for i in it if not isinstance(i, Dontsum)]
return sum(sit) return sum(sit)
return tuple(map(mysum, zip(*list(tuples)))) return tuple(map(mysum, zip(*list(tuples))))
@@ -33,39 +34,40 @@ def order_overview(event):
num_total = { num_total = {
(p['item'], p['variation']): (p['cnt'], p['price']) (p['item'], p['variation']): (p['cnt'], p['price'])
for p in for p in (OrderPosition.objects.current
OrderPosition.objects.current.filter(order__event=event).values('item', 'variation').annotate( .filter(order__event=event)
cnt=Count('id'), price=Sum('price')) .values('item', 'variation')
} .annotate(cnt=Count('id'), price=Sum('price')).order_by())
}
num_cancelled = { num_cancelled = {
(p['item'], p['variation']): (p['cnt'], p['price']) (p['item'], p['variation']): (p['cnt'], p['price'])
for p in (OrderPosition.objects.current for p in (OrderPosition.objects.current
.filter(order__event=event, order__status=Order.STATUS_CANCELLED) .filter(order__event=event, order__status=Order.STATUS_CANCELLED)
.values('item', 'variation') .values('item', 'variation')
.annotate(cnt=Count('id'), price=Sum('price'))) .annotate(cnt=Count('id'), price=Sum('price')).order_by())
} }
num_refunded = { num_refunded = {
(p['item'], p['variation']): (p['cnt'], p['price']) (p['item'], p['variation']): (p['cnt'], p['price'])
for p in (OrderPosition.objects.current for p in (OrderPosition.objects.current
.filter(order__event=event, order__status=Order.STATUS_REFUNDED) .filter(order__event=event, order__status=Order.STATUS_REFUNDED)
.values('item', 'variation') .values('item', 'variation')
.annotate(cnt=Count('id'), price=Sum('price'))) .annotate(cnt=Count('id'), price=Sum('price')).order_by())
} }
num_pending = { num_pending = {
(p['item'], p['variation']): (p['cnt'], p['price']) (p['item'], p['variation']): (p['cnt'], p['price'])
for p in (OrderPosition.objects.current for p in (OrderPosition.objects.current
.filter(order__event=event, .filter(order__event=event,
order__status__in=(Order.STATUS_PENDING, Order.STATUS_EXPIRED)) order__status__in=(Order.STATUS_PENDING, Order.STATUS_EXPIRED))
.values('item', 'variation') .values('item', 'variation')
.annotate(cnt=Count('id'), price=Sum('price'))) .annotate(cnt=Count('id'), price=Sum('price')).order_by())
} }
num_paid = { num_paid = {
(p['item'], p['variation']): (p['cnt'], p['price']) (p['item'], p['variation']): (p['cnt'], p['price'])
for p in (OrderPosition.objects.current for p in (OrderPosition.objects.current
.filter(order__event=event, order__status=Order.STATUS_PAID) .filter(order__event=event, order__status=Order.STATUS_PAID)
.values('item', 'variation') .values('item', 'variation')
.annotate(cnt=Count('id'), price=Sum('price'))) .annotate(cnt=Count('id'), price=Sum('price')).order_by())
} }
for item in items: for item in items:
item.all_variations = sorted(item.get_all_variations(), item.all_variations = sorted(item.get_all_variations(),
@@ -94,7 +96,7 @@ def order_overview(event):
for cat in set([i.category for i in items]) for cat in set([i.category for i in items])
# insert categories into a set for uniqueness # insert categories into a set for uniqueness
# a set is unsorted, so sort again by category # a set is unsorted, so sort again by category
], ],
key=lambda group: (group[0].position, group[0].identity) if group[0] is not None else (0, "") key=lambda group: (group[0].position, group[0].identity) if group[0] is not None else (0, "")
) )
@@ -111,38 +113,39 @@ def order_overview(event):
payment_items = [] payment_items = []
num_total = { num_total = {
o['payment_provider']: (o['cnt'], o['payment_fee']) o['payment_provider']: (o['cnt'], o['payment_fee'])
for o in for o in (Order.objects.current
Order.objects.current.filter(event=event).values('payment_provider').annotate( .filter(event=event)
cnt=Count('id'), payment_fee=Sum('payment_fee')) .values('payment_provider')
} .annotate(cnt=Count('id'), payment_fee=Sum('payment_fee')).order_by())
}
num_cancelled = { num_cancelled = {
o['payment_provider']: (o['cnt'], o['payment_fee']) o['payment_provider']: (o['cnt'], o['payment_fee'])
for o in (Order.objects.current for o in (Order.objects.current
.filter(event=event, status=Order.STATUS_CANCELLED) .filter(event=event, status=Order.STATUS_CANCELLED)
.values('payment_provider') .values('payment_provider')
.annotate(cnt=Count('id'), payment_fee=Sum('payment_fee'))) .annotate(cnt=Count('id'), payment_fee=Sum('payment_fee')).order_by())
} }
num_refunded = { num_refunded = {
o['payment_provider']: (o['cnt'], o['payment_fee']) o['payment_provider']: (o['cnt'], o['payment_fee'])
for o in (Order.objects.current for o in (Order.objects.current
.filter(event=event, status=Order.STATUS_REFUNDED) .filter(event=event, status=Order.STATUS_REFUNDED)
.values('payment_provider') .values('payment_provider')
.annotate(cnt=Count('id'), payment_fee=Sum('payment_fee'))) .annotate(cnt=Count('id'), payment_fee=Sum('payment_fee')).order_by())
} }
num_pending = { num_pending = {
o['payment_provider']: (o['cnt'], o['payment_fee']) o['payment_provider']: (o['cnt'], o['payment_fee'])
for o in (Order.objects.current for o in (Order.objects.current
.filter(event=event, status__in=(Order.STATUS_PENDING, Order.STATUS_EXPIRED)) .filter(event=event, status__in=(Order.STATUS_PENDING, Order.STATUS_EXPIRED))
.values('payment_provider') .values('payment_provider')
.annotate(cnt=Count('id'), payment_fee=Sum('payment_fee'))) .annotate(cnt=Count('id'), payment_fee=Sum('payment_fee')).order_by())
} }
num_paid = { num_paid = {
o['payment_provider']: (o['cnt'], o['payment_fee']) o['payment_provider']: (o['cnt'], o['payment_fee'])
for o in (Order.objects.current for o in (Order.objects.current
.filter(event=event, status=Order.STATUS_PAID) .filter(event=event, status=Order.STATUS_PAID)
.values('payment_provider') .values('payment_provider')
.annotate(cnt=Count('id'), payment_fee=Sum('payment_fee'))) .annotate(cnt=Count('id'), payment_fee=Sum('payment_fee')).order_by())
} }
provider_names = {} provider_names = {}
responses = register_payment_providers.send(event) responses = register_payment_providers.send(event)