diff --git a/src/pretix/base/forms/questions.py b/src/pretix/base/forms/questions.py index 1fd4b8759..ca29fd10a 100644 --- a/src/pretix/base/forms/questions.py +++ b/src/pretix/base/forms/questions.py @@ -1415,6 +1415,7 @@ class BaseInvoiceAddressForm(forms.ModelForm): if not data.get(r): raise ValidationError({r: _("This field is required for the selected type of invoice transmission.")}) + transmission_type.validate_invoice_address_data(data) self.instance.transmission_type = transmission_type.identifier self.instance.transmission_info = transmission_type.form_data_to_transmission_info(data) elif transmission_type.is_exclusive(self.event, data.get("country"), data.get("is_business")): diff --git a/src/pretix/base/invoicing/peppol.py b/src/pretix/base/invoicing/peppol.py index 194bf195e..0a26b6c10 100644 --- a/src/pretix/base/invoicing/peppol.py +++ b/src/pretix/base/invoicing/peppol.py @@ -204,6 +204,12 @@ class PeppolTransmissionType(TransmissionType): } return base | {"transmission_peppol_participant_id"} + def validate_invoice_address_data(self, address_data: dict): + # Special case Belgium: If a Belgian business ID is used as Peppol ID, it should match the VAT ID + if address_data.get("transmission_peppol_participant_id").startswith("0208:") and address_data.get("vat_id"): + if address_data["vat_id"].removeprefix("BE") != address_data["transmission_peppol_participant_id"].removeprefix("0208:"): + raise ValidationError({"transmission_peppol_participant_id": _("The Peppol participant ID does not match your VAT ID.")}) + def pdf_watermark(self) -> str: return pgettext("peppol_invoice", "Visual copy") diff --git a/src/pretix/base/invoicing/transmission.py b/src/pretix/base/invoicing/transmission.py index 9c6899381..a82bef73b 100644 --- a/src/pretix/base/invoicing/transmission.py +++ b/src/pretix/base/invoicing/transmission.py @@ -24,7 +24,7 @@ from typing import Optional from django.utils.translation import gettext_lazy as _ from django_countries.fields import Country -from pretix.base.models import Invoice, InvoiceAddress +from pretix.base.models import Invoice from pretix.base.signals import EventPluginRegistry, Registry @@ -89,7 +89,7 @@ class TransmissionType: def invoice_address_form_fields_visible(self, country: Country, is_business: bool) -> set: return set(self.invoice_address_form_fields.keys()) - def validate_address(self, ia: InvoiceAddress): + def validate_invoice_address_data(self, address_data: dict): pass @property