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