瀏覽代碼

Added date formatting methods to ensure reports are consistent.

The dates should be picked up correctly by Excel now.
master
David Winterbottom 13 年之前
父節點
當前提交
2ab0c5228a

+ 11
- 5
oscar/apps/analytics/reports.py 查看文件

@@ -1,6 +1,7 @@
1 1
 import csv
2 2
 
3 3
 from django.db.models import get_model
4
+from django.template.defaultfilters import date
4 5
 
5 6
 from oscar.core.loading import get_class
6 7
 
@@ -43,8 +44,7 @@ class UserReportGenerator(ReportGenerator):
43 44
     
44 45
     def generate(self, response):
45 46
         writer = csv.writer(response)
46
-        header_row = ['Username',
47
-                      'Name',
47
+        header_row = ['Name',
48 48
                       'Date registered',
49 49
                       'Product views',
50 50
                       'Basket additions',
@@ -58,9 +58,15 @@ class UserReportGenerator(ReportGenerator):
58 58
         
59 59
         records = UserRecord._default_manager.select_related().all()
60 60
         for record in records:
61
-            row = [record.user.username, record.user.get_full_name(), record.user.date_joined, 
62
-                   record.num_product_views, record.num_basket_additions, record.num_orders,
63
-                   record.num_order_lines, record.num_order_items, record.total_spent, record.date_last_order]
61
+            row = [record.user.get_full_name(), 
62
+                   self.format_date(record.user.date_joined),
63
+                   record.num_product_views, 
64
+                   record.num_basket_additions, 
65
+                   record.num_orders,
66
+                   record.num_order_lines,
67
+                   record.num_order_items,
68
+                   record.total_spent,
69
+                   self.format_datetime(record.date_last_order)]
64 70
             writer.writerow(row)
65 71
             
66 72
     def is_available_to(self, user):

+ 14
- 8
oscar/apps/basket/reports.py 查看文件

@@ -19,7 +19,6 @@ class OpenBasketReportGenerator(ReportGenerator):
19 19
     def generate(self, response):
20 20
         writer = csv.writer(response)
21 21
         header_row = ['User ID',
22
-                      'Username',
23 22
                       'Name',
24 23
                       'Email',
25 24
                       'Basket status',
@@ -34,14 +33,15 @@ class OpenBasketReportGenerator(ReportGenerator):
34 33
         baskets = Basket._default_manager.filter(status=OPEN)
35 34
         for basket in baskets:
36 35
             if basket.owner:
37
-                row = [basket.owner_id, basket.owner.username, basket.owner.get_full_name(), basket.owner.email,
36
+                row = [basket.owner_id, basket.owner.get_full_name(), basket.owner.email,
38 37
                        basket.status, basket.num_lines,
39 38
                        basket.num_items, basket.total_incl_tax, 
40
-                       basket.date_created, basket.time_since_creation]
39
+                       self.format_datetime(basket.date_created), 
40
+                       basket.time_since_creation]
41 41
             else:
42
-                row = [basket.owner_id, None, None, None, basket.status, basket.num_lines,
42
+                row = [basket.owner_id, None, None, basket.status, basket.num_lines,
43 43
                        basket.num_items, basket.total_incl_tax, 
44
-                       basket.date_created, basket.time_since_creation]
44
+                       self.format_datetime(basket.date_created), basket.time_since_creation]
45 45
             writer.writerow(row)
46 46
 
47 47
 
@@ -61,13 +61,19 @@ class SubmittedBasketReportGenerator(ReportGenerator):
61 61
                       'Num lines',
62 62
                       'Num items',
63 63
                       'Value',
64
+                      'Date created',
64 65
                       'Time between creation and submission',
65 66
                      ]
66 67
         writer.writerow(header_row)
67 68
         
68 69
         baskets = Basket._default_manager.filter(status=SUBMITTED)
69 70
         for basket in baskets:
70
-            row = [basket.owner_id, basket.owner, basket.status, basket.num_lines,
71
-                   basket.num_items, basket.total_incl_tax, 
72
-                   basket.date_created, basket.time_before_submit]
71
+            row = [basket.owner_id,
72
+                   basket.owner,
73
+                   basket.status,
74
+                   basket.num_lines,
75
+                   basket.num_items,
76
+                   basket.total_incl_tax,
77
+                   self.format_datetime(basket.date_created),
78
+                   basket.time_before_submit]
73 79
             writer.writerow(row)

+ 12
- 3
oscar/apps/dashboard/reports/reports.py 查看文件

@@ -1,3 +1,6 @@
1
+from django.template.defaultfilters import date
2
+
3
+
1 4
 class ReportGenerator(object):
2 5
     """
3 6
     Top-level class that needs to be subclassed to provide a 
@@ -17,13 +20,19 @@ class ReportGenerator(object):
17 20
         pass
18 21
  
19 22
     def filename(self):
20
-        u"""
23
+        """
21 24
         Returns the filename for this report
22 25
         """
23 26
         return self.filename_template % (self.start_date, self.end_date)
24 27
     
25 28
     def is_available_to(self, user):
26
-        u"""
29
+        """
27 30
         Checks whether this report is available to this user
28 31
         """
29
-        return user.is_staff
32
+        return user.is_staff
33
+
34
+    def format_datetime(self, dt):
35
+        return date(dt, 'DATETIME_FORMAT')
36
+
37
+    def format_date(self, d):
38
+        return date(d, 'DATE_FORMAT')

+ 2
- 2
oscar/apps/dashboard/reports/utils.py 查看文件

@@ -2,7 +2,7 @@ from oscar.core.loading import get_class, get_classes
2 2
 OrderReportGenerator = get_class('order.reports', 'OrderReportGenerator')
3 3
 ProductReportGenerator, UserReportGenerator = get_classes('analytics.reports', ['ProductReportGenerator', 'UserReportGenerator'])
4 4
 OpenBasketReportGenerator, SubmittedBasketReportGenerator = get_classes(
5
-    'basket.reports', ['OpenBasketReportGenerator', 'SubmittedBasketReportGenerator'])     
5
+    'basket.reports', ['OpenBasketReportGenerator', 'SubmittedBasketReportGenerator'])
6 6
 OfferReportGenerator = get_class('offer.reports', 'OfferReportGenerator')
7 7
 VoucherReportGenerator = get_class('voucher.reports', 'VoucherReportGenerator')
8 8
 
@@ -14,7 +14,7 @@ class GeneratorRepository(object):
14 14
                   UserReportGenerator,
15 15
                   OpenBasketReportGenerator,
16 16
                   SubmittedBasketReportGenerator,
17
-                  VoucherReportGenerator, 
17
+                  VoucherReportGenerator,
18 18
                   OfferReportGenerator]
19 19
 
20 20
     def get_report_generators(self):

+ 9
- 4
oscar/apps/order/reports.py 查看文件

@@ -1,8 +1,10 @@
1 1
 import csv
2 2
 
3
-from oscar.core.loading import import_module
4
-import_module('dashboard.reports.reports', ['ReportGenerator'], locals())
5
-import_module('order.models', ['Order'], locals())
3
+from django.db.models import get_model
4
+
5
+from oscar.core.loading import get_class
6
+ReportGenerator = get_class('dashboard.reports.reports', 'ReportGenerator')
7
+Order = get_model('order', 'Order')
6 8
 
7 9
 
8 10
 class OrderReportGenerator(ReportGenerator):
@@ -23,7 +25,10 @@ class OrderReportGenerator(ReportGenerator):
23 25
                       'Date placed',]
24 26
         writer.writerow(header_row)
25 27
         for order in orders:
26
-            row = [order.number, order.user, order.total_incl_tax, order.date_placed]
28
+            row = [order.number,
29
+                   order.user,
30
+                   order.total_incl_tax,
31
+                   self.format_datetime(order.date_placed)]
27 32
             writer.writerow(row)
28 33
             
29 34
     def is_available_to(self, user):

Loading…
取消
儲存