Fix ticket exporter

This commit is contained in:
Raphael Michel
2018-06-12 15:50:03 +02:00
parent 0e332d291a
commit 229ad9108b

View File

@@ -1,8 +1,11 @@
from io import BytesIO from io import BytesIO
from django.core.files.base import ContentFile
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from PyPDF2.merger import PdfFileMerger
from pretix.base.exporter import BaseExporter from pretix.base.exporter import BaseExporter
from pretix.base.i18n import language
from pretix.base.models import Order, OrderPosition from pretix.base.models import Order, OrderPosition
from .ticketoutput import PdfTicketOutput from .ticketoutput import PdfTicketOutput
@@ -14,20 +17,30 @@ class AllTicketsPDF(BaseExporter):
identifier = "pdfoutput_all_tickets" identifier = "pdfoutput_all_tickets"
def render(self, form_data): def render(self, form_data):
merger = PdfFileMerger()
o = PdfTicketOutput(self.event) o = PdfTicketOutput(self.event)
qs = OrderPosition.objects.filter(order__event=self.event, order__status=Order.STATUS_PAID).select_related( qs = OrderPosition.objects.filter(order__event=self.event, order__status=Order.STATUS_PAID).select_related(
'order', 'item', 'variation' 'order', 'item', 'variation'
) )
buffer = BytesIO()
p = o._create_canvas(buffer)
for op in qs: for op in qs:
if op.addon_to_id and not self.event.settings.ticket_download_addons: if op.addon_to_id and not self.event.settings.ticket_download_addons:
continue continue
if not op.item.admission and not self.event.settings.ticket_download_nonadm: if not op.item.admission and not self.event.settings.ticket_download_nonadm:
continue continue
layout = o.layout_map.get(op.item_id, o.default_layout)
o._draw_page(layout, p, op, op.order)
p.save() with language(op.order.locale):
outbuffer = o._render_with_background(buffer) buffer = BytesIO()
p = o._create_canvas(buffer)
layout = o.layout_map.get(op.item_id, o.default_layout)
o._draw_page(layout, p, op, op.order)
p.save()
outbuffer = o._render_with_background(layout, buffer)
merger.append(ContentFile(outbuffer.read()))
outbuffer = BytesIO()
merger.write(outbuffer)
merger.close()
outbuffer.seek(0)
return '{}_tickets.pdf'.format(self.event.slug), 'application/pdf', outbuffer.read() return '{}_tickets.pdf'.format(self.event.slug), 'application/pdf', outbuffer.read()