Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import csv
  2. from django.db.models import get_model
  3. from oscar.core.loading import get_class
  4. ReportGenerator = get_class('dashboard.reports.reports', 'ReportGenerator')
  5. ReportCSVFormatter = get_class('dashboard.reports.reports', 'ReportCSVFormatter')
  6. ReportHTMLFormatter = get_class('dashboard.reports.reports', 'ReportHTMLFormatter')
  7. Order = get_model('order', 'Order')
  8. class OrderReportCSVFormatter(ReportCSVFormatter):
  9. filename_template = 'orders-%s-to-%s.csv'
  10. def generate_csv(self, response, orders):
  11. writer = csv.writer(response)
  12. header_row = ['Order number',
  13. 'User',
  14. 'Total incl. tax',
  15. 'Date placed',]
  16. writer.writerow(header_row)
  17. for order in orders:
  18. row = [order.number,
  19. order.user,
  20. order.total_incl_tax,
  21. self.format_datetime(order.date_placed)]
  22. writer.writerow(row)
  23. def filename(self, **kwargs):
  24. return self.filename_template % (kwargs['start_date'], kwargs['end_date'])
  25. class OrderReportHTMLFormatter(ReportHTMLFormatter):
  26. filename_template = 'dashboard/reports/partials/order_report.html'
  27. class OrderReportGenerator(ReportGenerator):
  28. code = 'order_report'
  29. description = "Orders placed"
  30. formatters = {
  31. 'CSV_formatter': OrderReportCSVFormatter,
  32. 'HTML_formatter': OrderReportHTMLFormatter,
  33. }
  34. def generate(self):
  35. orders = Order._default_manager.filter(
  36. date_placed__gte=self.start_date
  37. ).filter(date_placed__lt=self.end_date)
  38. additional_data = {
  39. 'start_date': self.start_date,
  40. 'end_date': self.end_date
  41. }
  42. return self.formatter.generate_response(orders, **additional_data)
  43. def is_available_to(self, user):
  44. return user.is_staff and user.has_perm('order.can_view')