Statistics: Added a graph for revenue over time

This commit is contained in:
Raphael Michel
2015-08-15 12:54:30 +02:00
parent 0db9fe5199
commit 808445371d
2 changed files with 41 additions and 1 deletions

View File

@@ -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 }},

View File

@@ -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