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

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