You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

reports.py 1.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import csv
  2. from django.db.models import get_model
  3. from django.utils.translation import ugettext_lazy as _
  4. from oscar.core.loading import get_class
  5. ReportGenerator = get_class('dashboard.reports.reports', 'ReportGenerator')
  6. ReportCSVFormatter = get_class(
  7. 'dashboard.reports.reports', 'ReportCSVFormatter')
  8. ReportHTMLFormatter = get_class(
  9. 'dashboard.reports.reports', 'ReportHTMLFormatter')
  10. Voucher = get_model('voucher', 'Voucher')
  11. class VoucherReportCSVFormatter(ReportCSVFormatter):
  12. filename_template = 'voucher-performance.csv'
  13. def generate_csv(self, response, vouchers):
  14. writer = csv.writer(response)
  15. header_row = [_('Voucher code'),
  16. _('Added to a basket'),
  17. _('Used in an order'),
  18. _('Total discount')]
  19. writer.writerow(header_row)
  20. for voucher in vouchers:
  21. row = [voucher.code,
  22. voucher.num_basket_additions,
  23. voucher.num_orders,
  24. voucher.total_discount]
  25. writer.writerow(row)
  26. class VoucherReportHTMLFormatter(ReportHTMLFormatter):
  27. filename_template = 'dashboard/reports/partials/voucher_report.html'
  28. class VoucherReportGenerator(ReportGenerator):
  29. code = 'vouchers'
  30. description = _('Voucher performance')
  31. formatters = {
  32. 'CSV_formatter': VoucherReportCSVFormatter,
  33. 'HTML_formatter': VoucherReportHTMLFormatter}
  34. def generate(self):
  35. vouchers = Voucher._default_manager.all()
  36. return self.formatter.generate_response(vouchers)