Merge pull request #127 from Kitzanos/feature/GEPAFINBE-122

GEPAFINBE-122 (Issue in S3 URL and getting deleted checklist in application evaluation)
This commit is contained in:
rbonazzo-KZ
2024-12-06 10:03:31 +01:00
committed by GitHub
3 changed files with 99 additions and 55 deletions

View File

@@ -12,10 +12,7 @@ import net.gepafin.tendermanagement.enums.*;
import net.gepafin.tendermanagement.model.request.*; import net.gepafin.tendermanagement.model.request.*;
import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.model.response.*;
import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.repositories.*;
import net.gepafin.tendermanagement.service.ApplicationService; import net.gepafin.tendermanagement.service.*;
import net.gepafin.tendermanagement.service.AssignedApplicationsService;
import net.gepafin.tendermanagement.service.CallService;
import net.gepafin.tendermanagement.service.UserService;
import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.util.DateTimeUtil;
import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.util.LoggingUtil;
import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.util.Utils;
@@ -93,6 +90,9 @@ public class ApplicationEvaluationDao {
@Autowired @Autowired
private HttpServletRequest request; private HttpServletRequest request;
@Autowired
private CompanyService companyService;
private ApplicationEvaluationEntity convertToEntity(UserEntity user, ApplicationEvaluationRequest req, Long assignedApplciationId) { private ApplicationEvaluationEntity convertToEntity(UserEntity user, ApplicationEvaluationRequest req, Long assignedApplciationId) {
ApplicationEvaluationEntity entity = new ApplicationEvaluationEntity(); ApplicationEvaluationEntity entity = new ApplicationEvaluationEntity();
@@ -156,28 +156,32 @@ public class ApplicationEvaluationDao {
private void setCriteriaResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List<EvaluationCriteriaEntity> evaluationCriterias) { private void setCriteriaResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List<EvaluationCriteriaEntity> evaluationCriterias) {
List<CriteriaResponse> criteriaResponsesFromEntity = entity.getCriteria() != null ? List<CriteriaResponse> criteriaResponsesFromEntity = entity.getCriteria() != null ?
Utils.convertJsonToList(entity.getCriteria(), new TypeReference<List<CriteriaResponse>>() { Utils.convertJsonToList(entity.getCriteria(), new TypeReference<List<CriteriaResponse>>() {}) :
}) :
new ArrayList<>(); new ArrayList<>();
List<CriteriaResponse> criteriaResponsesFromDB = getCriteriaResponse(entity.getApplicationId()); List<CriteriaResponse> criteriaResponsesFromDB = getCriteriaResponse(entity.getApplicationId());
addMissingCriteriaResponses(criteriaResponsesFromEntity, criteriaResponsesFromDB, entity.getApplicationId()); addMissingCriteriaResponses(criteriaResponsesFromEntity, criteriaResponsesFromDB, entity.getApplicationId());
criteriaResponsesFromEntity.forEach(criteriaResponse -> {
EvaluationCriteriaEntity matchingEvaluationCriteria = evaluationCriterias.stream()
.filter(evaluationCriteria -> evaluationCriteria.getId().equals(criteriaResponse.getId())).findFirst().orElse(null);
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) { if (matchingEvaluationCriteria != null) {
criteriaResponse.setLabel(matchingEvaluationCriteria.getLookupData().getValue()); criteriaResponse.setLabel(matchingEvaluationCriteria.getLookupData().getValue());
criteriaResponse.setMaxScore(matchingEvaluationCriteria.getScore()); criteriaResponse.setMaxScore(matchingEvaluationCriteria.getScore());
List<CriteriaMappedField> mappedFields = getMappedFieldsForCriteria(matchingEvaluationCriteria.getId(), entity.getApplicationId()); List<CriteriaMappedField> mappedFields = getMappedFieldsForCriteria(matchingEvaluationCriteria.getId(), entity.getApplicationId());
criteriaResponse.setCriteriaMappedFields(mappedFields); criteriaResponse.setCriteriaMappedFields(mappedFields);
return true;
} }
}); return false;
})
.collect(Collectors.toList());
response.setCriteria(criteriaResponsesFromEntity); response.setCriteria(criteriaResponsesFromEntity);
} }
private void addMissingCriteriaResponses(List<CriteriaResponse> criteriaResponsesFromEntity, List<CriteriaResponse> criteriaResponsesFromDB, Long applicationId) { private void addMissingCriteriaResponses(List<CriteriaResponse> criteriaResponsesFromEntity, List<CriteriaResponse> criteriaResponsesFromDB, Long applicationId) {
Set<Long> existingCriteriaIds = criteriaResponsesFromEntity.stream().map(CriteriaResponse::getId).collect(Collectors.toSet()); Set<Long> existingCriteriaIds = criteriaResponsesFromEntity.stream().map(CriteriaResponse::getId).collect(Collectors.toSet());
@@ -299,27 +303,30 @@ public class ApplicationEvaluationDao {
private void setChecklistResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List<CallTargetAudienceChecklistEntity> checklistEntities) { private void setChecklistResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List<CallTargetAudienceChecklistEntity> checklistEntities) {
List<ChecklistResponse> checklistResponsesFromEntity = entity.getChecklist() != null ? List<ChecklistResponse> checklistResponsesFromEntity = entity.getChecklist() != null ?
Utils.convertJsonToList(entity.getChecklist(), new TypeReference<List<ChecklistResponse>>() { Utils.convertJsonToList(entity.getChecklist(), new TypeReference<List<ChecklistResponse>>() {}) :
}) :
new ArrayList<>(); new ArrayList<>();
List<ChecklistResponse> checklistResponsesFromDB = getChecklistResponse(entity.getApplicationId()); List<ChecklistResponse> checklistResponsesFromDB = getChecklistResponse(entity.getApplicationId());
addMissingChecklistResponses(checklistResponsesFromEntity, checklistResponsesFromDB); addMissingChecklistResponses(checklistResponsesFromEntity, checklistResponsesFromDB);
checklistResponsesFromEntity.forEach(checklistResponse -> { checklistResponsesFromEntity = checklistResponsesFromEntity.stream()
CallTargetAudienceChecklistEntity matchingChecklist = checklistEntities.stream().filter(checklistEntity -> checklistEntity.getId().equals(checklistResponse.getId())) .filter(checklistResponse -> {
.findFirst().orElse(null); CallTargetAudienceChecklistEntity matchingChecklist = checklistEntities.stream()
.filter(checklistEntity -> checklistEntity.getId().equals(checklistResponse.getId())) // Find matching checklist by ID
.findFirst()
.orElse(null);
if (matchingChecklist != null) { if (matchingChecklist != null) {
checklistResponse.setLabel(matchingChecklist.getLookupData().getValue()); checklistResponse.setLabel(matchingChecklist.getLookupData().getValue());
return true;
} }
}); return false;
})
.collect(Collectors.toList());
response.setChecklist(checklistResponsesFromEntity); response.setChecklist(checklistResponsesFromEntity);
} }
private void addMissingChecklistResponses(List<ChecklistResponse> checklistResponsesFromEntity, List<ChecklistResponse> checklistResponsesFromDB) { private void addMissingChecklistResponses(List<ChecklistResponse> checklistResponsesFromEntity, List<ChecklistResponse> checklistResponsesFromDB) {
Set<Long> existingChecklistIds = checklistResponsesFromEntity.stream().map(ChecklistResponse::getId).collect(Collectors.toSet()); Set<Long> existingChecklistIds = checklistResponsesFromEntity.stream().map(ChecklistResponse::getId).collect(Collectors.toSet());
@@ -333,26 +340,31 @@ public class ApplicationEvaluationDao {
private void setFieldResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List<ApplicationFormEntity> applicationFormEntities) { private void setFieldResponses(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response, List<ApplicationFormEntity> applicationFormEntities) {
List<FieldResponse> fieldResponsesFromEntity = entity.getFile() != null ? Utils.convertJsonToList(entity.getFile(), new TypeReference<List<FieldResponse>>() { List<FieldResponse> fieldResponsesFromEntity = entity.getFile() != null ? Utils.convertJsonToList(entity.getFile(), new TypeReference<List<FieldResponse>>() {}) : new ArrayList<>();
}) : new ArrayList<>();
List<FieldResponse> fieldResponsesFromDB = getFieldResponses(entity.getApplicationId()); List<FieldResponse> fieldResponsesFromDB = getFieldResponses(entity.getApplicationId());
addMissingFieldResponses(fieldResponsesFromEntity, fieldResponsesFromDB); addMissingFieldResponses(fieldResponsesFromEntity, fieldResponsesFromDB);
Set<String> processedFieldIds = new HashSet<>(); Set<String> processedFieldIds = new HashSet<>();
List<FieldResponse> validFieldResponses = new ArrayList<>();
fieldResponsesFromEntity.forEach(fieldResponse -> { fieldResponsesFromEntity.forEach(fieldResponse -> {
if (processedFieldIds.contains(fieldResponse.getId())) { if (processedFieldIds.contains(fieldResponse.getId())) {
return; return;
} }
final Boolean[] allDocumentsDeleted = {true};
List<DocumentResponseBean> documentResponseBeans = new ArrayList<>();
applicationFormEntities.forEach(applicationForm -> { applicationFormEntities.forEach(applicationForm -> {
FormEntity formEntity = applicationForm.getForm(); FormEntity formEntity = applicationForm.getForm();
if (formEntity != null) { if (formEntity != null) {
// List<ContentResponseBean> contentResponseBeans = Utils.convertJsonStringToList(formEntity.getContent(), ContentResponseBean.class); // Convert the form to a list of content response beans
List<ContentResponseBean> contentResponseBeans = formDao.convertFormEntityToFormResponseBean(formEntity).getContent(); List<ContentResponseBean> contentResponseBeans = formDao.convertFormEntityToFormResponseBean(formEntity).getContent();
contentResponseBeans.forEach(contentResponseBean -> { 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())) { if ("fileupload".equals(contentResponseBean.getName()) && contentResponseBean.getId().equals(fieldResponse.getId())) {
String label = null; String label = null;
// Set the label if available
if (contentResponseBean.getSettings() != null) { if (contentResponseBean.getSettings() != null) {
for (SettingResponseBean setting : contentResponseBean.getSettings()) { for (SettingResponseBean setting : contentResponseBean.getSettings()) {
if ("label".equals(setting.getName())) { if ("label".equals(setting.getName())) {
@@ -371,12 +383,13 @@ public class ApplicationEvaluationDao {
ApplicationFormFieldEntity formField = optionalFormField.get(); ApplicationFormFieldEntity formField = optionalFormField.get();
if (formField.getFieldValue() != null) { if (formField.getFieldValue() != null) {
String[] documentIds = formField.getFieldValue().split(","); String[] documentIds = formField.getFieldValue().split(",");
List<DocumentResponseBean> documentResponseBeans = new ArrayList<>();
for (String docId : documentIds) { for (String docId : documentIds) {
if (Boolean.FALSE.equals(docId.isEmpty())){ if (!docId.trim().isEmpty()) {
Long documentId = Long.valueOf(docId.trim()); Long documentId = Long.valueOf(docId.trim());
documentRepository.findByIdAndNotDeleted(documentId).ifPresent(documentEntity -> { documentRepository.findByIdAndNotDeleted(documentId).ifPresent(documentEntity -> {
if (documentEntity != null && !documentEntity.getIsDeleted()) {
DocumentResponseBean responseBean = new DocumentResponseBean(); DocumentResponseBean responseBean = new DocumentResponseBean();
responseBean.setId(documentEntity.getId()); responseBean.setId(documentEntity.getId());
responseBean.setName(documentEntity.getFileName()); responseBean.setName(documentEntity.getFileName());
@@ -387,20 +400,26 @@ public class ApplicationEvaluationDao {
responseBean.setCreatedDate(documentEntity.getCreatedDate()); responseBean.setCreatedDate(documentEntity.getCreatedDate());
responseBean.setUpdatedDate(documentEntity.getUpdatedDate()); responseBean.setUpdatedDate(documentEntity.getUpdatedDate());
documentResponseBeans.add(responseBean); documentResponseBeans.add(responseBean);
allDocumentsDeleted[0] = false;
}
}); });
} }
} }
}
}
}
});
}
});
if (Boolean.FALSE.equals(allDocumentsDeleted[0]) && Boolean.FALSE.equals(documentResponseBeans.isEmpty())) {
fieldResponse.setFileDetail(documentResponseBeans);
validFieldResponses.add(fieldResponse);
}
fieldResponse.setFileDetail(documentResponseBeans);
}
}
processedFieldIds.add(fieldResponse.getId()); processedFieldIds.add(fieldResponse.getId());
}
}); });
} response.setFiles(validFieldResponses);
});
});
response.setFiles(fieldResponsesFromEntity);
} }
private void addMissingFieldResponses(List<FieldResponse> fieldResponsesFromEntity, List<FieldResponse> fieldResponsesFromDB) { private void addMissingFieldResponses(List<FieldResponse> fieldResponsesFromEntity, List<FieldResponse> fieldResponsesFromDB) {
@@ -417,6 +436,9 @@ public class ApplicationEvaluationDao {
private void setApplicationDetails(ApplicationEvaluationResponse response, ApplicationEvaluationEntity entity) { private void setApplicationDetails(ApplicationEvaluationResponse response, ApplicationEvaluationEntity entity) {
ApplicationEntity application = applicationService.validateApplication(entity.getApplicationId() != null ? entity.getApplicationId() : null); ApplicationEntity application = applicationService.validateApplication(entity.getApplicationId() != null ? entity.getApplicationId() : null);
AssignedApplicationsEntity assignedApplications = assignedApplicationsRepository
.findByApplicationIdAndIsDeletedFalse(entity.getApplicationId()).orElse(null);
UserEntity user = userService.validateUser(application.getUserId()); UserEntity user = userService.validateUser(application.getUserId());
CallEntity call = callRepository.findCallEntityByApplicationId(entity.getApplicationId()); CallEntity call = callRepository.findCallEntityByApplicationId(entity.getApplicationId());
@@ -426,12 +448,21 @@ public class ApplicationEvaluationDao {
String beneficiary = String.join(" ", firstName, lastName).trim(); String beneficiary = String.join(" ", firstName, lastName).trim();
response.setApplicationStatus(ApplicationStatusTypeEnum.valueOf(application.getStatus())); response.setApplicationStatus(ApplicationStatusTypeEnum.valueOf(application.getStatus()));
response.setBeneficiary(beneficiary); response.setBeneficiary(beneficiary);
response.setSubmissionDate(application.getSubmissionDate());
response.setMinScore(call.getThreshold() != null ? call.getThreshold() : null); response.setMinScore(call.getThreshold() != null ? call.getThreshold() : null);
response.setCallName(application.getCall().getName() != null ? application.getCall().getName() : 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.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(); LocalDateTime callEndDate = application.getCall().getEndDate();
response.setCallEndDate(callEndDate); 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) { private void setApplicationDetails(ApplicationEvaluationResponse response, Long applicationId, UserEntity user) {
ApplicationEntity application = applicationService.validateApplication(applicationId); ApplicationEntity application = applicationService.validateApplication(applicationId);
AssignedApplicationsEntity assignedApplications = assignedApplicationsRepository
.findByApplicationIdAndIsDeletedFalse(applicationId).orElse(null);
userService.validateUser(application.getUserId()); userService.validateUser(application.getUserId());
String firstName = user.getFirstName() != null ? user.getFirstName() : ""; String firstName = user.getFirstName() != null ? user.getFirstName() : "";
String lastName = user.getLastName() != null ? user.getLastName() : ""; String lastName = user.getLastName() != null ? user.getLastName() : "";
String beneficiary = String.join(" ", firstName, lastName).trim(); String beneficiary = String.join(" ", firstName, lastName).trim();
response.setBeneficiary(beneficiary); response.setBeneficiary(beneficiary);
response.setSubmissionDate(application.getSubmissionDate());
response.setCallName(application.getCall().getName() != null ? application.getCall().getName() : 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.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<ApplicationFormFieldEntity> findFormFieldValue(Long applicationId, String formFieldId) { private Optional<ApplicationFormFieldEntity> findFormFieldValue(Long applicationId, String formFieldId) {

View File

@@ -30,4 +30,6 @@ public class ApplicationEvaluationResponse {
private LocalDateTime submissionDate; private LocalDateTime submissionDate;
private LocalDateTime evaluationEndDate; private LocalDateTime evaluationEndDate;
private LocalDateTime callEndDate; private LocalDateTime callEndDate;
private String companyName;
private LocalDateTime assignedAt;
} }

View File

@@ -29,6 +29,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.URL;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@@ -87,9 +88,11 @@ public class AmazonS3ServiceImpl implements AmazonS3Service {
if(Boolean.FALSE.equals(isTestProfileActivated())) { if(Boolean.FALSE.equals(isTestProfileActivated())) {
amazonS3.putObject(bucketName, path, inputStream, objectMetadata); amazonS3.putObject(bucketName, path, inputStream, objectMetadata);
} }
path =s3Url + s3Folder +"/"+ fileName; //getting actual encoded s3 file path
log.info("File '{}' uploaded successfully to Amazon S3 with URL: {}", fileName, path); URL amazonS3Url = amazonS3.getUrl(bucketName, path);
return path; String fileUrl = amazonS3Url.toString();
log.info("File '{}' uploaded successfully to Amazon S3 with URL: {}", fileName, fileUrl);
return fileUrl;
} }
@Override @Override