Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

reports.py 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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. _('Date of creation'),
  21. _('Time since creation'),
  22. ]
  23. writer.writerow(header_row)
  24. for basket in baskets:
  25. if basket.owner:
  26. row = [basket.owner_id, basket.owner.get_full_name(),
  27. basket.owner.email,
  28. basket.status, basket.num_lines,
  29. self.format_datetime(basket.date_created),
  30. basket.time_since_creation]
  31. else:
  32. row = [basket.owner_id, None, None, basket.status,
  33. basket.num_lines, basket.num_items,
  34. self.format_datetime(basket.date_created),
  35. basket.time_since_creation]
  36. writer.writerow(row)
  37. def filename(self, **kwargs):
  38. return self.filename_template % (kwargs['start_date'],
  39. kwargs['end_date'])
  40. class OpenBasketReportHTMLFormatter(ReportHTMLFormatter):
  41. filename_template = 'dashboard/reports/partials/open_basket_report.html'
  42. class OpenBasketReportGenerator(ReportGenerator):
  43. """
  44. Report of baskets which haven't been submitted yet
  45. """
  46. code = 'open_baskets'
  47. description = _('Open baskets')
  48. formatters = {
  49. 'CSV_formatter': OpenBasketReportCSVFormatter,
  50. 'HTML_formatter': OpenBasketReportHTMLFormatter}
  51. def generate(self):
  52. additional_data = {
  53. 'start_date': self.start_date,
  54. 'end_date': self.end_date}
  55. baskets = Basket._default_manager.filter(status=Basket.OPEN)
  56. return self.formatter.generate_response(baskets, **additional_data)
  57. class SubmittedBasketReportCSVFormatter(ReportCSVFormatter):
  58. filename_template = 'submitted_baskets-%s-%s.csv'
  59. def generate_csv(self, response, baskets):
  60. writer = self.get_csv_writer(response)
  61. header_row = [_('User ID'),
  62. _('User'),
  63. _('Basket status'),
  64. _('Num lines'),
  65. _('Num items'),
  66. _('Date created'),
  67. _('Time between creation and submission'),
  68. ]
  69. writer.writerow(header_row)
  70. for basket in baskets:
  71. row = [basket.owner_id,
  72. basket.owner,
  73. basket.status,
  74. basket.num_lines,
  75. basket.num_items,
  76. self.format_datetime(basket.date_created),
  77. basket.time_before_submit]
  78. writer.writerow(row)
  79. def filename(self, **kwargs):
  80. return self.filename_template % (kwargs['start_date'],
  81. kwargs['end_date'])
  82. class SubmittedBasketReportHTMLFormatter(ReportHTMLFormatter):
  83. filename_template = 'dashboard/reports/partials/submitted_basket_report.html'
  84. class SubmittedBasketReportGenerator(ReportGenerator):
  85. """
  86. Report of baskets that have been submitted
  87. """
  88. code = 'submitted_baskets'
  89. description = _('Submitted baskets')
  90. formatters = {
  91. 'CSV_formatter': SubmittedBasketReportCSVFormatter,
  92. 'HTML_formatter': SubmittedBasketReportHTMLFormatter}
  93. def generate(self):
  94. additional_data = {
  95. 'start_date': self.start_date,
  96. 'end_date': self.end_date}
  97. baskets = Basket._default_manager.filter(status=Basket.SUBMITTED)
  98. return self.formatter.generate_response(baskets, **additional_data)