diff --git a/src/pretix/plugins/ticketoutputpdf/exporters.py b/src/pretix/plugins/ticketoutputpdf/exporters.py new file mode 100644 index 0000000000..a98cb5fc76 --- /dev/null +++ b/src/pretix/plugins/ticketoutputpdf/exporters.py @@ -0,0 +1,32 @@ +from io import BytesIO + +from django.utils.translation import ugettext as _ + +from pretix.base.exporter import BaseExporter +from pretix.base.models import Order, OrderPosition + +from .ticketoutput import PdfTicketOutput + + +class AllTicketsPDF(BaseExporter): + name = "alltickets" + verbose_name = _("All paid PDF tickets in one file") + identifier = "pdfoutput_all_tickets" + + def render(self, form_data): + o = PdfTicketOutput(self.event) + qs = OrderPosition.objects.filter(order__event=self.event, order__status=Order.STATUS_PAID).select_related( + 'order', 'item', 'variation' + ) + buffer = BytesIO() + p = o._create_canvas(buffer) + for op in qs: + if op.addon_to_id and not self.event.settings.ticket_download_addons: + continue + if not op.item.admission and not self.event.settings.ticket_download_nonadm: + continue + o._draw_page(p, op, op.order) + + p.save() + outbuffer = o._render_with_background(buffer) + return 'tickets.pdf', 'application/pdf', outbuffer.read() diff --git a/src/pretix/plugins/ticketoutputpdf/signals.py b/src/pretix/plugins/ticketoutputpdf/signals.py index 256be80e90..b3228883a9 100644 --- a/src/pretix/plugins/ticketoutputpdf/signals.py +++ b/src/pretix/plugins/ticketoutputpdf/signals.py @@ -2,7 +2,9 @@ from django.dispatch import Signal, receiver from django.template.loader import get_template from django.urls import resolve -from pretix.base.signals import register_ticket_outputs +from pretix.base.signals import ( + register_data_exporters, register_ticket_outputs, +) from pretix.control.signals import html_head @@ -12,6 +14,12 @@ def register_ticket_outputs(sender, **kwargs): return PdfTicketOutput +@receiver(register_data_exporters, dispatch_uid="dataexport_pdf") +def register_data(sender, **kwargs): + from .exporters import AllTicketsPDF + return AllTicketsPDF + + @receiver(html_head, dispatch_uid="ticketoutputpdf_html_head") def html_head_presale(sender, request=None, **kwargs): url = resolve(request.path_info)