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.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import csv
  2. from oscar.core.loading import import_module
  3. report_classes = import_module('reports.reports', ['ReportGenerator'])
  4. analytics_models = import_module('analytics.models', ['ProductRecord', 'UserRecord'])
  5. class ProductReportGenerator(report_classes.ReportGenerator):
  6. filename_template = 'product-analytics.csv'
  7. code = 'product_analytics'
  8. description = 'Product analytics'
  9. def generate(self, response):
  10. writer = csv.writer(response)
  11. header_row = ['Product',
  12. 'Views',
  13. 'Basket additions',
  14. 'Purchases',]
  15. writer.writerow(header_row)
  16. records = analytics_models.ProductRecord._default_manager.all()
  17. for record in records:
  18. row = [record.product, record.num_views, record.num_basket_additions, record.num_purchases]
  19. writer.writerow(row)
  20. def is_available_to(self, user):
  21. return user.is_staff
  22. def filename(self):
  23. return self.filename_template
  24. class UserReportGenerator(report_classes.ReportGenerator):
  25. filename_template = 'user-analytics.csv'
  26. code = 'user_analytics'
  27. description = 'User analytics'
  28. def generate(self, response):
  29. writer = csv.writer(response)
  30. header_row = ['Username',
  31. 'Name',
  32. 'Date registered',
  33. 'Product views',
  34. 'Basket additions',
  35. 'Orders',
  36. 'Order lines',
  37. 'Order items',
  38. 'Total spent',
  39. 'Date of last order',
  40. ]
  41. writer.writerow(header_row)
  42. records = analytics_models.UserRecord._default_manager.select_related().all()
  43. for record in records:
  44. row = [record.user.username, record.user.get_full_name(), record.user.date_joined,
  45. record.num_product_views, record.num_basket_additions, record.num_orders,
  46. record.num_order_lines, record.num_order_items, record.total_spent, record.date_last_order]
  47. writer.writerow(row)
  48. def is_available_to(self, user):
  49. return user.is_staff
  50. def filename(self):
  51. return self.filename_template