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 id="obd_chart" style="height: 250px;"></div>
</div> </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 panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title">{% trans "Orders by product" %}</h3> <h3 class="panel-title">{% trans "Orders by product" %}</h3>
@@ -32,6 +40,17 @@
smooth: false, smooth: false,
resize: true 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({ new Morris.Bar({
element: 'obp_chart', element: 'obp_chart',
data: {{ obp_data|safe }}, data: {{ obp_data|safe }},

View File

@@ -1,9 +1,10 @@
import datetime import datetime
import json import json
from decimal import Decimal
import dateutil.parser import dateutil.parser
import dateutil.rrule import dateutil.rrule
from django.db.models import Count from django.db.models import Count, Sum
from django.views.generic import TemplateView from django.views.generic import TemplateView
from pretix.base.models import Item, Order, OrderPosition from pretix.base.models import Item, Order, OrderPosition
@@ -77,4 +78,24 @@ class IndexView(EventPermissionRequiredMixin, TemplateView):
} for item, cnt in num_ordered.items() } 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 return ctx