diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index d685796f..bead6d7a 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -96,6 +96,8 @@ public class ApplicationAmendmentRequestDao { @Autowired private Validator validator; + @Autowired + private ApplicationDao applicationDao; public ApplicationAmendmentRequestResponse getApplicationDataForAmendment(Long applicationEvaluationId) { log.info("Fetching the application data for the Amendment process {}", applicationEvaluationId); @@ -556,11 +558,10 @@ public class ApplicationAmendmentRequestDao { // Add valid new document IDs from the request existingDocumentIds.addAll(validDocumentIds); - + applicationDao.updateDocumentDeletionStatus(formEntity, updatedFormField, formEntity.getApplicationForm().getForm(), null,validDocumentIds); // Set the combined document IDs back as the field value formEntity.setFieldValue(String.join(",", existingDocumentIds)); applicationFormFieldRepository.save(formEntity); - log.info("Updated field value for application ID {} and field ID {} with document IDs {}", applicationAmendment.getApplicationId(), updatedFormField.getFieldId(), String.join(",", existingDocumentIds)); fieldUpdated = true; diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index cf2e08c2..1f573195 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -405,7 +405,7 @@ public class ApplicationDao { ApplicationFormFieldEntity applicationFormFieldEntity=null; - validateFileUploadDocuments(applicationFormFieldRequestBean, formEntity); + List newDocumentIds =validateFileUploadDocuments(applicationFormFieldRequestBean, formEntity); if(applicationFormFieldEntities==null || applicationFormFieldEntities.isEmpty()){ applicationFormFieldEntity = new ApplicationFormFieldEntity(); @@ -427,13 +427,73 @@ public class ApplicationDao { Utils.setIfUpdated(applicationFormFieldEntity::getFieldId, applicationFormFieldEntity::setFieldId, applicationFormFieldRequestBean.getFieldId()); if(applicationFormFieldRequestBean.getFieldValue() !=null ) { - applicationFormFieldEntity.setFieldValue(Utils.convertObjectToJsonString(applicationFormFieldRequestBean.getFieldValue())); - } + updateDocumentDeletionStatus(applicationFormFieldEntity, applicationFormFieldRequestBean,formEntity,newDocumentIds,null); + applicationFormFieldEntity.setFieldValue(Utils.convertObjectToJsonString(applicationFormFieldRequestBean.getFieldValue())); + } if(applicationFormFieldRequestBean.getFieldValue() ==null ) { applicationFormFieldEntity.setFieldValue(null); } return applicationFormFieldRepository.save(applicationFormFieldEntity); } + void updateDocumentDeletionStatus(ApplicationFormFieldEntity applicationFormFieldEntity, ApplicationFormFieldRequestBean applicationFormFieldRequestBean, FormEntity formEntity, List newDocumentIds, + List preInstructorDocumentId) { + if (newDocumentIds == null) { + newDocumentIds = Collections.emptyList(); + } + if (preInstructorDocumentId == null) { + preInstructorDocumentId = Collections.emptyList(); + } + + List contentResponseBeans = formDao.convertFormEntityToFormResponseBean(formEntity).getContent(); + for (ContentResponseBean contentResponseBean : contentResponseBeans) { + if (Boolean.FALSE.equals(contentResponseBean.getName().equals("fileupload"))) { + return; + } + } + + List currentDocumentIds = parseDocumentIds(applicationFormFieldEntity.getFieldValue()); + if (Boolean.FALSE.equals(newDocumentIds.isEmpty())) { + List finalNewDocumentIds = newDocumentIds; + List documentsToDelete = currentDocumentIds.stream() + .filter(docId -> !finalNewDocumentIds.contains(docId)) + .toList(); + documentsToDelete.forEach(docId -> documentService.deleteFile(docId)); + } + + if (Boolean.FALSE.equals(preInstructorDocumentId.isEmpty())){ + List preInstructorDocIds = preInstructorDocumentId.stream() + .map(Long::valueOf) + .collect(Collectors.toList()); + + List documentsToDelete = currentDocumentIds.stream() + .filter(docId -> !preInstructorDocIds.contains(docId)) + .toList(); + documentsToDelete.forEach(docId -> documentService.deleteFile(docId)); + } + } + + + private List parseDocumentIds(String fieldValue) { + if (fieldValue == null || fieldValue.isEmpty()) { + return Collections.emptyList(); + } + if (fieldValue.contains(",")) { + return Arrays.stream(fieldValue.split(",")) + .map(String::trim) + .map(Long::parseLong) + .collect(Collectors.toList()); + } else { + try { + return Collections.singletonList(Long.parseLong(fieldValue.trim())); + } catch (NumberFormatException e) { + e.printStackTrace(); + return Collections.emptyList(); + } + } + } + + + private List validateFileUploadDocuments(ApplicationFormFieldRequestBean applicationFormFieldRequestBean, FormEntity formEntity) { List documentIds=null; diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index 2bcbade9..9ab569b0 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -249,19 +249,21 @@ public class ApplicationEvaluationDao { List documentResponseBeans = new ArrayList<>(); for (String docId : documentIds) { - 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 (Boolean.FALSE.equals(docId.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); + }); + } } mappedField.setFieldValue(documentResponseBeans); } @@ -351,19 +353,21 @@ public class ApplicationEvaluationDao { List documentResponseBeans = new ArrayList<>(); for (String docId : documentIds) { - 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 (Boolean.FALSE.equals(docId.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); + }); + } } fieldResponse.setFileDetail(documentResponseBeans); @@ -888,19 +892,21 @@ public class ApplicationEvaluationDao { List documentResponseBeans = new ArrayList<>(); for (String docId : documentIds) { - 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 (Boolean.FALSE.equals(docId.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); + }); + } } fieldResponse.setFileDetail(documentResponseBeans); @@ -1247,21 +1253,22 @@ public class ApplicationEvaluationDao { List documentResponseBeans = new ArrayList<>(); for (String docId : documentIds) { - 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 (Boolean.FALSE.equals(docId.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); + }); + } } - fieldResponse.setFileDetail(documentResponseBeans); fieldResponses.add(fieldResponse); }