| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- import csv
-
- from django.db.models import get_model
- from django.utils.translation import gettext_lazy as _
- from oscar.core.loading import get_class
-
- ReportGenerator = get_class('dashboard.reports.reports', 'ReportGenerator')
- ReportCSVFormatter = get_class('dashboard.reports.reports',
- 'ReportCSVFormatter')
- ReportHTMLFormatter = get_class('dashboard.reports.reports',
- 'ReportHTMLFormatter')
- Basket = get_model('basket', 'Basket')
-
-
- class OpenBasketReportCSVFormatter(ReportCSVFormatter):
- filename_template = 'open-baskets-%s-%s.csv'
-
- def generate_csv(self, response, baskets):
- writer = csv.writer(response)
- header_row = [_('User ID'),
- _('Name'),
- _('Email'),
- _('Basket status'),
- _('Num lines'),
- _('Num items'),
- _('Value'),
- _('Date of creation'),
- _('Time since creation'),
- ]
- writer.writerow(header_row)
-
- for basket in baskets:
- if basket.owner:
- row = [basket.owner_id, basket.owner.get_full_name(),
- basket.owner.email,
- basket.status, basket.num_lines,
- basket.num_items, basket.total_incl_tax,
- self.format_datetime(basket.date_created),
- basket.time_since_creation]
- else:
- row = [basket.owner_id, None, None, basket.status,
- basket.num_lines, basket.num_items,
- basket.total_incl_tax,
- self.format_datetime(basket.date_created),
- basket.time_since_creation]
- writer.writerow(row)
-
- def filename(self, **kwargs):
- return self.filename_template % (kwargs['start_date'],
- kwargs['end_date'])
-
-
- class OpenBasketReportHTMLFormatter(ReportHTMLFormatter):
- filename_template = 'dashboard/reports/partials/open_basket_report.html'
-
-
- class OpenBasketReportGenerator(ReportGenerator):
- """
- Report of baskets which haven't been submitted yet
- """
- code = 'open_baskets'
- description = _('Open baskets')
-
- formatters = {
- 'CSV_formatter': OpenBasketReportCSVFormatter,
- 'HTML_formatter': OpenBasketReportHTMLFormatter}
-
- def generate(self):
- additional_data = {
- 'start_date': self.start_date,
- 'end_date': self.end_date}
- baskets = Basket._default_manager.filter(status=Basket.OPEN)
- return self.formatter.generate_response(baskets, **additional_data)
-
-
- class SubmittedBasketReportCSVFormatter(ReportCSVFormatter):
- filename_template = 'submitted_baskets-%s-%s.csv'
-
- def generate_csv(self, response, baskets):
- writer = csv.writer(response)
- header_row = [_('User ID'),
- _('User'),
- _('Basket status'),
- _('Num lines'),
- _('Num items'),
- _('Value'),
- _('Date created'),
- _('Time between creation and submission'),
- ]
- writer.writerow(header_row)
-
- for basket in baskets:
- row = [basket.owner_id,
- basket.owner,
- basket.status,
- basket.num_lines,
- basket.num_items,
- basket.total_incl_tax,
- self.format_datetime(basket.date_created),
- basket.time_before_submit]
- writer.writerow(row)
-
- def filename(self, **kwargs):
- return self.filename_template % (kwargs['start_date'],
- kwargs['end_date'])
-
-
- class SubmittedBasketReportHTMLFormatter(ReportHTMLFormatter):
- filename_template = 'dashboard/reports/partials/submitted_basket_report.html'
-
-
- class SubmittedBasketReportGenerator(ReportGenerator):
- """
- Report of baskets that have been submitted
- """
- code = 'submitted_baskets'
- description = _('Submitted baskets')
-
- formatters = {
- 'CSV_formatter': SubmittedBasketReportCSVFormatter,
- 'HTML_formatter': SubmittedBasketReportHTMLFormatter}
-
- def generate(self):
- additional_data = {
- 'start_date': self.start_date,
- 'end_date': self.end_date}
- baskets = Basket._default_manager.filter(status=Basket.SUBMITTED)
- return self.formatter.generate_response(baskets, **additional_data)
|