From 808445371dfcef26dd939761c4384399363b4a9f Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Sat, 15 Aug 2015 12:54:30 +0200 Subject: [PATCH] Statistics: Added a graph for revenue over time --- .../pretixplugins/statistics/index.html | 19 +++++++++++++++ src/pretix/plugins/statistics/views.py | 23 ++++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/pretix/plugins/statistics/templates/pretixplugins/statistics/index.html b/src/pretix/plugins/statistics/templates/pretixplugins/statistics/index.html index 0d2c4cf4f4..b5f9f038a1 100644 --- a/src/pretix/plugins/statistics/templates/pretixplugins/statistics/index.html +++ b/src/pretix/plugins/statistics/templates/pretixplugins/statistics/index.html @@ -13,6 +13,14 @@
+
+
+

{% trans "Revenue over time" %}

+
+
+
+
+

{% trans "Orders by product" %}

@@ -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 }}, diff --git a/src/pretix/plugins/statistics/views.py b/src/pretix/plugins/statistics/views.py index 19e3e279f5..1f00fe387c 100644 --- a/src/pretix/plugins/statistics/views.py +++ b/src/pretix/plugins/statistics/views.py @@ -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