From 72408c012d29fdb0aba809d5a5c16150248677b0 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 5 Aug 2016 11:49:21 +0200 Subject: [PATCH] Refs #131 -- Add exporter to download invoices --- src/pretix/base/exporters/__init__.py | 1 + src/pretix/base/exporters/invoices.py | 31 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 src/pretix/base/exporters/invoices.py diff --git a/src/pretix/base/exporters/__init__.py b/src/pretix/base/exporters/__init__.py index aeb78729e..2a5fe4044 100644 --- a/src/pretix/base/exporters/__init__.py +++ b/src/pretix/base/exporters/__init__.py @@ -1,2 +1,3 @@ +from .invoices import * # noqa from .json import * # noqa from .mail import * # noqa diff --git a/src/pretix/base/exporters/invoices.py b/src/pretix/base/exporters/invoices.py new file mode 100644 index 000000000..b9f3460a7 --- /dev/null +++ b/src/pretix/base/exporters/invoices.py @@ -0,0 +1,31 @@ +import os +import tempfile +from zipfile import ZipFile + +from django.dispatch import receiver +from django.utils.translation import ugettext as _ + +from ..exporter import BaseExporter +from ..models import Invoice +from ..signals import register_data_exporters + + +class InvoiceExporter(BaseExporter): + identifier = 'invoices' + verbose_name = _('All invoices') + + def render(self, form_data: dict): + with tempfile.TemporaryDirectory() as d: + with ZipFile(os.path.join(d, 'tmp.zip'), 'w') as zipf: + for i in self.event.invoices.all(): + i.file.open('r') + zipf.writestr('{}.pdf'.format(i.number), i.file.read()) + i.file.close() + + with open(os.path.join(d, 'tmp.zip'), 'rb') as zipf: + return 'invoices.zip', 'application/zip', zipf.read() + + +@receiver(register_data_exporters, dispatch_uid="exporter_invoices") +def register_invoice_export(sender, **kwargs): + return InvoiceExporter