From a172b1fffddb20aaa554d26e93329a5b556237ae Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Fri, 4 Sep 2026 17:45:59 +0200 Subject: [PATCH] Invoice export: Add transmission-specific data (Z#23239732) --- src/pretix/base/exporters/invoices.py | 31 ++++++++++++++++++++--- src/pretix/base/invoicing/transmission.py | 3 +++ 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/pretix/base/exporters/invoices.py b/src/pretix/base/exporters/invoices.py index 630a15b77..3ecc5a5b0 100644 --- a/src/pretix/base/exporters/invoices.py +++ b/src/pretix/base/exporters/invoices.py @@ -54,6 +54,7 @@ from ...control.forms.filter import get_all_payment_providers from ...helpers import GroupConcat from ...helpers.iter import chunked_iterable from ..exporter import BaseExporter, MultiSheetListExporter +from ..invoicing.transmission import get_transmission_types from ..services.export import ExportError from ..services.invoices import invoice_pdf_task from ..signals import ( @@ -197,7 +198,7 @@ class InvoiceDataExporter(InvoiceExporterMixin, MultiSheetListExporter): def iterate_sheet(self, form_data, sheet): _ = gettext if sheet == 'invoices': - yield [ + headers = [ _('Invoice number'), _('Date'), _('Order code'), @@ -230,8 +231,18 @@ class InvoiceDataExporter(InvoiceExporterMixin, MultiSheetListExporter): _('Total value (without taxes)'), _('Payment matching IDs'), _('Payment providers'), + _('Transmission type'), + _('Transmission status'), + _('Transmission date'), ] + transmission_types = get_transmission_types() + for tt in transmission_types: + for c in tt.describe_info_columns(): + headers.append(str(tt.verbose_name) + ': ' + str(c)) + + yield headers + p_providers = OrderPayment.objects.filter( order=OuterRef('order'), state__in=(OrderPayment.PAYMENT_STATE_CONFIRMED, OrderPayment.PAYMENT_STATE_REFUNDED, @@ -242,7 +253,7 @@ class InvoiceDataExporter(InvoiceExporterMixin, MultiSheetListExporter): 'm' ).order_by() - base_qs = self.invoices_queryset(form_data)\ + base_qs = self.invoices_queryset(form_data) qs = base_qs.select_related( 'order', 'refers' @@ -280,7 +291,7 @@ class InvoiceDataExporter(InvoiceExporterMixin, MultiSheetListExporter): if mid: pmis.append(mid) pmi = '\n'.join(pmis) - yield [ + line = [ i.full_invoice_no, date_format(i.date, "SHORT_DATE_FORMAT"), i.order.code, @@ -315,8 +326,20 @@ class InvoiceDataExporter(InvoiceExporterMixin, MultiSheetListExporter): ', '.join([ str(self.providers.get(p, p)) for p in sorted(set((i.payment_providers or '').split(','))) if p and p != 'free' - ]) + ]), + i.transmission_type_instance.verbose_name, + i.get_transmission_status_display(), + date_format(i.transmission_date, "SHORT_DATETIME_FORMAT") if i.transmission_date else "", ] + for tt in transmission_types: + if tt.identifier == i.transmission_type: + described = dict(tt.describe_info(i.invoice_to_transmission_info, i.invoice_to_country, i.invoice_to_is_business)) + for c in tt.describe_info_columns(): + line.append(described.get(c, "")) + else: + for c in tt.describe_info_columns(): + line.append("") + yield line elif sheet == 'lines': yield [ _('Invoice number'), diff --git a/src/pretix/base/invoicing/transmission.py b/src/pretix/base/invoicing/transmission.py index a82bef73b..a6f7a4463 100644 --- a/src/pretix/base/invoicing/transmission.py +++ b/src/pretix/base/invoicing/transmission.py @@ -107,6 +107,9 @@ class TransmissionType: def transmission_info_to_form_data(self, transmission_info: dict) -> dict: return transmission_info + def describe_info_columns(self): + return [f.label for f in self.invoice_address_form_fields.values()] + def describe_info(self, transmission_info: dict, country: Country, is_business: bool): form_data = self.transmission_info_to_form_data(transmission_info) data = []