diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index f2d1762c..603a1b0f 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -9,6 +9,7 @@ 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.entities.SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum; import net.gepafin.tendermanagement.enums.*; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean; @@ -18,9 +19,8 @@ import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.service.*; import net.gepafin.tendermanagement.util.DateTimeUtil; -import net.gepafin.tendermanagement.util.Validator; -import net.gepafin.tendermanagement.entities.SystemEmailTemplatesEntity.SystemEmailTemplatesEntityTypeEnum; 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; @@ -29,10 +29,8 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Component; -import java.time.temporal.ChronoUnit; - - import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; import java.util.*; import java.util.stream.Collectors; @@ -175,7 +173,8 @@ public class ApplicationAmendmentRequestDao { try { List> dataList = objectMapper.readValue( - content, new TypeReference>>() {}); + content, new TypeReference>>() { + }); for (Map data : dataList) { if (target.equals(data.get("name"))) { @@ -189,19 +188,19 @@ public class ApplicationAmendmentRequestDao { return filteredList; } - public ApplicationAmendmentRequestResponse createApplicationAmendmentRequest(Long applicationEvaluationId, ApplicationAmendmentRequest applicationAmendmentRequest){ + public ApplicationAmendmentRequestResponse createApplicationAmendmentRequest(Long applicationEvaluationId, ApplicationAmendmentRequest applicationAmendmentRequest) { log.info("Submiting application data for amendment Process with details: {}", applicationEvaluationId); ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity = createApplicationAmendmentRequestEntity(applicationAmendmentRequest, applicationEvaluationId); ApplicationAmendmentRequestResponse applicationAmendmentRequestResponse = convertEntityToResponse(applicationAmendmentRequestEntity); log.info("Application submitted successfully for amendment", applicationAmendmentRequestResponse); - if(Boolean.TRUE.equals(applicationAmendmentRequestResponse.getIsSendEmail())){ + if (Boolean.TRUE.equals(applicationAmendmentRequestResponse.getIsSendEmail())) { emailNotificationDao.sendMailToNotifyBeneficiaryRegardingNewAmendment(applicationAmendmentRequestEntity); } return applicationAmendmentRequestResponse; } - public ApplicationAmendmentRequestEntity createApplicationAmendmentRequestEntity(ApplicationAmendmentRequest applicationAmendmentRequest,Long applicationEvaluationId){ + public ApplicationAmendmentRequestEntity createApplicationAmendmentRequestEntity(ApplicationAmendmentRequest applicationAmendmentRequest,Long applicationEvaluationId) { ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity = new ApplicationAmendmentRequestEntity(); applicationAmendmentRequestEntity.setNote(applicationAmendmentRequest.getNote()); applicationAmendmentRequestEntity.setResponseDays(applicationAmendmentRequest.getResponseDays()); @@ -219,7 +218,7 @@ public class ApplicationAmendmentRequestDao { if (applicationAmendmentRequest.getFormFields() != null) { List formFieldRequestBean = applicationAmendmentRequest.getFormFields().stream() .filter(AmendmentFormFieldResponse::isSelected) - .map(amendmentFormFieldRequest->{ + .map(amendmentFormFieldRequest -> { ApplicationFormFieldRequestBean formField = new ApplicationFormFieldRequestBean(); formField.setFieldId(amendmentFormFieldRequest.getFieldId()); formField.setFieldValue(null); @@ -252,15 +251,15 @@ public class ApplicationAmendmentRequestDao { return applicationAmendment; } - public ApplicationAmendmentRequestEntity saveApplicationAmendmentRequestEntity(ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity){ - ApplicationAmendmentRequestEntity applicationAmendmentRequest= applicationAmendmentRequestRepository.save(applicationAmendmentRequestEntity); + public ApplicationAmendmentRequestEntity saveApplicationAmendmentRequestEntity(ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity) { + ApplicationAmendmentRequestEntity applicationAmendmentRequest = applicationAmendmentRequestRepository.save(applicationAmendmentRequestEntity); return applicationAmendmentRequest; } - public ApplicationAmendmentRequestResponse convertEntityToResponse(ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity){ + public ApplicationAmendmentRequestResponse convertEntityToResponse(ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity) { ApplicationAmendmentRequestResponse applicationAmendmentRequestResponse = new ApplicationAmendmentRequestResponse(); applicationAmendmentRequestResponse.setId(applicationAmendmentRequestEntity.getId()); - Long applicationId= applicationAmendmentRequestEntity.getApplicationId(); + Long applicationId = applicationAmendmentRequestEntity.getApplicationId(); ApplicationEntity application = applicationService.validateApplication(applicationId); applicationAmendmentRequestResponse.setApplicationId(applicationId); @@ -294,26 +293,54 @@ public class ApplicationAmendmentRequestDao { applicationAmendmentRequestResponse.setProtocolNumber(protocolNumber); applicationAmendmentRequestResponse.setBeneficiaryName(beneficiaryName); + List forms = applicationFormRepository.findByApplicationId(applicationId); + List allFormFields = new ArrayList<>(); + + for (ApplicationFormEntity form : forms) { + String content = form.getForm().getContent(); + List> result = filterByName(content, "fileupload"); + allFormFields.addAll(getIdAndLabelFromResult(result)); + } + + Map fieldIdToLabelMap = allFormFields.stream() + .collect(Collectors.toMap(AmendmentFormFieldResponse::getFieldId, AmendmentFormFieldResponse::getLabel)); + String formFieldsJson = applicationAmendmentRequestEntity.getFormFields(); List formFields = Utils.convertJsonToList( - formFieldsJson, new TypeReference>() {}); - + formFieldsJson, new TypeReference>() { + }); + for (AmendmentFormFieldResponse formField : formFields) { + String label = fieldIdToLabelMap.get(formField.getFieldId()); + formField.setLabel(label); + formField.setSelected(true); + } // Set the filtered formFields in the response applicationAmendmentRequestResponse.setFormFields(formFields); String applicationFormFieldsJson = applicationAmendmentRequestEntity.getFormFields(); List applicationFormFields = Utils.convertJsonToList( - formFieldsJson, new TypeReference>() {}); + formFieldsJson, new TypeReference>() { + }); List fileDetailResponses = new ArrayList<>(); for (ApplicationFormFieldResponseBean field : applicationFormFields) { ApplicationFormFieldResponseBean responseBean = new ApplicationFormFieldResponseBean(); responseBean.setFieldId(field.getFieldId()); - responseBean.setApplicationFormId(field.getApplicationFormId()); - responseBean.setId(field.getId()); - responseBean.setCreatedDate(field.getCreatedDate()); - responseBean.setUpdatedDate(field.getUpdatedDate()); + + Optional formFieldEntity = Optional.empty(); + for (ApplicationFormEntity form : forms) { + formFieldEntity = applicationFormFieldRepository + .findByApplicationFormIdAndFieldId(form.getId(), field.getFieldId()); + if (formFieldEntity.isPresent()) { + // Set the applicationFormId from the matching form + responseBean.setApplicationFormId(form.getId()); + responseBean.setId(formFieldEntity.get().getId()); + responseBean.setCreatedDate(formFieldEntity.get().getCreatedDate()); + responseBean.setUpdatedDate(formFieldEntity.get().getUpdatedDate()); + break; + } + } // Check if fieldValue is not null and is a String if (field.getFieldValue() instanceof String && field.getFieldValue() != null && !((String) field.getFieldValue()).isBlank()) { @@ -363,7 +390,7 @@ public class ApplicationAmendmentRequestDao { public void deleteById(Long id) { log.info("Deleting assigned application with ID: {}", id); - ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity= validateApplicationAmendmentRequest(id); + ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity = validateApplicationAmendmentRequest(id); applicationAmendmentRequestEntity.setIsDeleted(true); saveApplicationAmendmentRequestEntity(applicationAmendmentRequestEntity); log.info(" Application amendment deleted with ID: {}", id); @@ -377,11 +404,11 @@ public class ApplicationAmendmentRequestDao { return response; } - public List getAllApplicationAmendmentRequest(HttpServletRequest request,Long userId) { - if(validator.checkIsPreInstructor() && userId == null) { + public List getAllApplicationAmendmentRequest(HttpServletRequest request, Long userId) { + if (validator.checkIsPreInstructor() && userId == null) { throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.USER_ID_NOT_NULL_MSG)); } - if(userId != null) { + if (userId != null) { validator.validatePreInstructor(request, userId); } Specification spec = search(userId); @@ -563,7 +590,8 @@ public class ApplicationAmendmentRequestDao { formFieldsList = new ArrayList<>(); // If no existing data, start with an empty list } else { // Step 2: Deserialize the existing JSON into a list of objects - formFieldsList = new ObjectMapper().readValue(existingFormFieldsJson, new TypeReference>() {}); + formFieldsList = new ObjectMapper().readValue(existingFormFieldsJson, new TypeReference>() { + }); } // Step 3: Check if the field ID already exists in the list and update it @@ -579,7 +607,7 @@ public class ApplicationAmendmentRequestDao { // If field wasn't updated, log a warning message instead of adding a new field if (!fieldUpdated) { log.warn("Field ID {} does not exist in the form fields for application amendment ID {}", updatedFormField.getFieldId(), applicationAmendment.getId()); - throw new CustomValidationException(Status.NOT_FOUND,"Field ID {} does not exist in the form fields for application amendment ID {}"); + throw new CustomValidationException(Status.NOT_FOUND, "Field ID {} does not exist in the form fields for application amendment ID {}"); } @@ -595,7 +623,7 @@ public class ApplicationAmendmentRequestDao { } } else { log.warn("No form field data to update for application amendment ID {}", applicationAmendment.getId()); - throw new CustomValidationException(Status.NOT_FOUND,"No form field data to update for application amendment ID {}"); + throw new CustomValidationException(Status.NOT_FOUND, "No form field data to update for application amendment ID {}"); } } @@ -609,8 +637,8 @@ public class ApplicationAmendmentRequestDao { .map(this::convertEntityToResponse) .collect(Collectors.toList()); } - - public ApplicationAmendmentRequestResponse closeAmendmentRequest(Long id, CloseAmendmentRequest closeAmendmentRequest){ + + public ApplicationAmendmentRequestResponse closeAmendmentRequest(Long id, CloseAmendmentRequest closeAmendmentRequest) { log.info("Closing application amendement with ID: {}", id); ApplicationAmendmentRequestEntity existingApplicationAmendment = validateApplicationAmendmentRequest(id); @@ -636,37 +664,40 @@ public class ApplicationAmendmentRequestDao { return convertEntityToResponse(request); } - public List getAmendmentByApplicationId(HttpServletRequest request, Long applicationId,List statuses) { + public List getAmendmentByApplicationId(HttpServletRequest request, Long applicationId, List statuses) { log.info("Fetching the Amendment data from application id {}", applicationId); ApplicationEntity application = applicationService.validateApplication(applicationId); - List applicationAmendmentRequestEntity=applicationAmendmentRequestRepository.findByApplicationIdAndIsDeletedFalse(applicationId); - if(statuses!=null && !statuses.isEmpty()) { + List applicationAmendmentRequestEntity = applicationAmendmentRequestRepository.findByApplicationIdAndIsDeletedFalse(applicationId); + if (statuses != null && !statuses.isEmpty()) { List statusStrings = statuses.stream().map(Enum::name).collect(Collectors.toList()); - applicationAmendmentRequestEntity = applicationAmendmentRequestRepository.findByApplicationIdAndStatusInAndIsDeletedFalse(application.getId(), statusStrings); - } if(!applicationAmendmentRequestEntity.isEmpty()) { - ApplicationAmendmentRequestEntity applicationAmendmentRequest=applicationAmendmentRequestEntity.get(0); - Optional entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(applicationAmendmentRequest.getApplicationEvaluationEntity().getId()); - if (entityOptional.isPresent()) { - if (Boolean.FALSE.equals(validator.checkIsBeneficiary())) { - validator.validatePreInstructor(request, entityOptional.get().getUserId()); - } else { - validator.validateUserId(request, entityOptional.get().getAssignedApplicationsEntity().getApplication().getUserId()); - } - }} - List response=new ArrayList<>(); - if(applicationAmendmentRequestEntity!=null) { - response= applicationAmendmentRequestEntity.stream() + applicationAmendmentRequestEntity = applicationAmendmentRequestRepository.findByApplicationIdAndStatusInAndIsDeletedFalse(application.getId(), statusStrings); + } + if (!applicationAmendmentRequestEntity.isEmpty()) { + ApplicationAmendmentRequestEntity applicationAmendmentRequest = applicationAmendmentRequestEntity.get(0); + Optional entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(applicationAmendmentRequest.getApplicationEvaluationEntity().getId()); + if (entityOptional.isPresent()) { + if (Boolean.FALSE.equals(validator.checkIsBeneficiary())) { + validator.validatePreInstructor(request, entityOptional.get().getUserId()); + } else { + validator.validateUserId(request, entityOptional.get().getAssignedApplicationsEntity().getApplication().getUserId()); + } + } + } + List response = new ArrayList<>(); + if (applicationAmendmentRequestEntity != null) { + response = applicationAmendmentRequestEntity.stream() .map(this::convertEntityToResponse) .collect(Collectors.toList()); } return response; } + public ApplicationAmendmentRequestResponse updateApplicationAmendmentStatus( - Long id,ApplicationAmendmentRequestEnum statusTypeEnum) { + Long id, ApplicationAmendmentRequestEnum statusTypeEnum) { log.info("Updating application amendement with status: {}", id); ApplicationAmendmentRequestEntity existingApplicationAmendment = validateApplicationAmendmentRequest(id); - if(Boolean.TRUE.equals(existingApplicationAmendment.getStatus().equals(ApplicationAmendmentRequestEnum.AWAITING.getValue())) && Boolean.TRUE.equals(statusTypeEnum.equals(ApplicationAmendmentRequestEnum.RESPONSE_RECEIVED))){ + if (Boolean.TRUE.equals(existingApplicationAmendment.getStatus().equals(ApplicationAmendmentRequestEnum.AWAITING.getValue())) && Boolean.TRUE.equals(statusTypeEnum.equals(ApplicationAmendmentRequestEnum.RESPONSE_RECEIVED))) { existingApplicationAmendment.setStatus(ApplicationAmendmentRequestEnum.RESPONSE_RECEIVED.getValue()); existingApplicationAmendment.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); applicationAmendmentRequestRepository.save(existingApplicationAmendment); @@ -675,6 +706,7 @@ public class ApplicationAmendmentRequestDao { log.info("Amendment status updated successfully: {}", response); return response; } + public void sendReminderEmail(Long amendmentId) { ApplicationAmendmentRequestEntity amendment = applicationAmendmentRequestRepository.findByIdAndIsDeletedFalse(amendmentId) .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, @@ -690,7 +722,7 @@ public class ApplicationAmendmentRequestDao { String subject = prepareSubject(emailTemplate, amendment, beneficiaryUser); String body = prepareBody(emailTemplate, amendment, beneficiaryUser); String email = beneficiaryUser.getEmail(); - if (Boolean.TRUE.equals(amendment.getIsEmail())&&email != null && !email.isEmpty()) { + if (Boolean.TRUE.equals(amendment.getIsEmail()) && email != null && !email.isEmpty()) { emailNotificationDao.sendMail(hub.getId(), subject, body, List.of(email)); } else { throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.BENEFICIARY_EMAIL_NOT_FOUND_MSG)); 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 9aa2ec42..998e3bb9 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 @@ -1720,4 +1720,8 @@ + + + +