Browse Source

Make CSV output for dashboard order list view easier to override (#3748)

master
Orinda Harrison(Mitch) 3 years ago
parent
commit
21dc9ef45c
No account linked to committer's email address
1 changed files with 24 additions and 30 deletions
  1. 24
    30
      src/oscar/apps/dashboard/orders/views.py

+ 24
- 30
src/oscar/apps/dashboard/orders/views.py View File

@@ -117,6 +117,16 @@ class OrderListView(BulkEditMixin, ListView):
117 117
     form_class = OrderSearchForm
118 118
     paginate_by = settings.OSCAR_DASHBOARD_ITEMS_PER_PAGE
119 119
     actions = ('download_selected_orders', 'change_order_statuses')
120
+    CSV_COLUMNS = (
121
+        ('number', _('Order number')),
122
+        ('value', _('Order value')),
123
+        ('date', _('Date of purchase')),
124
+        ('num_items', _('Number of items')),
125
+        ('status', _('Order status')),
126
+        ('customer', _('Customer email address')),
127
+        ('shipping_address_name', _('Deliver to name')),
128
+        ('billing_address_name', _('Bill to name')),
129
+    )
120 130
 
121 131
     def dispatch(self, request, *args, **kwargs):
122 132
         # base_queryset is equal to all orders the user is allowed to access
@@ -356,43 +366,27 @@ class OrderListView(BulkEditMixin, ListView):
356 366
     def get_download_filename(self, request):
357 367
         return 'orders.csv'
358 368
 
369
+    def get_row_values(self, order):
370
+        row = {'number': order.number, 'customer': order.email, 'num_items': order.num_items,
371
+               'date': format_datetime(order.date_placed, 'DATETIME_FORMAT'), 'value': order.total_incl_tax,
372
+               'status': order.status}
373
+        if order.shipping_address:
374
+            row['shipping_address_name'] = order.shipping_address.name
375
+        if order.billing_address:
376
+            row['billing_address_name'] = order.billing_address.name
377
+        return row
378
+
359 379
     def download_selected_orders(self, request, orders):
360 380
         response = HttpResponse(content_type='text/csv')
361 381
         response['Content-Disposition'] = 'attachment; filename=%s' \
362 382
             % self.get_download_filename(request)
363 383
         writer = UnicodeCSVWriter(open_file=response)
364 384
 
365
-        meta_data = (('number', _('Order number')),
366
-                     ('value', _('Order value')),
367
-                     ('date', _('Date of purchase')),
368
-                     ('num_items', _('Number of items')),
369
-                     ('status', _('Order status')),
370
-                     ('customer', _('Customer email address')),
371
-                     ('shipping_address_name', _('Deliver to name')),
372
-                     ('billing_address_name', _('Bill to name')),
373
-                     )
374
-        columns = OrderedDict()
375
-        for k, v in meta_data:
376
-            columns[k] = v
377
-
378
-        writer.writerow(columns.values())
385
+        ordered_columns = OrderedDict(self.CSV_COLUMNS)
386
+        writer.writerow(ordered_columns.values())
379 387
         for order in orders:
380
-            row = columns.copy()
381
-            row['number'] = order.number
382
-            row['value'] = order.total_incl_tax
383
-            row['date'] = format_datetime(order.date_placed, 'DATETIME_FORMAT')
384
-            row['num_items'] = order.num_items
385
-            row['status'] = order.status
386
-            row['customer'] = order.email
387
-            if order.shipping_address:
388
-                row['shipping_address_name'] = order.shipping_address.name
389
-            else:
390
-                row['shipping_address_name'] = ''
391
-            if order.billing_address:
392
-                row['billing_address_name'] = order.billing_address.name
393
-            else:
394
-                row['billing_address_name'] = ''
395
-            writer.writerow(row.values())
388
+            row_values = self.get_row_values(order)
389
+            writer.writerow([row_values.get(column, "") for column in ordered_columns])
396 390
         return response
397 391
 
398 392
     def change_order_statuses(self, request, orders):

Loading…
Cancel
Save