選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

reports.py 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. from django.db.models import get_model
  2. from django.utils.translation import ugettext_lazy as _
  3. from oscar.core.loading import get_class
  4. ReportGenerator = get_class('dashboard.reports.reports', 'ReportGenerator')
  5. ReportCSVFormatter = get_class('dashboard.reports.reports',
  6. 'ReportCSVFormatter')
  7. ReportHTMLFormatter = get_class('dashboard.reports.reports',
  8. 'ReportHTMLFormatter')
  9. Basket = get_model('basket', 'Basket')
  10. class OpenBasketReportCSVFormatter(ReportCSVFormatter):
  11. filename_template = 'open-baskets-%s-%s.csv'
  12. def generate_csv(self, response, baskets):
  13. writer = self.get_csv_writer(response)
  14. header_row = [_('User ID'),
  15. _('Name'),
  16. _('Email'),
  17. _('Basket status'),
  18. _('Num lines'),
  19. _('Num items'),
  20. _('Value'),
  21. _('Date of creation'),
  22. _('Time since creation'),
  23. ]
  24. writer.writerow(header_row)
  25. for basket in baskets:
  26. if basket.owner:
  27. row = [basket.owner_id, basket.owner.get_full_name(),
  28. basket.owner.email,
  29. basket.status, basket.num_lines,
  30. basket.num_items, basket.total_incl_tax,
  31. self.format_datetime(basket.date_created),
  32. basket.time_since_creation]
  33. else:
  34. row = [basket.owner_id, None, None, basket.status,
  35. basket.num_lines, basket.num_items,
  36. basket.total_incl_tax,
  37. self.format_datetime(basket.date_created),
  38. basket.time_since_creation]
  39. writer.writerow(row)
  40. def filename(self, **kwargs):
  41. return self.filename_template % (kwargs['start_date'],
  42. kwargs['end_date'])
  43. class OpenBasketReportHTMLFormatter(ReportHTMLFormatter):
  44. filename_template = 'dashboard/reports/partials/open_basket_report.html'
  45. class OpenBasketReportGenerator(ReportGenerator):
  46. """
  47. Report of baskets which haven't been submitted yet
  48. """
  49. code = 'open_baskets'
  50. description = _('Open baskets')
  51. formatters = {
  52. 'CSV_formatter': OpenBasketReportCSVFormatter,
  53. 'HTML_formatter': OpenBasketReportHTMLFormatter}
  54. def generate(self):
  55. additional_data = {
  56. 'start_date': self.start_date,
  57. 'end_date': self.end_date}
  58. baskets = Basket._default_manager.filter(status=Basket.OPEN)
  59. return self.formatter.generate_response(baskets, **additional_data)
  60. class SubmittedBasketReportCSVFormatter(ReportCSVFormatter):
  61. filename_template = 'submitted_baskets-%s-%s.csv'
  62. def generate_csv(self, response, baskets):
  63. writer = self.get_csv_writer(response)
  64. header_row = [_('User ID'),
  65. _('User'),
  66. _('Basket status'),
  67. _('Num lines'),
  68. _('Num items'),
  69. _('Value'),
  70. _('Date created'),
  71. _('Time between creation and submission'),
  72. ]
  73. writer.writerow(header_row)
  74. for basket in baskets:
  75. row = [basket.owner_id,
  76. basket.owner,
  77. basket.status,
  78. basket.num_lines,
  79. basket.num_items,
  80. basket.total_incl_tax,
  81. self.format_datetime(basket.date_created),
  82. basket.time_before_submit]
  83. writer.writerow(row)
  84. def filename(self, **kwargs):
  85. return self.filename_template % (kwargs['start_date'],
  86. kwargs['end_date'])
  87. class SubmittedBasketReportHTMLFormatter(ReportHTMLFormatter):
  88. filename_template = 'dashboard/reports/partials/submitted_basket_report.html'
  89. class SubmittedBasketReportGenerator(ReportGenerator):
  90. """
  91. Report of baskets that have been submitted
  92. """
  93. code = 'submitted_baskets'
  94. description = _('Submitted baskets')
  95. formatters = {
  96. 'CSV_formatter': SubmittedBasketReportCSVFormatter,
  97. 'HTML_formatter': SubmittedBasketReportHTMLFormatter}
  98. def generate(self):
  99. additional_data = {
  100. 'start_date': self.start_date,
  101. 'end_date': self.end_date}
  102. baskets = Basket._default_manager.filter(status=Basket.SUBMITTED)
  103. return self.formatter.generate_response(baskets, **additional_data)