瀏覽代碼

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
 import csv
1
 import csv
2
 
2
 
3
 from django.db.models import get_model
3
 from django.db.models import get_model
4
+from django.template.defaultfilters import date
4
 
5
 
5
 from oscar.core.loading import get_class
6
 from oscar.core.loading import get_class
6
 
7
 
43
     
44
     
44
     def generate(self, response):
45
     def generate(self, response):
45
         writer = csv.writer(response)
46
         writer = csv.writer(response)
46
-        header_row = ['Username',
47
-                      'Name',
47
+        header_row = ['Name',
48
                       'Date registered',
48
                       'Date registered',
49
                       'Product views',
49
                       'Product views',
50
                       'Basket additions',
50
                       'Basket additions',
58
         
58
         
59
         records = UserRecord._default_manager.select_related().all()
59
         records = UserRecord._default_manager.select_related().all()
60
         for record in records:
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
             writer.writerow(row)
70
             writer.writerow(row)
65
             
71
             
66
     def is_available_to(self, user):
72
     def is_available_to(self, user):

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

19
     def generate(self, response):
19
     def generate(self, response):
20
         writer = csv.writer(response)
20
         writer = csv.writer(response)
21
         header_row = ['User ID',
21
         header_row = ['User ID',
22
-                      'Username',
23
                       'Name',
22
                       'Name',
24
                       'Email',
23
                       'Email',
25
                       'Basket status',
24
                       'Basket status',
34
         baskets = Basket._default_manager.filter(status=OPEN)
33
         baskets = Basket._default_manager.filter(status=OPEN)
35
         for basket in baskets:
34
         for basket in baskets:
36
             if basket.owner:
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
                        basket.status, basket.num_lines,
37
                        basket.status, basket.num_lines,
39
                        basket.num_items, basket.total_incl_tax, 
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
             else:
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
                        basket.num_items, basket.total_incl_tax, 
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
             writer.writerow(row)
45
             writer.writerow(row)
46
 
46
 
47
 
47
 
61
                       'Num lines',
61
                       'Num lines',
62
                       'Num items',
62
                       'Num items',
63
                       'Value',
63
                       'Value',
64
+                      'Date created',
64
                       'Time between creation and submission',
65
                       'Time between creation and submission',
65
                      ]
66
                      ]
66
         writer.writerow(header_row)
67
         writer.writerow(header_row)
67
         
68
         
68
         baskets = Basket._default_manager.filter(status=SUBMITTED)
69
         baskets = Basket._default_manager.filter(status=SUBMITTED)
69
         for basket in baskets:
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
             writer.writerow(row)
79
             writer.writerow(row)

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

1
+from django.template.defaultfilters import date
2
+
3
+
1
 class ReportGenerator(object):
4
 class ReportGenerator(object):
2
     """
5
     """
3
     Top-level class that needs to be subclassed to provide a 
6
     Top-level class that needs to be subclassed to provide a 
17
         pass
20
         pass
18
  
21
  
19
     def filename(self):
22
     def filename(self):
20
-        u"""
23
+        """
21
         Returns the filename for this report
24
         Returns the filename for this report
22
         """
25
         """
23
         return self.filename_template % (self.start_date, self.end_date)
26
         return self.filename_template % (self.start_date, self.end_date)
24
     
27
     
25
     def is_available_to(self, user):
28
     def is_available_to(self, user):
26
-        u"""
29
+        """
27
         Checks whether this report is available to this user
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
 OrderReportGenerator = get_class('order.reports', 'OrderReportGenerator')
2
 OrderReportGenerator = get_class('order.reports', 'OrderReportGenerator')
3
 ProductReportGenerator, UserReportGenerator = get_classes('analytics.reports', ['ProductReportGenerator', 'UserReportGenerator'])
3
 ProductReportGenerator, UserReportGenerator = get_classes('analytics.reports', ['ProductReportGenerator', 'UserReportGenerator'])
4
 OpenBasketReportGenerator, SubmittedBasketReportGenerator = get_classes(
4
 OpenBasketReportGenerator, SubmittedBasketReportGenerator = get_classes(
5
-    'basket.reports', ['OpenBasketReportGenerator', 'SubmittedBasketReportGenerator'])     
5
+    'basket.reports', ['OpenBasketReportGenerator', 'SubmittedBasketReportGenerator'])
6
 OfferReportGenerator = get_class('offer.reports', 'OfferReportGenerator')
6
 OfferReportGenerator = get_class('offer.reports', 'OfferReportGenerator')
7
 VoucherReportGenerator = get_class('voucher.reports', 'VoucherReportGenerator')
7
 VoucherReportGenerator = get_class('voucher.reports', 'VoucherReportGenerator')
8
 
8
 
14
                   UserReportGenerator,
14
                   UserReportGenerator,
15
                   OpenBasketReportGenerator,
15
                   OpenBasketReportGenerator,
16
                   SubmittedBasketReportGenerator,
16
                   SubmittedBasketReportGenerator,
17
-                  VoucherReportGenerator, 
17
+                  VoucherReportGenerator,
18
                   OfferReportGenerator]
18
                   OfferReportGenerator]
19
 
19
 
20
     def get_report_generators(self):
20
     def get_report_generators(self):

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

1
 import csv
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
 class OrderReportGenerator(ReportGenerator):
10
 class OrderReportGenerator(ReportGenerator):
23
                       'Date placed',]
25
                       'Date placed',]
24
         writer.writerow(header_row)
26
         writer.writerow(header_row)
25
         for order in orders:
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
             writer.writerow(row)
32
             writer.writerow(row)
28
             
33
             
29
     def is_available_to(self, user):
34
     def is_available_to(self, user):

Loading…
取消
儲存