From eef9e287aa892f886aff9e6e4b270f5f014c370b Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Thu, 1 Sep 2016 11:30:21 +0200 Subject: [PATCH] Added exporter for a list of orders --- src/pretix/base/exporters/__init__.py | 1 + src/pretix/base/exporters/orderlist.py | 75 ++++++++++++++++++++++++++ src/pretix/presale/forms/user.py | 1 - 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 src/pretix/base/exporters/orderlist.py diff --git a/src/pretix/base/exporters/__init__.py b/src/pretix/base/exporters/__init__.py index 2a5fe40445..eefda5866d 100644 --- a/src/pretix/base/exporters/__init__.py +++ b/src/pretix/base/exporters/__init__.py @@ -1,3 +1,4 @@ from .invoices import * # noqa from .json import * # noqa from .mail import * # noqa +from .orderlist import * # noqa diff --git a/src/pretix/base/exporters/orderlist.py b/src/pretix/base/exporters/orderlist.py new file mode 100644 index 0000000000..41f97a0e10 --- /dev/null +++ b/src/pretix/base/exporters/orderlist.py @@ -0,0 +1,75 @@ +import csv +import io +import json +from collections import OrderedDict + +from django import forms +from django.dispatch import receiver +from django.utils.translation import ugettext as _ + +from pretix.base.models import InvoiceAddress, Order + +from ..exporter import BaseExporter +from ..signals import register_data_exporters + + +class OrderListExporter(BaseExporter): + identifier = 'orderlistcsv' + verbose_name = _('List of orders (CSV)') + + @property + def export_form_fields(self): + return OrderedDict( + [ + ('paid_only', + forms.BooleanField( + label=_('Only paid orders'), + initial=True, + required=False + )), + ] + ) + + def render(self, form_data: dict): + output = io.StringIO() + writer = csv.writer(output, quoting=csv.QUOTE_NONNUMERIC, delimiter=",") + + qs = self.event.orders.all().select_related('invoice_address') + headers = [ + _('Order code'), _('Order total'), _('Status'), _('Email'), _('Order date'), + _('Company'), _('Name'), _('Address'), _('ZIP code'), _('City'), _('Country'), _('VAT ID') + ] + if form_data['paid_only']: + qs = qs.filter(status=Order.STATUS_PAID) + + writer.writerow(headers) + + for order in qs: + row = [ + order.code, + str(order.total), + order.get_status_display(), + order.email, + order.datetime.strftime('%Y-%m-%d'), + ] + try: + row += [ + order.invoice_address.company, + order.invoice_address.name, + order.invoice_address.street, + order.invoice_address.zipcode, + order.invoice_address.city, + order.invoice_address.country, + order.invoice_address.vat_id, + ] + except InvoiceAddress.DoesNotExist: + row += ['', '', '', '', '', '', ''] + + writer.writerow(row) + + return 'orders.csv', 'text/csv', output.getvalue().encode("utf-8") + + +@receiver(register_data_exporters, dispatch_uid="exporter_orderlist") +def register_orderlist_exporter(sender, **kwargs): + return OrderListExporter diff --git a/src/pretix/presale/forms/user.py b/src/pretix/presale/forms/user.py index 4a3da4de4d..7790b48014 100644 --- a/src/pretix/presale/forms/user.py +++ b/src/pretix/presale/forms/user.py @@ -1,5 +1,4 @@ from django import forms - from django.utils.translation import ugettext_lazy as _