From d8b5b318dd84e95fcb94e10ab6ad378361ac1290 Mon Sep 17 00:00:00 2001 From: rajesh Date: Fri, 6 Dec 2024 12:49:07 +0530 Subject: [PATCH] Done ticket GEPAFINBE-122 --- .../dao/ApplicationEvaluationDao.java | 143 +++++++++++------- .../ApplicationEvaluationResponse.java | 2 + .../service/impl/AmazonS3ServiceImpl.java | 9 +- 3 files changed, 99 insertions(+), 55 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index b8fc0b35..43440acb 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -12,10 +12,7 @@ import net.gepafin.tendermanagement.enums.*; import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.repositories.*; -import net.gepafin.tendermanagement.service.ApplicationService; -import net.gepafin.tendermanagement.service.AssignedApplicationsService; -import net.gepafin.tendermanagement.service.CallService; -import net.gepafin.tendermanagement.service.UserService; +import net.gepafin.tendermanagement.service.*; import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.util.Utils; @@ -93,6 +90,9 @@ public class ApplicationEvaluationDao { @Autowired private HttpServletRequest request; + @Autowired + private CompanyService companyService; + private ApplicationEvaluationEntity convertToEntity(UserEntity user, ApplicationEvaluationRequest req, Long assignedApplciationId) { ApplicationEvaluationEntity entity = new ApplicationEvaluationEntity(); @@ -156,28 +156,32 @@ public class ApplicationEvaluationDao { private void setCriteriaResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List evaluationCriterias) { List criteriaResponsesFromEntity = entity.getCriteria() != null ? - Utils.convertJsonToList(entity.getCriteria(), new TypeReference>() { - }) : + Utils.convertJsonToList(entity.getCriteria(), new TypeReference>() {}) : new ArrayList<>(); - List criteriaResponsesFromDB = getCriteriaResponse(entity.getApplicationId()); addMissingCriteriaResponses(criteriaResponsesFromEntity, criteriaResponsesFromDB, entity.getApplicationId()); - criteriaResponsesFromEntity.forEach(criteriaResponse -> { - EvaluationCriteriaEntity matchingEvaluationCriteria = evaluationCriterias.stream() - .filter(evaluationCriteria -> evaluationCriteria.getId().equals(criteriaResponse.getId())).findFirst().orElse(null); - if (matchingEvaluationCriteria != null) { - criteriaResponse.setLabel(matchingEvaluationCriteria.getLookupData().getValue()); - criteriaResponse.setMaxScore(matchingEvaluationCriteria.getScore()); - - List mappedFields = getMappedFieldsForCriteria(matchingEvaluationCriteria.getId(), entity.getApplicationId()); - criteriaResponse.setCriteriaMappedFields(mappedFields); - } - }); + criteriaResponsesFromEntity = criteriaResponsesFromEntity.stream() + .filter(criteriaResponse -> { + EvaluationCriteriaEntity matchingEvaluationCriteria = evaluationCriterias.stream() + .filter(evaluationCriteria -> evaluationCriteria.getId().equals(criteriaResponse.getId())) // Find matching criteria by ID + .findFirst() + .orElse(null); + if (matchingEvaluationCriteria != null) { + criteriaResponse.setLabel(matchingEvaluationCriteria.getLookupData().getValue()); + criteriaResponse.setMaxScore(matchingEvaluationCriteria.getScore()); + List mappedFields = getMappedFieldsForCriteria(matchingEvaluationCriteria.getId(), entity.getApplicationId()); + criteriaResponse.setCriteriaMappedFields(mappedFields); + return true; + } + return false; + }) + .collect(Collectors.toList()); response.setCriteria(criteriaResponsesFromEntity); } + private void addMissingCriteriaResponses(List criteriaResponsesFromEntity, List criteriaResponsesFromDB, Long applicationId) { Set existingCriteriaIds = criteriaResponsesFromEntity.stream().map(CriteriaResponse::getId).collect(Collectors.toSet()); @@ -299,27 +303,30 @@ public class ApplicationEvaluationDao { private void setChecklistResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List checklistEntities) { - List checklistResponsesFromEntity = entity.getChecklist() != null ? - Utils.convertJsonToList(entity.getChecklist(), new TypeReference>() { - }) : + Utils.convertJsonToList(entity.getChecklist(), new TypeReference>() {}) : new ArrayList<>(); - List checklistResponsesFromDB = getChecklistResponse(entity.getApplicationId()); addMissingChecklistResponses(checklistResponsesFromEntity, checklistResponsesFromDB); - checklistResponsesFromEntity.forEach(checklistResponse -> { - CallTargetAudienceChecklistEntity matchingChecklist = checklistEntities.stream().filter(checklistEntity -> checklistEntity.getId().equals(checklistResponse.getId())) - .findFirst().orElse(null); - - if (matchingChecklist != null) { - checklistResponse.setLabel(matchingChecklist.getLookupData().getValue()); - } - }); + checklistResponsesFromEntity = checklistResponsesFromEntity.stream() + .filter(checklistResponse -> { + CallTargetAudienceChecklistEntity matchingChecklist = checklistEntities.stream() + .filter(checklistEntity -> checklistEntity.getId().equals(checklistResponse.getId())) // Find matching checklist by ID + .findFirst() + .orElse(null); + if (matchingChecklist != null) { + checklistResponse.setLabel(matchingChecklist.getLookupData().getValue()); + return true; + } + return false; + }) + .collect(Collectors.toList()); response.setChecklist(checklistResponsesFromEntity); } + private void addMissingChecklistResponses(List checklistResponsesFromEntity, List checklistResponsesFromDB) { Set existingChecklistIds = checklistResponsesFromEntity.stream().map(ChecklistResponse::getId).collect(Collectors.toSet()); @@ -333,26 +340,31 @@ public class ApplicationEvaluationDao { private void setFieldResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List applicationFormEntities) { - List fieldResponsesFromEntity = entity.getFile() != null ? Utils.convertJsonToList(entity.getFile(), new TypeReference>() { - }) : new ArrayList<>(); + List fieldResponsesFromEntity = entity.getFile() != null ? Utils.convertJsonToList(entity.getFile(), new TypeReference>() {}) : new ArrayList<>(); List fieldResponsesFromDB = getFieldResponses(entity.getApplicationId()); addMissingFieldResponses(fieldResponsesFromEntity, fieldResponsesFromDB); Set processedFieldIds = new HashSet<>(); + List validFieldResponses = new ArrayList<>(); fieldResponsesFromEntity.forEach(fieldResponse -> { if (processedFieldIds.contains(fieldResponse.getId())) { return; } + final Boolean[] allDocumentsDeleted = {true}; + List documentResponseBeans = new ArrayList<>(); + applicationFormEntities.forEach(applicationForm -> { FormEntity formEntity = applicationForm.getForm(); if (formEntity != null) { -// List contentResponseBeans = Utils.convertJsonStringToList(formEntity.getContent(), ContentResponseBean.class); + // Convert the form to a list of content response beans List contentResponseBeans = formDao.convertFormEntityToFormResponseBean(formEntity).getContent(); contentResponseBeans.forEach(contentResponseBean -> { + // Check if this is a file upload field that matches the current field response if ("fileupload".equals(contentResponseBean.getName()) && contentResponseBean.getId().equals(fieldResponse.getId())) { String label = null; + // Set the label if available if (contentResponseBean.getSettings() != null) { for (SettingResponseBean setting : contentResponseBean.getSettings()) { if ("label".equals(setting.getName())) { @@ -371,36 +383,43 @@ public class ApplicationEvaluationDao { ApplicationFormFieldEntity formField = optionalFormField.get(); if (formField.getFieldValue() != null) { String[] documentIds = formField.getFieldValue().split(","); - List documentResponseBeans = new ArrayList<>(); for (String docId : documentIds) { - if (Boolean.FALSE.equals(docId.isEmpty())){ + if (!docId.trim().isEmpty()) { Long documentId = Long.valueOf(docId.trim()); + documentRepository.findByIdAndNotDeleted(documentId).ifPresent(documentEntity -> { - DocumentResponseBean responseBean = new DocumentResponseBean(); - responseBean.setId(documentEntity.getId()); - responseBean.setName(documentEntity.getFileName()); - responseBean.setType(DocumentTypeEnum.valueOf(documentEntity.getType())); - responseBean.setSource(DocumentSourceTypeEnum.valueOf(documentEntity.getSource())); - responseBean.setSourceId(documentEntity.getSourceId()); - responseBean.setFilePath(documentEntity.getFilePath()); - responseBean.setCreatedDate(documentEntity.getCreatedDate()); - responseBean.setUpdatedDate(documentEntity.getUpdatedDate()); - documentResponseBeans.add(responseBean); + if (documentEntity != null && !documentEntity.getIsDeleted()) { + DocumentResponseBean responseBean = new DocumentResponseBean(); + responseBean.setId(documentEntity.getId()); + responseBean.setName(documentEntity.getFileName()); + responseBean.setType(DocumentTypeEnum.valueOf(documentEntity.getType())); + responseBean.setSource(DocumentSourceTypeEnum.valueOf(documentEntity.getSource())); + responseBean.setSourceId(documentEntity.getSourceId()); + responseBean.setFilePath(documentEntity.getFilePath()); + responseBean.setCreatedDate(documentEntity.getCreatedDate()); + responseBean.setUpdatedDate(documentEntity.getUpdatedDate()); + documentResponseBeans.add(responseBean); + allDocumentsDeleted[0] = false; + } }); } } - - fieldResponse.setFileDetail(documentResponseBeans); } } - processedFieldIds.add(fieldResponse.getId()); } }); } }); + + if (Boolean.FALSE.equals(allDocumentsDeleted[0]) && Boolean.FALSE.equals(documentResponseBeans.isEmpty())) { + fieldResponse.setFileDetail(documentResponseBeans); + validFieldResponses.add(fieldResponse); + } + + processedFieldIds.add(fieldResponse.getId()); }); - response.setFiles(fieldResponsesFromEntity); + response.setFiles(validFieldResponses); } private void addMissingFieldResponses(List fieldResponsesFromEntity, List fieldResponsesFromDB) { @@ -417,6 +436,9 @@ public class ApplicationEvaluationDao { private void setApplicationDetails(ApplicationEvaluationResponse response, ApplicationEvaluationEntity entity) { ApplicationEntity application = applicationService.validateApplication(entity.getApplicationId() != null ? entity.getApplicationId() : null); + AssignedApplicationsEntity assignedApplications = assignedApplicationsRepository + .findByApplicationIdAndIsDeletedFalse(entity.getApplicationId()).orElse(null); + UserEntity user = userService.validateUser(application.getUserId()); CallEntity call = callRepository.findCallEntityByApplicationId(entity.getApplicationId()); @@ -426,12 +448,21 @@ public class ApplicationEvaluationDao { String beneficiary = String.join(" ", firstName, lastName).trim(); response.setApplicationStatus(ApplicationStatusTypeEnum.valueOf(application.getStatus())); response.setBeneficiary(beneficiary); + response.setSubmissionDate(application.getSubmissionDate()); response.setMinScore(call.getThreshold() != null ? call.getThreshold() : null); response.setCallName(application.getCall().getName() != null ? application.getCall().getName() : null); response.setProtocolNumber((application.getProtocol() != null && application.getProtocol().getProtocolNumber() != null) ? application.getProtocol().getProtocolNumber() : null); - response.setSubmissionDate(application.getSubmissionDate() != null ? application.getSubmissionDate() : null); + if (assignedApplications != null) { + response.setAssignedAt(assignedApplications.getAssignedAt()); + } + response.setEvaluationEndDate(entity.getEndDate()); + LocalDateTime callEndDate = application.getCall().getEndDate(); response.setCallEndDate(callEndDate); + if (application.getCompanyId() != null) { + CompanyEntity company = companyService.validateCompany(application.getCompanyId()); + response.setCompanyName(company.getCompanyName()); + } } @@ -961,16 +992,24 @@ public class ApplicationEvaluationDao { private void setApplicationDetails(ApplicationEvaluationResponse response, Long applicationId, UserEntity user) { ApplicationEntity application = applicationService.validateApplication(applicationId); + AssignedApplicationsEntity assignedApplications = assignedApplicationsRepository + .findByApplicationIdAndIsDeletedFalse(applicationId).orElse(null); userService.validateUser(application.getUserId()); String firstName = user.getFirstName() != null ? user.getFirstName() : ""; String lastName = user.getLastName() != null ? user.getLastName() : ""; String beneficiary = String.join(" ", firstName, lastName).trim(); response.setBeneficiary(beneficiary); - + response.setSubmissionDate(application.getSubmissionDate()); response.setCallName(application.getCall().getName() != null ? application.getCall().getName() : null); response.setProtocolNumber((application.getProtocol() != null && application.getProtocol().getProtocolNumber() != null) ? application.getProtocol().getProtocolNumber() : null); - response.setSubmissionDate(application.getSubmissionDate() != null ? application.getSubmissionDate() : null); + if (assignedApplications != null) { + response.setAssignedAt(assignedApplications.getAssignedAt()); + } + if (application.getCompanyId() != null) { + CompanyEntity company = companyService.validateCompany(application.getCompanyId()); + response.setCompanyName(company.getCompanyName()); + } } private Optional findFormFieldValue(Long applicationId, String formFieldId) { diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponse.java b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponse.java index 8d144e50..3e5c3834 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponse.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponse.java @@ -30,4 +30,6 @@ public class ApplicationEvaluationResponse { private LocalDateTime submissionDate; private LocalDateTime evaluationEndDate; private LocalDateTime callEndDate; + private String companyName; + private LocalDateTime assignedAt; } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/AmazonS3ServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/AmazonS3ServiceImpl.java index 3ff04c70..3af50f6c 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/AmazonS3ServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/AmazonS3ServiceImpl.java @@ -29,6 +29,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; +import java.net.URL; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -87,9 +88,11 @@ public class AmazonS3ServiceImpl implements AmazonS3Service { if(Boolean.FALSE.equals(isTestProfileActivated())) { amazonS3.putObject(bucketName, path, inputStream, objectMetadata); } - path =s3Url + s3Folder +"/"+ fileName; - log.info("File '{}' uploaded successfully to Amazon S3 with URL: {}", fileName, path); - return path; + //getting actual encoded s3 file path + URL amazonS3Url = amazonS3.getUrl(bucketName, path); + String fileUrl = amazonS3Url.toString(); + log.info("File '{}' uploaded successfully to Amazon S3 with URL: {}", fileName, fileUrl); + return fileUrl; } @Override