diff --git a/pom.xml b/pom.xml
index ad01e409..e8fb4bca 100644
--- a/pom.xml
+++ b/pom.xml
@@ -167,6 +167,12 @@
+
+ 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/config/Translator.java b/src/main/java/net/gepafin/tendermanagement/config/Translator.java
index b3c02401..35ad8227 100644
--- a/src/main/java/net/gepafin/tendermanagement/config/Translator.java
+++ b/src/main/java/net/gepafin/tendermanagement/config/Translator.java
@@ -22,4 +22,9 @@ public class Translator {
Locale locale = LocaleContextHolder.getLocale();
return messageSource.getMessage(msgCode, null, locale);
}
+
+ public static String toLocale(String key, Object... args) {
+ return messageSource.getMessage(key, args, LocaleContextHolder.getLocale());
+ }
+
}
\ No newline at end of file
diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java
index 4ed09d15..395d883c 100644
--- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java
+++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java
@@ -132,6 +132,29 @@ public class GepafinConstant {
public static final String APPLICATION_ALREADY_SUBMITTED="application.already.submitted";
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 APPLICATION_IS_INCOMPLETE_MSG = "application.is.incomplete";
+ 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";
+ public static final String FAILED_RETAIN_FIELD="failed.retain.field";
}
diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java
index d6e5e77a..f8e86e7e 100644
--- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java
+++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java
@@ -352,12 +352,26 @@ public class ApplicationDao {
}
- public void updateApplicationStatus(Long applicationId, ApplicationStatusTypeEnum status) {
- ApplicationEntity applicationEntity = validateApplication(applicationId);
- applicationEntity.setStatus(status.getValue());
- if(status.equals(ApplicationStatusTypeEnum.SUBMIT)) {
- applicationEntity.setSubmissionDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
- }
- saveApplicationEntity(applicationEntity);
- }
+ public void updateApplicationStatus(Long applicationId, ApplicationStatusTypeEnum status) {
+ ApplicationEntity applicationEntity = validateApplication(applicationId);
+
+ if (status.equals(ApplicationStatusTypeEnum.SUBMIT)) {
+ CallEntity callEntity = applicationEntity.getCall();
+ Long initialFormId = callEntity.getInitialForm();
+ Long finalFormId = callEntity.getFinalForm();
+// if (initialFormId == null || finalFormId == null) {
+// throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.APPLICATION_IS_INCOMPLETE_MSG));
+// }
+ ApplicationFormEntity initialApplicationForm = applicationFormRepository.findByApplicationIdAndFormId(applicationEntity.getId(), initialFormId);
+ ApplicationFormEntity finalApplicationForm = applicationFormRepository.findByApplicationIdAndFormId(applicationEntity.getId(), finalFormId);
+ if (initialApplicationForm == null || finalApplicationForm == null) {
+ throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.APPLICATION_IS_INCOMPLETE_MSG));
+ }
+ applicationEntity.setStatus(ApplicationStatusTypeEnum.SUBMIT.getValue());
+ applicationEntity.setSubmissionDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
+ } else {
+ applicationEntity.setStatus(status.getValue());
+ }
+ saveApplicationEntity(applicationEntity);
+ }
}
diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java
index 8861ccbc..1b3f60d0 100644
--- a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java
+++ b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java
@@ -3,12 +3,14 @@ package net.gepafin.tendermanagement.dao;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum;
import net.gepafin.tendermanagement.model.response.*;
import net.gepafin.tendermanagement.service.*;
+import net.gepafin.tendermanagement.util.Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
@@ -116,7 +118,7 @@ public class CallDao {
}
callEntity.setStatus(CallStatusEnum.DRAFT.getValue());
callEntity.setAmountMax(createCallRequest.getAmountMax());
- callEntity.setAmount(createCallRequest.getAmountMax());
+ callEntity.setAmount(createCallRequest.getAmount());
callEntity.setConfidi(false);
if (createCallRequest.getConfidi() != null) {
callEntity.setConfidi(createCallRequest.getConfidi());
@@ -424,8 +426,14 @@ public class CallDao {
public CallResponse updateCallStep1(Long callId, UpdateCallRequestStep1 updateCallRequest, Long userId) {
CallEntity callEntity = validateCall(callId);
- validateUpdate(callEntity);
- UserEntity userEntity = userService.validateUser(userId);
+ if(Boolean.TRUE.equals(callEntity.getStatus().equals(CallStatusEnum.PUBLISH.getValue()))) {
+ try {
+ Utils.retainOnlySpecificFields(updateCallRequest, Collections.singletonList("faq"));
+ } catch (IllegalAccessException e) {
+ throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.FAILED_RETAIN_FIELD));
+ }
+ }
+ UserEntity userEntity = userService.validateUser(userId);
isValidDateRange(updateCallRequest, callEntity);
setIfUpdated(callEntity::getName, callEntity::setName, updateCallRequest.getName());
setIfUpdated(callEntity::getDescriptionShort, callEntity::setDescriptionShort,
diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java
index 0ded1ac5..34bf0e59 100644
--- a/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java
+++ b/src/main/java/net/gepafin/tendermanagement/dao/FlowDao.java
@@ -135,9 +135,13 @@ public class FlowDao {
public FlowDataEntity createFlowDataEntity(FlowDataRequestBean flowDataRequestBean,CallEntity call) {
FlowDataEntity flowDataEntity = new FlowDataEntity();
flowDataEntity.setFormId(flowDataRequestBean.getFormId());
+ if(Boolean.FALSE.equals(flowDataRequestBean.getChosenField().isEmpty()) || flowDataRequestBean.getChosenField()!=null){
flowDataEntity.setChoosenField(flowDataRequestBean.getChosenField());
- flowDataEntity.setChoosenValue(flowDataRequestBean.getChosenValue());
- flowDataEntity.setCallId(call.getId());
+ }
+ if(Boolean.FALSE.equals(flowDataRequestBean.getChosenValue().isEmpty()) || flowDataRequestBean.getChosenValue()!=null) {
+ flowDataEntity.setChoosenValue(flowDataRequestBean.getChosenValue());
+ }
+ flowDataEntity.setCallId(call.getId());
return flowDataEntity;
}
diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FlowFormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FlowFormDao.java
index 0df71aa8..f46e61f5 100644
--- a/src/main/java/net/gepafin/tendermanagement/dao/FlowFormDao.java
+++ b/src/main/java/net/gepafin/tendermanagement/dao/FlowFormDao.java
@@ -1,10 +1,12 @@
package net.gepafin.tendermanagement.dao;
+import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
+import net.gepafin.tendermanagement.repositories.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -18,10 +20,6 @@ import net.gepafin.tendermanagement.entities.FlowEdgesEntity;
import net.gepafin.tendermanagement.entities.FormEntity;
import net.gepafin.tendermanagement.enums.FormActionEnum;
import net.gepafin.tendermanagement.model.response.NextOrPreviousFormResponse;
-import net.gepafin.tendermanagement.repositories.ApplicationFormFieldRepository;
-import net.gepafin.tendermanagement.repositories.ApplicationFormRepository;
-import net.gepafin.tendermanagement.repositories.FlowDataRepository;
-import net.gepafin.tendermanagement.repositories.FlowEdgesRepository;
import net.gepafin.tendermanagement.service.FormService;
import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException;
import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException;
@@ -47,7 +45,8 @@ public class FlowFormDao {
@Autowired
private FormService formService;
-
+ @Autowired
+ private FormRepository formRepository;
// Long getNextForm(FormEntity currentFormEntity, ApplicationEntity applicationEntity) {
// // vlaidation if next form findout and cuuent from is not fill the give error
@@ -177,52 +176,79 @@ public class FlowFormDao {
.orElse(null);
}
- public Long getPreviousForm(FormEntity currentFormEntity, ApplicationEntity applicationEntity) {
- // Retrieve the flow edges for the previous forms
- List flowEdgesList = flowEdgesRepository.findByTargetIdAndCallId(
- currentFormEntity.getId(), applicationEntity.getCall().getId());
+// public Long getPreviousForm(FormEntity currentFormEntity, ApplicationEntity applicationEntity) {
+// // Retrieve the flow edges for the previous forms
+// List flowEdgesList = flowEdgesRepository.findByTargetIdAndCallId(
+// currentFormEntity.getId(), applicationEntity.getCall().getId());
+//
+// if (flowEdgesList.isEmpty()) {
+// return null;
+//// throw new ResourceNotFoundException(Status.NOT_FOUND,
+//// Translator.toLocale(GepafinConstant.PREVIOUS_FORM_NOT_FOUND));
+// }
+//
+// // If only one edge exists, return the source form ID
+// if (flowEdgesList.size() == 1) {
+// return flowEdgesList.get(0).getSourceId();
+// }
+//
+// // For multiple edges, find the previous form based on the chosen value
+// List previousFormIds = flowEdgesList.stream()
+// .map(FlowEdgesEntity::getSourceId)
+// .toList();
+//
+// // Fetch the flow data based on previous form IDs
+// List flowDataList = flowDataRepository.findByFormIdInAndCallId(
+// previousFormIds, applicationEntity.getCall().getId());
+//
+// List chosenValues = flowDataList.stream()
+// .map(FlowDataEntity::getChoosenValue)
+// .toList();
+//
+// // Fetch the previous forms based on the chosen field values
+// Set formList = applicationFormFieldRepository
+// .findByFieldValueInAndApplicationFormApplicationId(chosenValues, applicationEntity.getId()).stream()
+// .map(fieldEntity -> fieldEntity.getApplicationForm().getForm())
+// .collect(Collectors.toSet());
+//
+// // Find next form IDs recursively for all forms in the formList
+// List fieldIds = formList.stream()
+// .map(formEntity -> getNextForm(formEntity, applicationEntity))
+// .toList();
+//
+// // Return the first matching previous form ID that corresponds to a next form
+// return previousFormIds.stream()
+// .filter(fieldIds::contains)
+// .findFirst().orElse(null);
+// }
- if (flowEdgesList.isEmpty()) {
- return null;
+ public Long getPreviousForm(FormEntity currentFormEntity, ApplicationEntity applicationEntity) {
+
+ List flowEdgesList = flowEdgesRepository.findByTargetIdAndCallId(
+ currentFormEntity.getId(), applicationEntity.getCall().getId());
+
+ if (flowEdgesList.isEmpty()) {
+ return null;
// throw new ResourceNotFoundException(Status.NOT_FOUND,
// Translator.toLocale(GepafinConstant.PREVIOUS_FORM_NOT_FOUND));
}
- // If only one edge exists, return the source form ID
- if (flowEdgesList.size() == 1) {
- return flowEdgesList.get(0).getSourceId();
- }
+ // // If only one edge exists, return the source form ID
+ // if (flowEdgesList.size() == 1) {
+ // return flowEdgesList.get(0).getSourceId();
+ // }
// For multiple edges, find the previous form based on the chosen value
- List previousFormIds = flowEdgesList.stream()
- .map(FlowEdgesEntity::getSourceId)
- .toList();
+ List previousFormIds = flowEdgesList.stream()
+ .map(FlowEdgesEntity::getSourceId)
+ .toList();
- // Fetch the flow data based on previous form IDs
- List flowDataList = flowDataRepository.findByFormIdInAndCallId(
- previousFormIds, applicationEntity.getCall().getId());
+ List previousForms = formRepository.findByIdIn(previousFormIds);
- List chosenValues = flowDataList.stream()
- .map(FlowDataEntity::getChoosenValue)
- .toList();
+ previousForms.sort(Comparator.comparing(FormEntity::getCreatedDate).reversed());
- // Fetch the previous forms based on the chosen field values
- Set formList = applicationFormFieldRepository
- .findByFieldValueInAndApplicationFormApplicationId(chosenValues, applicationEntity.getId()).stream()
- .map(fieldEntity -> fieldEntity.getApplicationForm().getForm())
- .collect(Collectors.toSet());
-
- // Find next form IDs recursively for all forms in the formList
- List fieldIds = formList.stream()
- .map(formEntity -> getNextForm(formEntity, applicationEntity))
- .toList();
-
- // Return the first matching previous form ID that corresponds to a next form
- return previousFormIds.stream()
- .filter(fieldIds::contains)
- .findFirst().orElse(null);
+ return previousForms.isEmpty() ? null : previousForms.get(0).getId();
}
-
public NextOrPreviousFormResponse getnextOrPreviousForm(ApplicationEntity applicationEntity, Long formId,
FormActionEnum action) {
Long calculatedFormId = null;
diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java
index 0cc4b2eb..11a27915 100644
--- a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java
+++ b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java
@@ -3,14 +3,11 @@ package net.gepafin.tendermanagement.dao;
import net.gepafin.tendermanagement.config.Translator;
import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.entities.*;
-import net.gepafin.tendermanagement.model.request.ApplicationFormFieldRequestBean;
-import net.gepafin.tendermanagement.model.request.ContentRequestBean;
-import net.gepafin.tendermanagement.model.request.FieldValidatorBean;
-import net.gepafin.tendermanagement.model.request.FormRequest;
+import net.gepafin.tendermanagement.model.request.*;
import net.gepafin.tendermanagement.model.response.ContentResponseBean;
import net.gepafin.tendermanagement.model.response.FormResponseBean;
-import net.gepafin.tendermanagement.repositories.ApplicationFormRepository;
-import net.gepafin.tendermanagement.repositories.FormRepository;
+import net.gepafin.tendermanagement.model.response.VatNumberResponseBean;
+import net.gepafin.tendermanagement.repositories.*;
import net.gepafin.tendermanagement.service.CallService;
import net.gepafin.tendermanagement.util.DateTimeUtil;
import net.gepafin.tendermanagement.util.FieldValidator;
@@ -20,7 +17,9 @@ 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;
import java.util.LinkedHashMap;
import java.util.List;
@@ -42,6 +41,18 @@ public class FormDao {
@Autowired
private CallDao callDao;
+ @Autowired
+ private FlowDataRepository flowDataRepository;
+
+ @Autowired
+ private FlowEdgesRepository flowEdgesRepository;
+
+ @Autowired
+ private VatCheckDao vatCheckDao;
+
+ @Autowired
+ private CallRepository callRepository;
+
public FormEntity saveFormEntity(FormEntity formEntity){
formEntity=formRepository.save(formEntity);
return formEntity;
@@ -66,6 +77,16 @@ public class FormDao {
}
public FormResponseBean createForm(Long callId,FormRequest formRequest){
validateForm(formRequest);
+ CallEntity callEntity=callService.validateCall(callId);
+ List flowDataEntities=flowDataRepository.findByCallId(callId);
+ List flowEdgesEntities=flowEdgesRepository.findByCallId(callId);
+ if(Boolean.FALSE.equals(flowDataEntities.isEmpty() || flowDataEntities==null ) || Boolean.FALSE.equals(flowEdgesEntities.isEmpty() || flowEdgesEntities==null) ){
+ flowDataRepository.deleteAll(flowDataEntities);
+ flowEdgesRepository.deleteAll(flowEdgesEntities);
+ callEntity.setInitialForm(null);
+ callEntity.setFinalForm(null);
+ callRepository.save(callEntity);
+ }
FormEntity formEntity=convertFormRequestToFormEntity(callId,formRequest);
return convertFormEntityToFormResponseBean(formEntity);
}
@@ -74,14 +95,65 @@ public class FormDao {
throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.REQUIRED_PARAMETER_NOT_FOUND_FOR_FORM));
}
}
- public FormResponseBean updateForm(Long formId, FormRequest formRequest){
+ public FormResponseBean updateForm(Long formId, FormRequest formRequest,Boolean forceDeleteFlow){
+ ContentRequestBean contentRequestBean2=null;
+ String choosenField=null;
FormEntity formEntity = validateForm(formId);
- callDao.validateUpdate(formEntity.getCall());
- Utils.setIfUpdated(formEntity::getLabel,formEntity::setLabel,formRequest.getLabel());
- Utils.setIfUpdated(formEntity::getContent,formEntity::setContent,setContentResponseBean(formRequest.getContent()));
- formEntity.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
- formEntity=saveFormEntity(formEntity);
- return convertFormEntityToFormResponseBean(formEntity);
+ callDao.validateUpdate(formEntity.getCall());
+ List contentRequestBean = Utils.convertJsonStringToList(formEntity.getContent(), ContentRequestBean.class);
+ for (ContentRequestBean contentRequestBean1 : contentRequestBean) {
+ FlowDataEntity flowDataEntity = flowDataRepository.findByFormIdAndChoosenField(formEntity.getId(), contentRequestBean1.getId());
+ if (flowDataEntity != null) {
+ choosenField = flowDataEntity.getChoosenField();
+ if (Boolean.TRUE.equals(contentRequestBean1.getId().equals(choosenField))) {
+ contentRequestBean2 = contentRequestBean1;
+ break;
+ }
+ }
+ }
+ if (contentRequestBean2 != null) {
+ List settingRequestBeansDB = contentRequestBean2.getSettings();
+ for (ContentRequestBean contentRequestBeanRequest : formRequest.getContent()) {
+ if (contentRequestBeanRequest.getId().equals(contentRequestBean2.getId())) {
+ for (SettingRequestBean settingRequestBeanRequest : contentRequestBeanRequest.getSettings()) {
+ for (SettingRequestBean settingRequestBeanDB : settingRequestBeansDB) {
+ if (settingRequestBeanRequest.getName().equals(settingRequestBeanDB.getName())) {
+ if (!settingRequestBeanRequest.getValue().equals(settingRequestBeanDB.getValue())) {
+ if (Boolean.TRUE.equals(forceDeleteFlow)) {
+ Utils.setIfUpdated(formEntity::getLabel, formEntity::setLabel, formRequest.getLabel());
+ Utils.setIfUpdated(formEntity::getContent, formEntity::setContent, setContentResponseBean(formRequest.getContent()));
+ formEntity.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
+ formEntity = saveFormEntity(formEntity);
+ List flowDataEntities = flowDataRepository.findByCallId(formEntity.getCall().getId());
+ List flowEdgesEntities = flowEdgesRepository.findByCallId(formEntity.getCall().getId());
+ flowDataRepository.deleteAll(flowDataEntities);
+ flowEdgesRepository.deleteAll(flowEdgesEntities);
+ CallEntity callEntity = formEntity.getCall();
+ callEntity.setInitialForm(null);
+ callEntity.setFinalForm(null);
+ callRepository.save(callEntity);
+ return convertFormEntityToFormResponseBean(formEntity);
+ } else {
+ throw new CustomValidationException(
+ Status.BAD_REQUEST,
+ Translator.toLocale(GepafinConstant.UPDATING_FORM_VALUE_IMPACT_ON_FLOW, choosenField)
+ );
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ else {
+ Utils.setIfUpdated(formEntity::getLabel, formEntity::setLabel, formRequest.getLabel());
+ Utils.setIfUpdated(formEntity::getContent, formEntity::setContent, setContentResponseBean(formRequest.getContent()));
+ formEntity.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now()));
+ formEntity = saveFormEntity(formEntity);
+ return convertFormEntityToFormResponseBean(formEntity);
+ }
+ return convertFormEntityToFormResponseBean(formEntity);
}
public FormEntity validateForm(Long formId) {
@@ -96,6 +168,14 @@ public class FormDao {
}
public void deleteFormById(Long formId){
FormEntity formEntity = validateForm(formId);
+ List flowDataEntities=flowDataRepository.findByCallId(formEntity.getCall().getId());
+ List flowEdgesEntities=flowEdgesRepository.findByCallId(formEntity.getCall().getId());
+ flowDataRepository.deleteAll(flowDataEntities);
+ flowEdgesRepository.deleteAll(flowEdgesEntities);
+ CallEntity callEntity=formEntity.getCall();
+ callEntity.setFinalForm(null);
+ callEntity.setInitialForm(null);
+ callRepository.save(callEntity);
formRepository.delete(formEntity);
}
public List getFormsByCallId(Long callId){
@@ -115,7 +195,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());
}
@@ -126,20 +206,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) {
@@ -148,4 +233,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