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 oscar.core.loading import import_module
  3. import_module('reports.reports', ['ReportGenerator'], locals())
  4. import_module('offer.models', ['Voucher', 'ConditionalOffer'], locals())
  5. class VoucherReportGenerator(ReportGenerator):
  6. filename_template = 'voucher-performance.csv'
  7. code = 'vouchers'
  8. description = 'Voucher performance'
  9. def generate(self, response):
  10. writer = csv.writer(response)
  11. header_row = ['Voucher code',
  12. 'Added to a basket',
  13. 'Used in an order',
  14. 'Total discount',
  15. ]
  16. writer.writerow(header_row)
  17. vouchers = Voucher._default_manager.all()
  18. for voucher in vouchers:
  19. row = [voucher.code, voucher.num_basket_additions, voucher.num_orders, voucher.total_discount]
  20. writer.writerow(row)
  21. def filename(self):
  22. return self.filename_template
  23. class OfferReportGenerator(ReportGenerator):
  24. filename_template = 'conditional-offer-performance.csv'
  25. code = 'conditional-offers'
  26. description = 'Offer performance'
  27. def generate(self, response):
  28. writer = csv.writer(response)
  29. header_row = ['Offer',
  30. 'Total discount',
  31. ]
  32. writer.writerow(header_row)
  33. for offer in ConditionalOffer._default_manager.all():
  34. row = [offer, offer.total_discount]
  35. writer.writerow(row)
  36. def filename(self):
  37. return self.filename_template