diff --git a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java index 14d82b91..42a9cd41 100644 --- a/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java +++ b/src/main/java/net/gepafin/tendermanagement/constants/GepafinConstant.java @@ -341,5 +341,6 @@ public class GepafinConstant { public static final String POLLING_THREAD_NAME = "Ndg-Polling-Thread-"; public static final String DOCUMENT_UPLOADING_IN_PROGRESS = "document.uploading.is.in.progress"; public static final String ASYNC_DOCUMENT_UPLOAD_NAME = "AsyncDocumentUpload-"; + public static final String All_DOCUMENT_CHECKED_AND_ONE_CHECKLIST_CHECKED="all.document.checked.and.one.checklist.checked"; } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java index 41d43b1e..cb9f39e8 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationAmendmentRequestDao.java @@ -105,12 +105,33 @@ public class ApplicationAmendmentRequestDao { @Autowired private AssignedApplicationsDao assignedApplicationsDao; + @Autowired + private ApplicationEvaluationDao applicationEvaluationDao; + public ApplicationAmendmentRequestResponse getApplicationDataForAmendment(Long applicationEvaluationId) { log.info("Fetching the application data for the Amendment process {}", applicationEvaluationId); ApplicationEvaluationEntity applicationEvaluationEntity = applicationEvaluationService.validateApplicationEvaluation(applicationEvaluationId); Long applicationId = applicationEvaluationEntity.getApplicationId(); - ApplicationEntity application = applicationService.validateApplication(applicationId); + List evaluationFileRequests=new ArrayList<>(); + List checklistRequests=new ArrayList<>(); + ApplicationEntity application = applicationService.validateApplication(applicationId); + String file=applicationEvaluationEntity.getFile(); + String checkList=applicationEvaluationEntity.getChecklist(); + if(file != null){ + evaluationFileRequests=Utils.convertJsonStringToList(file,FieldRequest.class); + } + Boolean allValid = evaluationFileRequests.stream() + .anyMatch(fieldRequest -> fieldRequest.getValid() == null); + if(checkList != null) { + checklistRequests=Utils.convertJsonStringToList(checkList,ChecklistRequest.class); + } + boolean resultCheckList = checklistRequests.stream() + .anyMatch(checklistRequest -> Boolean.TRUE.equals(checklistRequest.getValid())) ? false : true; + + if(Boolean.TRUE.equals(allValid) || Boolean.TRUE.equals(resultCheckList)){ + throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.All_DOCUMENT_CHECKED_AND_ONE_CHECKLIST_CHECKED)); + } // Set common application-level details String callName = application.getCall().getName(); Long protocolNumber = (application.getProtocol() != null && application.getProtocol().getProtocolNumber() != null) @@ -135,11 +156,18 @@ public class ApplicationAmendmentRequestDao { List forms = applicationFormRepository.findByApplicationId(applicationId); List allFormFields = new ArrayList<>(); - + Map fieldRequestMap = evaluationFileRequests.stream() + .collect(Collectors.toMap(FieldRequest::getId, fieldRequest -> fieldRequest)); for (ApplicationFormEntity form : forms) { String content = form.getForm().getContent(); List> result = filterByName(content, "fileupload"); - allFormFields.addAll(getIdAndLabelFromResult(result)); + List amendmentFormFieldResponses= getIdAndLabelFromResult(result); + amendmentFormFieldResponses.removeIf(amendmentFormFieldResponse -> { + FieldRequest matchingRequest = fieldRequestMap.get(amendmentFormFieldResponse.getFieldId()); + // Remove if no matching FieldRequest exists or if valid is true + return matchingRequest == null || Boolean.TRUE.equals(matchingRequest.getValid()); + }); + allFormFields.addAll(amendmentFormFieldResponses); } response.setFormFields(allFormFields); @@ -237,12 +265,16 @@ public class ApplicationAmendmentRequestDao { AmendmentFormField formField = new AmendmentFormField(); formField.setFieldId(amendmentFormFieldRequest.getFieldId()); formField.setFieldValue(null); + formField.setLabel(amendmentFormFieldRequest.getLabel()); return formField; }) .collect(Collectors.toList()); String formFieldsJson = Utils.convertObjectToJson(formFieldRequestBean); applicationAmendmentRequestEntity.setFormFields(formFieldsJson); } + if(applicationAmendmentRequest.getAmendmentDocument()!=null || Boolean.FALSE.equals(applicationAmendmentRequest.getAmendmentDocument().isEmpty())) { + setAmendmentDocuments(applicationAmendmentRequest.getAmendmentDocument(), applicationAmendmentRequestEntity); + } List amendmentRequest = applicationAmendmentRequestRepository.findAllByApplicationEvaluationIdAndIsDeletedFalse(applicationEvaluationEntity.getId()); // Ensure startDate and initialDays are not null to avoid NullPointerException if (amendmentRequest !=null && amendmentRequest.isEmpty() && applicationEvaluationEntity.getStartDate() != null && applicationEvaluationEntity.getInitialDays() != null ) { @@ -261,7 +293,7 @@ public class ApplicationAmendmentRequestDao { Long protocolNumber = protocolDao.getProtocolNumber(userEntity.getHub()); ProtocolEntity protocolEntity = protocolDao.createProtocolEntity( applicationEvaluationEntity.getAssignedApplicationsEntity().getApplication(), protocolNumber, - userEntity.getHub().getId()); + userEntity.getHub().getId(),false); applicationAmendmentRequestEntity.setProtocol(protocolEntity); ApplicationAmendmentRequestEntity applicationAmendment = saveApplicationAmendmentRequestEntity(applicationAmendmentRequestEntity, null, VersionActionTypeEnum.INSERT); String evaluationStatusType = applicationEvaluationEntity.getStatus(); @@ -302,6 +334,16 @@ public class ApplicationAmendmentRequestDao { return applicationAmendment; } + private void setAmendmentDocuments(List amendmentFieldRequest, ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity) { + amendmentFieldRequest.stream().forEach(amendmentData->{ + String fieldValue=amendmentData.getFileValue(); + if(fieldValue!=null){ + documentService.validateDocument(Long.valueOf(fieldValue)); + } + }); + applicationAmendmentRequestEntity.setAmendmentDocument(Utils.convertListToJsonString(amendmentFieldRequest)); + } + public ApplicationAmendmentRequestEntity saveApplicationAmendmentRequestEntity(ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity,ApplicationAmendmentRequestEntity oldApplicationAmendmentEntity,VersionActionTypeEnum actionTypeEnum) { ApplicationAmendmentRequestEntity applicationAmendmentRequest = applicationAmendmentRequestRepository.save(applicationAmendmentRequestEntity); @@ -320,12 +362,31 @@ public class ApplicationAmendmentRequestDao { List amendmentFormFields = Utils.convertJsonStringToList( applicationAmendmentRequestEntity.getFormFields(), AmendmentFormField.class); Map formFieldEntityMap = getApplicationFormFieldEntityMap(applicationAmendmentRequestEntity, amendmentFormFields); - + List amendmentFieldRequests = Utils.convertJsonStringToList(applicationAmendmentRequestEntity.getAmendmentDocument(),AmendmentFieldRequest.class); + if (amendmentFieldRequests != null) { + List amendmentDocumentResponses = amendmentFieldRequests.stream() + .map(this::createAmendmentDocumentResponse) + .toList(); + response.setAmendmentDocuments(amendmentDocumentResponses); + } processFormFields(amendmentFormFields, fieldIdToLabelMap, formFieldEntityMap, response); return response; } + public AmendmentDocumentResponse createAmendmentDocumentResponse(AmendmentFieldRequest amendmentFieldRequest) { + AmendmentDocumentResponse amendmentDocumentResponse = new AmendmentDocumentResponse(); + amendmentDocumentResponse.setFieldId(amendmentFieldRequest.getFieldId()); + amendmentDocumentResponse.setNameValue(amendmentFieldRequest.getNameValue()); + amendmentDocumentResponse.setIsValid(amendmentFieldRequest.getIsValid()); + + DocumentEntity documentEntity = documentService.validateDocument(Long.valueOf(amendmentFieldRequest.getFileValue())); + DocumentResponseBean responseBean = applicationEvaluationDao.createDocumentResponseBean(documentEntity); + amendmentDocumentResponse.setFileValue(responseBean); + + return amendmentDocumentResponse; + } + private ApplicationAmendmentRequestResponse initializeBasicResponse(ApplicationAmendmentRequestEntity entity) { ApplicationAmendmentRequestResponse response = new ApplicationAmendmentRequestResponse(); response.setId(entity.getId()); @@ -511,14 +572,15 @@ public class ApplicationAmendmentRequestDao { if(updateRequest.getApplicationFormFields() != null) { updateRequest.getApplicationFormFields().stream().forEach(applicationFormFieldRequest->{ AmendmentFormField amendmentFormField = getAmendmentFormField(amendmentFormFieldMap,applicationFormFieldRequest.getFieldId()); - ApplicationFormFieldEntity applicationFormFieldEntity = getApplicationFormField(applicationFormFieldMap, applicationFormFieldRequest.getFieldId()); - updateApplicationFormField(applicationFormFieldEntity,applicationFormFieldRequest, amendmentFormField); +// ApplicationFormFieldEntity applicationFormFieldEntity = getApplicationFormField(applicationFormFieldMap, applicationFormFieldRequest.getFieldId()); +// updateApplicationFormField(applicationFormFieldEntity,applicationFormFieldRequest, amendmentFormField); updateFormField(applicationFormFieldRequest, amendmentFormField); }); existingApplicationAmendment.setFormFields(Utils.convertListToJsonString(amendmentFormFieldMap.values().stream().toList())); } existingApplicationAmendment.setUpdatedDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); + setAmendmentDocuments(updateRequest.getAmendmentDocuments(),existingApplicationAmendment); ApplicationAmendmentRequestEntity updatedApplicationAmendment = saveApplicationAmendmentRequestEntity(existingApplicationAmendment,oldApplicationAmendmentEntity,VersionActionTypeEnum.UPDATE); ApplicationAmendmentRequestResponse response = convertEntityToResponse(updatedApplicationAmendment); log.info("Application Amendment updated successfully: {}", response); @@ -585,13 +647,13 @@ public class ApplicationAmendmentRequestDao { String fieldId) { AmendmentFormField amendmentFormField = amendmentFormFieldMap.get(fieldId); if (amendmentFormField == null) { - throw new CustomValidationException(Status.BAD_REQUEST, GepafinConstant.APPLICATION_FORM_FIELD_NOT_FOUND); + throw new CustomValidationException(Status.BAD_REQUEST, Translator.toLocale(GepafinConstant.APPLICATION_FORM_FIELD_NOT_FOUND)); } return amendmentFormField; } - private void updateFormField(ApplicationFormFieldRequestBean applicationFormFieldRequest, + private void updateFormField(AmendmentFormFieldRequest applicationFormFieldRequest, AmendmentFormField amendmentFormField) { List requestedDocumentIds = extractIds(applicationFormFieldRequest.getFieldValue()); List existingDocumentIds = extractIds(amendmentFormField.getFieldValue()); @@ -600,7 +662,8 @@ public class ApplicationAmendmentRequestDao { if (!existingDocumentIds.isEmpty()) { existingDocumentIds.forEach(this::softDeleteDocument); amendmentFormField.setFieldValue(null); - setIsUploadedBy(amendmentFormField); + amendmentFormField.setIsValid(applicationFormFieldRequest.getIsValid()); +// setIsUploadedBy(amendmentFormField); } return; } @@ -614,11 +677,12 @@ public class ApplicationAmendmentRequestDao { if (!newFieldValue.equals(amendmentFormField.getFieldValue())) { amendmentFormField.setFieldValue(newFieldValue); - setIsUploadedBy(amendmentFormField); + amendmentFormField.setIsValid(applicationFormFieldRequest.getIsValid()); +// setIsUploadedBy(amendmentFormField); } } - private List extractIds(Object fieldValue) { + public List extractIds(Object fieldValue) { if (fieldValue instanceof String && !StringUtils.isEmpty((String) fieldValue)) { return Arrays.stream(((String) fieldValue).split(",")) .map(Long::valueOf) @@ -629,14 +693,14 @@ public class ApplicationAmendmentRequestDao { - private void setIsUploadedBy(AmendmentFormField amendmentFormField) { - if(validator.checkIsBeneficiary()) { - amendmentFormField.setIsUploadedBy(AmendmentFormField.AmendmentIsUploadedByEnum.BENEFICIARY.getValue()); - }else { - amendmentFormField.setIsUploadedBy(AmendmentFormField.AmendmentIsUploadedByEnum.PRE_INSTRUCTOR.getValue()); - } - - } +// private void setIsUploadedBy(AmendmentFormField amendmentFormField) { +// if(validator.checkIsBeneficiary()) { +// amendmentFormField.setIsUploadedBy(AmendmentFormField.AmendmentIsUploadedByEnum.BENEFICIARY.getValue()); +// }else { +// amendmentFormField.setIsUploadedBy(AmendmentFormField.AmendmentIsUploadedByEnum.PRE_INSTRUCTOR.getValue()); +// } +// +// } // private void updateApplicationFormFields(ApplicationAmendmentRequestEntity applicationAmendment, ApplicationFormFieldRequestBean updatedFormField) { diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java index dbccf3b3..203b4f3c 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationDao.java @@ -813,7 +813,7 @@ public class ApplicationDao { if (status.equals(ApplicationStatusTypeEnum.SUBMIT) && Boolean.TRUE.equals(applicationEntity.getStatus().equals(ApplicationStatusTypeEnum.READY.getValue()))) { callService.validatePublishedCall(applicationEntity.getCall().getId(), userEntity.getHub().getId()); Long protocolNumber = protocolDao.getProtocolNumber(userEntity.getHub()); - ProtocolEntity protocolEntity = protocolDao.createProtocolEntity(applicationEntity, protocolNumber, userEntity.getHub().getId()); + ProtocolEntity protocolEntity = protocolDao.createProtocolEntity(applicationEntity, protocolNumber, userEntity.getHub().getId(),true); applicationEntity.setProtocol(protocolEntity); applicationEntity.setStatus(ApplicationStatusTypeEnum.SUBMIT.getValue()); applicationEntity.setSubmissionDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java index 924999f2..bd08434e 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ApplicationEvaluationDao.java @@ -2,7 +2,6 @@ package net.gepafin.tendermanagement.dao; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.config.Translator; @@ -16,6 +15,7 @@ import net.gepafin.tendermanagement.service.*; import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.util.Utils; +import net.gepafin.tendermanagement.util.Validator; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; @@ -27,7 +27,6 @@ import java.util.*; import java.util.stream.Collectors; import static net.gepafin.tendermanagement.util.Utils.setIfUpdated; -import static org.apache.commons.lang3.StringUtils.isNumeric; @Component public class ApplicationEvaluationDao { @@ -93,6 +92,15 @@ public class ApplicationEvaluationDao { @Autowired private CompanyService companyService; + @Autowired + private Validator validator; + + @Autowired + private DocumentService documentService; + + @Autowired + private ApplicationAmendmentRequestDao applicationAmendmentRequestDao; + private ApplicationEvaluationEntity convertToEntity(UserEntity user, ApplicationEvaluationRequest req, Long assignedApplciationId) { ApplicationEvaluationEntity entity = new ApplicationEvaluationEntity(); @@ -128,16 +136,88 @@ public class ApplicationEvaluationDao { List checklistEntities = callTargetAudienceChecklistRepository .findByCallIdAndLookupDataTypeAndIsDeletedFalse(call.getId(), LookUpDataEntity.LookUpDataTypeEnum.CHECKLIST.getValue()); List applicationFormEntities = applicationFormRepository.findByApplicationId(entity.getApplicationId()); + setAmendmentDetails(entity,response); setCriteriaResponses(entity, response, evaluationCriterias); setChecklistResponses(entity, response, checklistEntities); setFieldResponses(entity, response, applicationFormEntities); - + List allDocs = prepareEvaluationDocumentBeanList(entity); + setEvaluationDocResponse(response, allDocs); setApplicationDetails(response, entity); return response; } + private void setAmendmentDetails(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response) { + List amendmentRequests=applicationAmendmentRequestRepository.findAllByApplicationEvaluationIdAndIsDeletedFalse(entity.getId()); + List amendmentDocumentResponseBeans=new ArrayList<>(); + for(ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity:amendmentRequests){ + AmendmentDocumentResponseBean amendmentDocumentResponseBean=new AmendmentDocumentResponseBean(); + amendmentDocumentResponseBean.setAmendmentId(applicationAmendmentRequestEntity.getId()); + String amendmentDocument=applicationAmendmentRequestEntity.getAmendmentDocument(); + String formField=applicationAmendmentRequestEntity.getFormFields(); + if (amendmentDocument != null) { + List amendmentFieldRequests=Utils.convertJsonStringToList(amendmentDocument,AmendmentFieldRequest.class); + List amendmentDocumentResponses = amendmentFieldRequests.stream() + .map(applicationAmendmentRequestDao::createAmendmentDocumentResponse) + .toList(); + amendmentDocumentResponseBean.setAmendmentDocuments(amendmentDocumentResponses); + } + List amendmentFormFields=Utils.convertJsonStringToList(formField,AmendmentFormField.class); + amendmentDocumentResponseBean.setFormFieldDocuments(setFormFieldDocuments(amendmentFormFields)); + amendmentDocumentResponseBeans.add(amendmentDocumentResponseBean); + } + response.setAmendmentDetails(amendmentDocumentResponseBeans); + } + + private List setFormFieldDocuments(List amendmentFormFields) { + List fieldResponses=new ArrayList<>(); + for (AmendmentFormField amendmentFormField: amendmentFormFields){ + FieldResponse fieldResponse=new FieldResponse(); + fieldResponse.setId(amendmentFormField.getFieldId()); + fieldResponse.setLabel(amendmentFormField.getLabel()); + fieldResponse.setValid(amendmentFormField.getIsValid()); + List fileIds=applicationAmendmentRequestDao.extractIds(amendmentFormField.getFieldValue()); + List documentResponseBeans = fileIds.stream() + .map(fileId -> createDocumentResponseBean(documentService.validateDocument(fileId))) // Create DocumentResponseBean for each fileId + .collect(Collectors.toList()); // Collect all into a List + fieldResponse.setFileDetail(documentResponseBeans); + fieldResponses.add(fieldResponse); + } + return fieldResponses; + } + + private void setEvaluationDocResponse(ApplicationEvaluationResponse response, List docRequest) { + List evaluationDocResponses = new ArrayList<>(); + + for (EvaluationDocumentRequest doc : docRequest) { + EvaluationDocumentResponse evaluationDocResponse = new EvaluationDocumentResponse(); + if (doc.getFileValue() != null) { + Long fileId = Long.valueOf(doc.getFileValue().toString()); + documentRepository.findByIdAndNotDeleted(fileId).ifPresent(documentEntity -> { + DocumentResponseBean documentResponseBean = new DocumentResponseBean(); + documentResponseBean.setId(documentEntity.getId()); + documentResponseBean.setName(documentEntity.getFileName()); + documentResponseBean.setType(DocumentTypeEnum.valueOf(documentEntity.getType())); + documentResponseBean.setSource(DocumentSourceTypeEnum.valueOf(documentEntity.getSource())); + documentResponseBean.setSourceId(documentEntity.getSourceId()); + documentResponseBean.setFilePath(documentEntity.getFilePath()); + documentResponseBean.setCreatedDate(documentEntity.getCreatedDate()); + documentResponseBean.setUpdatedDate(documentEntity.getUpdatedDate()); + evaluationDocResponse.setFileValue(documentResponseBean); + evaluationDocResponse.setNameValue(doc.getNameValue()); + evaluationDocResponse.setValid(doc.getValid()); + evaluationDocResponse.setFieldId(doc.getFieldId()); + }); + } + if (evaluationDocResponse.getFileValue() == null) { + continue; + } + evaluationDocResponses.add(evaluationDocResponse); + } + response.setEvaluationDocument(evaluationDocResponses); + } + private void populateBasicDetails(ApplicationEvaluationEntity entity, ApplicationEvaluationResponse response) { response.setId(entity.getId()); @@ -485,9 +565,9 @@ public class ApplicationEvaluationDao { if (existingEntityOptional.isPresent()) { entity = existingEntityOptional.get(); oldApplicationEvaluation = Utils.getClonedEntityForData(entity); - entity.setCriteria(Utils.convertObjectToJson(filterNonNullCriteria(processCriteria(entity, req)))); - entity.setChecklist(Utils.convertObjectToJson(filterNonNullChecklist(processChecklist(entity, req)))); - entity.setFile(Utils.convertObjectToJson(filterNonNullFields(processField(entity, req)))); + entity.setCriteria(Utils.convertObjectToJson(processCriteria(entity, req))); + entity.setChecklist(Utils.convertObjectToJson(processChecklist(entity, req))); + entity.setFile(Utils.convertObjectToJson(processField(entity, req))); entity.setIsDeleted(false); setIfUpdated(entity::getNote, entity::setNote, req.getNote()); setIfUpdated(entity::getMotivation, entity::setMotivation, req.getMotivation()); @@ -497,6 +577,16 @@ public class ApplicationEvaluationDao { actionType = VersionActionTypeEnum.INSERT; } ApplicationStatusForEvaluation status = req.getApplicationStatus(); + // Fetch all amendment request entities associated with the evaluation ID + List applicationAmendmentRequestEntities = + applicationAmendmentRequestRepository.findAllByApplicationEvaluationIdAndIsDeletedFalse(entity.getId()); + +// Fetch amendment details from the request + if(req.getAmendmentDetails()!=null) { + List amendmentDetailsRequests = req.getAmendmentDetails(); + + updateAmendmentDocumentsAndFormFields(applicationAmendmentRequestEntities, amendmentDetailsRequests); +} ApplicationEvaluationEntity savedEntity = applicationEvaluationRepository.save(entity); @@ -512,21 +602,131 @@ public class ApplicationEvaluationDao { } } + private void updateAmendmentDocumentsAndFormFields(List applicationAmendmentRequestEntities, List amendmentFormFields) { + // Iterate through amendment request entities + for (ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity : applicationAmendmentRequestEntities) { + // Process form fields if present + if (applicationAmendmentRequestEntity.getFormFields() != null) { + // Parse existing form fields from JSON + List existingFormFields = + Utils.convertJsonStringToList(applicationAmendmentRequestEntity.getFormFields(), AmendmentFormFieldRequest.class); - private List filterNonNullChecklist(List checklistRequests) { + // Prepare a new list to hold updated form fields + List updatedFormFields = new ArrayList<>(); - return checklistRequests.stream().filter(request -> request.getValid() != null).collect(Collectors.toList()); + // Map amendment details for quick lookup by amendment ID + Map> amendmentDetailsMap = amendmentFormFields.stream() + .filter(details -> applicationAmendmentRequestEntity.getId().equals(details.getAmendmentId())) + .collect(Collectors.toMap(AmendmentDetailsRequest::getAmendmentId, AmendmentDetailsRequest::getFormFieldDocuments)); + + // Get corresponding amendment documents for the current entity + List amendmentDocuments = amendmentDetailsMap.get(applicationAmendmentRequestEntity.getId()); + if (amendmentDocuments != null) { + // Update existing form fields with new values + for (AmendmentFormFieldRequest existingField : existingFormFields) { + for (AmendmentFormFieldRequest newField : amendmentDocuments) { + if (existingField.getFieldId().equals(newField.getFieldId())) { + // Update fields if there are changes + Utils.setIfUpdated(existingField::getIsValid, existingField::setIsValid, newField.getIsValid()); + Utils.setIfUpdated(existingField::getFieldValue, existingField::setFieldValue, newField.getFieldValue()); + + updatedFormFields.add(existingField); + break; // Move to the next existing field + } + } + } + + // Convert updated form fields back to JSON and save to the database + applicationAmendmentRequestEntity.setFormFields(Utils.convertListToJsonString(updatedFormFields)); + applicationAmendmentRequestRepository.save(applicationAmendmentRequestEntity); + } + } + + // Process amendment documents if present + if (applicationAmendmentRequestEntity.getAmendmentDocument() != null) { + // Parse existing amendment fields from JSON + List existingAmendmentFields = + Utils.convertJsonStringToList(applicationAmendmentRequestEntity.getAmendmentDocument(), AmendmentFieldRequest.class); + + // Prepare a new list to hold updated amendment fields + List updatedAmendmentFields = new ArrayList<>(); + + // Map amendment details for quick lookup by amendment ID + Map> amendmentDetailsMap = amendmentFormFields.stream() + .filter(details -> applicationAmendmentRequestEntity.getId().equals(details.getAmendmentId())) + .collect(Collectors.toMap(AmendmentDetailsRequest::getAmendmentId, AmendmentDetailsRequest::getAmendmentDocuments)); + + // Get corresponding amendment documents for the current entity + List amendmentDocuments = amendmentDetailsMap.get(applicationAmendmentRequestEntity.getId()); + if (amendmentDocuments != null) { + // Update existing amendment fields with new values + for (AmendmentFieldRequest existingField : existingAmendmentFields) { + for (AmendmentFieldRequest newField : amendmentDocuments) { + if (existingField.getFieldId().equals(newField.getFieldId())) { + // Update fields if there are changes + Utils.setIfUpdated(existingField::getIsValid, existingField::setIsValid, newField.getIsValid()); + Utils.setIfUpdated(existingField::getFileValue, existingField::setFileValue, newField.getFileValue()); + Utils.setIfUpdated(existingField::getNameValue, existingField::setNameValue, newField.getNameValue()); + + updatedAmendmentFields.add(existingField); + break; // Move to the next existing field + } + } + } + + // Convert updated fields back to JSON and save to the database + applicationAmendmentRequestEntity.setAmendmentDocument(Utils.convertListToJsonString(updatedAmendmentFields)); + applicationAmendmentRequestRepository.save(applicationAmendmentRequestEntity); + } + } + } } - private List filterNonNullCriteria(List criteriaRequests) { - - return criteriaRequests.stream().filter(request -> request.getScore() != null && request.getValid() != null).collect(Collectors.toList()); - } - - private List filterNonNullFields(List fieldRequests) { - - return fieldRequests.stream().filter(request -> request.getValid() != null).collect(Collectors.toList()); - } +// private void updateAmendmentDocuments(List applicationAmendmentRequestEntities, List amendmentFormFields) { +// for (ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity : applicationAmendmentRequestEntities) { +// // Skip if there are no amendment documents +// if (applicationAmendmentRequestEntity.getAmendmentDocument() == null) { +// continue; +// } +// +// // Parse existing amendment fields from JSON +// List existingAmendmentFields = +// Utils.convertJsonStringToList(applicationAmendmentRequestEntity.getAmendmentDocument(), AmendmentFieldRequest.class); +// +// // Prepare a new list to hold updated amendment fields +// List updatedAmendmentFields = new ArrayList<>(); +// +// // Map amendment details for quick lookup by amendment ID +// Map> amendmentDetailsMap = amendmentFormFields.stream() +// .filter(details -> applicationAmendmentRequestEntity.getId().equals(details.getAmendmentId())) +// .collect(Collectors.toMap(AmendmentDetailsRequest::getAmendmentId, AmendmentDetailsRequest::getAmendmentDocuments)); +// +// // Get corresponding amendment documents for the current entity +// List amendmentDocuments = amendmentDetailsMap.get(applicationAmendmentRequestEntity.getId()); +// if (amendmentDocuments == null) { +// continue; +// } +// +// // Update existing amendment fields with new values +// for (AmendmentFieldRequest existingField : existingAmendmentFields) { +// for (AmendmentFieldRequest newField : amendmentDocuments) { +// if (existingField.getFieldId().equals(newField.getFieldId())) { +// // Update fields if there are changes +// Utils.setIfUpdated(existingField::getIsValid, existingField::setIsValid, newField.getIsValid()); +// Utils.setIfUpdated(existingField::getFileValue, existingField::setFileValue, newField.getFileValue()); +// Utils.setIfUpdated(existingField::getNameValue, existingField::setNameValue, newField.getNameValue()); +// +// updatedAmendmentFields.add(existingField); +// break; // Move to the next existing field +// } +// } +// } +// +// // Convert updated fields back to JSON and save to the database +// applicationAmendmentRequestEntity.setAmendmentDocument(Utils.convertListToJsonString(updatedAmendmentFields)); +// applicationAmendmentRequestRepository.save(applicationAmendmentRequestEntity); +// } +// } private List processCriteria(ApplicationEvaluationEntity entity, ApplicationEvaluationRequest req) { @@ -647,11 +847,52 @@ public class ApplicationEvaluationDao { return entityOptional.get(); } + public void validatePreinstructor(HttpServletRequest request,Long applicationId,Long assignedApplicationId){ + if (applicationId == null && assignedApplicationId == null) { + throw new CustomValidationException( + Status.BAD_REQUEST, + Translator.toLocale(GepafinConstant.EITHER_APPLICATION_OR_ASSIGNED_APPLICATION_ID_REQUIRED_MSG) + ); + } + Optional assignedApplicationsOptional = + assignedApplicationsRepository.findByApplicationIdOrIdAndIsDeletedFalse(applicationId,assignedApplicationId); - public ApplicationEvaluationResponse getApplicationEvaluationByApplicationId(UserEntity user, Long applicationId, Long assignedApplicationId) { + if (assignedApplicationId != null) { + assignedApplicationsOptional = assignedApplicationsOptional.filter(a -> a.getId().equals(assignedApplicationId)); + } + AssignedApplicationsEntity assignedApplications = assignedApplicationsOptional + .orElseThrow(() -> new CustomValidationException( + Status.BAD_REQUEST, + Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_WITH_ID_MSG) + )); + if (applicationId == null) { + applicationId = assignedApplications.getApplication().getId(); + } + validator.validatePreInstructor(request, assignedApplications.getUserId()); + } + public ApplicationEvaluationResponse getApplicationEvaluationByApplicationId(HttpServletRequest request, UserEntity user, Long applicationID, Long assignedApplicationID) { + Long applicationId; + Long assignedApplicationId; + validatePreinstructor(request, applicationID, assignedApplicationID); + if (applicationID == null && assignedApplicationID != null) { + assignedApplicationId = assignedApplicationID; + Optional assignedApplicationsOptional = + assignedApplicationsRepository.findByIdAndIsDeletedFalse(assignedApplicationId); + + applicationId = assignedApplicationsOptional.map(a -> a.getApplication().getId()).orElse(null); + } else { + applicationId = applicationID; + if (assignedApplicationID == null && applicationID != null) { + Optional assignedApplicationsOptional = + assignedApplicationsRepository.findByApplicationIdAndIsDeletedFalse(applicationId); + + assignedApplicationId = assignedApplicationsOptional.map(AssignedApplicationsEntity::getId).orElse(null); + } else { + assignedApplicationId = assignedApplicationID; + } + } applicationService.validateApplication(applicationId); - Optional entityOptional; if (applicationId != null && assignedApplicationId != null) { @@ -663,11 +904,19 @@ public class ApplicationEvaluationDao { } else { entityOptional = applicationEvaluationRepository.findFirstByIsDeletedFalseOrderByCreatedDateDesc(); } - return entityOptional.map(this::convertToResponse) + return entityOptional.map(this::convertToResponse) .orElseGet(() -> { return getEvaluationResponseByApplicationid(user, applicationId, assignedApplicationId); }); } + private List prepareEvaluationDocumentBeanList(ApplicationEvaluationEntity entity) { + List docRequest = new ArrayList<>(); + + if (entity != null && entity.getEvaluationDocument() != null) { + docRequest = Utils.convertJsonToList(entity.getEvaluationDocument(), new TypeReference>() {}); + } + return docRequest; + } public ApplicationEvaluationResponse getEvaluationResponseByApplicationid(UserEntity user, Long applicationId, Long assignedApplicationId) { @@ -894,7 +1143,7 @@ public class ApplicationEvaluationDao { } - private DocumentResponseBean createDocumentResponseBean(DocumentEntity documentEntity) { + public DocumentResponseBean createDocumentResponseBean(DocumentEntity documentEntity) { DocumentResponseBean responseBean = new DocumentResponseBean(); responseBean.setId(documentEntity.getId()); responseBean.setName(documentEntity.getFileName()); @@ -1413,6 +1662,10 @@ public class ApplicationEvaluationDao { ApplicationEvaluationEntity oldApplicationEvaluation = Utils.getClonedEntityForData(existingEntity); AssignedApplicationsEntity oldAssignedApplication = Utils.getClonedEntityForData(assignedApplicationsEntity); + List amendmentRequest = applicationAmendmentRequestRepository.findAllByApplicationEvaluationIdAndStatusAndIsDeletedFalse(existingEntity.getId(),ApplicationAmendmentRequestEnum.AWAITING.getValue()); + if(amendmentRequest !=null && Boolean.FALSE.equals(amendmentRequest.isEmpty())){ + throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.APPLICATION_CANNOT_APPROVED_OR_REJECTED)); + } String statusType = application.getStatus(); if (application.getStatus().equals(ApplicationStatusTypeEnum.APPROVED.getValue()) || application.getStatus().equals(ApplicationStatusTypeEnum.REJECTED.getValue())) { existingEntity.setStatus(ApplicationEvaluationStatusTypeEnum.CLOSE.getValue()); @@ -1431,11 +1684,6 @@ public class ApplicationEvaluationDao { } - List amendmentRequest = applicationAmendmentRequestRepository.findAllByApplicationEvaluationIdAndStatusAndIsDeletedFalse(existingEntity.getId(),ApplicationAmendmentRequestEnum.AWAITING.getValue()); - if(amendmentRequest !=null && Boolean.FALSE.equals(amendmentRequest.isEmpty())){ - throw new CustomValidationException(Status.BAD_REQUEST,Translator.toLocale(GepafinConstant.APPLICATION_CANNOT_APPROVED_OR_REJECTED)); - } - if (Boolean.TRUE.equals(statusType.equals((ApplicationStatusTypeEnum.APPROVED.getValue())))) { emailNotificationDao.sendAdmissibilityNotificationEmailForApprovedApplication(application); } @@ -1453,5 +1701,32 @@ public class ApplicationEvaluationDao { .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.APPLICATION_EVALUATION_NOT_FOUND))); } + public ApplicationEvaluationResponse updateApplicationEvaluation( + Long assignedApplicationId, + List docRequest) { + Optional entityOptional=applicationEvaluationRepository.findByAssignedApplicationsEntity_IdAndIsDeletedFalse(assignedApplicationId); + ApplicationEvaluationEntity applicationEvaluationEntity =null; + ApplicationEvaluationEntity oldApplicationEvaluation = Utils.getClonedEntityForData(entityOptional.get()); + applicationEvaluationEntity = entityOptional.get(); + + if (docRequest != null) { + List existingDocs = new ArrayList<>(); + + for (EvaluationDocumentRequest doc : docRequest) { + if (doc.getFileValue() != null) { + Long fileId = Long.valueOf(doc.getFileValue()); + documentService.validateDocument(fileId); + existingDocs.add(doc); + } + } + String updatedEvaluationDocJson = Utils.convertObjectToJson(existingDocs); + applicationEvaluationEntity.setEvaluationDocument(updatedEvaluationDocJson); + } + ApplicationEvaluationEntity savedEntity = applicationEvaluationRepository.save(applicationEvaluationEntity); + + /** This code is responsible for adding a version history log for the "Upload Document in Application Evaluation" operation. **/ + loggingUtil.addVersionHistory(VersionHistoryRequest.builder().request(request).actionType(VersionActionTypeEnum.UPDATE).oldData(oldApplicationEvaluation).newData(savedEntity).build()); + return convertToResponse(savedEntity); + } } diff --git a/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java b/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java index b23e4785..e1dbe853 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/DocumentDao.java @@ -6,6 +6,7 @@ import java.util.stream.Collectors; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.enums.*; import net.gepafin.tendermanagement.model.request.VersionHistoryRequest; +import net.gepafin.tendermanagement.repositories.ApplicationEvaluationRepository; import net.gepafin.tendermanagement.repositories.ApplicationRepository; import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.util.Utils; @@ -54,7 +55,7 @@ public class DocumentDao { private S3PathConfig s3ConfigBean; @Autowired - private ApplicationRepository applicationFormRepository; + private ApplicationRepository applicationRepository; @Autowired ApplicationService applicationService; @@ -65,6 +66,9 @@ public class DocumentDao { @Autowired ApplicationAmendmentRequestRepository applicationAmendmentRequestRepository; + @Autowired + private ApplicationEvaluationRepository applicationEvaluationRepository; + @Value("${aws.s3.bucket.name}") private String bucketName; @@ -77,7 +81,7 @@ public class DocumentDao { // @Value("${aws.s3.url.folder}") // private String s3Folder; - public List uploadFiles(List files, Long sourceId, DocumentSourceTypeEnum sourceType, DocumentTypeEnum fileType) { + public List uploadFiles(Long userId,List files, Long sourceId, DocumentSourceTypeEnum sourceType, DocumentTypeEnum fileType) { List documentEntities = new ArrayList<>(); Long source = resolveSourceId(sourceId, sourceType); @@ -91,6 +95,7 @@ public class DocumentDao { documentEntity.setType(fileType.getValue()); documentEntity.setFilePath(uploadFileOnAmazonS3Response.getFilePath()); documentEntity.setIsDeleted(false); + documentEntity.setUploadedBy(userId); documentEntities.add(documentEntity); } } @@ -116,6 +121,14 @@ public class DocumentDao { userActionContext = UserActionContextEnum.UPLOAD_APPLICATION_DOCUMENT; } else if (fileType.equals(DocumentTypeEnum.IMAGES) && sourceType.equals(DocumentSourceTypeEnum.APPLICATION)) { userActionContext = UserActionContextEnum.UPLOAD_APPLICATION_IMAGES; + }else if (fileType.equals(DocumentTypeEnum.DOCUMENT) && sourceType.equals(DocumentSourceTypeEnum.AMENDMENT)) { + userActionContext = UserActionContextEnum.UPLOAD_AMENDMENT_DOCUMENT; + } else if (fileType.equals(DocumentTypeEnum.IMAGES) && sourceType.equals(DocumentSourceTypeEnum.AMENDMENT)) { + userActionContext = UserActionContextEnum.UPLOAD_AMENDMENT_IMAGES; + }else if (fileType.equals(DocumentTypeEnum.DOCUMENT) && sourceType.equals(DocumentSourceTypeEnum.EVALUATION)) { + userActionContext = UserActionContextEnum.UPLOAD_EVALUATION_DOCUMENT; + } else if (fileType.equals(DocumentTypeEnum.IMAGES) && sourceType.equals(DocumentSourceTypeEnum.EVALUATION)) { + userActionContext = UserActionContextEnum.UPLOAD_EVALUATION_IMAGES; } return userActionContext; @@ -137,15 +150,21 @@ public class DocumentDao { Long applicationId = 0L; Long amendmentId = 0L; + Long evaluationId = 0L; Long callId = sourceId; if (type == DocumentSourceTypeEnum.APPLICATION) { applicationId = sourceId; - callId = applicationFormRepository.findCallIdById(applicationId); + callId = applicationRepository.findCallIdById(applicationId); } else if (type == DocumentSourceTypeEnum.AMENDMENT) { amendmentId = sourceId; ApplicationEntity applicationEntity = applicationAmendmentRequestRepository.findApplicationByAmendmentId(amendmentId); applicationId = applicationEntity.getId(); callId = applicationEntity.getCall().getId(); + }else if (type == DocumentSourceTypeEnum.EVALUATION) { + evaluationId = sourceId; + ApplicationEntity applicationEntity = applicationEvaluationRepository.findApplicationByEvaluationId(evaluationId); + applicationId = applicationEntity.getId(); + callId = applicationEntity.getCall().getId(); } try { String s3Path = generateS3Path(type, callId, applicationId, amendmentId); @@ -188,6 +207,7 @@ public class DocumentDao { Long callId = null; Long applicationId = null; Long amendmentId = null; + Long evaluationId = null; if (DocumentSourceTypeEnum.CALL.getValue().equalsIgnoreCase(documentEntity.getSource())) { callId = documentEntity.getSourceId(); @@ -201,8 +221,12 @@ public class DocumentDao { ApplicationEntity applicationEntity = applicationAmendmentRequestRepository.findApplicationByAmendmentId(amendmentId); applicationId = applicationEntity.getId(); callId = applicationEntity.getCall().getId(); + } else if(DocumentSourceTypeEnum.EVALUATION.getValue().equalsIgnoreCase(documentEntity.getSource())){ + evaluationId = documentEntity.getSourceId(); + ApplicationEntity applicationEntity = applicationEvaluationRepository.findApplicationByEvaluationId(evaluationId); + applicationId = applicationEntity.getId(); + callId = applicationEntity.getCall().getId(); } - deleteFileFromS3(documentEntity, callId, applicationId,amendmentId); } @@ -241,8 +265,9 @@ public class DocumentDao { Long callId=null; Long applicationId=null; Long amendmentId=null; + Long evaluationId=null; if (type.equals(DocumentSourceTypeEnum.APPLICATION)) { - callId = applicationFormRepository.findCallIdById(id); + callId = applicationRepository.findCallIdById(id); applicationId = id; } else if(type.equals(DocumentSourceTypeEnum.AMENDMENT)){ @@ -250,7 +275,13 @@ public class DocumentDao { ApplicationEntity applicationEntity = applicationAmendmentRequestRepository.findApplicationByAmendmentId(amendmentId); applicationId = applicationEntity.getId(); callId = applicationEntity.getCall().getId(); + }else if(type.equals(DocumentSourceTypeEnum.EVALUATION)){ + evaluationId = id; + ApplicationEntity applicationEntity = applicationEvaluationRepository.findApplicationByEvaluationId(evaluationId); + applicationId = applicationEntity.getId(); + callId = applicationEntity.getCall().getId(); } + else { callId = id; applicationId = 0L; diff --git a/src/main/java/net/gepafin/tendermanagement/dao/ProtocolDao.java b/src/main/java/net/gepafin/tendermanagement/dao/ProtocolDao.java index a7606c9a..4601ef8c 100644 --- a/src/main/java/net/gepafin/tendermanagement/dao/ProtocolDao.java +++ b/src/main/java/net/gepafin/tendermanagement/dao/ProtocolDao.java @@ -4,6 +4,7 @@ import java.time.LocalDateTime; import java.time.LocalTime; import jakarta.servlet.http.HttpServletRequest; +import net.gepafin.tendermanagement.enums.ProtocolTypeEnum; import net.gepafin.tendermanagement.enums.VersionActionTypeEnum; import net.gepafin.tendermanagement.model.request.VersionHistoryRequest; import net.gepafin.tendermanagement.util.LoggingUtil; @@ -42,7 +43,7 @@ public class ProtocolDao { return (maxProtocolNumber != null) ? maxProtocolNumber + 1 : startNumber; } - public ProtocolEntity createProtocolEntity(ApplicationEntity applicationEntity,Long protocolNumber, Long hubId){ + public ProtocolEntity createProtocolEntity(ApplicationEntity applicationEntity,Long protocolNumber, Long hubId,Boolean isForApplication){ ProtocolEntity protocolEntity=new ProtocolEntity(); protocolEntity.setCall(applicationEntity.getCall().getId()); LocalDateTime utcDateTime = DateTimeUtil.DateServerToUTC(LocalDateTime.now()); @@ -51,6 +52,11 @@ public class ProtocolDao { protocolEntity.setTime(LocalTime.now()); protocolEntity.setApplicationId(applicationEntity.getId()); protocolEntity.setHubId(hubId); + if(Boolean.TRUE.equals(isForApplication)){ + protocolEntity.setType(ProtocolTypeEnum.INPUT.getValue()); + }else { + protocolEntity.setType(ProtocolTypeEnum.OUTPUT.getValue()); + } protocolRepository.save(protocolEntity); /** This code is responsible for adding a version history log for "create protocol" operation. **/ diff --git a/src/main/java/net/gepafin/tendermanagement/entities/ApplicationAmendmentRequestEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationAmendmentRequestEntity.java index 4b3fe79c..8a8701a1 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/ApplicationAmendmentRequestEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationAmendmentRequestEntity.java @@ -50,4 +50,7 @@ public class ApplicationAmendmentRequestEntity extends BaseEntity { @Column(name = "end_date") private LocalDateTime endDate; + @Column(name = "amendment_document") + private String amendmentDocument; + } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationEntity.java index e33881b1..45a8c842 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/ApplicationEvaluationEntity.java @@ -22,6 +22,9 @@ public class ApplicationEvaluationEntity extends BaseEntity{ @Column(name = "checklist") private String checklist; + @Column(name = "EVALUATION_DOCUMENT") + private String evaluationDocument; + @Column(name = "file") private String file; @@ -58,4 +61,5 @@ public class ApplicationEvaluationEntity extends BaseEntity{ @Column(name = "STOP_DATE_TIME") private LocalDateTime stopDateTime; + } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/DocumentEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/DocumentEntity.java index d15a65e6..08bfd623 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/DocumentEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/DocumentEntity.java @@ -32,4 +32,7 @@ public class DocumentEntity extends BaseEntity{ @Column(name="DOCUMENT_ATTACHMENT_ID") private String documentAttachmentId; + @Column(name="uploaded_by") + private Long uploadedBy; + } diff --git a/src/main/java/net/gepafin/tendermanagement/entities/ProtocolEntity.java b/src/main/java/net/gepafin/tendermanagement/entities/ProtocolEntity.java index ad57c1ee..47dc5065 100644 --- a/src/main/java/net/gepafin/tendermanagement/entities/ProtocolEntity.java +++ b/src/main/java/net/gepafin/tendermanagement/entities/ProtocolEntity.java @@ -28,4 +28,7 @@ public class ProtocolEntity extends BaseEntity { @Column(name="HUB_ID") private Long hubId; + @Column(name = "type") + private String type; + } diff --git a/src/main/java/net/gepafin/tendermanagement/enums/DocOtherSourceTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/DocOtherSourceTypeEnum.java index 556a9949..05b42e3b 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/DocOtherSourceTypeEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/DocOtherSourceTypeEnum.java @@ -6,6 +6,7 @@ public enum DocOtherSourceTypeEnum { TEMPLATE("TEMPLATE"), DELETED_USER_DELEGATION("DELETED_USER_DELEGATION"), DELETED_APPLICATION("DELETED_APPLICATION"), + DELETED_EVALUATION("DELETED_EVALUATION"), DELETED_CALL("DELETED_CALL"), DELETED_AMENDMENT("DELETED_AMENDMENT"); diff --git a/src/main/java/net/gepafin/tendermanagement/enums/DocumentSourceTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/DocumentSourceTypeEnum.java index 7ac28ac7..e2b121e7 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/DocumentSourceTypeEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/DocumentSourceTypeEnum.java @@ -4,7 +4,7 @@ public enum DocumentSourceTypeEnum { CALL("CALL"), APPLICATION("APPLICATION"), - + EVALUATION("EVALUATION"), AMENDMENT("AMENDMENT"); private String value; diff --git a/src/main/java/net/gepafin/tendermanagement/enums/ProtocolTypeEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/ProtocolTypeEnum.java new file mode 100644 index 00000000..f890fb42 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/enums/ProtocolTypeEnum.java @@ -0,0 +1,24 @@ +package net.gepafin.tendermanagement.enums; + +import com.fasterxml.jackson.annotation.JsonValue; + +public enum ProtocolTypeEnum { + INPUT("INPUT"), + OUTPUT("OUTPUT"); + + private String value; + + ProtocolTypeEnum(String value) { + this.value = value; + } + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return String.valueOf(value); + } +} diff --git a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java index 94fabe89..20f917fe 100644 --- a/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java +++ b/src/main/java/net/gepafin/tendermanagement/enums/UserActionContextEnum.java @@ -118,6 +118,10 @@ public enum UserActionContextEnum { UPDATE_DOCUMENT("UPDATE_DOCUEMENT"), UPDATE_IMAGES("UPDATE_IMAGES"), GET_DOCUMENT("GET_DOCUMENT"), + UPLOAD_AMENDMENT_DOCUMENT("UPLOAD_AMENDMENT_DOCUMENT"), + UPLOAD_AMENDMENT_IMAGES("UPLOAD_AMENDMENT_IMAGES"), + UPLOAD_EVALUATION_DOCUMENT("UPLOAD_EVALUATION_DOCUMENT"), + UPLOAD_EVALUATION_IMAGES("UPLOAD_EVALUATION_IMAGES"), /** Assigned flow context **/ CREATE_UPDATE_FLOW("CREATE_UPDATE_FLOW"), @@ -136,6 +140,7 @@ public enum UserActionContextEnum { UPDATE_EVALUATION_CRITERIA("UPDATE_EVALUATION_CRITERIA"), DELETE_EVALUATION_CRITERIA("DELETE_EVALUATION_CRITERIA"), CREATE_EVALUATION_CRITERIA("CREATE_EVALUATION_CRITERIA"), + UPLOAD_EVALUATION_DOC("UPLOAD_EVALUATION_DOC"), /** communication action context **/ ADD_COMMENT_TO_AMENDMENT_REQUEST("ADD_COMMENT_TO_AMENDMENT_REQUEST"), diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentDetailsRequest.java b/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentDetailsRequest.java new file mode 100644 index 00000000..691a5a20 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentDetailsRequest.java @@ -0,0 +1,17 @@ +package net.gepafin.tendermanagement.model.request; + +import lombok.Data; +import net.gepafin.tendermanagement.model.response.AmendmentDocumentResponse; +import net.gepafin.tendermanagement.model.response.FieldResponse; + +import java.util.List; + +@Data +public class AmendmentDetailsRequest { + + Long amendmentId; + + List amendmentDocuments; + + List formFieldDocuments; +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentFieldRequest.java b/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentFieldRequest.java new file mode 100644 index 00000000..99de2df0 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentFieldRequest.java @@ -0,0 +1,13 @@ +package net.gepafin.tendermanagement.model.request; + +import lombok.Data; + +@Data +public class AmendmentFieldRequest { + + private String fieldId; + private String nameValue; + private String fileValue; + private Boolean isValid = false; + +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentFormField.java b/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentFormField.java index 95f158c3..0eaee1f3 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentFormField.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentFormField.java @@ -9,9 +9,13 @@ public class AmendmentFormField { private String fieldId; + private String label; + private String fieldValue; - private String isUploadedBy; + private Boolean isValid; + + public enum AmendmentIsUploadedByEnum { diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentFormFieldRequest.java b/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentFormFieldRequest.java new file mode 100644 index 00000000..ed0d99db --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/request/AmendmentFormFieldRequest.java @@ -0,0 +1,13 @@ +package net.gepafin.tendermanagement.model.request; + +import lombok.Data; + +@Data +public class AmendmentFormFieldRequest { + + private String fieldId; + + private Object fieldValue; + + private Boolean isValid; +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationAmendmentRequest.java b/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationAmendmentRequest.java index ade4c676..97e74446 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationAmendmentRequest.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationAmendmentRequest.java @@ -11,4 +11,5 @@ public class ApplicationAmendmentRequest { private Long responseDays; private Boolean isSendNotification; private Boolean isSendEmail; + private List amendmentDocument; } diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationAmendmentRequestBean.java b/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationAmendmentRequestBean.java index 94141ef0..96f96f42 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationAmendmentRequestBean.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationAmendmentRequestBean.java @@ -7,5 +7,6 @@ import lombok.Data; @Data public class ApplicationAmendmentRequestBean { private String note; - private List applicationFormFields; + private List applicationFormFields; + private List amendmentDocuments; } 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 df29c1d8..21b4a5ba 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationEvaluationRequest.java +++ b/src/main/java/net/gepafin/tendermanagement/model/request/ApplicationEvaluationRequest.java @@ -10,6 +10,7 @@ public class ApplicationEvaluationRequest { private List criteria; private List checklist; private List files; + private List amendmentDetails; private String note; private ApplicationStatusForEvaluation applicationStatus; private String motivation; diff --git a/src/main/java/net/gepafin/tendermanagement/model/request/EvaluationDocumentRequest.java b/src/main/java/net/gepafin/tendermanagement/model/request/EvaluationDocumentRequest.java new file mode 100644 index 00000000..79aed45c --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/request/EvaluationDocumentRequest.java @@ -0,0 +1,15 @@ +package net.gepafin.tendermanagement.model.request; + +import lombok.Data; + +@Data +public class EvaluationDocumentRequest { + + private String fieldId; + + private String nameValue; + + private String fileValue; + + private Boolean valid; +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/AmendmentDocumentResponse.java b/src/main/java/net/gepafin/tendermanagement/model/response/AmendmentDocumentResponse.java new file mode 100644 index 00000000..7fb1b220 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/response/AmendmentDocumentResponse.java @@ -0,0 +1,12 @@ +package net.gepafin.tendermanagement.model.response; + +import lombok.Data; + +@Data +public class AmendmentDocumentResponse { + + private String fieldId; + private String nameValue; + private DocumentResponseBean fileValue; + private Boolean isValid = false; +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/AmendmentDocumentResponseBean.java b/src/main/java/net/gepafin/tendermanagement/model/response/AmendmentDocumentResponseBean.java new file mode 100644 index 00000000..4a2f2597 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/response/AmendmentDocumentResponseBean.java @@ -0,0 +1,15 @@ +package net.gepafin.tendermanagement.model.response; + +import lombok.Data; + +import java.util.List; + +@Data +public class AmendmentDocumentResponseBean { + + Long amendmentId; + + List amendmentDocuments; + + List formFieldDocuments; +} diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationAmendmentRequestResponse.java b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationAmendmentRequestResponse.java index 5523098e..0f77f602 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationAmendmentRequestResponse.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationAmendmentRequestResponse.java @@ -21,6 +21,7 @@ public class ApplicationAmendmentRequestResponse { private String beneficiaryName; private List formFields; private List applicationFormFields; + private List amendmentDocuments; private Long applicationId; private Long applicationEvaluationId; private LocalDateTime evaluationEndDate; 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 ca3eaa71..b890b327 100644 --- a/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponse.java +++ b/src/main/java/net/gepafin/tendermanagement/model/response/ApplicationEvaluationResponse.java @@ -21,6 +21,8 @@ public class ApplicationEvaluationResponse { private List criteria; private List checklist; private List files; + private List evaluationDocument; + private List amendmentDetails; private LocalDateTime createdDate; private LocalDateTime updatedDate; private String beneficiary; diff --git a/src/main/java/net/gepafin/tendermanagement/model/response/EvaluationDocumentResponse.java b/src/main/java/net/gepafin/tendermanagement/model/response/EvaluationDocumentResponse.java new file mode 100644 index 00000000..aea34514 --- /dev/null +++ b/src/main/java/net/gepafin/tendermanagement/model/response/EvaluationDocumentResponse.java @@ -0,0 +1,12 @@ +package net.gepafin.tendermanagement.model.response; + +import lombok.Data; + +@Data +public class EvaluationDocumentResponse { + private String fieldId; + private String nameValue; + private Boolean valid; + private DocumentResponseBean fileValue ; + +} diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationAmendmentRequestRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationAmendmentRequestRepository.java index 4a2e3252..ecb6b83d 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationAmendmentRequestRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationAmendmentRequestRepository.java @@ -44,7 +44,7 @@ public interface ApplicationAmendmentRequestRepository extends JpaRepository findFirstByIsDeletedFalseOrderByCreatedDateDesc(); boolean existsByApplicationIdAndIsDeletedFalse(Long applicationId); + @Query("SELECT app " + + "FROM ApplicationEntity app " + + "WHERE app.id = (SELECT aar.applicationId " + + "FROM ApplicationEvaluationEntity aar " + + "WHERE aar.id = :evaluationId AND aar.isDeleted = false)") + ApplicationEntity findApplicationByEvaluationId(Long evaluationId); @Query("SELECT a FROM ApplicationEvaluationEntity a WHERE a.isDeleted = false AND a.endDate < :currentDate") List findAllByIsDeletedFalseAndEndDateBefore(@Param("currentDate") LocalDateTime currentDate); diff --git a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java index 8877fbc7..db645f95 100644 --- a/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java +++ b/src/main/java/net/gepafin/tendermanagement/repositories/ApplicationRepository.java @@ -42,6 +42,6 @@ public interface ApplicationRepository extends JpaRepository applicationEvaluationDocRequest); } diff --git a/src/main/java/net/gepafin/tendermanagement/service/DocumentService.java b/src/main/java/net/gepafin/tendermanagement/service/DocumentService.java index 6012a273..c777f004 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/DocumentService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/DocumentService.java @@ -11,7 +11,7 @@ import java.util.List; public interface DocumentService { - public List uploadFile(List files, Long sourceId, DocumentSourceTypeEnum sourceType, DocumentTypeEnum fileType); + public List uploadFile(HttpServletRequest request,List files, Long sourceId, DocumentSourceTypeEnum sourceType, DocumentTypeEnum fileType); public void deleteFile(Long documentId); diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java index 0a6feb1f..503f1513 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/ApplicationEvaluationServiceImpl.java @@ -1,29 +1,24 @@ 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.ApplicationEvaluationDao; import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity; import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity; import net.gepafin.tendermanagement.entities.UserEntity; -import net.gepafin.tendermanagement.enums.ApplicationStatusForEvaluation; import net.gepafin.tendermanagement.model.request.ApplicationEvaluationRequest; +import net.gepafin.tendermanagement.model.request.EvaluationDocumentRequest; import net.gepafin.tendermanagement.model.response.ApplicationEvaluationResponse; import net.gepafin.tendermanagement.repositories.AssignedApplicationsRepository; import net.gepafin.tendermanagement.service.ApplicationEvaluationService; import net.gepafin.tendermanagement.service.AssignedApplicationsService; import net.gepafin.tendermanagement.util.Validator; -import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; -import net.gepafin.tendermanagement.web.rest.api.errors.ResourceNotFoundException; -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; -import java.util.Optional; +import java.util.List; @Service public class ApplicationEvaluationServiceImpl implements ApplicationEvaluationService { @@ -36,6 +31,9 @@ public class ApplicationEvaluationServiceImpl implements ApplicationEvaluationSe private AssignedApplicationsService assignedApplicationsService; @Autowired private AssignedApplicationsRepository assignedApplicationsRepository; + @Autowired + private ApplicationEvaluationService applicationEvaluationService; + @Override @Transactional(rollbackFor = Exception.class) public ApplicationEvaluationResponse createOrUpdateApplicationEvaluation( @@ -54,31 +52,12 @@ public class ApplicationEvaluationServiceImpl implements ApplicationEvaluationSe @Transactional(readOnly = true) public ApplicationEvaluationResponse getApplicationEvaluationByApplicationId( HttpServletRequest request, Long applicationId, Long assignedApplicationId) { - - if (applicationId == null && assignedApplicationId == null) { - throw new CustomValidationException( - Status.BAD_REQUEST, - Translator.toLocale(GepafinConstant.EITHER_APPLICATION_OR_ASSIGNED_APPLICATION_ID_REQUIRED_MSG) - ); - } UserEntity preInstructor = validator.validateUser(request); - Optional assignedApplicationsOptional = - assignedApplicationsRepository.findByApplicationIdOrIdAndIsDeletedFalse(applicationId,assignedApplicationId); - - if (assignedApplicationId != null) { - assignedApplicationsOptional = assignedApplicationsOptional.filter(a -> a.getId().equals(assignedApplicationId)); - } - AssignedApplicationsEntity assignedApplications = assignedApplicationsOptional - .orElseThrow(() -> new CustomValidationException( - Status.BAD_REQUEST, - Translator.toLocale(GepafinConstant.ASSIGNED_APPLICATION_NOT_FOUND_WITH_ID_MSG) - )); - validator.validatePreInstructor(request, assignedApplications.getUserId()); - return applicationEvaluationDao.getApplicationEvaluationByApplicationId( + request, preInstructor, - assignedApplications.getApplication().getId(), - assignedApplications.getId() + applicationId, + assignedApplicationId ); } @@ -98,4 +77,11 @@ public class ApplicationEvaluationServiceImpl implements ApplicationEvaluationSe public ApplicationEvaluationEntity validateApplicationEvaluationByApplicationId(Long applicationId) { return applicationEvaluationDao.validateApplicationEvaluationByApplicationId(applicationId); } + + @Override + public ApplicationEvaluationResponse updateApplicationEvaluation(HttpServletRequest request, Long assignedApplicationId, List evaluationDocRequest) { + AssignedApplicationsEntity assignedApplication =assignedApplicationsService.validateAssignedApplication(assignedApplicationId); + validator.validatePreInstructor(request, assignedApplication.getUserId()); + return applicationEvaluationDao.updateApplicationEvaluation(assignedApplicationId,evaluationDocRequest); + } } diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/DocumentServiceImpl.java b/src/main/java/net/gepafin/tendermanagement/service/impl/DocumentServiceImpl.java index 505d0da1..d7a46aa6 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/DocumentServiceImpl.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/DocumentServiceImpl.java @@ -1,14 +1,17 @@ package net.gepafin.tendermanagement.service.impl; import java.util.List; +import java.util.Map; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.dao.DocumentDao; import net.gepafin.tendermanagement.entities.DocumentEntity; +import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum; import net.gepafin.tendermanagement.enums.DocumentTypeEnum; import net.gepafin.tendermanagement.model.response.DocumentResponseBean; import net.gepafin.tendermanagement.service.DocumentService; +import net.gepafin.tendermanagement.util.Validator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -22,9 +25,13 @@ public class DocumentServiceImpl implements DocumentService { @Autowired private DocumentDao documentDao; + @Autowired + private Validator validator; @Override - public List uploadFile(List files, Long sourceId, DocumentSourceTypeEnum sourceType, DocumentTypeEnum fileType) { - return documentDao.uploadFiles(files,sourceId,sourceType,fileType); + public List uploadFile(HttpServletRequest request,List files, Long sourceId, DocumentSourceTypeEnum sourceType, DocumentTypeEnum fileType) { + Map userInfo = validator.getUserInfoFromToken(request); + Long userId = validator.getUserId(userInfo); + return documentDao.uploadFiles(userId,files,sourceId,sourceType,fileType); } @Override public void deleteFile(Long documentId) { diff --git a/src/main/java/net/gepafin/tendermanagement/service/impl/S3ReUploadMigrationService.java b/src/main/java/net/gepafin/tendermanagement/service/impl/S3ReUploadMigrationService.java index 23b8fd59..dac565e7 100644 --- a/src/main/java/net/gepafin/tendermanagement/service/impl/S3ReUploadMigrationService.java +++ b/src/main/java/net/gepafin/tendermanagement/service/impl/S3ReUploadMigrationService.java @@ -12,10 +12,7 @@ import net.gepafin.tendermanagement.dao.S3PathConfig; import net.gepafin.tendermanagement.entities.ApplicationEntity; import net.gepafin.tendermanagement.entities.DocumentEntity; import net.gepafin.tendermanagement.enums.DocumentSourceTypeEnum; -import net.gepafin.tendermanagement.repositories.ApplicationAmendmentRequestRepository; -import net.gepafin.tendermanagement.repositories.ApplicationRepository; -import net.gepafin.tendermanagement.repositories.ApplicationSignedDocumentRepository; -import net.gepafin.tendermanagement.repositories.DocumentRepository; +import net.gepafin.tendermanagement.repositories.*; import net.gepafin.tendermanagement.service.AmazonS3Service; import net.gepafin.tendermanagement.service.ApplicationService; import org.springframework.beans.factory.annotation.Autowired; @@ -73,6 +70,9 @@ public class S3ReUploadMigrationService { @Autowired private ApplicationAmendmentRequestRepository applicationAmendmentRequestRepository; + @Autowired + private ApplicationEvaluationRepository applicationEvaluationRepository; + @Autowired private DocumentDao documentDao; @@ -107,7 +107,7 @@ public class S3ReUploadMigrationService { Long callId = null; Long applicationId = null; Long amendmentId = null; - + Long evaluationId = null; if (DocumentSourceTypeEnum.CALL.getValue().equalsIgnoreCase(document.getSource())) { callId = document.getSourceId(); } else if (DocumentSourceTypeEnum.APPLICATION.getValue().equalsIgnoreCase(document.getSource())) { @@ -120,8 +120,14 @@ public class S3ReUploadMigrationService { ApplicationEntity applicationEntity = applicationAmendmentRequestRepository.findApplicationByAmendmentId(amendmentId); applicationId = applicationEntity.getId(); callId = applicationEntity.getCall().getId(); + } else if(DocumentSourceTypeEnum.EVALUATION.getValue().equalsIgnoreCase(document.getSource())){ + evaluationId = document.getSourceId(); + ApplicationEntity applicationEntity = applicationEvaluationRepository.findApplicationByEvaluationId(evaluationId); + applicationId = applicationEntity.getId(); + callId = applicationEntity.getCall().getId(); } + documentDao.deleteFileFromS3(document,callId,applicationId,amendmentId); processDocuments++; diff --git a/src/main/java/net/gepafin/tendermanagement/util/Validator.java b/src/main/java/net/gepafin/tendermanagement/util/Validator.java index e0814305..82bc2d79 100644 --- a/src/main/java/net/gepafin/tendermanagement/util/Validator.java +++ b/src/main/java/net/gepafin/tendermanagement/util/Validator.java @@ -105,7 +105,7 @@ public class Validator { } } - private Long getUserId(Map userInfo) { + public Long getUserId(Map userInfo) { return Long.parseLong(userInfo.get("userId").toString()); } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java index bc17e345..1255f3df 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/ApplicationEvaluationApi.java @@ -7,8 +7,8 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.responses.ApiResponse; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.Valid; -import net.gepafin.tendermanagement.enums.ApplicationStatusForEvaluation; import net.gepafin.tendermanagement.model.request.ApplicationEvaluationRequest; +import net.gepafin.tendermanagement.model.request.EvaluationDocumentRequest; import net.gepafin.tendermanagement.model.response.ApplicationEvaluationResponse; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.web.rest.api.errors.ErrorConstants; @@ -16,6 +16,8 @@ import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.util.List; + public interface ApplicationEvaluationApi { @Operation(summary = "API to create or update ApplicationEvaluation", @@ -53,5 +55,21 @@ public interface ApplicationEvaluationApi { ResponseEntity> deleteApplicationEvaluation(HttpServletRequest request, @Parameter( required = true) @PathVariable("id") Long id); + @Operation(summary = "Api to upload Documents for evaluation", + responses = { + @ApiResponse(responseCode = "200", description = "OK"), + @ApiResponse(responseCode = "404", description = "Not Found", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.NOTFOUND_ERROR_EXAMPLE) })), + @ApiResponse(responseCode = "401", description = "Unauthorized", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.UNAUTHORIZED_ERROR_EXAMPLE) })), + @ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = { + @ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) + }) + @PutMapping(value = "/assignedApplication/{assignedApplicationId}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) + ResponseEntity> updateApplicationEvaluation(HttpServletRequest request, + @Parameter(description = "The AssignedApplication id", required = true) @PathVariable("assignedApplicationId") Long assignedApplicationId, + @Parameter(description = "Application Evaluation request object", required = true) @Valid @RequestBody List applicationEvaluationDocRequest); + + } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationEvaluationApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationEvaluationApiController.java index be177bf9..403e826a 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationEvaluationApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/ApplicationEvaluationApiController.java @@ -3,12 +3,13 @@ package net.gepafin.tendermanagement.web.rest.api.impl; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; -import net.gepafin.tendermanagement.enums.ApplicationStatusForEvaluation; import net.gepafin.tendermanagement.enums.UserActionContextEnum; import net.gepafin.tendermanagement.enums.UserActionLogsEnum; import net.gepafin.tendermanagement.model.request.ApplicationEvaluationRequest; +import net.gepafin.tendermanagement.model.request.EvaluationDocumentRequest; import net.gepafin.tendermanagement.model.request.UserActionRequest; import net.gepafin.tendermanagement.model.response.ApplicationEvaluationResponse; +import net.gepafin.tendermanagement.model.response.EvaluationDocumentResponse; import net.gepafin.tendermanagement.model.util.Response; import net.gepafin.tendermanagement.service.ApplicationEvaluationService; import net.gepafin.tendermanagement.util.LoggingUtil; @@ -20,6 +21,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + @RestController @RequestMapping("${openapi.gepafin.base-path:/v1/applicationEvaluation}") public class ApplicationEvaluationApiController implements ApplicationEvaluationApi { @@ -79,5 +82,15 @@ public class ApplicationEvaluationApiController implements ApplicationEvaluation return ResponseEntity.status(HttpStatus.OK) .body(new Response<>(null, Status.SUCCESS, Translator.toLocale(GepafinConstant.EVALUATION_DELETED_SUCCESSFULLY))); } + @Override + public ResponseEntity> updateApplicationEvaluation(HttpServletRequest request, Long id, List applicationEvaluationDocRequest) { + /** This code is responsible for "Upload Evaluation Document" operation. **/ + loggingUtil.logUserAction(UserActionRequest.builder().request(request).actionType(UserActionLogsEnum.UPDATE) + .actionContext(UserActionContextEnum.UPLOAD_EVALUATION_DOC).build()); + + ApplicationEvaluationResponse updateApplicationEvaluationResponse = applicationEvaluationService.updateApplicationEvaluation(request, id, applicationEvaluationDocRequest); + return ResponseEntity.status(HttpStatus.CREATED) + .body(new Response<>(updateApplicationEvaluationResponse, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_AMENDMENT_UPDATE_SUCCESSFULLY_MSG))); + } } diff --git a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DocumentApiController.java b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DocumentApiController.java index 9d42ab53..123a4620 100644 --- a/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DocumentApiController.java +++ b/src/main/java/net/gepafin/tendermanagement/web/rest/api/impl/DocumentApiController.java @@ -47,7 +47,7 @@ DocumentApiController implements DocumentApi { /** This code is responsible for creating user action logs for the "upload document for call or application" operation. **/ loggingUtil.logUserAction(UserActionRequest.builder().request(httpServletRequest).actionType(UserActionLogsEnum.UPLOAD).actionContext(userActionContext).build()); - List responseBeans = documentService.uploadFile(files, sourceId, sourceType, fileType); + List responseBeans = documentService.uploadFile(httpServletRequest,files, sourceId, sourceType, fileType); return ResponseEntity.status(HttpStatus.CREATED) .body(new Response>(responseBeans, Status.SUCCESS, Translator.toLocale(GepafinConstant.FILES_UPLOADED_MSG))); } catch (CustomValidationException ex) { 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 eb77049e..2ffe005a 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 @@ -1991,5 +1991,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/message_en.properties b/src/main/resources/message_en.properties index 24150081..974162f9 100644 --- a/src/main/resources/message_en.properties +++ b/src/main/resources/message_en.properties @@ -335,3 +335,4 @@ upload.document.is.only.for.gepafin = Document cant be uploaded, this is only av appointment.created.successfully = Appointment created successfully. error.try.again = Service call error while performing the operation. Please try again. document.uploading.is.in.progress = Document uploading is in progress. +all.document.checked.and.one.checklist.checked=All document should be checked and at least one checklist should be checked. \ No newline at end of file diff --git a/src/main/resources/message_it.properties b/src/main/resources/message_it.properties index 084fe6aa..97390d1d 100644 --- a/src/main/resources/message_it.properties +++ b/src/main/resources/message_it.properties @@ -325,3 +325,4 @@ upload.document.is.only.for.gepafin = Il documento non pu? essere caricato, ques appointment.created.successfully = Appuntamento creato con successo. error.try.again = Errore di chiamata di servizio durante l'esecuzione dell'operazione. Riprovare. document.uploading.is.in.progress = Il documento è in fase di caricamento. +all.document.checked.and.one.checklist.checked=Tutti i documenti devono essere controllati e almeno una checklist deve essere controllata. \ No newline at end of file