diff --git a/src/main/java/alfio/controller/api/v2/user/ReservationApiV2Controller.java b/src/main/java/alfio/controller/api/v2/user/ReservationApiV2Controller.java index d9406f33b4..473352937b 100644 --- a/src/main/java/alfio/controller/api/v2/user/ReservationApiV2Controller.java +++ b/src/main/java/alfio/controller/api/v2/user/ReservationApiV2Controller.java @@ -430,7 +430,7 @@ private void checkAndApplyVATRules(String eventName, String reservationId, Conta String country = contactAndTicketsForm.getVatCountryCode(); // validate VAT presence if EU mode is enabled - if(vatChecker.isReverseChargeEnabledFor(event) && isEUCountry(country)) { + if (vatChecker.isReverseChargeEnabledFor(event) && (country == null || isEUCountry(country))) { ValidationUtils.rejectIfEmptyOrWhitespace(bindingResult, "vatNr", "error.emptyField"); } @@ -444,7 +444,7 @@ private void checkAndApplyVATRules(String eventName, String reservationId, Conta vatDetail.ifPresent(vatValidation -> { if (!vatValidation.isValid()) { - bindingResult.rejectValue("vatNr", "error.vat"); + bindingResult.rejectValue("vatNr", "error.STEP_2_INVALID_VAT"); } else { var reservation = ticketReservationManager.findById(reservationId).orElseThrow(); var currencyCode = reservation.getCurrencyCode(); diff --git a/src/main/java/alfio/manager/EuVatChecker.java b/src/main/java/alfio/manager/EuVatChecker.java index 56e9b125b6..fbca89cee6 100644 --- a/src/main/java/alfio/manager/EuVatChecker.java +++ b/src/main/java/alfio/manager/EuVatChecker.java @@ -33,10 +33,7 @@ import org.apache.commons.lang3.tuple.Pair; import org.springframework.stereotype.Component; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.util.*; import java.util.concurrent.TimeUnit; import java.util.function.BiFunction; import java.util.function.BooleanSupplier; @@ -147,7 +144,9 @@ static String organizerCountry(ConfigurationManager configurationManager, EventA } private static boolean reverseChargeEnabled(ConfigurationManager configurationManager, EventAndOrganizationId eventAndOrganizationId) { - return configurationManager.getFor(ConfigurationKeys.ENABLE_EU_VAT_DIRECTIVE, ConfigurationLevel.event(eventAndOrganizationId)).getValueAsBooleanOrDefault(false); + var res = configurationManager.getFor(Set.of(ConfigurationKeys.ENABLE_EU_VAT_DIRECTIVE, ConfigurationKeys.COUNTRY_OF_BUSINESS), ConfigurationLevel.event(eventAndOrganizationId)); + return res.get(ConfigurationKeys.ENABLE_EU_VAT_DIRECTIVE).getValueAsBooleanOrDefault(false) && + res.get(ConfigurationKeys.COUNTRY_OF_BUSINESS).isPresent(); } static boolean validationEnabled(ConfigurationManager configurationManager, EventAndOrganizationId eventAndOrganizationId) { diff --git a/src/test/java/alfio/manager/EuVatCheckerTest.java b/src/test/java/alfio/manager/EuVatCheckerTest.java index 45d715892c..3b525373a0 100644 --- a/src/test/java/alfio/manager/EuVatCheckerTest.java +++ b/src/test/java/alfio/manager/EuVatCheckerTest.java @@ -27,7 +27,9 @@ import org.junit.Before; import org.junit.Test; +import java.util.Map; import java.util.Optional; +import java.util.Set; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @@ -51,6 +53,9 @@ public void init() { .thenReturn(buildConfReturn(ConfigurationKeys.EU_COUNTRIES_LIST, "IE")); when(configurationManager.getFor(eq(ConfigurationKeys.COUNTRY_OF_BUSINESS), any(ConfigurationLevel.class))) .thenReturn(buildConfReturn(ConfigurationKeys.COUNTRY_OF_BUSINESS, "IT")); + when(configurationManager.getFor(eq(Set.of(ConfigurationKeys.ENABLE_EU_VAT_DIRECTIVE, ConfigurationKeys.COUNTRY_OF_BUSINESS)), any())) + .thenReturn(Map.of(ConfigurationKeys.ENABLE_EU_VAT_DIRECTIVE, buildConfReturn(ConfigurationKeys.ENABLE_EU_VAT_DIRECTIVE, "true"), + ConfigurationKeys.COUNTRY_OF_BUSINESS, buildConfReturn(ConfigurationKeys.COUNTRY_OF_BUSINESS, "IT"))); } private static ConfigurationManager.MaybeConfiguration buildConfReturn(ConfigurationKeys k, String value) {