forked from CGM_Public/pretix_original
Fix ticket exporter
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user