forked from CGM_Public/pretix_original
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 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 }},
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user