diff --git a/src/backoffice/templates/ticket_stats.html b/src/backoffice/templates/ticket_stats.html index ecf34f02..ba890026 100644 --- a/src/backoffice/templates/ticket_stats.html +++ b/src/backoffice/templates/ticket_stats.html @@ -16,6 +16,10 @@ Ticket Type Tickets Generated Products + Units Sold + Total Income + Total Cost + Total Profit @@ -24,6 +28,10 @@ {{ tt.name }} {{ tt.shopticket_count }} {{ tt.product_set.count }} + {{ tt.total_units_sold }} + {{ tt.total_income|floatformat:"2" }} DKK + {{ tt.total_cost|floatformat:"2" }} DKK + {{ tt.total_profit|floatformat:"2" }} DKK {% endfor %} diff --git a/src/tickets/models.py b/src/tickets/models.py index 92524c90..14aaf2ee 100644 --- a/src/tickets/models.py +++ b/src/tickets/models.py @@ -6,6 +6,7 @@ import logging import qrcode from django.conf import settings from django.db import models +from django.db.models import Sum, Count, F from django.urls import reverse_lazy from django.utils.translation import ugettext_lazy as _ @@ -17,8 +18,20 @@ logger = logging.getLogger("bornhack.%s" % __name__) class TicketTypeManager(models.Manager): def with_price_stats(self): - return self.annotate(shopticket_count=models.Count("shopticket")).exclude( - shopticket_count=0 + total_units_sold = Sum("shopticket__opr__quantity", distinct=True) + cost = F("shopticket__opr__quantity") * F("shopticket__opr__product__cost") + income = F("shopticket__opr__quantity") * F("shopticket__opr__product__price") + profit = income - cost + total_cost = Sum(cost, distinct=True) + total_profit = Sum(profit, distinct=True) + total_income = Sum(income, distinct=True) + + return ( + self.filter(shopticket__isnull=False) + .annotate(total_units_sold=total_units_sold) + .annotate(total_income=total_income) + .annotate(total_cost=total_cost) + .annotate(total_profit=total_profit) )