Source code for shuup.default_reports.reports.new_customers

from operator import itemgetter

from django.utils.translation import gettext_lazy as _

from shuup.core.models import Contact
from shuup.default_reports.forms import NewCustomersReportForm
from shuup.reports.report import ShuupReportBase


[docs] class NewCustomersReport(ShuupReportBase): identifier = "new_customers_report" title = _("New Customers") form_class = NewCustomersReportForm filename_template = "new-customers-report-%(time)s" schema = [ {"key": "date", "title": _("Date")}, {"key": "personcontact", "title": _("Persons")}, {"key": "companycontact", "title": _("Companies")}, {"key": "users", "title": _("Users")}, ]
[docs] def get_data(self): contacts = ( Contact.objects.filter(created_on__range=(self.start_date, self.end_date)) .select_related("polymorphic_ctype") .order_by("created_on")[: self.queryset_row_limit] ) data = {} users = set() for contact in contacts: created_on = contact.created_on.strftime(self.options["group_by"]) model = contact.polymorphic_ctype.model user = getattr(contact, "user_id", 0) if created_on not in data: data[created_on] = { "date": created_on, "users": 0, "personcontact": 0, "companycontact": 0, } data[created_on][model] += 1 if user and user not in users: data[created_on]["users"] += 1 data = sorted(data.values(), key=itemgetter("date")) return self.get_return_data(data)