From 569adb92d663da809eee5771eef53d2c6710dece Mon Sep 17 00:00:00 2001 From: rajesh Date: Thu, 19 Sep 2024 14:39:14 +0530 Subject: [PATCH 1/3] Fixed form issue --- .../gepafin/tendermanagement/dao/FormDao.java | 88 +++++++++++-------- .../repositories/FlowDataRepository.java | 3 + 2 files changed, 52 insertions(+), 39 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java index ab882abd..59d1b802 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java @@ -90,55 +90,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,Boolean forceDeleteFlow){ + public FormResponseBean updateForm(Long formId, FormRequest formRequest,Boolean forceDeleteFlow){ ContentRequestBean contentRequestBean2=null; + String choosenField=null; FormEntity formEntity = validateForm(formId); - callDao.validateUpdate(formEntity.getCall()); - FlowDataEntity flowDataEntity=flowDataRepository.findByFormIdAndCallId(formEntity.getId(),formEntity.getCall().getId()); - String choosenField=flowDataEntity.getChoosenField(); - List contentRequestBean=Utils.convertJsonStringToList(formEntity.getContent(),ContentRequestBean.class); - for (ContentRequestBean contentRequestBean1:contentRequestBean){ - if(Boolean.TRUE.equals(contentRequestBean1.getId().equals(choosenField))){ - contentRequestBean2=contentRequestBean1; - break; + 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) - ); - } + 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 null; + return null; } public FormEntity validateForm(Long formId) { diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/FlowDataRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/FlowDataRepository.java index 8f752aa9..dffaee53 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/FlowDataRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/FlowDataRepository.java @@ -17,4 +17,7 @@ public interface FlowDataRepository extends JpaRepository { public Optional findByChoosenValueAndFormIdIn(String fieldValue, List nextFormIds); public List findByFormIdInAndCallId(List previousFormIds, Long callId); + + public FlowDataEntity findByFormIdAndChoosenField(Long formId, String choosenField); + } From 79603a0c0d6480a81b1b79be2b941270b98d5cb6 Mon Sep 17 00:00:00 2001 From: rajesh Date: Thu, 19 Sep 2024 15:16:06 +0530 Subject: [PATCH 2/3] updated code --- src/main/java/net/gepafin/tendermanagement/dao/FormDao.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java index 59d1b802..bf8537a5 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FormDao.java @@ -148,7 +148,7 @@ public class FormDao { formEntity = saveFormEntity(formEntity); return convertFormEntityToFormResponseBean(formEntity); } - return null; + return convertFormEntityToFormResponseBean(formEntity); } public FormEntity validateForm(Long formId) { From c1939102c7810e8dc3874fe2598ab3d1e00a8f0e Mon Sep 17 00:00:00 2001 From: nisha Date: Fri, 20 Sep 2024 19:37:47 +0530 Subject: [PATCH 3/3] Updated put api of call --- .../constants/GepafinConstant.java | 2 +- .../net/gepafin/tendermanagement/dao/CallDao.java | 12 ++++++++++-- .../net/gepafin/tendermanagement/util/Utils.java | 14 ++++++++++++++ src/main/resources/message_en.properties | 1 + src/main/resources/message_it.properties | 3 ++- 5 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index acf2e124..6fecacdd 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -133,5 +133,5 @@ 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 FAILED_RETAIN_FIELD="failed.retain.field"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java index 850806fa..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; @@ -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/util/Utils.java b/src/main/java/net/gepafin/tendermanagement/util/Utils.java index 5560809f..055fb8e8 100644 --- a/src/main/java/net/gepafin/tendermanagement/util/Utils.java +++ b/src/main/java/net/gepafin/tendermanagement/util/Utils.java @@ -12,6 +12,7 @@ import org.apache.commons.collections4.MapUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.lang.reflect.Field; import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; import java.util.Base64; @@ -147,4 +148,17 @@ public class Utils { } return null; } + public static void retainOnlySpecificFields(T requestObject, List retainFields) throws IllegalAccessException { + // Get all declared fields of the request object's class + Field[] fields = requestObject.getClass().getDeclaredFields(); + + for (Field field : fields) { + field.setAccessible(true); // To allow access to private fields + + // Check if the field is in the retainFields list + if (!retainFields.contains(field.getName())) { + field.set(requestObject, null); // Set the field to null if not in the retain list + } + } + } } diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index b0449f1e..76fef4eb 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -168,4 +168,5 @@ call.not.published=Call is not published. application.form.not.found=Application form not found. updating.form.value.impact.on.flow=Updating this value of form {0} can make impact on flow. +failed.retain.field=Failed to retain specific fields. diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index 7b464832..c5f4c2c9 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -162,4 +162,5 @@ action.required=Campo azione obbligatorio. call.not.published=La chiamata non č stata pubblicata. application.form.not.found=Modulo di domanda non trovato. -updating.form.value.impact.on.flow=L'aggiornamento di questo valore del modulo {0} puņ avere un impatto sul flusso. \ No newline at end of file +updating.form.value.impact.on.flow=L'aggiornamento di questo valore del modulo {0} puņ avere un impatto sul flusso. +failed.retain.field=Impossibile conservare campi specifici. \ No newline at end of file