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