From 9098eb2a26dcfdf0154d4f8abba11242814324ea Mon Sep 17 00:00:00 2001 From: luelista Date: Tue, 21 Oct 2025 09:22:17 +0200 Subject: [PATCH] Only store transmission email if invoice receiver is a business (Z#23210414) (#5535) * Use the transmission info transformation methods Use form_data_to_transmission_info and transmission_info_to_form_data to convert between database representation and form data * Only store transmission email address if invoice receiver is a business * Fix default implementation of form_data_to_transmission_info * Update src/pretix/base/forms/questions.py --- src/pretix/base/forms/questions.py | 16 +++++++++------- src/pretix/base/invoicing/email.py | 2 +- src/pretix/base/invoicing/transmission.py | 4 +++- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/pretix/base/forms/questions.py b/src/pretix/base/forms/questions.py index 2736e53845..bb56ceb9c3 100644 --- a/src/pretix/base/forms/questions.py +++ b/src/pretix/base/forms/questions.py @@ -77,7 +77,9 @@ from pretix.base.forms.widgets import ( from pretix.base.i18n import ( get_babel_locale, get_language_without_region, language, ) -from pretix.base.invoicing.transmission import get_transmission_types +from pretix.base.invoicing.transmission import ( + get_transmission_types, transmission_types, +) from pretix.base.models import InvoiceAddress, Item, Question, QuestionOption from pretix.base.models.tax import ask_for_vat_id from pretix.base.services.tax import ( @@ -1142,9 +1144,11 @@ class BaseInvoiceAddressForm(forms.ModelForm): if (not kwargs.get('instance') or not kwargs['instance'].country) and not kwargs["initial"].get("country"): kwargs['initial']['country'] = guess_country_from_request(self.request, self.event) - if kwargs.get('instance'): - kwargs['initial'].update(kwargs['instance'].transmission_info or {}) - kwargs['initial']['transmission_type'] = kwargs['instance'].transmission_type + if kwargs.get('instance') and kwargs['instance'].transmission_type: + ttype, meta = transmission_types.get(identifier=kwargs['instance'].transmission_type) + if ttype: + kwargs['initial'].update(ttype.transmission_info_to_form_data(kwargs['instance'].transmission_info or {})) + kwargs['initial']['transmission_type'] = ttype.identifier super().__init__(*args, **kwargs) @@ -1394,9 +1398,7 @@ class BaseInvoiceAddressForm(forms.ModelForm): raise ValidationError({r: _("This field is required for the selected type of invoice transmission.")}) self.instance.transmission_type = transmission_type.identifier - self.instance.transmission_info = { - k: data.get(k) for k in transmission_type.invoice_address_form_fields - } + self.instance.transmission_info = transmission_type.form_data_to_transmission_info(data) elif transmission_type.exclusive: if transmission_type.is_available(self.event, data.get("country"), data.get("is_business")): raise ValidationError({ diff --git a/src/pretix/base/invoicing/email.py b/src/pretix/base/invoicing/email.py index 78f7d7f82e..d3064af778 100644 --- a/src/pretix/base/invoicing/email.py +++ b/src/pretix/base/invoicing/email.py @@ -77,7 +77,7 @@ class EmailTransmissionType(TransmissionType): } def form_data_to_transmission_info(self, form_data: dict) -> dict: - if form_data.get("transmission_email_other") and form_data.get("transmission_email_address"): + if form_data.get("is_business") and form_data.get("transmission_email_other") and form_data.get("transmission_email_address"): return { "transmission_email_address": form_data["transmission_email_address"], } diff --git a/src/pretix/base/invoicing/transmission.py b/src/pretix/base/invoicing/transmission.py index 0fbb376115..6b7d39831d 100644 --- a/src/pretix/base/invoicing/transmission.py +++ b/src/pretix/base/invoicing/transmission.py @@ -99,7 +99,9 @@ class TransmissionType: return {} def form_data_to_transmission_info(self, form_data: dict) -> dict: - return form_data + return { + k: form_data.get(k) for k in self.invoice_address_form_fields + } def transmission_info_to_form_data(self, transmission_info: dict) -> dict: return transmission_info