forked from CGM_Public/pretix_original
Refs #79 -- Toggle between number and money in order overview
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
from itertools import groupby
|
||||
|
||||
from django.contrib import messages
|
||||
from django.db.models import Count, Q
|
||||
from django.db.models import Count, Q, Sum
|
||||
from django.utils.timezone import now
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.http import HttpResponse
|
||||
@@ -202,6 +202,10 @@ class OrderExtend(OrderView):
|
||||
data=self.request.POST if self.request.method == "POST" else None)
|
||||
|
||||
|
||||
def tuplesum(tuples):
|
||||
return tuple(map(sum, zip(*list(tuples))))
|
||||
|
||||
|
||||
class OverView(EventPermissionRequiredMixin, TemplateView):
|
||||
template_name = 'pretixcontrol/orders/overview.html'
|
||||
permission = 'can_view_orders'
|
||||
@@ -215,39 +219,39 @@ class OverView(EventPermissionRequiredMixin, TemplateView):
|
||||
).order_by('category__position', 'category_id', 'name')
|
||||
|
||||
num_total = {
|
||||
(p['item'], p['variation']): p['cnt']
|
||||
(p['item'], p['variation']): (p['cnt'], p['price'])
|
||||
for p in
|
||||
OrderPosition.objects.current.filter(order__event=self.request.event).values('item', 'variation').annotate(
|
||||
cnt=Count('id'))
|
||||
cnt=Count('id'), price=Sum('price'))
|
||||
}
|
||||
num_cancelled = {
|
||||
(p['item'], p['variation']): p['cnt']
|
||||
(p['item'], p['variation']): (p['cnt'], p['price'])
|
||||
for p in (OrderPosition.objects.current
|
||||
.filter(order__event=self.request.event, order__status=Order.STATUS_CANCELLED)
|
||||
.values('item', 'variation')
|
||||
.annotate(cnt=Count('id')))
|
||||
.annotate(cnt=Count('id'), price=Sum('price')))
|
||||
}
|
||||
num_refunded = {
|
||||
(p['item'], p['variation']): p['cnt']
|
||||
(p['item'], p['variation']): (p['cnt'], p['price'])
|
||||
for p in (OrderPosition.objects.current
|
||||
.filter(order__event=self.request.event, order__status=Order.STATUS_REFUNDED)
|
||||
.values('item', 'variation')
|
||||
.annotate(cnt=Count('id')))
|
||||
.annotate(cnt=Count('id'), price=Sum('price')))
|
||||
}
|
||||
num_pending = {
|
||||
(p['item'], p['variation']): p['cnt']
|
||||
(p['item'], p['variation']): (p['cnt'], p['price'])
|
||||
for p in (OrderPosition.objects.current
|
||||
.filter(order__event=self.request.event,
|
||||
order__status__in=(Order.STATUS_PENDING, Order.STATUS_EXPIRED))
|
||||
.values('item', 'variation')
|
||||
.annotate(cnt=Count('id')))
|
||||
.annotate(cnt=Count('id'), price=Sum('price')))
|
||||
}
|
||||
num_paid = {
|
||||
(p['item'], p['variation']): p['cnt']
|
||||
(p['item'], p['variation']): (p['cnt'], p['price'])
|
||||
for p in (OrderPosition.objects.current
|
||||
.filter(order__event=self.request.event, order__status=Order.STATUS_PAID)
|
||||
.values('item', 'variation')
|
||||
.annotate(cnt=Count('id')))
|
||||
.annotate(cnt=Count('id'), price=Sum('price')))
|
||||
}
|
||||
|
||||
for item in items:
|
||||
@@ -255,18 +259,18 @@ class OverView(EventPermissionRequiredMixin, TemplateView):
|
||||
key=lambda vd: vd.ordered_values())
|
||||
for var in item.all_variations:
|
||||
variid = var['variation'].identity if 'variation' in var else None
|
||||
var.num_total = num_total.get((item.identity, variid), 0)
|
||||
var.num_pending = num_pending.get((item.identity, variid), 0)
|
||||
var.num_cancelled = num_cancelled.get((item.identity, variid), 0)
|
||||
var.num_refunded = num_refunded.get((item.identity, variid), 0)
|
||||
var.num_paid = num_paid.get((item.identity, variid), 0)
|
||||
var.num_total = num_total.get((item.identity, variid), (0, 0))
|
||||
var.num_pending = num_pending.get((item.identity, variid), (0, 0))
|
||||
var.num_cancelled = num_cancelled.get((item.identity, variid), (0, 0))
|
||||
var.num_refunded = num_refunded.get((item.identity, variid), (0, 0))
|
||||
var.num_paid = num_paid.get((item.identity, variid), (0, 0))
|
||||
item.has_variations = (len(item.all_variations) != 1
|
||||
or not item.all_variations[0].empty())
|
||||
item.num_total = sum(var.num_total for var in item.all_variations)
|
||||
item.num_pending = sum(var.num_pending for var in item.all_variations)
|
||||
item.num_cancelled = sum(var.num_cancelled for var in item.all_variations)
|
||||
item.num_refunded = sum(var.num_refunded for var in item.all_variations)
|
||||
item.num_paid = sum(var.num_paid for var in item.all_variations)
|
||||
item.num_total = tuplesum(var.num_total for var in item.all_variations)
|
||||
item.num_pending = tuplesum(var.num_pending for var in item.all_variations)
|
||||
item.num_cancelled = tuplesum(var.num_cancelled for var in item.all_variations)
|
||||
item.num_refunded = tuplesum(var.num_refunded for var in item.all_variations)
|
||||
item.num_paid = tuplesum(var.num_paid for var in item.all_variations)
|
||||
|
||||
nonecat = ItemCategory(name=_('Uncategorized'))
|
||||
# Regroup those by category
|
||||
@@ -281,18 +285,18 @@ class OverView(EventPermissionRequiredMixin, TemplateView):
|
||||
key=lambda group: (group[0].position, group[0].identity) if group[0] is not None else (0, "")
|
||||
)
|
||||
for c in ctx['items_by_category']:
|
||||
c[0].num_total = sum(item.num_total for item in c[1])
|
||||
c[0].num_pending = sum(item.num_pending for item in c[1])
|
||||
c[0].num_cancelled = sum(item.num_cancelled for item in c[1])
|
||||
c[0].num_refunded = sum(item.num_refunded for item in c[1])
|
||||
c[0].num_paid = sum(item.num_paid for item in c[1])
|
||||
c[0].num_total = tuplesum(item.num_total for item in c[1])
|
||||
c[0].num_pending = tuplesum(item.num_pending for item in c[1])
|
||||
c[0].num_cancelled = tuplesum(item.num_cancelled for item in c[1])
|
||||
c[0].num_refunded = tuplesum(item.num_refunded for item in c[1])
|
||||
c[0].num_paid = tuplesum(item.num_paid for item in c[1])
|
||||
|
||||
ctx['total'] = {
|
||||
'num_total': sum(c.num_total for c, i in ctx['items_by_category']),
|
||||
'num_pending': sum(c.num_pending for c, i in ctx['items_by_category']),
|
||||
'num_cancelled': sum(c.num_cancelled for c, i in ctx['items_by_category']),
|
||||
'num_refunded': sum(c.num_refunded for c, i in ctx['items_by_category']),
|
||||
'num_paid': sum(c.num_paid for c, i in ctx['items_by_category'])
|
||||
'num_total': tuplesum(c.num_total for c, i in ctx['items_by_category']),
|
||||
'num_pending': tuplesum(c.num_pending for c, i in ctx['items_by_category']),
|
||||
'num_cancelled': tuplesum(c.num_cancelled for c, i in ctx['items_by_category']),
|
||||
'num_refunded': tuplesum(c.num_refunded for c, i in ctx['items_by_category']),
|
||||
'num_paid': tuplesum(c.num_paid for c, i in ctx['items_by_category'])
|
||||
}
|
||||
|
||||
return ctx
|
||||
|
||||
Reference in New Issue
Block a user