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
This commit is contained in:
luelista
2025-10-21 09:22:17 +02:00
committed by GitHub
parent b68f68740c
commit 9098eb2a26
3 changed files with 13 additions and 9 deletions

View File

@@ -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({

View File

@@ -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"],
}

View File

@@ -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