Procházet zdrojové kódy

Added date formatting methods to ensure reports are consistent.

The dates should be picked up correctly by Excel now.
master
David Winterbottom před 13 roky
rodič
revize
2ab0c5228a

+ 11
- 5
oscar/apps/analytics/reports.py Zobrazit soubor

@@ -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 Zobrazit soubor

@@ -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 Zobrazit soubor

@@ -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 Zobrazit soubor

@@ -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 Zobrazit soubor

@@ -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):

Načítá se…
Zrušit
Uložit