mirror of
https://github.com/pretix/pretix.git
synced 2026-05-08 15:44:02 +00:00
committed by
Raphael Michel
parent
5999604e8e
commit
2f0c7c0ebc
@@ -79,26 +79,26 @@ def order_overview(event: Event) -> Tuple[List[Tuple[ItemCategory, List[Item]]],
|
|||||||
order__event=event
|
order__event=event
|
||||||
).values(
|
).values(
|
||||||
'item', 'variation', 'order__status'
|
'item', 'variation', 'order__status'
|
||||||
).annotate(cnt=Count('id'), price=Sum('price')).order_by()
|
).annotate(cnt=Count('id'), price=Sum('price'), tax_value=Sum('tax_value')).order_by()
|
||||||
|
|
||||||
num_canceled = {
|
num_canceled = {
|
||||||
(p['item'], p['variation']): (p['cnt'], p['price'])
|
(p['item'], p['variation']): (p['cnt'], p['price'], p['price'] - p['tax_value'])
|
||||||
for p in counters if p['order__status'] == Order.STATUS_CANCELED
|
for p in counters if p['order__status'] == Order.STATUS_CANCELED
|
||||||
}
|
}
|
||||||
num_refunded = {
|
num_refunded = {
|
||||||
(p['item'], p['variation']): (p['cnt'], p['price'])
|
(p['item'], p['variation']): (p['cnt'], p['price'], p['price'] - p['tax_value'])
|
||||||
for p in counters if p['order__status'] == Order.STATUS_REFUNDED
|
for p in counters if p['order__status'] == Order.STATUS_REFUNDED
|
||||||
}
|
}
|
||||||
num_paid = {
|
num_paid = {
|
||||||
(p['item'], p['variation']): (p['cnt'], p['price'])
|
(p['item'], p['variation']): (p['cnt'], p['price'], p['price'] - p['tax_value'])
|
||||||
for p in counters if p['order__status'] == Order.STATUS_PAID
|
for p in counters if p['order__status'] == Order.STATUS_PAID
|
||||||
}
|
}
|
||||||
num_s_pending = {
|
num_s_pending = {
|
||||||
(p['item'], p['variation']): (p['cnt'], p['price'])
|
(p['item'], p['variation']): (p['cnt'], p['price'], p['price'] - p['tax_value'])
|
||||||
for p in counters if p['order__status'] == Order.STATUS_PENDING
|
for p in counters if p['order__status'] == Order.STATUS_PENDING
|
||||||
}
|
}
|
||||||
num_expired = {
|
num_expired = {
|
||||||
(p['item'], p['variation']): (p['cnt'], p['price'])
|
(p['item'], p['variation']): (p['cnt'], p['price'], p['price'] - p['tax_value'])
|
||||||
for p in counters if p['order__status'] == Order.STATUS_EXPIRED
|
for p in counters if p['order__status'] == Order.STATUS_EXPIRED
|
||||||
}
|
}
|
||||||
num_pending = dictsum(num_s_pending, num_expired)
|
num_pending = dictsum(num_s_pending, num_expired)
|
||||||
@@ -110,22 +110,22 @@ def order_overview(event: Event) -> Tuple[List[Tuple[ItemCategory, List[Item]]],
|
|||||||
if item.has_variations:
|
if item.has_variations:
|
||||||
for var in item.all_variations:
|
for var in item.all_variations:
|
||||||
variid = var.id
|
variid = var.id
|
||||||
var.num_total = num_total.get((item.id, variid), (0, 0))
|
var.num_total = num_total.get((item.id, variid), (0, 0, 0))
|
||||||
var.num_pending = num_pending.get((item.id, variid), (0, 0))
|
var.num_pending = num_pending.get((item.id, variid), (0, 0, 0))
|
||||||
var.num_canceled = num_canceled.get((item.id, variid), (0, 0))
|
var.num_canceled = num_canceled.get((item.id, variid), (0, 0, 0))
|
||||||
var.num_refunded = num_refunded.get((item.id, variid), (0, 0))
|
var.num_refunded = num_refunded.get((item.id, variid), (0, 0, 0))
|
||||||
var.num_paid = num_paid.get((item.id, variid), (0, 0))
|
var.num_paid = num_paid.get((item.id, variid), (0, 0, 0))
|
||||||
item.num_total = tuplesum(var.num_total 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_pending = tuplesum(var.num_pending for var in item.all_variations)
|
||||||
item.num_canceled = tuplesum(var.num_canceled for var in item.all_variations)
|
item.num_canceled = tuplesum(var.num_canceled for var in item.all_variations)
|
||||||
item.num_refunded = tuplesum(var.num_refunded 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)
|
item.num_paid = tuplesum(var.num_paid for var in item.all_variations)
|
||||||
else:
|
else:
|
||||||
item.num_total = num_total.get((item.id, None), (0, 0))
|
item.num_total = num_total.get((item.id, None), (0, 0, 0))
|
||||||
item.num_pending = num_pending.get((item.id, None), (0, 0))
|
item.num_pending = num_pending.get((item.id, None), (0, 0, 0))
|
||||||
item.num_canceled = num_canceled.get((item.id, None), (0, 0))
|
item.num_canceled = num_canceled.get((item.id, None), (0, 0, 0))
|
||||||
item.num_refunded = num_refunded.get((item.id, None), (0, 0))
|
item.num_refunded = num_refunded.get((item.id, None), (0, 0, 0))
|
||||||
item.num_paid = num_paid.get((item.id, None), (0, 0))
|
item.num_paid = num_paid.get((item.id, None), (0, 0, 0))
|
||||||
|
|
||||||
nonecat = ItemCategory(name=_('Uncategorized'))
|
nonecat = ItemCategory(name=_('Uncategorized'))
|
||||||
# Regroup those by category
|
# Regroup those by category
|
||||||
@@ -154,27 +154,27 @@ def order_overview(event: Event) -> Tuple[List[Tuple[ItemCategory, List[Item]]],
|
|||||||
payment_items = []
|
payment_items = []
|
||||||
|
|
||||||
counters = event.orders.values('payment_provider', 'status').annotate(
|
counters = event.orders.values('payment_provider', 'status').annotate(
|
||||||
cnt=Count('id'), payment_fee=Sum('payment_fee')
|
cnt=Count('id'), payment_fee=Sum('payment_fee'), tax_value=Sum('payment_fee_tax_value')
|
||||||
).order_by()
|
).order_by()
|
||||||
|
|
||||||
num_canceled = {
|
num_canceled = {
|
||||||
o['payment_provider']: (o['cnt'], o['payment_fee'])
|
o['payment_provider']: (o['cnt'], o['payment_fee'], o['payment_fee'] - o['tax_value'])
|
||||||
for o in counters if o['status'] == Order.STATUS_CANCELED
|
for o in counters if o['status'] == Order.STATUS_CANCELED
|
||||||
}
|
}
|
||||||
num_refunded = {
|
num_refunded = {
|
||||||
o['payment_provider']: (o['cnt'], o['payment_fee'])
|
o['payment_provider']: (o['cnt'], o['payment_fee'], o['payment_fee'] - o['tax_value'])
|
||||||
for o in counters if o['status'] == Order.STATUS_REFUNDED
|
for o in counters if o['status'] == Order.STATUS_REFUNDED
|
||||||
}
|
}
|
||||||
num_s_pending = {
|
num_s_pending = {
|
||||||
o['payment_provider']: (o['cnt'], o['payment_fee'])
|
o['payment_provider']: (o['cnt'], o['payment_fee'], o['payment_fee'] - o['tax_value'])
|
||||||
for o in counters if o['status'] == Order.STATUS_PENDING
|
for o in counters if o['status'] == Order.STATUS_PENDING
|
||||||
}
|
}
|
||||||
num_expired = {
|
num_expired = {
|
||||||
o['payment_provider']: (o['cnt'], o['payment_fee'])
|
o['payment_provider']: (o['cnt'], o['payment_fee'], o['payment_fee'] - o['tax_value'])
|
||||||
for o in counters if o['status'] == Order.STATUS_EXPIRED
|
for o in counters if o['status'] == Order.STATUS_EXPIRED
|
||||||
}
|
}
|
||||||
num_paid = {
|
num_paid = {
|
||||||
o['payment_provider']: (o['cnt'], o['payment_fee'])
|
o['payment_provider']: (o['cnt'], o['payment_fee'], o['payment_fee'] - o['tax_value'])
|
||||||
for o in counters if o['status'] == Order.STATUS_PAID
|
for o in counters if o['status'] == Order.STATUS_PAID
|
||||||
}
|
}
|
||||||
num_pending = dictsum(num_s_pending, num_expired)
|
num_pending = dictsum(num_s_pending, num_expired)
|
||||||
@@ -192,17 +192,27 @@ def order_overview(event: Event) -> Tuple[List[Tuple[ItemCategory, List[Item]]],
|
|||||||
ppobj.provider = pprov
|
ppobj.provider = pprov
|
||||||
ppobj.has_variations = False
|
ppobj.has_variations = False
|
||||||
ppobj.num_total = total
|
ppobj.num_total = total
|
||||||
ppobj.num_canceled = num_canceled.get(pprov, (0, 0))
|
ppobj.num_canceled = num_canceled.get(pprov, (0, 0, 0))
|
||||||
ppobj.num_refunded = num_refunded.get(pprov, (0, 0))
|
ppobj.num_refunded = num_refunded.get(pprov, (0, 0, 0))
|
||||||
ppobj.num_pending = num_pending.get(pprov, (0, 0))
|
ppobj.num_pending = num_pending.get(pprov, (0, 0, 0))
|
||||||
ppobj.num_paid = num_paid.get(pprov, (0, 0))
|
ppobj.num_paid = num_paid.get(pprov, (0, 0, 0))
|
||||||
payment_items.append(ppobj)
|
payment_items.append(ppobj)
|
||||||
|
|
||||||
payment_cat_obj.num_total = (Dontsum(''), sum(i.num_total[1] for i in payment_items))
|
payment_cat_obj.num_total = (
|
||||||
payment_cat_obj.num_canceled = (Dontsum(''), sum(i.num_canceled[1] for i in payment_items))
|
Dontsum(''), sum(i.num_total[1] for i in payment_items), sum(i.num_total[2] 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_canceled = (
|
||||||
payment_cat_obj.num_paid = (Dontsum(''), sum(i.num_paid[1] for i in payment_items))
|
Dontsum(''), sum(i.num_canceled[1] for i in payment_items), sum(i.num_canceled[2] for i in payment_items)
|
||||||
|
)
|
||||||
|
payment_cat_obj.num_refunded = (
|
||||||
|
Dontsum(''), sum(i.num_refunded[1] for i in payment_items), sum(i.num_refunded[2] for i in payment_items)
|
||||||
|
)
|
||||||
|
payment_cat_obj.num_pending = (
|
||||||
|
Dontsum(''), sum(i.num_pending[1] for i in payment_items), sum(i.num_pending[2] for i in payment_items)
|
||||||
|
)
|
||||||
|
payment_cat_obj.num_paid = (
|
||||||
|
Dontsum(''), sum(i.num_paid[1] for i in payment_items), sum(i.num_paid[2] for i in payment_items)
|
||||||
|
)
|
||||||
payment_cat = (payment_cat_obj, payment_items)
|
payment_cat = (payment_cat_obj, payment_items)
|
||||||
|
|
||||||
items_by_category.append(payment_cat)
|
items_by_category.append(payment_cat)
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
{% extends "pretixcontrol/event/base.html" %}
|
{% extends "pretixcontrol/event/base.html" %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% load order_overview %}
|
{% load order_overview %}
|
||||||
{% block title %}{% trans "Order overview" %}{% endblock %}
|
{% block title %}{% trans "Sales overview" %}{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% url "control:event.orders" organizer=request.event.organizer.slug event=request.event.slug as listurl %}
|
{% url "control:event.orders" organizer=request.event.organizer.slug event=request.event.slug as listurl %}
|
||||||
<div class="pull-right">
|
<div class="pull-right">
|
||||||
<div class="btn-group" role="group" id="sumtoggle">
|
<div class="btn-group" role="group" id="sumtoggle">
|
||||||
<button type="button" data-target=".count" class="btn btn-default active">{% trans "Show number" %}</button>
|
<button type="button" data-target=".count" class="btn btn-default active">{% trans "Sales" %}</button>
|
||||||
<button type="button" data-target=".sum" class="btn btn-default">
|
<button type="button" data-target=".sum-gross" class="btn btn-default">{% trans "Revenue (gross)" %}</button>
|
||||||
{% blocktrans with currency=request.event.currency %}Show {{ currency }}{% endblocktrans %}</button>
|
<button type="button" data-target=".sum-net" class="btn btn-default">{% trans "Revenue (net)" %}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<h1>{% trans "Order overview" %}</h1>
|
<h1>{% trans "Order overview" %}</h1>
|
||||||
|
|||||||
@@ -17,6 +17,6 @@ def cut(value, autoescape=True):
|
|||||||
esc = conditional_escape
|
esc = conditional_escape
|
||||||
else:
|
else:
|
||||||
esc = noop
|
esc = noop
|
||||||
return mark_safe('<span class="count">{0}</span><span class="sum">{1}</span>'.format(
|
return mark_safe('<span class="count">{0}</span><span class="sum-gross">{1}</span><span class="sum-net">{2}</span>'.format(
|
||||||
esc(value[0]), esc(formats.localize(value[1]))
|
esc(value[0]), esc(formats.localize(value[1])), esc(formats.localize(value[2]))
|
||||||
))
|
))
|
||||||
|
|||||||
@@ -74,10 +74,12 @@ $(function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$("#sumtoggle").find("button").click(function () {
|
$("#sumtoggle").find("button").click(function () {
|
||||||
$(".table-product-overview .sum").toggle($(this).attr("data-target") === ".sum");
|
$(".table-product-overview .sum-gross").toggle($(this).attr("data-target") === ".sum-gross");
|
||||||
|
$(".table-product-overview .sum-net").toggle($(this).attr("data-target") === ".sum-net");
|
||||||
|
$(".table-product-overview .count").toggle($(this).attr("data-target") === ".count");
|
||||||
|
|
||||||
$("#sumtoggle").find("button").not($(this)).removeClass("active");
|
$("#sumtoggle").find("button").not($(this)).removeClass("active");
|
||||||
$(this).addClass("active");
|
$(this).addClass("active");
|
||||||
$(".table-product-overview .count").toggle($(this).attr("data-target") === ".count");
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$('.collapsible').collapse();
|
$('.collapsible').collapse();
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
th:not(:first-child) {
|
th:not(:first-child) {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
span.sum {
|
span.sum-net, span.sum-gross {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user