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

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import csv
  2. from django.db.models import get_model
  3. from django.template.defaultfilters import date
  4. from oscar.core.loading import get_class
  5. ReportGenerator = get_class('dashboard.reports.reports', 'ReportGenerator')
  6. ProductRecord = get_model('analytics', 'ProductRecord')
  7. UserRecord = get_model('analytics', 'UserRecord')
  8. class ProductReportGenerator(ReportGenerator):
  9. filename_template = 'product-analytics.csv'
  10. code = 'product_analytics'
  11. description = 'Product analytics'
  12. def generate(self, response):
  13. writer = csv.writer(response)
  14. header_row = ['Product',
  15. 'Views',
  16. 'Basket additions',
  17. 'Purchases',]
  18. writer.writerow(header_row)
  19. records = ProductRecord._default_manager.all()
  20. for record in records:
  21. row = [record.product, record.num_views, record.num_basket_additions, record.num_purchases]
  22. writer.writerow(row)
  23. def is_available_to(self, user):
  24. return user.is_staff
  25. def filename(self):
  26. return self.filename_template
  27. class UserReportGenerator(ReportGenerator):
  28. filename_template = 'user-analytics.csv'
  29. code = 'user_analytics'
  30. description = 'User analytics'
  31. def generate(self, response):
  32. writer = csv.writer(response)
  33. header_row = ['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.get_full_name(),
  47. self.format_date(record.user.date_joined),
  48. record.num_product_views,
  49. record.num_basket_additions,
  50. record.num_orders,
  51. record.num_order_lines,
  52. record.num_order_items,
  53. record.total_spent,
  54. self.format_datetime(record.date_last_order)]
  55. writer.writerow(row)
  56. def is_available_to(self, user):
  57. return user.is_staff
  58. def filename(self):
  59. return self.filename_template