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 2.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import csv
  2. from oscar.apps.reports.reports import ReportGenerator
  3. from oscar.core.loading import import_module
  4. import_module('reports.reports', ['ReportGenerator'], locals())
  5. import_module('basket.models', ['Basket', 'OPEN', 'SUBMITTED'], locals())
  6. class OpenBasketReportGenerator(ReportGenerator):
  7. filename_template = 'open-baskets-%s-%s.csv'
  8. code = 'open_baskets'
  9. description = 'Open baskets'
  10. def generate(self, response):
  11. writer = csv.writer(response)
  12. header_row = ['User ID',
  13. 'Username',
  14. 'Name',
  15. 'Email',
  16. 'Basket status',
  17. 'Num lines',
  18. 'Num items',
  19. 'Value',
  20. 'Date of creation',
  21. 'Time since creation',
  22. ]
  23. writer.writerow(header_row)
  24. baskets = Basket._default_manager.filter(status=basket_models.OPEN)
  25. for basket in baskets:
  26. if basket.owner:
  27. row = [basket.owner_id, basket.owner.username, basket.owner.get_full_name(). basket.owner.email,
  28. basket.status, basket.num_lines,
  29. basket.num_items, basket.total_incl_tax,
  30. basket.date_created, basket.time_since_creation]
  31. else:
  32. row = [basket.owner_id, None, None, None, basket.status, basket.num_lines,
  33. basket.num_items, basket.total_incl_tax,
  34. basket.date_created, basket.time_since_creation]
  35. writer.writerow(row)
  36. class SubmittedBasketReportGenerator(ReportGenerator):
  37. filename_template = 'submitted_baskets-%s-%s.csv'
  38. code = 'submitted_baskets'
  39. description = 'Submitted baskets'
  40. def generate(self, response):
  41. writer = csv.writer(response)
  42. header_row = ['User ID',
  43. 'User',
  44. 'Basket status',
  45. 'Num lines',
  46. 'Num items',
  47. 'Value',
  48. 'Time between creation and submission',
  49. ]
  50. writer.writerow(header_row)
  51. baskets = Basket._default_manager.filter(status=basket_models.SUBMITTED)
  52. for basket in baskets:
  53. row = [basket.owner_id, basket.owner, basket.status, basket.num_lines,
  54. basket.num_items, basket.total_incl_tax,
  55. basket.date_created, basket.time_before_submit]
  56. writer.writerow(row)