Merge pull request #128 from Kitzanos/feature/GEPAFINBE-122-prod

Cherry-pick (GEPAFINBE-122 (Issue in S3 URL and getting deleted checklist in application evaluation))
This commit is contained in:
rbonazzo-KZ
2024-12-06 11:39:08 +01:00
committed by GitHub
3 changed files with 104 additions and 59 deletions

View File

@@ -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<EvaluationCriteriaEntity> evaluationCriterias) {
List<CriteriaResponse> criteriaResponsesFromEntity = entity.getCriteria() != null ?
Utils.convertJsonToList(entity.getCriteria(), new TypeReference<List<CriteriaResponse>>() {
}) :
Utils.convertJsonToList(entity.getCriteria(), new TypeReference<List<CriteriaResponse>>() {}) :
new ArrayList<>();
List<CriteriaResponse> 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<CriteriaMappedField> 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<CriteriaMappedField> mappedFields = getMappedFieldsForCriteria(matchingEvaluationCriteria.getId(), entity.getApplicationId());
criteriaResponse.setCriteriaMappedFields(mappedFields);
return true;
}
return false;
})
.collect(Collectors.toList());
response.setCriteria(criteriaResponsesFromEntity);
}
private void addMissingCriteriaResponses(List<CriteriaResponse> criteriaResponsesFromEntity, List<CriteriaResponse> criteriaResponsesFromDB, Long applicationId) {
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) {
List<ChecklistResponse> checklistResponsesFromEntity = entity.getChecklist() != null ?
Utils.convertJsonToList(entity.getChecklist(), new TypeReference<List<ChecklistResponse>>() {
}) :
Utils.convertJsonToList(entity.getChecklist(), new TypeReference<List<ChecklistResponse>>() {}) :
new ArrayList<>();
List<ChecklistResponse> 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<ChecklistResponse> checklistResponsesFromEntity, List<ChecklistResponse> checklistResponsesFromDB) {
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) {
List<FieldResponse> fieldResponsesFromEntity = entity.getFile() != null ? Utils.convertJsonToList(entity.getFile(), new TypeReference<List<FieldResponse>>() {
}) : new ArrayList<>();
List<FieldResponse> fieldResponsesFromEntity = entity.getFile() != null ? Utils.convertJsonToList(entity.getFile(), new TypeReference<List<FieldResponse>>() {}) : new ArrayList<>();
List<FieldResponse> fieldResponsesFromDB = getFieldResponses(entity.getApplicationId());
addMissingFieldResponses(fieldResponsesFromEntity, fieldResponsesFromDB);
Set<String> processedFieldIds = new HashSet<>();
List<FieldResponse> validFieldResponses = new ArrayList<>();
fieldResponsesFromEntity.forEach(fieldResponse -> {
if (processedFieldIds.contains(fieldResponse.getId())) {
return;
}
final Boolean[] allDocumentsDeleted = {true};
List<DocumentResponseBean> documentResponseBeans = new ArrayList<>();
applicationFormEntities.forEach(applicationForm -> {
FormEntity formEntity = applicationForm.getForm();
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();
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<DocumentResponseBean> 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<FieldResponse> fieldResponsesFromEntity, List<FieldResponse> fieldResponsesFromDB) {
@@ -417,21 +436,33 @@ 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());
String firstName = user.getFirstName() != null ? user.getFirstName() : "";
String lastName = user.getLastName() != null ? user.getLastName() : "";
String firstName = user.getBeneficiary().getFirstName() != null ? user.getBeneficiary().getFirstName() : "";
String lastName = user.getBeneficiary().getLastName() != null ? user.getBeneficiary().getLastName() : "";
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,25 @@ 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 firstName = user.getBeneficiary().getFirstName() != null ? user.getBeneficiary().getFirstName() : "";
String lastName = user.getBeneficiary().getLastName() != null ? user.getBeneficiary().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<ApplicationFormFieldEntity> findFormFieldValue(Long applicationId, String formFieldId) {

View File

@@ -30,4 +30,6 @@ public class ApplicationEvaluationResponse {
private LocalDateTime submissionDate;
private LocalDateTime evaluationEndDate;
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.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