From 334f4b3a799320874eb621e42c4500b846c4ecca Mon Sep 17 00:00:00 2001 From: rajesh Date: Wed, 20 Nov 2024 11:40:12 +0530 Subject: [PATCH 01/12] Issue With Application Deleted Documents --- .../dao/ApplicationAmendmentRequestDao.java | 5 +- .../tendermanagement/dao/ApplicationDao.java | 66 +++++++++- .../dao/ApplicationEvaluationDao.java | 113 ++++++++++-------- 3 files changed, 126 insertions(+), 58 deletions(-) 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); } From 2a63474fda24d85c1863a1098a6a4abb424d8710 Mon Sep 17 00:00:00 2001 From: rajesh Date: Wed, 20 Nov 2024 14:59:53 +0530 Subject: [PATCH 02/12] Updated code --- .../dao/ApplicationAmendmentRequestDao.java | 2 +- .../tendermanagement/dao/ApplicationDao.java | 22 ++++++++++++------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index bead6d7a..df073dd9 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -558,7 +558,7 @@ public class ApplicationAmendmentRequestDao { // Add valid new document IDs from the request existingDocumentIds.addAll(validDocumentIds); - applicationDao.updateDocumentDeletionStatus(formEntity, updatedFormField, formEntity.getApplicationForm().getForm(), null,validDocumentIds); + applicationDao.updateDocumentDeletionStatus(formEntity, updatedFormField, formEntity.getApplicationForm().getForm(), null,validDocumentIds,true); // Set the combined document IDs back as the field value formEntity.setFieldValue(String.join(",", existingDocumentIds)); applicationFormFieldRepository.save(formEntity); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index 1f573195..19adbb3c 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -427,16 +427,17 @@ public class ApplicationDao { Utils.setIfUpdated(applicationFormFieldEntity::getFieldId, applicationFormFieldEntity::setFieldId, applicationFormFieldRequestBean.getFieldId()); if(applicationFormFieldRequestBean.getFieldValue() !=null ) { - updateDocumentDeletionStatus(applicationFormFieldEntity, applicationFormFieldRequestBean,formEntity,newDocumentIds,null); + updateDocumentDeletionStatus(applicationFormFieldEntity, applicationFormFieldRequestBean,formEntity,newDocumentIds,null,false); applicationFormFieldEntity.setFieldValue(Utils.convertObjectToJsonString(applicationFormFieldRequestBean.getFieldValue())); } if(applicationFormFieldRequestBean.getFieldValue() ==null ) { + updateDocumentDeletionStatus(applicationFormFieldEntity, applicationFormFieldRequestBean,formEntity,newDocumentIds,null,false); applicationFormFieldEntity.setFieldValue(null); } return applicationFormFieldRepository.save(applicationFormFieldEntity); } void updateDocumentDeletionStatus(ApplicationFormFieldEntity applicationFormFieldEntity, ApplicationFormFieldRequestBean applicationFormFieldRequestBean, FormEntity formEntity, List newDocumentIds, - List preInstructorDocumentId) { + List preInstructorDocumentId,boolean isPreInstructor) { if (newDocumentIds == null) { newDocumentIds = Collections.emptyList(); } @@ -450,17 +451,22 @@ public class ApplicationDao { return; } } - + if(!isPreInstructor){ List currentDocumentIds = parseDocumentIds(applicationFormFieldEntity.getFieldValue()); - if (Boolean.FALSE.equals(newDocumentIds.isEmpty())) { + if (Boolean.TRUE.equals(newDocumentIds.isEmpty())) { + currentDocumentIds.forEach(docId -> documentService.deleteFile(docId)); + } else { 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())){ + }} + else{ + List currentDocumentIds = parseDocumentIds(applicationFormFieldEntity.getFieldValue()); + if (Boolean.TRUE.equals(preInstructorDocumentId.isEmpty())) { + currentDocumentIds.forEach(docId -> documentService.deleteFile(docId)); + } else { List preInstructorDocIds = preInstructorDocumentId.stream() .map(Long::valueOf) .collect(Collectors.toList()); @@ -469,7 +475,7 @@ public class ApplicationDao { .filter(docId -> !preInstructorDocIds.contains(docId)) .toList(); documentsToDelete.forEach(docId -> documentService.deleteFile(docId)); - } + }} } From 51791074abbb7e6c8e8c6b6a864ee7d7f4c38f4a Mon Sep 17 00:00:00 2001 From: nisha Date: Wed, 20 Nov 2024 19:04:13 +0530 Subject: [PATCH 03/12] Done ticket GEPAFINBE-102 --- .../tendermanagement/constants/GepafinConstant.java | 1 + .../service/impl/ApplicationServiceImpl.java | 7 +++++++ .../tendermanagement/web/rest/api/ApplicationApi.java | 2 +- src/main/resources/message_en.properties | 1 + src/main/resources/message_it.properties | 1 + 5 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index b1704c6a..219c5647 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -292,5 +292,6 @@ public class GepafinConstant { public static final String ENCRYPT_KEY = "U2VjdXJlRW5jcnlwdEtleQ=="; public static final String APPLICATION_DOCUMENTS_NOT_FOUND_MSG = "application.documents.not.found"; public static final String DUPLICATE_BENEFICIARY_CALL = "beneficiary.call.duplicate"; + public static final String USER_MUST_BE_ASSOCIATED_WITH_COMPANY="user.must.be.associated.with.company.to.create.application"; } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationServiceImpl.java index 0fec17a7..a8d63f1c 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationServiceImpl.java @@ -1,6 +1,8 @@ package net.gepafin.tendermanagement.service.impl; import jakarta.servlet.http.HttpServletRequest; +import net.gepafin.tendermanagement.config.Translator; +import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.dao.ApplicationDao; import net.gepafin.tendermanagement.dao.FlowFormDao; import net.gepafin.tendermanagement.entities.ApplicationEntity; @@ -17,6 +19,8 @@ import net.gepafin.tendermanagement.model.response.ApplicationSignedDocumentResp import net.gepafin.tendermanagement.model.response.NextOrPreviousFormResponse; import net.gepafin.tendermanagement.service.ApplicationService; import net.gepafin.tendermanagement.util.Validator; +import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; +import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -64,6 +68,9 @@ public class ApplicationServiceImpl implements ApplicationService { @Transactional(rollbackFor = Exception.class) public ApplicationResponse createApplication(HttpServletRequest request, Long companyId, ApplicationRequest applicationRequest, Long callId) { UserEntity userEntity = validator.validateUser(request); + if(companyId==null){ + throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.USER_MUST_BE_ASSOCIATED_WITH_COMPANY)); + } CompanyEntity companyEntity = validator.validateUserWithCompany(request, companyId); validator.validateUserWithCall(userEntity, callId); return applicationDao.createApplicationByCallId(companyEntity, applicationRequest, callId, userEntity); diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationApi.java index d37c004e..d72f4daf 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationApi.java @@ -99,7 +99,7 @@ public interface ApplicationApi { @PostMapping(value = "/call/{callId}", produces = { "application/json" }) ResponseEntity> createApplicationByCallId(HttpServletRequest request, - @Parameter(description = "The company ID", required = true) @RequestParam(value = "companyId", required = true) Long companyId, + @Parameter(description = "The company ID") @RequestParam(value = "companyId", required = false) Long companyId, @Parameter(description = " Flow request object", required = true) @Valid @RequestBody ApplicationRequest applicationRequest, @Parameter(description = "The call ID", required = true) @PathVariable("callId") Long callId); diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index 69c7410a..41ebe401 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -308,3 +308,4 @@ invalid.amendment.for.comment = Invalid Amendment Request for the Given Comment. DD_MM_YYYY_HH_MM = dd_MM_yyyy HH:mm application.documents.not.found=No documents found for the application. beneficiary.call.duplicate = A preferred call with this call ID and company ID already exists for this user. +user.must.be.associated.with.company.to.create.application=You must be associated with a company to apply for this application. diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index e1cb500d..43a8bbff 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -303,3 +303,4 @@ beneficiary.email.not.found.msg=L'indirizzo email per il beneficiario non � st reminder.email.sent.success.msg=Email di promemoria inviata con successo! application.documents.not.found=Nessun documento trovato per la domanda. beneficiary.call.duplicate = Una chiamata preferita con questo ID di chiamata e ID azienda esiste gi� per questo utente. +user.must.be.associated.with.company.to.create.application=Devi essere associato a un'azienda per poter presentare domanda per questa applicazione. From 2cc9ad5e23fdb2b840db82ea0c7919262a4844c2 Mon Sep 17 00:00:00 2001 From: rajesh Date: Thu, 21 Nov 2024 13:30:59 +0530 Subject: [PATCH 04/12] Updated code --- .../dao/ApplicationAmendmentRequestDao.java | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index a4da3b00..45cb6f70 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -235,19 +235,23 @@ public class ApplicationAmendmentRequestDao { userEntity.getHub().getId()); applicationAmendmentRequestEntity.setProtocol(protocolEntity); ApplicationAmendmentRequestEntity applicationAmendment = saveApplicationAmendmentRequestEntity(applicationAmendmentRequestEntity); - - //Set Status - applicationEvaluationEntity.setStatus(ApplicationEvaluationStatusTypeEnum.SOCCORSO.getValue()); + String evaluationStatusType = applicationEvaluationEntity.getStatus(); + if (Boolean.FALSE.equals(evaluationStatusType.equals((ApplicationEvaluationStatusTypeEnum.SOCCORSO.getValue())))){ + applicationEvaluationEntity.setStatus(ApplicationEvaluationStatusTypeEnum.SOCCORSO.getValue()); applicationEvaluationRepository.save(applicationEvaluationEntity); - + } ApplicationEntity applicationEntity = applicationService.validateApplication(applicationId); - applicationEntity.setStatus(ApplicationStatusTypeEnum.SOCCORSO.getValue()); - applicationRepository.save(applicationEntity); - + String applicationStatusType = applicationEntity.getStatus(); + if (Boolean.FALSE.equals(applicationStatusType.equals((ApplicationStatusTypeEnum.SOCCORSO.getValue())))) { + applicationEntity.setStatus(ApplicationStatusTypeEnum.SOCCORSO.getValue()); + applicationRepository.save(applicationEntity); + } AssignedApplicationsEntity assignedApplicationsEntity = assignedApplicationsService.validateAssignedApplication(assignedApplicationId); - assignedApplicationsEntity.setStatus(AssignedApplicationEnum.SOCCORSO.getValue()); - assignedApplicationsRepository.save(assignedApplicationsEntity); - + String assignedStatusType = assignedApplicationsEntity.getStatus(); + if (Boolean.FALSE.equals(assignedStatusType.equals((AssignedApplicationEnum.SOCCORSO.getValue())))) { + assignedApplicationsEntity.setStatus(AssignedApplicationEnum.SOCCORSO.getValue()); + assignedApplicationsRepository.save(assignedApplicationsEntity); + } return applicationAmendment; } @@ -649,12 +653,16 @@ public class ApplicationAmendmentRequestDao { ApplicationAmendmentRequestResponse response = convertEntityToResponse(updatedApplicationAmendment); List amendmentRequests = applicationAmendmentRequestRepository.findAllByApplicationEvaluationIdAndIsDeletedFalse(existingApplicationAmendment.getApplicationEvaluationEntity().getId()); - boolean allClosed = amendmentRequests.stream() + Boolean allClosed = amendmentRequests.stream() .allMatch(amendment -> amendment.getStatus().equals(ApplicationAmendmentRequestEnum.CLOSE.getValue())); - - if (allClosed) { + ApplicationEntity application = applicationService.validateApplication(existingApplicationAmendment.getApplicationId()); + if (Boolean.TRUE.equals(allClosed)){ existingApplicationAmendment.getApplicationEvaluationEntity().setStatus(ApplicationEvaluationStatusTypeEnum.OPEN.getValue()); applicationEvaluationRepository.save(existingApplicationAmendment.getApplicationEvaluationEntity()); + application.setStatus(ApplicationStatusTypeEnum.EVALUATION.getValue()); + applicationRepository.save(application); + existingApplicationAmendment.getApplicationEvaluationEntity().getAssignedApplicationsEntity().setStatus(AssignedApplicationEnum.OPEN.getValue()); + assignedApplicationsRepository.save(existingApplicationAmendment.getApplicationEvaluationEntity().getAssignedApplicationsEntity()); log.info("All amendments are closed. Application Evaluation status set to OPEN."); } log.info("Application Amendment closed successfully: {}", response); From 65bc02223d3a0611333546d4b3997b280d2be888 Mon Sep 17 00:00:00 2001 From: rajesh Date: Thu, 21 Nov 2024 15:11:41 +0530 Subject: [PATCH 05/12] Updated code --- .../tendermanagement/constants/GepafinConstant.java | 2 +- .../net/gepafin/tendermanagement/dao/ApplicationDao.java | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 272d3f23..f3aa3455 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -293,6 +293,6 @@ public class GepafinConstant { public static final String APPLICATION_DOCUMENTS_NOT_FOUND_MSG = "application.documents.not.found"; public static final String DUPLICATE_BENEFICIARY_CALL = "beneficiary.call.duplicate"; public static final String COMPANY_ID_REQUIRED_FOR_PREFERRED_CALL = "company.id.required.for.preferred.call"; - public static final String CREATED_DATE = "createdDate"; + public static final String SUBMISSION_DATE = "submissionDate"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index 58f41f7c..90328086 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -337,8 +337,11 @@ public class ApplicationDao { .collect(Collectors.toList()); predicate = builder.and(predicate, root.get("status").in(statusNames)); } - predicate = builder.and(predicate, builder.equal(root.get("hubId"), userEntity.getHub().getId())); - query.orderBy(builder.desc(root.get(GepafinConstant.CREATED_DATE))); + query.orderBy( + builder.desc(builder.isNotNull(root.get(GepafinConstant.SUBMISSION_DATE))), + builder.desc(root.get(GepafinConstant.SUBMISSION_DATE)) + ); + return predicate; }; } From ce26a33f6ab722a42307f5fdd42caa82256518cc Mon Sep 17 00:00:00 2001 From: rajesh Date: Thu, 21 Nov 2024 16:47:09 +0530 Subject: [PATCH 06/12] Updated code --- .../repositories/BeneficiaryPreferredCallRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/BeneficiaryPreferredCallRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/BeneficiaryPreferredCallRepository.java index 1101d1a6..c83be4d8 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/BeneficiaryPreferredCallRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/BeneficiaryPreferredCallRepository.java @@ -13,7 +13,7 @@ public interface BeneficiaryPreferredCallRepository extends JpaRepository findByBeneficiaryIdAndIsDeletedFalse(Long beneficiaryId); List findByUserIdAndIsDeletedFalse(Long userId); - @Query("SELECT preferredCall FROM BeneficiaryPreferredCallEntity preferredCall where preferredCall.userId=:userId AND (:companyId is null OR preferredCall.companyId=:companyId)") + @Query("SELECT preferredCall FROM BeneficiaryPreferredCallEntity preferredCall where preferredCall.userId=:userId AND (:companyId is null OR preferredCall.companyId=:companyId) AND isDeleted=false") List findByUserIdAndCompanyIdAndIsDeletedFalse(@Param("userId") Long userId, @Param("companyId") Long companyId); List findByBeneficiaryIdAndCompanyId(Long beneficiaryId,Long companyId); List findByUserIdAndCallIdInAndIsDeletedFalse(Long userId, List callIds); From 13fa7807e9c8829c7b7160abd93a38f3f920ca8d Mon Sep 17 00:00:00 2001 From: rajesh Date: Thu, 21 Nov 2024 17:36:41 +0530 Subject: [PATCH 07/12] Added column to communication table --- .../dao/CommunicationDao.java | 19 ++++++- .../entities/CommunicationEntity.java | 6 +++ .../response/CommunicationResponseBean.java | 4 ++ .../service/CommunicationService.java | 9 ++-- .../impl/CommunicationServiceImpl.java | 51 +++++++++++++++---- .../web/rest/api/CommunicationApi.java | 5 +- .../api/impl/CommunicationController.java | 10 ++-- .../db/changelog/db.changelog-1.0.0.xml | 41 ++++++++++----- 8 files changed, 110 insertions(+), 35 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/CommunicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/CommunicationDao.java index afe7e21e..75926512 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/CommunicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/CommunicationDao.java @@ -1,5 +1,6 @@ package net.gepafin.tendermanagement.dao; +import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity; @@ -9,6 +10,7 @@ import net.gepafin.tendermanagement.model.response.ApplicationAmendmentResponse; import net.gepafin.tendermanagement.model.response.CommunicationResponseBean; import net.gepafin.tendermanagement.repositories.CommunicationRepository; import net.gepafin.tendermanagement.service.ApplicationAmendmentRequestService; +import net.gepafin.tendermanagement.util.Validator; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.slf4j.Logger; @@ -27,9 +29,12 @@ public class CommunicationDao { private CommunicationRepository communicationRepository; @Autowired - ApplicationAmendmentRequestService applicationAmendmentRequestService; + private ApplicationAmendmentRequestService applicationAmendmentRequestService; - public CommunicationResponseBean addCommentToAmendmentRequest(CommunicationRequestBean communicationReq, Long amendmentId) { + @Autowired + private Validator validator; + + public CommunicationResponseBean addCommentToAmendmentRequest(HttpServletRequest request, CommunicationRequestBean communicationReq, Long amendmentId) { log.info("Adding communication request..."); CommunicationEntity communicationEntity = convertToCommunicationCommentEntity(communicationReq, amendmentId); @@ -85,18 +90,28 @@ public class CommunicationDao { response.setCreatedDate(entity.getCreatedDate()); response.setUpdatedDate(entity.getUpdatedDate()); response.setTitle(entity.getCommunicationTitle()); + response.setSenderUserId(entity.getSenderUserId()); + response.setReceiverUserId(entity.getReceiverUserId()); return response; } private CommunicationEntity convertToCommunicationCommentEntity(CommunicationRequestBean communicationReq, Long amendmentId) { ApplicationAmendmentRequestEntity amendmentRequest = applicationAmendmentRequestService.validateApplicationAmendmentRequest(amendmentId); + CommunicationEntity communicationEntity = new CommunicationEntity(); communicationEntity.setApplicationAmendmentRequest(amendmentRequest); communicationEntity.setCommunicationTitle(communicationReq.getTitle()); communicationEntity.setCommunicationComment(communicationReq.getComment()); communicationEntity.setIsDeleted(false); communicationEntity.setCommentedDate(LocalDateTime.now()); + if(validator.checkIsPreInstructor()){ + communicationEntity.setSenderUserId(amendmentRequest.getApplicationEvaluationEntity().getUserId()); + communicationEntity.setReceiverUserId(amendmentRequest.getApplicationEvaluationEntity().getAssignedApplicationsEntity().getApplication().getUserId()); + } else if(validator.checkIsBeneficiary()) { + communicationEntity.setSenderUserId(amendmentRequest.getApplicationEvaluationEntity().getAssignedApplicationsEntity().getApplication().getUserId()); + communicationEntity.setReceiverUserId(amendmentRequest.getApplicationEvaluationEntity().getUserId()); + } return communicationEntity; } } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/CommunicationEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/CommunicationEntity.java index 7aa43acd..9029649e 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/CommunicationEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/CommunicationEntity.java @@ -26,6 +26,12 @@ public class CommunicationEntity extends BaseEntity { @Column(name = "COMMENTED_DATE") private LocalDateTime commentedDate; + @Column(name = "SENDER_USER_ID") + private Long senderUserId; + + @Column(name = "RECEIVER_USER_ID") + private Long receiverUserId; + @ManyToOne @JoinColumn(name = "AMENDMENT_ID", referencedColumnName = "id", nullable = false) private ApplicationAmendmentRequestEntity applicationAmendmentRequest; diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/CommunicationResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/CommunicationResponseBean.java index d1405dd8..13afde4b 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/CommunicationResponseBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/CommunicationResponseBean.java @@ -16,6 +16,10 @@ public class CommunicationResponseBean { private LocalDateTime updatedDate; + private Long senderUserId; + + private Long receiverUserId; + private Long amendmentId; public CommunicationResponseBean(LocalDateTime commentedDate, String comment, String title, LocalDateTime createdDate, LocalDateTime updatedDate, Long amendmentId) { diff --git a/src/main/java/net/gepafin/tendermanagement/service/CommunicationService.java b/src/main/java/net/gepafin/tendermanagement/service/CommunicationService.java index 5f8f1cd3..6c99f4a9 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/CommunicationService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/CommunicationService.java @@ -1,15 +1,16 @@ package net.gepafin.tendermanagement.service; +import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.model.request.CommunicationRequestBean; import net.gepafin.tendermanagement.model.response.ApplicationAmendmentResponse; import net.gepafin.tendermanagement.model.response.CommunicationResponseBean; public interface CommunicationService { - CommunicationResponseBean addCommentToAmendmentRequest(CommunicationRequestBean communicationRequestBean, Long amendmentId); + CommunicationResponseBean addCommentToAmendmentRequest(HttpServletRequest request ,CommunicationRequestBean communicationRequestBean, Long amendmentId); - String deleteComment(Long amendmentId, Long commentId); + String deleteComment(HttpServletRequest request,Long amendmentId, Long commentId); - CommunicationResponseBean updateAmendmentComment(CommunicationRequestBean communicationRequestBean, Long amendmentId, Long commentId); + CommunicationResponseBean updateAmendmentComment(HttpServletRequest request,CommunicationRequestBean communicationRequestBean, Long amendmentId, Long commentId); - ApplicationAmendmentResponse getAmendmentComments(Long id); + ApplicationAmendmentResponse getAmendmentComments(HttpServletRequest request,Long id); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/CommunicationServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/CommunicationServiceImpl.java index 5a9b9c06..de3e5030 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/CommunicationServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/CommunicationServiceImpl.java @@ -1,43 +1,76 @@ package net.gepafin.tendermanagement.service.impl; +import jakarta.servlet.http.HttpServletRequest; +import net.gepafin.tendermanagement.dao.ApplicationAmendmentRequestDao; import net.gepafin.tendermanagement.dao.CommunicationDao; +import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity; import net.gepafin.tendermanagement.model.request.CommunicationRequestBean; import net.gepafin.tendermanagement.model.response.ApplicationAmendmentResponse; import net.gepafin.tendermanagement.model.response.CommunicationResponseBean; import net.gepafin.tendermanagement.service.CommunicationService; +import net.gepafin.tendermanagement.util.Validator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + @Service public class CommunicationServiceImpl implements CommunicationService { @Autowired CommunicationDao communicationDao; + @Autowired + ApplicationAmendmentRequestDao applicationAmendmentRequestDao; + + @Autowired + Validator validator; + @Override @Transactional(rollbackFor = Exception.class) - public CommunicationResponseBean addCommentToAmendmentRequest(CommunicationRequestBean communicationRequestBean, Long amendmentId) { - - return communicationDao.addCommentToAmendmentRequest(communicationRequestBean, amendmentId); + public CommunicationResponseBean addCommentToAmendmentRequest(HttpServletRequest request ,CommunicationRequestBean communicationRequestBean, Long amendmentId) { + ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity = applicationAmendmentRequestDao.validateApplicationAmendmentRequest(amendmentId); + if (Boolean.FALSE.equals(validator.checkIsBeneficiary())) { + validator.validatePreInstructor(request, applicationAmendmentRequestEntity.getApplicationEvaluationEntity().getUserId()); + } else { + validator.validateUserId(request, applicationAmendmentRequestEntity.getApplicationEvaluationEntity().getAssignedApplicationsEntity().getApplication().getUserId()); + } + return communicationDao.addCommentToAmendmentRequest(request,communicationRequestBean, amendmentId); } + @Override @Transactional(rollbackFor = Exception.class) - public String deleteComment(Long amendmentId, Long commentId) { - + public String deleteComment(HttpServletRequest request ,Long amendmentId, Long commentId) { + ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity = applicationAmendmentRequestDao.validateApplicationAmendmentRequest(amendmentId); + if (Boolean.FALSE.equals(validator.checkIsBeneficiary())) { + validator.validatePreInstructor(request, applicationAmendmentRequestEntity.getApplicationEvaluationEntity().getUserId()); + } else { + validator.validateUserId(request, applicationAmendmentRequestEntity.getApplicationEvaluationEntity().getAssignedApplicationsEntity().getApplication().getUserId()); + } return communicationDao.deleteComment(amendmentId, commentId); } @Override @Transactional(rollbackFor = Exception.class) - public CommunicationResponseBean updateAmendmentComment(CommunicationRequestBean communicationRequestBean, Long amendmentId, Long commentId) { - + public CommunicationResponseBean updateAmendmentComment(HttpServletRequest request,CommunicationRequestBean communicationRequestBean, Long amendmentId, Long commentId) { + ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity = applicationAmendmentRequestDao.validateApplicationAmendmentRequest(amendmentId); + if (Boolean.FALSE.equals(validator.checkIsBeneficiary())) { + validator.validatePreInstructor(request, applicationAmendmentRequestEntity.getApplicationEvaluationEntity().getUserId()); + } else { + validator.validateUserId(request, applicationAmendmentRequestEntity.getApplicationEvaluationEntity().getAssignedApplicationsEntity().getApplication().getUserId()); + } return communicationDao.updateAmendmentComment(communicationRequestBean, amendmentId, commentId); } + @Override @Transactional(readOnly = true) - public ApplicationAmendmentResponse getAmendmentComments(Long id) { - + public ApplicationAmendmentResponse getAmendmentComments(HttpServletRequest request,Long id) { + ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity = applicationAmendmentRequestDao.validateApplicationAmendmentRequest(id); + if (Boolean.FALSE.equals(validator.checkIsBeneficiary())) { + validator.validatePreInstructor(request, applicationAmendmentRequestEntity.getApplicationEvaluationEntity().getUserId()); + } else { + validator.validateUserId(request, applicationAmendmentRequestEntity.getApplicationEvaluationEntity().getAssignedApplicationsEntity().getApplication().getUserId()); + } return communicationDao.getAmendmentComments(id); } } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/CommunicationApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/CommunicationApi.java index eb1351c9..a648b08b 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/CommunicationApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/CommunicationApi.java @@ -14,6 +14,7 @@ import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; import org.springframework.data.repository.query.Param; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -32,6 +33,7 @@ public interface CommunicationApi { @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @PostMapping(value = "/{amendmentId}", produces = { "application/json" }) + @PreAuthorize("hasRole('ROLE_PRE_INSTRUCTOR') || hasRole('ROLE_BENEFICIARY')") ResponseEntity> addCommentToAmendmentRequest(HttpServletRequest request, @RequestBody @Parameter CommunicationRequestBean communicationResponseBean, @PathVariable(value = "amendmentId") Long amendmentId); @@ -43,7 +45,7 @@ public interface CommunicationApi { @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE))) }) @GetMapping(value = "/{amendmentId}", produces = "application/json") - public ResponseEntity> getAmendmentComments(@PathVariable(value = "amendmentId") Long amendmentId); + public ResponseEntity> getAmendmentComments(HttpServletRequest request,@PathVariable(value = "amendmentId") Long amendmentId); @Operation(summary = "Api to update communication comments", responses = { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @@ -53,6 +55,7 @@ public interface CommunicationApi { @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) }) @PutMapping(value = "/{amendmentId}/{commentId}", produces = { "application/json" }) + @PreAuthorize("hasRole('ROLE_PRE_INSTRUCTOR') || hasRole('ROLE_BENEFICIARY')") ResponseEntity> updateCommunicationAmendment(HttpServletRequest request, @RequestBody @Parameter CommunicationRequestBean communicationResponseBean, @PathVariable(value = "amendmentId") Long amendmentId, @PathVariable(value = "commentId") Long commentId); diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CommunicationController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CommunicationController.java index 4805d2ce..92aa71cf 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CommunicationController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/CommunicationController.java @@ -27,28 +27,28 @@ public class CommunicationController implements CommunicationApi { public ResponseEntity> addCommentToAmendmentRequest(HttpServletRequest request, CommunicationRequestBean communicationRequestBean, Long amendmentId) { - CommunicationResponseBean communicationResponseBean = communicationService.addCommentToAmendmentRequest(communicationRequestBean, amendmentId); + CommunicationResponseBean communicationResponseBean = communicationService.addCommentToAmendmentRequest(request,communicationRequestBean, amendmentId); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response<>(communicationResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.COMMUNICATION_ADDED_TO_AMENDMENT_REQUEST_SUCCESS))); } @Override - public ResponseEntity> getAmendmentComments(Long amendmentId) { + public ResponseEntity> getAmendmentComments(HttpServletRequest request,Long amendmentId) { - ApplicationAmendmentResponse response = communicationService.getAmendmentComments(amendmentId); + ApplicationAmendmentResponse response = communicationService.getAmendmentComments(request,amendmentId); return ResponseEntity.ok(new Response<>(response, Status.SUCCESS, Translator.toLocale(GepafinConstant.AMENDMENT_FOUND_SUCCESS))); } @Override public ResponseEntity> updateCommunicationAmendment(HttpServletRequest request, CommunicationRequestBean communicationRequestBean, Long amendmentId, Long commentId) { - CommunicationResponseBean communicationResponseBean = communicationService.updateAmendmentComment(communicationRequestBean, amendmentId, commentId); + CommunicationResponseBean communicationResponseBean = communicationService.updateAmendmentComment(request,communicationRequestBean, amendmentId, commentId); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(communicationResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.COMMENT_UPDATED_SUCCESS_MSG))); } @Override public ResponseEntity> deleteApplicationAmendmentComment(HttpServletRequest request, Long applicationAmendId, Long commentId) { - String communicationResponseBean = communicationService.deleteComment(applicationAmendId, commentId); + String communicationResponseBean = communicationService.deleteComment(request,applicationAmendId, commentId); return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(communicationResponseBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.COMMENT_DELETED_SUCCESS_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 a7fe774d..05f8d108 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 @@ -1345,7 +1345,7 @@ referencedColumnNames="id"/> - + - + @@ -1693,15 +1693,15 @@ - - - UNIQUE_UUID = 'p4lk3bcx1RStqTaIVVbXs' - - - - UNIQUE_UUID = 't7jh5wfg9QXylNaTZkPoE' - - + + + UNIQUE_UUID = 'p4lk3bcx1RStqTaIVVbXs' + + + + UNIQUE_UUID = 't7jh5wfg9QXylNaTZkPoE' + + select setval('gepafin_schema.system_email_template_id_seq', (select @@ -1763,7 +1763,7 @@ - + @@ -1771,11 +1771,11 @@ - + - + @@ -1785,4 +1785,17 @@ + + + + + + + + + + + role_type = 'ROLE_PRE_INSTRUCTOR' + + From aa37f7d3c35bcde16062b72f2bd01ef2b8909470 Mon Sep 17 00:00:00 2001 From: nisha Date: Thu, 21 Nov 2024 18:01:11 +0530 Subject: [PATCH 08/12] Fixed application hub issue --- .../java/net/gepafin/tendermanagement/dao/ApplicationDao.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index f68f76cc..8d1462ce 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -341,7 +341,7 @@ public class ApplicationDao { builder.desc(builder.isNotNull(root.get(GepafinConstant.SUBMISSION_DATE))), builder.desc(root.get(GepafinConstant.SUBMISSION_DATE)) ); - + predicate = builder.and(predicate, root.get("hubId").in(userEntity.getHub().getId())); return predicate; }; } From 275a1ba28728ad1645ff0dd31c0ad0b81aaebb88 Mon Sep 17 00:00:00 2001 From: nisha Date: Thu, 21 Nov 2024 18:08:47 +0530 Subject: [PATCH 09/12] updated code --- .../java/net/gepafin/tendermanagement/dao/ApplicationDao.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index 8d1462ce..017870ed 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -341,7 +341,7 @@ public class ApplicationDao { builder.desc(builder.isNotNull(root.get(GepafinConstant.SUBMISSION_DATE))), builder.desc(root.get(GepafinConstant.SUBMISSION_DATE)) ); - predicate = builder.and(predicate, root.get("hubId").in(userEntity.getHub().getId())); + predicate = builder.and(predicate, builder.equal(root.get("hubId"), userEntity.getHub().getId())); return predicate; }; } From bacbc173070d78820231541571c879e38bc65ac7 Mon Sep 17 00:00:00 2001 From: rajesh Date: Thu, 21 Nov 2024 18:27:20 +0530 Subject: [PATCH 10/12] Create Evaluation when assigned to Instructor --- .../tendermanagement/dao/ApplicationEvaluationDao.java | 6 +++++- .../tendermanagement/dao/AssignedApplicationsDao.java | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index 2bcbade9..5a28e86a 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -15,6 +15,7 @@ import net.gepafin.tendermanagement.model.request.FieldRequest; 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.util.Utils; @@ -81,12 +82,15 @@ public class ApplicationEvaluationDao { @Autowired private FormDao formDao; + + @Autowired + private AssignedApplicationsService assignedApplicationsService; private ApplicationEvaluationEntity convertToEntity(UserEntity user, ApplicationEvaluationRequest req, Long assignedApplciationId) { ApplicationEvaluationEntity entity = new ApplicationEvaluationEntity(); - AssignedApplicationsEntity assignedApplications = assignedApplicationsRepository.findByIdAndIsDeletedFalse(assignedApplciationId).orElse(null); + AssignedApplicationsEntity assignedApplications = assignedApplicationsService.validateAssignedApplication(assignedApplciationId); ApplicationEntity application = applicationService.validateApplication(assignedApplications.getApplication().getId()); entity.setApplicationId(application.getId()); entity.setAssignedApplicationsEntity(assignedApplications); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java index b3e27da5..b83f8689 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java @@ -8,6 +8,7 @@ import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity; import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.AssignedApplicationEnum; +import net.gepafin.tendermanagement.model.request.ApplicationEvaluationRequest; import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest; import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse; import net.gepafin.tendermanagement.repositories.ApplicationRepository; @@ -47,6 +48,8 @@ public class AssignedApplicationsDao { @Autowired private Validator validator; + @Autowired + private ApplicationEvaluationDao applicationEvaluationDao; public AssignedApplicationsResponse createAssignedApplications(Long applicationId, Long userId, UserEntity assignedByUser, AssignedApplicationsRequest assignedApplicationsRequest){ log.info("Assigning application to pre-Instructor with details: {}", applicationId,userId); @@ -69,7 +72,7 @@ public class AssignedApplicationsDao { UserEntity user = userService.validateUser(userId); AssignedApplicationsEntity assignment = createAssignmentEntity(application, user.getId(), assignedByUser, assignedApplicationsRequest); AssignedApplicationsResponse assignApplicationToInstructorResponse = convertEntityToResponse(assignment); - + applicationEvaluationDao.createOrUpdateApplicationEvaluation(user, new ApplicationEvaluationRequest(), assignApplicationToInstructorResponse.getId()); log.info("Application assigned succesfully {}", assignApplicationToInstructorResponse); return assignApplicationToInstructorResponse; } From ccd5d9408a7d73d5e9073a61f77c6fc29f61afcb Mon Sep 17 00:00:00 2001 From: rajesh Date: Fri, 22 Nov 2024 12:52:22 +0530 Subject: [PATCH 11/12] Added companyName in assigned application response --- .../gepafin/tendermanagement/constants/GepafinConstant.java | 1 + .../tendermanagement/dao/AssignedApplicationsDao.java | 5 +++++ .../model/response/AssignedApplicationsResponse.java | 1 + 3 files changed, 7 insertions(+) diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index fa2fceda..e3304967 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -295,5 +295,6 @@ public class GepafinConstant { public static final String USER_MUST_BE_ASSOCIATED_WITH_COMPANY="user.must.be.associated.with.company.to.create.application"; public static final String COMPANY_ID_REQUIRED_FOR_PREFERRED_CALL = "company.id.required.for.preferred.call"; public static final String SUBMISSION_DATE = "submissionDate"; + public static final String ASSIGNED_AT = "assignedAt"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java index b3e27da5..ca6e44ba 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/AssignedApplicationsDao.java @@ -128,6 +128,7 @@ public class AssignedApplicationsDao { assignedApplicationsResponse.setAssignedAt(assignedApplications.getAssignedAt()); assignedApplicationsResponse.setProtocolNumber(protocolNumber); assignedApplicationsResponse.setCallName(callName); + assignedApplicationsResponse.setCompanyName(application.getCompany().getCompanyName()); assignedApplicationsResponse.setBeneficiaryName(beneficiaryName); assignedApplicationsResponse.setSubmissionDate(submissionDate); assignedApplicationsResponse.setCallEndDate(callEndDate); @@ -171,6 +172,10 @@ public class AssignedApplicationsDao { if (userId != null) { predicate = builder.and(predicate, builder.equal(root.get("userId"), userId)); } + query.orderBy( + builder.desc(builder.isNotNull(root.get(GepafinConstant.ASSIGNED_AT))), + builder.desc(root.get(GepafinConstant.ASSIGNED_AT)) + ); predicate = builder.and(predicate, builder.equal(root.get("application").get("hubId"), hubId)); return predicate; }; diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationsResponse.java b/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationsResponse.java index b5ad3aae..3affe42f 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationsResponse.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/AssignedApplicationsResponse.java @@ -20,6 +20,7 @@ public class AssignedApplicationsResponse extends BaseBean { private LocalDateTime submissionDate; private LocalDateTime callStartDate; private LocalDateTime callEndDate; + private String companyName; } From bd66c711fe3addc68ecdc0b12026259e765f98ee Mon Sep 17 00:00:00 2001 From: rajesh Date: Fri, 22 Nov 2024 14:05:22 +0530 Subject: [PATCH 12/12] Added motivation text field in application evaluation --- .../tendermanagement/dao/ApplicationEvaluationDao.java | 4 ++++ .../entities/ApplicationEvaluationEntity.java | 3 +++ .../model/request/ApplicationEvaluationRequest.java | 1 + .../model/response/ApplicationEvaluationResponse.java | 1 + src/main/resources/db/changelog/db.changelog-1.0.0.xml | 5 +++++ 5 files changed, 14 insertions(+) diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index 121d7dfe..1b725c96 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -99,6 +99,7 @@ public class ApplicationEvaluationDao { entity.setChecklist(Utils.convertObjectToJson(req.getChecklist())); entity.setFile(Utils.convertObjectToJson(req.getFiles())); entity.setNote(req.getNote()); + entity.setMotivation(req.getMotivation()); entity.setIsDeleted(false); entity.setStatus(ApplicationEvaluationStatusTypeEnum.OPEN.getValue()); return entity; @@ -130,6 +131,7 @@ public class ApplicationEvaluationDao { AssignedApplicationsEntity assignedApplications = assignedApplicationsRepository.findByIdAndIsDeletedFalse(entity.getAssignedApplicationsEntity().getId()).orElse(null); response.setAssignedApplicationId(assignedApplications.getId()); response.setNote(entity.getNote()); + response.setMotivation(entity.getMotivation()); response.setStatus(ApplicationEvaluationStatusTypeEnum.valueOf(entity.getStatus())); response.setCreatedDate(entity.getCreatedDate()); response.setUpdatedDate(entity.getUpdatedDate()); @@ -437,6 +439,7 @@ public class ApplicationEvaluationDao { entity.setFile(Utils.convertObjectToJson(filterNonNullFields(processField(entity, req)))); entity.setIsDeleted(false); setIfUpdated(entity::getNote, entity::setNote, req.getNote()); + setIfUpdated(entity::getMotivation, entity::setMotivation, req.getMotivation()); } else { entity = convertToEntity(user, req, assignedApplicationId); } @@ -636,6 +639,7 @@ public class ApplicationEvaluationDao { response.setApplicationId(application.getId()); response.setAssignedApplicationId(assignedApplications.getId()); response.setNote(null); + response.setMotivation(null); response.setApplicationStatus(ApplicationStatusTypeEnum.valueOf(application.getStatus())); response.setStatus(ApplicationEvaluationStatusTypeEnum.valueOf(ApplicationEvaluationStatusTypeEnum.OPEN.getValue())); response.setMinScore(call.getThreshold()!=null?call.getThreshold():null); diff --git a/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationEntity.java index dae9a3fb..e2bb27aa 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationEntity.java @@ -28,6 +28,9 @@ public class ApplicationEvaluationEntity extends BaseEntity{ @Column(name = "status") private String status; + + @Column(name = "MOTIVATION") + private String motivation; @Column(name="IS_DELETED") private Boolean isDeleted; diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationEvaluationRequest.java b/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationEvaluationRequest.java index 9563f00b..df29c1d8 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationEvaluationRequest.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationEvaluationRequest.java @@ -12,4 +12,5 @@ public class ApplicationEvaluationRequest { private List files; private String note; private ApplicationStatusForEvaluation applicationStatus; + private String motivation; } 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 f0be1236..7f4722e2 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponse.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponse.java @@ -26,6 +26,7 @@ public class ApplicationEvaluationResponse { private String beneficiary; private Long protocolNumber; private String callName; + private String motivation; private LocalDateTime submissionDate; private LocalDateTime evaluationDate; private LocalDateTime callEndDate; 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 05f8d108..ea473da2 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 @@ -1798,4 +1798,9 @@ role_type = 'ROLE_PRE_INSTRUCTOR' + + + + +