Source code for shuup.default_reports.reports.sales

import itertools

from babel.dates import format_date
from django.utils.timezone import localtime
from django.utils.translation import gettext_lazy as _

from shuup.core.pricing import TaxfulPrice, TaxlessPrice
from shuup.default_reports.forms import OrderReportForm
from shuup.default_reports.mixins import OrderReportMixin
from shuup.reports.report import ShuupReportBase
from shuup.utils.i18n import get_current_babel_locale


[docs] class SalesReport(OrderReportMixin, ShuupReportBase): identifier = "sales_report" title = _("Sales Report") form_class = OrderReportForm filename_template = "sales-report-%(time)s" schema = [ {"key": "date", "title": _("Date")}, {"key": "order_count", "title": _("Orders")}, {"key": "product_count", "title": _("Products")}, {"key": "taxless_total", "title": _("Taxless Total")}, {"key": "taxful_total", "title": _("Taxful Total")}, ]
[docs] def extract_date(self, entity): return localtime(entity.order_date).date()
[docs] def get_data(self): orders = self.get_objects().order_by("-order_date")[: self.queryset_row_limit] data = [] # TODO: maybe make raw sql query in future for order_date, orders_group in itertools.groupby(orders, key=self.extract_date): taxless_total = TaxlessPrice(0, currency=self.shop.currency) taxful_total = TaxfulPrice(0, currency=self.shop.currency) product_count = 0 order_count = 0 for order in orders_group: taxless_total += order.taxless_total_price taxful_total += order.taxful_total_price product_count += sum(order.get_product_ids_and_quantities().values()) order_count += 1 data.append( { "date": format_date(order_date, locale=get_current_babel_locale()), "order_count": order_count, "product_count": int(product_count), "taxless_total": taxless_total, "taxful_total": taxful_total, } ) return self.get_return_data(data)