forked from CGM_Public/pretix_original
Added payment method fees to order overview
This commit is contained in:
@@ -2,10 +2,26 @@ from django.db.models import Count, Sum
|
|||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from pretix.base.models import ItemCategory, Order, OrderPosition
|
from pretix.base.models import ItemCategory, Order, OrderPosition
|
||||||
|
from pretix.base.signals import register_payment_providers
|
||||||
|
|
||||||
|
|
||||||
|
class DummyObject:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class Dontsum:
|
||||||
|
def __init__(self, value):
|
||||||
|
self.value = value
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return str(self.value)
|
||||||
|
|
||||||
|
|
||||||
def tuplesum(tuples):
|
def tuplesum(tuples):
|
||||||
return tuple(map(sum, zip(*list(tuples))))
|
def mysum(it):
|
||||||
|
sit = [i for i in it if not isinstance(i, Dontsum)]
|
||||||
|
return sum(sit)
|
||||||
|
return tuple(map(mysum, zip(*list(tuples))))
|
||||||
|
|
||||||
|
|
||||||
def order_overview(event):
|
def order_overview(event):
|
||||||
@@ -78,9 +94,10 @@ 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, "")
|
||||||
)
|
)
|
||||||
|
|
||||||
for c in items_by_category:
|
for c in items_by_category:
|
||||||
c[0].num_total = tuplesum(item.num_total 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_pending = tuplesum(item.num_pending for item in c[1])
|
||||||
@@ -88,6 +105,71 @@ def order_overview(event):
|
|||||||
c[0].num_refunded = tuplesum(item.num_refunded 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])
|
c[0].num_paid = tuplesum(item.num_paid for item in c[1])
|
||||||
|
|
||||||
|
# Payment fees
|
||||||
|
payment_cat_obj = DummyObject()
|
||||||
|
payment_cat_obj.name = _('Payment method fees')
|
||||||
|
payment_items = []
|
||||||
|
num_total = {
|
||||||
|
o['payment_provider']: (o['cnt'], o['payment_fee'])
|
||||||
|
for o in
|
||||||
|
Order.objects.current.filter(event=event).values('payment_provider').annotate(
|
||||||
|
cnt=Count('id'), payment_fee=Sum('payment_fee'))
|
||||||
|
}
|
||||||
|
num_cancelled = {
|
||||||
|
o['payment_provider']: (o['cnt'], o['payment_fee'])
|
||||||
|
for o in (Order.objects.current
|
||||||
|
.filter(event=event, status=Order.STATUS_CANCELLED)
|
||||||
|
.values('payment_provider')
|
||||||
|
.annotate(cnt=Count('id'), payment_fee=Sum('payment_fee')))
|
||||||
|
}
|
||||||
|
num_refunded = {
|
||||||
|
o['payment_provider']: (o['cnt'], o['payment_fee'])
|
||||||
|
for o in (Order.objects.current
|
||||||
|
.filter(event=event, status=Order.STATUS_REFUNDED)
|
||||||
|
.values('payment_provider')
|
||||||
|
.annotate(cnt=Count('id'), payment_fee=Sum('payment_fee')))
|
||||||
|
}
|
||||||
|
num_pending = {
|
||||||
|
o['payment_provider']: (o['cnt'], o['payment_fee'])
|
||||||
|
for o in (Order.objects.current
|
||||||
|
.filter(event=event, status__in=(Order.STATUS_PENDING, Order.STATUS_EXPIRED))
|
||||||
|
.values('payment_provider')
|
||||||
|
.annotate(cnt=Count('id'), payment_fee=Sum('payment_fee')))
|
||||||
|
}
|
||||||
|
num_paid = {
|
||||||
|
o['payment_provider']: (o['cnt'], o['payment_fee'])
|
||||||
|
for o in (Order.objects.current
|
||||||
|
.filter(event=event, status=Order.STATUS_PAID)
|
||||||
|
.values('payment_provider')
|
||||||
|
.annotate(cnt=Count('id'), payment_fee=Sum('payment_fee')))
|
||||||
|
}
|
||||||
|
|
||||||
|
provider_names = {}
|
||||||
|
responses = register_payment_providers.send(event)
|
||||||
|
for receiver, response in responses:
|
||||||
|
provider = response(event)
|
||||||
|
provider_names[provider.identifier] = provider.verbose_name
|
||||||
|
|
||||||
|
for pprov, total in num_total.items():
|
||||||
|
ppobj = DummyObject()
|
||||||
|
ppobj.name = provider_names.get(pprov, pprov)
|
||||||
|
ppobj.has_variations = False
|
||||||
|
ppobj.num_total = total
|
||||||
|
ppobj.num_cancelled = num_cancelled.get(pprov, (0, 0))
|
||||||
|
ppobj.num_refunded = num_refunded.get(pprov, (0, 0))
|
||||||
|
ppobj.num_pending = num_pending.get(pprov, (0, 0))
|
||||||
|
ppobj.num_paid = num_paid.get(pprov, (0, 0))
|
||||||
|
payment_items.append(ppobj)
|
||||||
|
|
||||||
|
payment_cat_obj.num_total = (Dontsum(''), sum(i.num_total[1] for i in payment_items))
|
||||||
|
payment_cat_obj.num_cancelled = (Dontsum(''), sum(i.num_cancelled[1] for i in payment_items))
|
||||||
|
payment_cat_obj.num_refunded = (Dontsum(''), sum(i.num_refunded[1] for i in payment_items))
|
||||||
|
payment_cat_obj.num_pending = (Dontsum(''), sum(i.num_pending[1] for i in payment_items))
|
||||||
|
payment_cat_obj.num_paid = (Dontsum(''), sum(i.num_paid[1] for i in payment_items))
|
||||||
|
payment_cat = (payment_cat_obj, payment_items)
|
||||||
|
|
||||||
|
items_by_category.append(payment_cat)
|
||||||
|
|
||||||
total = {
|
total = {
|
||||||
'num_total': tuplesum(c.num_total for c, i in items_by_category),
|
'num_total': tuplesum(c.num_total for c, i in items_by_category),
|
||||||
'num_pending': tuplesum(c.num_pending for c, i in items_by_category),
|
'num_pending': tuplesum(c.num_pending for c, i in items_by_category),
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ class OverviewReport(Report):
|
|||||||
])
|
])
|
||||||
for item in tup[1]:
|
for item in tup[1]:
|
||||||
tdata.append([
|
tdata.append([
|
||||||
item.name,
|
" " + str(item.name),
|
||||||
str(item.num_total[0]), str(item.num_total[1]),
|
str(item.num_total[0]), str(item.num_total[1]),
|
||||||
str(item.num_pending[0]), str(item.num_pending[1]),
|
str(item.num_pending[0]), str(item.num_pending[1]),
|
||||||
str(item.num_cancelled[0]), str(item.num_cancelled[1]),
|
str(item.num_cancelled[0]), str(item.num_cancelled[1]),
|
||||||
@@ -177,7 +177,7 @@ class OverviewReport(Report):
|
|||||||
if item.has_variations:
|
if item.has_variations:
|
||||||
for var in item.all_variations:
|
for var in item.all_variations:
|
||||||
tdata.append([
|
tdata.append([
|
||||||
" " + str(var),
|
" " + str(var),
|
||||||
str(var.num_total[0]), str(var.num_total[1]),
|
str(var.num_total[0]), str(var.num_total[1]),
|
||||||
str(var.num_pending[0]), str(var.num_pending[1]),
|
str(var.num_pending[0]), str(var.num_pending[1]),
|
||||||
str(var.num_cancelled[0]), str(var.num_cancelled[1]),
|
str(var.num_cancelled[0]), str(var.num_cancelled[1]),
|
||||||
|
|||||||
Reference in New Issue
Block a user