diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index ce95453b..ed1b30d4 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -82,7 +82,6 @@ public class GepafinConstant { public static final String STATUS_SAME_ERROR = "status.same.error"; public static final String INVALID_STATUS_CHANGE_FROM_DRAFT = "invalid.status.change.from.draft"; public static final String STATUS_CANNOT_BE_CHANGED = "status.cannot.be.changed"; - public static final String INVALID_STATUS_TRANSITION = "invalid.status.transition"; public static final String PUBLISHED_CALL_NOT_UPDATE = "published.call.not.update"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java index 61e840a5..0d4f7217 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CallDao.java @@ -79,7 +79,7 @@ public class CallDao { UserEntity userEntity = userService.validateUser(userId); createCallRequest.setRegionId(userEntity.getRoleEntity().getRegion().getId()); CallEntity callEntity = convertToCallEntity(createCallRequest); - convertToFaqEntities(createCallRequest.getFaq(), callEntity, userEntity); + convertToFaqEntities(createCallRequest.getFaq(), callEntity, userEntity,LookUpDataTypeEnum.FAQ); convertLookUpDataEntities(createCallRequest.getAimedTo(), callEntity, LookUpDataTypeEnum.AIMED_TO); // createCallResponseBean = assembleCreateCallResponseBean(callEntity, Collections.emptyList(), @@ -199,21 +199,33 @@ public class CallDao { return documentEntity; } - public List convertToFaqEntities(List faqReqList, CallEntity callEntity, UserEntity userEntity) { + public List convertToFaqEntities(List faqReqList, CallEntity callEntity, UserEntity userEntity, LookUpDataTypeEnum type) { if (faqReqList == null) { return null; } - List faqEntities = faqReqList.stream().map(req -> convertToFaqEntity(req, callEntity, userEntity)) + List existingFaqEntities = faqRepository.findByCallIdAndLookupDataTypeAndIsDeletedFalse(callEntity.getId(), type.getValue()); + List incomingIds = faqReqList.stream() + .map(FaqReq::getId) + .filter(id -> id != null && id > 0) + .collect(Collectors.toList()); + existingFaqEntities.stream() + .filter(entity -> !incomingIds.contains(entity.getId())) + .forEach(this::softDeleteFaq); + List faqEntities = faqReqList.stream() + .map(req -> convertToFaqEntity(req, callEntity, userEntity, type)) .collect(Collectors.toList()); faqRepository.saveAll(faqEntities); return faqEntities; } - public FaqEntity convertToFaqEntity(FaqReq faqReq, CallEntity callEntity, UserEntity userEntity) { + + public FaqEntity convertToFaqEntity(FaqReq faqReq, CallEntity callEntity, UserEntity userEntity,LookUpDataTypeEnum type) { FaqEntity faqEntity = new FaqEntity(); + LookUpDataEntity lookupDataEntity = convertLookUpDataRequestIntoLookUpDataEntity(faqReq, type); validateFaqEntity(faqReq.getQuestion()); faqEntity.setUser(userEntity); - faqEntity.setIsVisible(false); + faqEntity.setIsVisible(true); + faqEntity.setLookupData(lookupDataEntity); if (faqReq.getIsVisible() != null) { faqEntity.setIsVisible(faqReq.getIsVisible()); } @@ -321,6 +333,9 @@ public class CallDao { public FaqResponseBean convertToFaqResponseBean(FaqEntity entity) { FaqResponseBean responseBean = new FaqResponseBean(); responseBean.setId(entity.getId()); + responseBean.setLookUpDataId(entity.getLookupData().getId()); + responseBean.setValue(entity.getLookupData().getValue()); + responseBean.setTitle(entity.getLookupData().getTitle()); responseBean.setQuestionShort(entity.getQuestionShort()); responseBean.setResponseShort(entity.getResponseShort()); responseBean.setResponse(entity.getResponse()); @@ -666,6 +681,7 @@ public class CallDao { callEntity.setStatus(CallStatusEnum.READY_TO_PUBLISH.getValue()); callRepository.save(callEntity); callResponseBean.setCurrentStep(GepafinConstant.VALIDATE_REQUEST); + callResponseBean.setStatus(CallStatusEnum.READY_TO_PUBLISH); return callResponseBean; } @@ -696,9 +712,6 @@ public class CallDao { case EXPIRED: throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.STATUS_CANNOT_BE_CHANGED)); - default: - throw new CustomValidationException(Status.VALIDATION_ERROR, - Translator.toLocale(GepafinConstant.INVALID_STATUS_TRANSITION)); } } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/FaqDao.java b/src/main/java/net/gepafin/tendermanagement/dao/FaqDao.java index 8d38dfa4..0b8d02c6 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/FaqDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/FaqDao.java @@ -4,6 +4,7 @@ import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.CallEntity; import net.gepafin.tendermanagement.entities.FaqEntity; +import net.gepafin.tendermanagement.entities.LookUpDataEntity; import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.model.request.FaqReq; import net.gepafin.tendermanagement.model.response.FaqResponseBean; @@ -39,7 +40,7 @@ public class FaqDao { .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.CALL_NOT_FOUND))); UserEntity userEntity = userService.validateUser(userId); - entity = callDao.convertToFaqEntity(faqRequest, callEntity, userEntity); + entity = callDao.convertToFaqEntity(faqRequest, callEntity, userEntity, LookUpDataEntity.LookUpDataTypeEnum.FAQ); faqRepository.save(entity); return convertFaqEntityToResponseBean(entity); } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/FaqEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/FaqEntity.java index d5e47df8..04a1c11b 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/FaqEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/FaqEntity.java @@ -39,6 +39,10 @@ public class FaqEntity extends BaseEntity { @Column(name = "RESPONSE", columnDefinition = "TEXT") private String response; + @ManyToOne + @JoinColumn(name = "LOOKUP_DATA_ID") + private LookUpDataEntity lookupData; + @Column(name = "RESPONSE_DATE") private LocalDateTime responseDate; diff --git a/src/main/java/net/gepafin/tendermanagement/entities/LookUpDataEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/LookUpDataEntity.java index 41ca9ba7..5941b7b8 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/LookUpDataEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/LookUpDataEntity.java @@ -21,7 +21,8 @@ public class LookUpDataEntity extends BaseEntity{ public enum LookUpDataTypeEnum { CHECKLIST("CHECKLIST"), AIMED_TO("AIMED_TO"), - EVALUATION_CRITERIA("EVALUATION_CRITERIA"); + EVALUATION_CRITERIA("EVALUATION_CRITERIA"), + FAQ("FAQ"); private String value; diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/FaqReq.java b/src/main/java/net/gepafin/tendermanagement/model/request/FaqReq.java index 618c03c0..b8bd81fb 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/FaqReq.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/FaqReq.java @@ -3,7 +3,7 @@ package net.gepafin.tendermanagement.model.request; import lombok.Data; @Data -public class FaqReq { +public class FaqReq extends LookUpDataReq{ private Long id; private Boolean isVisible; diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/FaqResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/FaqResponseBean.java index 48529d1d..c6846e25 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/FaqResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/FaqResponseBean.java @@ -23,4 +23,12 @@ public class FaqResponseBean extends BaseBean { private LocalDateTime responseDate; + private Long lookUpDataId; + + private String title; + + private String value; + + + } diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/FaqRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/FaqRepository.java index 4d4927a3..7c1faaad 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/FaqRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/FaqRepository.java @@ -1,5 +1,6 @@ package net.gepafin.tendermanagement.repositories; +import net.gepafin.tendermanagement.entities.EvaluationCriteriaEntity; import net.gepafin.tendermanagement.entities.FaqEntity; import java.util.List; @@ -17,4 +18,6 @@ public interface FaqRepository extends JpaRepository { Optional findById(@Param("id") Long id); List findByCallIdAndIsDeletedFalse(Long callId); + + List findByCallIdAndLookupDataTypeAndIsDeletedFalse(Long callId, String type); } diff --git a/src/main/resources/db/changelog/db.changelog-1.0.0.xml b/src/main/resources/db/changelog/db.changelog-1.0.0.xml index 662534fb..6fc805d6 100644 --- a/src/main/resources/db/changelog/db.changelog-1.0.0.xml +++ b/src/main/resources/db/changelog/db.changelog-1.0.0.xml @@ -453,4 +453,13 @@ + + + + + + + diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index 2a18fd0c..10f36d79 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -54,7 +54,6 @@ update_call_status_success_msg=The call status has been updated successfully. status.same.error=Status is already set. invalid.status.change.from.draft=Status cannot be changed to READY_TO_PUBLISH or PUBLISH from DRAFT. status.cannot.be.changed=Status cannot be changed. -invalid.status.transition=Invalid status transition. published.call.not.update=Published call cannot be updated. diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index 948477f9..2d1fcc5f 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -54,7 +54,6 @@ update_call_status_success_msg=Lo stato della chiamata status.same.error=Lo stato è già impostato. invalid.status.change.from.draft=Lo stato non può essere cambiato in READY_TO_PUBLISH o PUBLISH da DRAFT. status.cannot.be.changed=Lo stato non può essere cambiato. -invalid.status.transition=Transizione di stato non valida. published.call.not.update=Il bando pubblicato non può essere aggiornato.