diff --git a/src/pretix/base/forms/questions.py b/src/pretix/base/forms/questions.py index 1744641b7..bef3b949e 100644 --- a/src/pretix/base/forms/questions.py +++ b/src/pretix/base/forms/questions.py @@ -1044,7 +1044,11 @@ class BaseInvoiceAddressForm(forms.ModelForm): self.instance.vat_id_validated = True self.instance.vat_id = normalized_id except VATIDFinalError as e: - raise ValidationError(e.message) + if self.all_optional: + self.instance.vat_id_validated = False + messages.warning(self.request, e.message) + else: + raise ValidationError(e.message) except VATIDTemporaryError as e: self.instance.vat_id_validated = False if self.request and self.vat_warning: diff --git a/src/pretix/base/views/mixins.py b/src/pretix/base/views/mixins.py index a4a2e0699..0dbca1412 100644 --- a/src/pretix/base/views/mixins.py +++ b/src/pretix/base/views/mixins.py @@ -355,20 +355,29 @@ class OrderQuestionsViewMixin(BaseQuestionsViewMixin): override[k].pop('initial', None) return override_sets + @cached_property + def vat_id_validation_enabled(self): + return any([p.item.tax_rule and (p.item.tax_rule.eu_reverse_charge or p.item.tax_rule.custom_rules) + for p in self.positions]) + @cached_property def invoice_form(self): if not self.address_asked and self.request.event.settings.invoice_name_required: f = self.invoice_name_form_class( data=self.request.POST if self.request.method == "POST" else None, event=self.request.event, - instance=self.invoice_address, validate_vat_id=False, + instance=self.invoice_address, + validate_vat_id=False, + request=self.request, all_optional=self.all_optional ) elif self.address_asked: f = self.invoice_form_class( data=self.request.POST if self.request.method == "POST" else None, event=self.request.event, - instance=self.invoice_address, validate_vat_id=False, + instance=self.invoice_address, + validate_vat_id=self.vat_id_validation_enabled, + request=self.request, all_optional=self.all_optional, ) else: