Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

reports.py 4.5KB

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