Statistics: Removed extra() clause because it caused several problems

This commit is contained in:
Raphael Michel
2015-08-15 14:11:53 +02:00
parent a811a44b2a
commit 8cbaa15bf6
2 changed files with 29 additions and 44 deletions

View File

@@ -30,7 +30,7 @@
</div> </div>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
new Morris.Line({ new Morris.Area({
element: 'obd_chart', element: 'obd_chart',
data: {{ obd_data|safe }}, data: {{ obd_data|safe }},
xkey: 'date', xkey: 'date',
@@ -38,7 +38,9 @@
labels: ['{% trans "Placed orders" %}', '{% trans "Paid orders" %}'], labels: ['{% trans "Placed orders" %}', '{% trans "Paid orders" %}'],
lineColors: ['#000099', '#009900'], lineColors: ['#000099', '#009900'],
smooth: false, smooth: false,
resize: true resize: true,
fillOpacity: 0.3,
behaveLikeLine: true
}); });
new Morris.Area({ new Morris.Area({
element: 'rev_chart', element: 'rev_chart',
@@ -48,7 +50,7 @@
labels: ['{% trans "Total revenue" %}'], labels: ['{% trans "Total revenue" %}'],
smooth: false, smooth: false,
resize: true, resize: true,
fillOpacity: 0.5, fillOpacity: 0.3,
preUnits: '{{ request.event.currency }} ' preUnits: '{{ request.event.currency }} '
}); });
new Morris.Bar({ new Morris.Bar({

View File

@@ -19,35 +19,24 @@ class IndexView(EventPermissionRequiredMixin, TemplateView):
ctx = super().get_context_data(**kwargs) ctx = super().get_context_data(**kwargs)
# Orders by day # Orders by day
ordered_by_day = { ordered_by_day = {}
# we receive different types depending on whether we are running on for o in Order.objects.current.filter(event=self.request.event).values('datetime'):
# MySQL or SQLite day = o['datetime'].date()
( ordered_by_day[day] = ordered_by_day.get(day, 0) + 1
o['datetime'] paid_by_day = {}
if isinstance(o['datetime'], datetime.date) for o in Order.objects.current.filter(event=self.request.event,
else dateutil.parser.parse(o['datetime']).date() payment_date__isnull=False).values('payment_date'):
): o['count'] day = o['payment_date'].date()
for o in paid_by_day[day] = paid_by_day.get(day, 0) + 1
Order.objects.current.filter(event=self.request.event).extra({'datetime': "date(datetime)"}).values(
'datetime').annotate(count=Count('id'))
}
paid_by_day = {
(
o['payment_date']
if isinstance(o['payment_date'], datetime.date)
else dateutil.parser.parse(o['payment_date']).date()
): o['count']
for o in
Order.objects.current.filter(event=self.request.event,
payment_date__isnull=False).extra(
{'payment_date': 'date(payment_date)'}
).values('payment_date').annotate(count=Count('id'))
}
data = [] data = []
for d in dateutil.rrule.rrule( for d in dateutil.rrule.rrule(
dateutil.rrule.DAILY, dateutil.rrule.DAILY,
dtstart=min(ordered_by_day.keys()), dtstart=min(ordered_by_day.keys() if ordered_by_day else datetime.date.today()),
until=max(max(ordered_by_day.keys()), max(paid_by_day.keys()))): until=max(
max(ordered_by_day.keys() if paid_by_day else [datetime.date.today()]),
max(paid_by_day.keys() if paid_by_day else [datetime.date(1970, 1, 1)])
)):
d = d.date() d = d.date()
data.append({ data.append({
'date': d.strftime('%Y-%m-%d'), 'date': d.strftime('%Y-%m-%d'),
@@ -84,25 +73,19 @@ class IndexView(EventPermissionRequiredMixin, TemplateView):
} for item, cnt in num_ordered.items() } for item, cnt in num_ordered.items()
] ]
rev_by_day = { rev_by_day = {}
( for o in Order.objects.current.filter(event=self.request.event,
o['payment_date'] status=Order.STATUS_PAID,
if isinstance(o['payment_date'], datetime.date) payment_date__isnull=False).values('payment_date', 'total'):
else dateutil.parser.parse(o['payment_date']).date() day = o['payment_date'].date()
): o['sum'] rev_by_day[day] = rev_by_day.get(day, 0) + o['total']
for o in
Order.objects.current.filter(event=self.request.event,
status=Order.STATUS_PAID,
payment_date__isnull=False).extra(
{'payment_date': 'date(payment_date)'}
).values('payment_date').annotate(sum=Sum('total'))
}
data = [] data = []
total = 0 total = 0
for d in dateutil.rrule.rrule( for d in dateutil.rrule.rrule(
dateutil.rrule.DAILY, dateutil.rrule.DAILY,
dtstart=min(rev_by_day.keys()), dtstart=min(rev_by_day.keys() if rev_by_day else [datetime.date.today()]),
until=max(rev_by_day.keys())): until=max(rev_by_day.keys() if rev_by_day else [datetime.date.today()])):
d = d.date() d = d.date()
total += float(rev_by_day.get(d, 0)) total += float(rev_by_day.get(d, 0))
data.append({ data.append({