diff --git a/pom.xml b/pom.xml
index 713de99a..55765564 100644
--- a/pom.xml
+++ b/pom.xml
@@ -140,6 +140,12 @@
0.23.0
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+ 4.1.3
+
+
diff --git a/src/main/java/net/gepafin/tendermanagement/TendermanagementApplication.java b/src/main/java/net/gepafin/tendermanagement/TendermanagementApplication.java
index f9a97be8..7ec98464 100644
--- a/src/main/java/net/gepafin/tendermanagement/TendermanagementApplication.java
+++ b/src/main/java/net/gepafin/tendermanagement/TendermanagementApplication.java
@@ -2,12 +2,14 @@ package net.gepafin.tendermanagement;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@EnableScheduling
+@EnableFeignClients
@SpringBootApplication
public class TendermanagementApplication {
diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java
index acf2e124..159d21c1 100644
--- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java
+++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java
@@ -133,5 +133,26 @@ public class GepafinConstant {
public static final String INITAL_AND_FINAL_FORM_CANNOT_NULL="initial.and.final.form.cannot.null";
public static final String APPLICATION_FORM_NOT_FOUND="application.form.not.found";
public static final String UPDATING_FORM_VALUE_IMPACT_ON_FLOW="updating.form.value.impact.on.flow";
+ public static final String AUTHORIZATION = "Authorization";
+ public static final String CHECK_VATNUMBER_V2_NEW_URL = "https://imprese.openapi.it/advance";
+ public static final String VATNUMBER_V2 = "https://imprese.openapi.it/advance";
+ public static final String VALIDATION_FIELD_CUSTOM="validation.field.custom";
+ public static final String VALIDATION_CODICE_FISCALE = "validation.codice.fiscale";
+ public static final String VALIDATION_CAP = "validation.cap";
+ public static final String VALIDATION_IBAN = "validation.iban";
+ public static final String VALIDATION_EMAIL = "validation.email";
+ public static final String VALIDATION_EMAIL_PEC = "validation.email.pec";
+ public static final String VALIDATION_URL = "validation.url";
+ public static final String VALIDATION_MARCA_DA_BOLLO = "validation.marca.da.bollo";
+ public static final String VALIDATION_PIVA = "validation.piva";
+ public static final String VALIDATION_VALID_PIVA="valid.vat.number";
+ public static final String IS_MARCA_DA_BOLLO="isMarcaDaBollo";
+ public static final String IS_URL="isUrl";
+ public static final String IS_EMAIL_PEC="isEmailPEC";
+ public static final String IS_EMAIL="isEmail";
+ public static final String IS_IBAN="isIBAN";
+ public static final String IS_CAP="isCAP";
+ public static final String IS_CODICE_FISCALE="isCodiceFiscale";
+ public static final String IS_PIVA="isPIVA";
}
diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java
index ab882abd..820c261d 100644
--- a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java
+++ b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java
@@ -6,6 +6,7 @@ import net.gepafin.tendermanagement.entities.*;
import net.gepafin.tendermanagement.model.request.*;
import net.gepafin.tendermanagement.model.response.ContentResponseBean;
import net.gepafin.tendermanagement.model.response.FormResponseBean;
+import net.gepafin.tendermanagement.model.response.VatNumberResponseBean;
import net.gepafin.tendermanagement.repositories.*;
import net.gepafin.tendermanagement.service.CallService;
import net.gepafin.tendermanagement.util.DateTimeUtil;
@@ -16,6 +17,7 @@ import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundExceptio
import net.gepafin.tendermanagement.web.rest.api.errors.Status;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
import java.text.MessageFormat;
import java.time.LocalDateTime;
@@ -45,6 +47,9 @@ public class FormDao {
@Autowired
private FlowEdgesRepository flowEdgesRepository;
+ @Autowired
+ private VatCheckDao vatCheckDao;
+
@Autowired
private CallRepository callRepository;
@@ -180,7 +185,7 @@ public class FormDao {
}
public void validateFormField(List applicationFormFieldRequestList, ApplicationEntity applicationEntity, FormEntity formEntity) {
- Map formFieldMap = new LinkedHashMap();
+ Map formFieldMap = new LinkedHashMap();
for(ApplicationFormFieldRequestBean applicationFormFieldRequestBean:applicationFormFieldRequestList) {
formFieldMap.put(applicationFormFieldRequestBean.getFieldId(),applicationFormFieldRequestBean.getFieldValue());
}
@@ -191,20 +196,25 @@ public class FormDao {
FieldValidator validator = FieldValidator.create();
formResponseBean.getContent().forEach(contentResponseBean -> {
String fieldId = contentResponseBean.getId();
- String value = formFieldMap.get(fieldId);
+ String value = String.valueOf(formFieldMap.get(fieldId));
+
if(value == null && isApplicationFormExist) {
return;
}
- FieldValidatorBean fieldValidatorBean = Utils.convertSourceObjectToDestinationObject(contentResponseBean, FieldValidatorBean.class);
+ FieldValidatorBean fieldValidatorBean = Utils.convertSourceObjectToDestinationObject(contentResponseBean.getValidators(), FieldValidatorBean.class);
validator
.notNull(value, fieldId)
+ .isRequired(value,fieldValidatorBean.getIsRequired(),fieldId)
.minLength(value, fieldValidatorBean.getMinLength(), fieldId) // Only applies if minLength is not null
.maxLength(value, fieldValidatorBean.getMaxLength(), fieldId) // Only applies if maxLength is not null
- .matchesPattern(value, fieldValidatorBean.getPattern(), fieldId); // Only applies if pattern is present
+ .matchesPattern(value, fieldValidatorBean.getPattern(), fieldId) // Only applies if pattern is present
+ .validateCustom(value, fieldValidatorBean.getCustom(), fieldId); // Add the custom validation here
+ if (fieldValidatorBean.getCustom() != null && fieldValidatorBean.getCustom().equals(GepafinConstant.IS_PIVA)) {
+ String error = validateVatNumber(value, fieldValidatorBean.getCustom(), fieldId);
+ validator.addError(error);
+ }
});
-
validator.validate();
-
}
private Boolean getApplicationFormExist(ApplicationFormEntity applicationFormEntity) {
@@ -213,4 +223,20 @@ public class FormDao {
}
return false;
}
+
+ public String validateVatNumber(String value,String customRule,String fieldId){
+ String error=null;
+ if (value.matches("^\\d{1,11}$")) {
+ Map customData=null;
+ try {
+ Map vatCheckResponse = vatCheckDao.checkVatNumberApi(value);
+ if (Boolean.FALSE.equals(CollectionUtils.isEmpty(vatCheckResponse))) {
+ customData = vatCheckResponse;
+ }
+ } catch (Exception e) {
+ error=(MessageFormat.format(Translator.toLocale(GepafinConstant.VALIDATION_VALID_PIVA), fieldId));
+ }
+ }
+ return error;
+ }
}
diff --git a/src/main/java/net/gepafin/tendermanagement/dao/VatCheckDao.java b/src/main/java/net/gepafin/tendermanagement/dao/VatCheckDao.java
new file mode 100644
index 00000000..4d1d0f58
--- /dev/null
+++ b/src/main/java/net/gepafin/tendermanagement/dao/VatCheckDao.java
@@ -0,0 +1,74 @@
+package net.gepafin.tendermanagement.dao;
+
+import feign.FeignException;
+import net.gepafin.tendermanagement.constants.GepafinConstant;
+import net.gepafin.tendermanagement.service.feignClient.VatCheckService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+
+import java.net.URI;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+@Component
+public class VatCheckDao {
+
+ @Autowired
+ private VatCheckService vatCheckService;
+
+ @Value("${vatCheckNewToken}")
+ public String vatCheckNewToken;
+
+ @Value("${isVatCheckGloballyDisabled}")
+ public String isVatCheckGloballyDisabled;
+
+ public final Logger log = LoggerFactory.getLogger(VatCheckDao.class);
+
+
+
+ public Map checkVatNumberApi(String vatNumber) {
+ if (Boolean.TRUE.equals(Boolean.parseBoolean(isVatCheckGloballyDisabled))) {
+ return new HashMap<>();
+ }
+ Map responseBody = new HashMap<>();
+ try {
+ HttpHeaders headers = new HttpHeaders();
+ headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ headers.set(GepafinConstant.AUTHORIZATION, "Bearer " + vatCheckNewToken);
+ headers.add(org.apache.http.HttpHeaders.USER_AGENT,
+ "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0");
+
+ URI baseUrl = URI.create(GepafinConstant.CHECK_VATNUMBER_V2_NEW_URL);
+ ResponseEntity