package net.gepafin.tendermanagement.dao; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.*; import net.gepafin.tendermanagement.enums.VersionActionTypeEnum; import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.response.ContentResponseBean; import net.gepafin.tendermanagement.model.response.EvaluationFormResponseBean; import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.service.EvaluationCriteriaService; import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.util.Validator; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.util.List; @Component public class EvaluationFormDao { @Autowired private EvaluationFormRepository evaluationFormRepository; @Autowired private CallDao callDao; @Autowired private VatCheckDao vatCheckDao; @Autowired private CallRepository callRepository; @Autowired private Validator validator; @Autowired private CriteriaFormFieldRepository criteriaFormFieldRepository; @Autowired private EvaluationCriteriaService evaluationCriteriaService; @Autowired private LoggingUtil loggingUtil; @Autowired private HttpServletRequest request; public EvaluationFormEntity saveEvaluationFormEntity(EvaluationFormEntity evaluationFormEntity){ evaluationFormEntity= evaluationFormRepository.save(evaluationFormEntity); return evaluationFormEntity; } public EvaluationFormEntity convertEvaluationFormRequestToEvaluationFormEntity(CallEntity callEntity, EvaluationFormRequest formRequest) { EvaluationFormEntity evaluationFormEntity = new EvaluationFormEntity(); evaluationFormEntity.setCall(callEntity); evaluationFormEntity.setLabel(formRequest.getLabel()); evaluationFormEntity.setContent(setContentResponseBean(formRequest.getContent())); evaluationFormEntity.setIsDeleted(false); evaluationFormEntity = saveEvaluationFormEntity(evaluationFormEntity); /** This code is responsible for adding a version history log for the "Create form" operation. **/ loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.INSERT).oldData(null).newData(evaluationFormEntity).build()); return evaluationFormEntity; } public EvaluationFormResponseBean convertEvaluationFormEntityToEvaluationFormResponseBean(EvaluationFormEntity formEntity) { EvaluationFormResponseBean evaluationFormResponseBean =new EvaluationFormResponseBean(); evaluationFormResponseBean.setId(formEntity.getId()); evaluationFormResponseBean.setContent(setContent(formEntity)); evaluationFormResponseBean.setLabel(formEntity.getLabel()); evaluationFormResponseBean.setCallId(formEntity.getCall().getId()); evaluationFormResponseBean.setCallStatus(formEntity.getCall().getStatus()); return evaluationFormResponseBean; } private List setContent(EvaluationFormEntity formEntity) { List contentList = Utils.convertJsonStringToList(formEntity.getContent(), ContentResponseBean.class); return contentList; } public EvaluationFormResponseBean createEvaluationForm(CallEntity callEntity, EvaluationFormRequest formRequest) { validateEvaluationForm(formRequest); EvaluationFormEntity formEntity = convertEvaluationFormRequestToEvaluationFormEntity(callEntity, formRequest); return convertEvaluationFormEntityToEvaluationFormResponseBean(formEntity); } public void validateEvaluationForm(EvaluationFormRequest formRequest){ if(formRequest.getContent()==null || formRequest.getLabel()==null ){ throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.REQUIRED_PARAMETER_NOT_FOUND_FOR_FORM)); } } public EvaluationFormResponseBean updateEvaluationForm(UserEntity user, Long formId, EvaluationFormRequest formRequest) { EvaluationFormEntity evaluationFormEntity = validateForm(formId); //cloned for old form data EvaluationFormEntity oldFormData = Utils.getClonedEntityForData(evaluationFormEntity); Utils.setIfUpdated(evaluationFormEntity::getLabel, evaluationFormEntity::setLabel, formRequest.getLabel()); Utils.setIfUpdated(evaluationFormEntity::getContent, evaluationFormEntity::setContent, setContentResponseBean(formRequest.getContent())); evaluationFormEntity.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); evaluationFormEntity = saveEvaluationFormEntity(evaluationFormEntity); /** This code is responsible for adding a version history log for the "Update form data" operation. **/ loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldFormData).newData(evaluationFormEntity).build()); return convertEvaluationFormEntityToEvaluationFormResponseBean(evaluationFormEntity); } public EvaluationFormEntity validateForm(Long formId) { EvaluationFormEntity evaluationFormEntity = evaluationFormRepository.findByIdAndIsDeletedFalse(formId); if (evaluationFormEntity == null) { throw new ResourceNotFoundException( Status.NOT_FOUND, Translator.toLocale(GepafinConstant.EVALUATION_FORM_NOT_FOUND) ); } return evaluationFormEntity; } public EvaluationFormResponseBean getEvaluationFormById(UserEntity user, Long formId) { EvaluationFormEntity evaluationFormEntity = validateForm(formId); validator.validateUserWithCall(user, evaluationFormEntity.getCall().getId()); return convertEvaluationFormEntityToEvaluationFormResponseBean(evaluationFormEntity); } public void deleteEvaluationForm(UserEntity user, Long formId){ EvaluationFormEntity evaluationFormEntity = validateForm(formId); EvaluationFormEntity clonedData = Utils.getClonedEntityForData(evaluationFormEntity); validator.validateUserWithCall(user, evaluationFormEntity.getCall().getId()); evaluationFormEntity.setIsDeleted(Boolean.TRUE); evaluationFormEntity = saveEvaluationFormEntity(evaluationFormEntity); /** This code is responsible for adding a version history log for the "soft deleting evaluation from field" operation. **/ loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.SOFT_DELETE).oldData(clonedData).newData(evaluationFormEntity).build()); } public EvaluationFormResponseBean getEvaluationFormByCallId(CallEntity callEntity) { if (callEntity == null) { throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.CALL_NOT_FOUND)); } EvaluationFormEntity formEntity = evaluationFormRepository .findByCallIdAndIsDeletedFalse(callEntity.getId()); if(formEntity!=null) return convertEvaluationFormEntityToEvaluationFormResponseBean(formEntity); else return null; } public String setContentResponseBean(List contentRequestBeans){ String stringContentRequest = Utils.convertListToJsonString(contentRequestBeans); List cloneContentRequestBeans = Utils.convertJsonStringToList(stringContentRequest, ContentRequestBean.class); cloneContentRequestBeans.forEach(data->data.setCriteria(null)); return Utils.convertListToJsonString(cloneContentRequestBeans); } }