mirror of
https://github.com/pretix/pretix.git
synced 2026-05-06 15:24:02 +00:00
Statistics: Added a graph for revenue over time
This commit is contained in:
@@ -13,6 +13,14 @@
|
||||
<div id="obd_chart" style="height: 250px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">{% trans "Revenue over time" %}</h3>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div id="rev_chart" style="height: 250px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h3 class="panel-title">{% trans "Orders by product" %}</h3>
|
||||
@@ -32,6 +40,17 @@
|
||||
smooth: false,
|
||||
resize: true
|
||||
});
|
||||
new Morris.Area({
|
||||
element: 'rev_chart',
|
||||
data: {{ rev_data|safe }},
|
||||
xkey: 'date',
|
||||
ykeys: ['revenue'],
|
||||
labels: ['{% trans "Total revenue" %}'],
|
||||
smooth: false,
|
||||
resize: true,
|
||||
fillOpacity: 0.5,
|
||||
postUnits: ' {{ request.event.currency }}'
|
||||
});
|
||||
new Morris.Bar({
|
||||
element: 'obp_chart',
|
||||
data: {{ obp_data|safe }},
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import datetime
|
||||
import json
|
||||
from decimal import Decimal
|
||||
|
||||
import dateutil.parser
|
||||
import dateutil.rrule
|
||||
from django.db.models import Count
|
||||
from django.db.models import Count, Sum
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from pretix.base.models import Item, Order, OrderPosition
|
||||
@@ -77,4 +78,24 @@ class IndexView(EventPermissionRequiredMixin, TemplateView):
|
||||
} for item, cnt in num_ordered.items()
|
||||
]
|
||||
|
||||
rev_by_day = {
|
||||
o['payment_date'].date(): o['sum']
|
||||
for o in
|
||||
Order.objects.current.filter(event=self.request.event, payment_date__isnull=False).values(
|
||||
'payment_date').annotate(sum=Sum('total'))
|
||||
}
|
||||
data = []
|
||||
total = 0
|
||||
for d in dateutil.rrule.rrule(
|
||||
dateutil.rrule.DAILY,
|
||||
dtstart=min(ordered_by_day.keys()),
|
||||
until=max(max(ordered_by_day.keys()), max(paid_by_day.keys()))):
|
||||
d = d.date()
|
||||
total += float(rev_by_day.get(d, 0))
|
||||
data.append({
|
||||
'date': d.strftime('%Y-%m-%d'),
|
||||
'revenue': round(total, 2),
|
||||
})
|
||||
ctx['rev_data'] = json.dumps(data)
|
||||
|
||||
return ctx
|
||||
|
||||
Reference in New Issue
Block a user