resolved conflicts

This commit is contained in:
harish
2024-10-28 12:54:57 +05:30
10 changed files with 147 additions and 76 deletions

View File

@@ -2,25 +2,31 @@ package net.gepafin.tendermanagement.dao;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.persistence.criteria.Join;
import jakarta.persistence.criteria.Predicate;
import jakarta.servlet.http.HttpServletRequest;
import net.gepafin.tendermanagement.config.Translator;
import net.gepafin.tendermanagement.constants.GepafinConstant;
import net.gepafin.tendermanagement.entities.*;
import net.gepafin.tendermanagement.enums.ApplicationEvaluationStatusTypeEnum;
import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum;
import net.gepafin.tendermanagement.enums.AssignedApplicationEnum;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest;
import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean;
import net.gepafin.tendermanagement.model.request.ApplicationFormFieldRequestBean;
import net.gepafin.tendermanagement.model.response.AmendmentFormFieldResponse;
import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse;
import net.gepafin.tendermanagement.model.response.CommunicationResponseBean;
import net.gepafin.tendermanagement.repositories.*;
import net.gepafin.tendermanagement.service.ApplicationEvaluationService;
import net.gepafin.tendermanagement.service.ApplicationService;
import net.gepafin.tendermanagement.service.UserService;
import net.gepafin.tendermanagement.service.*;
import net.gepafin.tendermanagement.util.DateTimeUtil;
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.beans.factory.annotation.Value;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Component;
import java.time.temporal.ChronoUnit;
import java.time.LocalDateTime;
import java.util.*;
@@ -31,12 +37,18 @@ import static net.gepafin.tendermanagement.util.Utils.setIfUpdated;
@Component
public class ApplicationAmendmentRequestDao {
@Value("${application.amendment.expiration.days}")
private long expirationDays;
@Autowired
private ApplicationService applicationService;
@Autowired
private UserService userService;
@Autowired
private DocumentService documentService;
@Autowired
private ApplicationFormRepository applicationFormRepository;
@@ -46,12 +58,6 @@ public class ApplicationAmendmentRequestDao {
@Autowired
private ApplicationFormFieldRepository applicationFormFieldRepository;
@Autowired
private DocumentRepository documentRepository;
@Autowired
private CommunicationRepository communicationRepository;
@Autowired
private CommunicationDao communicationDao;
@@ -62,11 +68,25 @@ public class ApplicationAmendmentRequestDao {
private ProtocolDao protocolDao;
public List<ApplicationAmendmentRequestResponse> getApplicationDataForAmendment(HttpServletRequest request,Long applicationEvaluationId){
@Autowired
private AssignedApplicationsService assignedApplicationsService;
@Autowired
private ApplicationEvaluationRepository applicationEvaluationRepository;
@Autowired
private ApplicationRepository applicationRepository;
@Autowired
private AssignedApplicationsRepository assignedApplicationsRepository;
public ApplicationAmendmentRequestResponse getApplicationDataForAmendment(HttpServletRequest request, 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);
// Set common application-level details
String callName = application.getCall().getName();
Long protocolNumber = (application.getProtocol() != null && application.getProtocol().getProtocolNumber() != null)
? application.getProtocol().getProtocolNumber()
@@ -78,27 +98,31 @@ public class ApplicationAmendmentRequestDao {
String beneficiaryName = (!firstName.isBlank() ? firstName : "") +
(!lastName.isBlank() ? " " + lastName : "");
beneficiaryName = beneficiaryName.isBlank() ? "" : beneficiaryName;
ApplicationAmendmentRequestResponse response = new ApplicationAmendmentRequestResponse();
response.setId(applicationEvaluationId);
response.setProtocolNumber(protocolNumber);
response.setCallName(callName);
response.setBeneficiaryName(beneficiaryName);
response.setApplicationId(applicationId);
response.setApplicationEvaluationId(applicationEvaluationId);
List<ApplicationFormEntity> forms = applicationFormRepository.findByApplicationId(applicationId);
List<ApplicationAmendmentRequestResponse> responses = new ArrayList<>();
List<AmendmentFormFieldResponse> allFormFields = new ArrayList<>();
for (ApplicationFormEntity form : forms) {
String content = form.getForm().getContent();
List<Map<String, Object>> result = filterByName(content, "fileupload");
List<AmendmentFormFieldResponse> formFields = getIdAndLabelFromResult(result);
ApplicationAmendmentRequestResponse response = convertEntityToResponse(
protocolNumber, callName, formFields, beneficiaryName);
List<CommunicationResponseBean> communicationList = communicationRepository.findCommentsByApplicationAmendmentRequestId(response.getId());
response.setCommentsList(communicationList);
responses.add(response);
allFormFields.addAll(getIdAndLabelFromResult(result));
}
return responses;
response.setFormFields(allFormFields);
return response;
}
public List<AmendmentFormFieldResponse> getIdAndLabelFromResult(List<Map<String, Object>> result) {
List<AmendmentFormFieldResponse> formFieldResponses = new ArrayList<>();
@@ -126,24 +150,6 @@ public class ApplicationAmendmentRequestDao {
}
private ApplicationAmendmentRequestResponse convertEntityToResponse(
Long protocolNumber, String callName,
List<AmendmentFormFieldResponse> formFields,String beneficiaryName) {
ApplicationAmendmentRequestResponse response = new ApplicationAmendmentRequestResponse();
response.setProtocolNumber(protocolNumber);
response.setCallName(callName);
response.setBeneficiaryName(beneficiaryName);
response.setFormFields(formFields);
response.setResponseDays(null);
response.setSendEmail(false);
response.setSendNotification(false);
response.setNote(null);
response.setStartDate(null);
return response;
}
public static List<Map<String, Object>> filterByName(String content, String target) {
ObjectMapper objectMapper = new ObjectMapper();
List<Map<String, Object>> filteredList = new ArrayList<>();
@@ -183,7 +189,9 @@ public class ApplicationAmendmentRequestDao {
ApplicationEvaluationEntity applicationEvaluationEntity = applicationEvaluationService.validateApplicationEvaluation(applicationEvaluationId);
applicationAmendmentRequestEntity.setApplicationEvaluationEntity(applicationEvaluationEntity);
applicationAmendmentRequestEntity.setApplicationId(applicationEvaluationEntity.getApplicationId());
Long applicationId = applicationEvaluationEntity.getApplicationId();
Long assignedApplicationId = applicationEvaluationEntity.getAssignedApplicationsEntity().getId();
applicationAmendmentRequestEntity.setApplicationId(applicationId);
if (applicationAmendmentRequest.getFormFields() != null) {
String fieldIdsString = applicationAmendmentRequest.getFormFields().stream()
@@ -201,6 +209,19 @@ public class ApplicationAmendmentRequestDao {
applicationAmendmentRequestEntity.setIsEmail(false);
applicationAmendmentRequestEntity.setIsNotification(false);
ApplicationAmendmentRequestEntity applicationAmendment = saveApplicationAmendmentRequestEntity(applicationAmendmentRequestEntity);
//Set Status
applicationEvaluationEntity.setStatus(ApplicationEvaluationStatusTypeEnum.SOCCORSO.getValue());
applicationEvaluationRepository.save(applicationEvaluationEntity);
ApplicationEntity applicationEntity = applicationService.validateApplication(applicationId);
applicationEntity.setStatus(ApplicationStatusTypeEnum.SOCCORSO.getValue());
applicationRepository.save(applicationEntity);
AssignedApplicationsEntity assignedApplicationsEntity = assignedApplicationsService.validateAssignedApplication(assignedApplicationId);
assignedApplicationsEntity.setStatus(AssignedApplicationEnum.SOCCORSO.getValue());
assignedApplicationsRepository.save(assignedApplicationsEntity);
return applicationAmendment;
}
@@ -219,7 +240,12 @@ public class ApplicationAmendmentRequestDao {
applicationAmendmentRequestResponse.setApplicationEvaluationId(applicationAmendmentRequestEntity.getApplicationEvaluationEntity().getId());
applicationAmendmentRequestResponse.setNote(applicationAmendmentRequestEntity.getNote());
applicationAmendmentRequestResponse.setResponseDays(applicationAmendmentRequestEntity.getResponseDays());
applicationAmendmentRequestResponse.setStartDate(applicationAmendmentRequestEntity.getCreatedDate());
LocalDateTime startDate = applicationAmendmentRequestEntity.getCreatedDate();
applicationAmendmentRequestResponse.setStartDate(startDate);
LocalDateTime expirationDate = startDate.plus(expirationDays, ChronoUnit.DAYS);
applicationAmendmentRequestResponse.setExpirationDate(expirationDate);
applicationAmendmentRequestResponse.setSendEmail(applicationAmendmentRequestEntity.getIsEmail());
applicationAmendmentRequestResponse.setSendNotification(applicationAmendmentRequestEntity.getIsNotification());
String callName = application.getCall().getName();
@@ -263,17 +289,16 @@ public class ApplicationAmendmentRequestDao {
})
.collect(Collectors.toList());
applicationAmendmentRequestResponse.setFormFields(formFields);
applicationAmendmentRequestResponse.setFormFields(formField);
return applicationAmendmentRequestResponse;
}
public ApplicationAmendmentRequestEntity validateApplicationAmendmentRequest(Long id) {
ApplicationAmendmentRequestEntity applicationAmendmentRequestEntity = applicationAmendmentRequestRepository.findByIdAndIsDeletedFalse(id);
if (applicationAmendmentRequestEntity == null) {
throw new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.APPLICATION_AMENDMENT_NOT_FOUND_MSG));
} return applicationAmendmentRequestEntity;
}
public ApplicationAmendmentRequestEntity validateApplicationAmendmentRequest(Long id) {
return applicationAmendmentRequestRepository.findByIdAndIsDeletedFalse(id)
.orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND,
Translator.toLocale(GepafinConstant.APPLICATION_AMENDMENT_NOT_FOUND_MSG)));
}
public void deleteById(Long id) {
log.info("Deleting assigned application with ID: {}", id);
@@ -291,15 +316,29 @@ public class ApplicationAmendmentRequestDao {
return response;
}
public List<ApplicationAmendmentRequestResponse> getAllApplicationAmendmentRequest() {
public List<ApplicationAmendmentRequestResponse> getAllApplicationAmendmentRequest(Long userId) {
Specification<ApplicationAmendmentRequestEntity> spec = search(userId);
List<ApplicationAmendmentRequestEntity> applicationAmendmentRequestEntities =
applicationAmendmentRequestRepository.findAll();
applicationAmendmentRequestRepository.findAll(spec);
return applicationAmendmentRequestEntities.stream()
.map(this::convertEntityToResponse)
.collect(Collectors.toList());
}
private Specification<ApplicationAmendmentRequestEntity> search(Long userId) {
return (root, query, builder) -> {
Predicate predicate = builder.isFalse(root.get("isDeleted")); // Only non-deleted records
if (userId != null) {
Join<Object, Object> evaluationJoin = root.join("applicationEvaluationEntity");
predicate = builder.and(predicate, builder.equal(evaluationJoin.get("userId"), userId));
}
return predicate; // Return final predicate
};
}
public ApplicationAmendmentRequestResponse updateApplicationAmendment(
Long id, ApplicationAmendmentRequestBean updateRequest) {
@@ -319,27 +358,46 @@ public class ApplicationAmendmentRequestDao {
return response;
}
private boolean documentExists(String documentId) {
Long documentIdLong = Long.parseLong(documentId); // Convert to Long
return documentRepository.existsById(documentIdLong);
}
private void updateApplicationFormFields(ApplicationAmendmentRequestEntity applicationAmendment, ApplicationFormFieldRequestBean updatedFormField) {
// Convert fieldValue (object) to a comma-separated list of document IDs
List<String> documentIds = Arrays.asList(updatedFormField.getFieldValue().toString().split(","));
List<String> validDocumentIds = new ArrayList<>();
for (String documentId : documentIds) {
if (!documentExists(documentId)) {
log.warn("Document with ID {} does not exist. Skipping update.", documentId);
documentId = documentId.trim(); // Remove any extra spaces
if (documentId.isEmpty()) {
log.warn("Encountered an empty document ID. Skipping.");
continue;
}
try {
// Parse documentId to Long and validate it
Long documentIdLong = Long.parseLong(documentId);
DocumentEntity documentEntity = documentService.validateDocument(documentIdLong);
if (documentEntity != null) {
validDocumentIds.add(documentId);
} else {
log.warn("Document with ID {} does not exist. Skipping this ID.", documentId);
}
} catch (NumberFormatException e) {
log.warn("Invalid document ID format: {}. Skipping this ID.", documentId);
}
}
if (!validDocumentIds.isEmpty()) {
ApplicationFormFieldEntity formEntity = applicationFormFieldRepository.findByFieldId(updatedFormField.getFieldId());
if (formEntity != null) {
formEntity.setFieldValue(updatedFormField.getFieldValue().toString());
formEntity.setFieldValue(String.join(",", validDocumentIds));
applicationFormFieldRepository.save(formEntity);
log.info("Updated field value for field ID {} with document IDs {}", updatedFormField.getFieldId(), updatedFormField.getFieldValue());
log.info("Updated field value for field ID {} with document IDs {}", updatedFormField.getFieldId(), String.join(",", validDocumentIds));
} else {
log.warn("No ApplicationFormEntity found with field ID {}. Skipping update.", updatedFormField.getFieldId());
log.warn("No ApplicationFormFieldEntity found with field ID {}. Skipping update.", updatedFormField.getFieldId());
}
} else {
log.warn("No valid document IDs found for update. Skipping field ID {}", updatedFormField.getFieldId());
}
}
}

View File

@@ -21,6 +21,7 @@ public class ApplicationAmendmentRequestResponse {
private List<ApplicationFormFieldResponseBean> applicationFormFields;
private Long applicationId;
private Long applicationEvaluationId;
private LocalDateTime expirationDate;
private List<CommunicationResponseBean> commentsList;
}

View File

@@ -2,9 +2,10 @@ package net.gepafin.tendermanagement.repositories;
import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.Optional;
public interface ApplicationAmendmentRequestRepository extends JpaRepository<ApplicationAmendmentRequestEntity,Long> {
ApplicationAmendmentRequestEntity findByIdAndIsDeletedFalse(Long id);
public interface ApplicationAmendmentRequestRepository extends JpaRepository<ApplicationAmendmentRequestEntity,Long>, JpaSpecificationExecutor<ApplicationAmendmentRequestEntity> {
Optional<ApplicationAmendmentRequestEntity> findByIdAndIsDeletedFalse(Long id);
}

View File

@@ -9,11 +9,11 @@ import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestRe
import java.util.List;
public interface ApplicationAmendmentRequestService {
public List<ApplicationAmendmentRequestResponse> getApplicationDataForAmendment(HttpServletRequest request,Long applicationEvaluationId);
public ApplicationAmendmentRequestResponse getApplicationDataForAmendment(HttpServletRequest request,Long applicationEvaluationId);
public ApplicationAmendmentRequestResponse createApplicationAmendmentRequest(HttpServletRequest request, Long applicationEvaluationId , ApplicationAmendmentRequest applicationAmendmentRequest);
void deleteApplicationAmendmentRequest(HttpServletRequest request, Long id);
ApplicationAmendmentRequestResponse getApplicationAmendmentRequestById(HttpServletRequest request,Long id);
List<ApplicationAmendmentRequestResponse> getAllApplicationAmendmentRequest(HttpServletRequest request);
List<ApplicationAmendmentRequestResponse> getAllApplicationAmendmentRequest(HttpServletRequest request,Long userId);
ApplicationAmendmentRequestResponse updateApplicationAmendment(HttpServletRequest request, Long id, ApplicationAmendmentRequestBean applicationAmendmentRequestBean);
ApplicationAmendmentRequestEntity validateApplicationAmendmentRequest(Long applicationAmendmentId);

View File

@@ -1,6 +1,7 @@
package net.gepafin.tendermanagement.service;
import jakarta.servlet.http.HttpServletRequest;
import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity;
import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest;
import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse;
@@ -16,4 +17,5 @@ public interface AssignedApplicationsService {
List<AssignedApplicationsResponse> getAllAssignedApplications(HttpServletRequest request, Long userId);
AssignedApplicationsResponse updateAssignedApplication(HttpServletRequest request, Long id, AssignedApplicationsRequest assignedApplicationsRequest);
AssignedApplicationsResponse getAssignedApplicationById(HttpServletRequest request, Long id);
AssignedApplicationsEntity validateAssignedApplication(Long assignedApplicationId);
}

View File

@@ -24,7 +24,7 @@ public class ApplicationAmendmentRequestServiceImpl implements ApplicationAmendm
private ApplicationAmendmentRequestDao applicationAmendmentRequestDao;
@Override
public List<ApplicationAmendmentRequestResponse> getApplicationDataForAmendment(HttpServletRequest request, Long applicationEvaluationId) {
public ApplicationAmendmentRequestResponse getApplicationDataForAmendment(HttpServletRequest request, Long applicationEvaluationId) {
UserEntity user= validator.validateUser(request);
return applicationAmendmentRequestDao.getApplicationDataForAmendment(request,applicationEvaluationId);
}
@@ -46,8 +46,8 @@ public class ApplicationAmendmentRequestServiceImpl implements ApplicationAmendm
}
@Override
public List<ApplicationAmendmentRequestResponse> getAllApplicationAmendmentRequest(HttpServletRequest request) {
return applicationAmendmentRequestDao.getAllApplicationAmendmentRequest();
public List<ApplicationAmendmentRequestResponse> getAllApplicationAmendmentRequest(HttpServletRequest request,Long userId) {
return applicationAmendmentRequestDao.getAllApplicationAmendmentRequest(userId);
}
@Override

View File

@@ -2,6 +2,7 @@ package net.gepafin.tendermanagement.service.impl;
import jakarta.servlet.http.HttpServletRequest;
import net.gepafin.tendermanagement.dao.AssignedApplicationsDao;
import net.gepafin.tendermanagement.entities.AssignedApplicationsEntity;
import net.gepafin.tendermanagement.entities.UserEntity;
import net.gepafin.tendermanagement.model.request.AssignedApplicationsRequest;
import net.gepafin.tendermanagement.model.response.AssignedApplicationsResponse;
@@ -54,4 +55,9 @@ public class AssignedApplicationsServiceImpl implements AssignedApplicationsServ
return assignedApplicationsDao.getAssignedApplicationById(request, id);
}
@Override
public AssignedApplicationsEntity validateAssignedApplication(Long assignedApplicationId) {
return assignedApplicationsDao.validateAssignedApplication(assignedApplicationId);
}
}

View File

@@ -31,7 +31,7 @@ public interface ApplicationAmendmentRequestApi {
@ApiResponse(responseCode = "400", description = "Bad Request", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, examples = {
@ExampleObject(value = ErrorConstants.BADREQUEST_ERROR_EXAMPLE) })) })
@GetMapping(value = "applicationEvaluation/{id}", produces = "application/json")
ResponseEntity<Response<List<ApplicationAmendmentRequestResponse>>> getApplicationDataForAmendment(HttpServletRequest request, @Parameter(description = "The Application Evaluation id", required = true) @PathVariable(value = "id", required = true) Long applicationEvaluationId);
ResponseEntity<Response<ApplicationAmendmentRequestResponse>> getApplicationDataForAmendment(HttpServletRequest request, @Parameter(description = "The Application Evaluation id", required = true) @PathVariable(value = "id", required = true) Long applicationEvaluationId);
@Operation(summary = "Api to submit the application data for the Amendment",
responses = {
@@ -81,8 +81,9 @@ public interface ApplicationAmendmentRequestApi {
@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) })) })
@GetMapping(value = "/getAll", produces = "application/json")
ResponseEntity<Response<List<ApplicationAmendmentRequestResponse>>> getAllApplicationAmendmentRequest(HttpServletRequest request);
@GetMapping(value = "/user/{id}", produces = "application/json")
ResponseEntity<Response<List<ApplicationAmendmentRequestResponse>>> getAllApplicationAmendmentRequest(HttpServletRequest request,
@Parameter(description = "The User ID", required = false) @PathVariable(value = "id",required = false) Long userId);
@Operation(summary = "Api to update application amendment",
responses = {

View File

@@ -27,8 +27,8 @@ public class ApplicationAmendmentRequestController implements ApplicationAmendme
ApplicationAmendmentRequestService applicationAmendmentRequestService;
@Override
public ResponseEntity<Response<List<ApplicationAmendmentRequestResponse>>> getApplicationDataForAmendment(HttpServletRequest request, Long applicationEvaluationId) {
List<ApplicationAmendmentRequestResponse> applicationAmendmentBean = applicationAmendmentRequestService.getApplicationDataForAmendment(request,applicationEvaluationId);
public ResponseEntity<Response<ApplicationAmendmentRequestResponse>> getApplicationDataForAmendment(HttpServletRequest request, Long applicationEvaluationId) {
ApplicationAmendmentRequestResponse applicationAmendmentBean = applicationAmendmentRequestService.getApplicationDataForAmendment(request,applicationEvaluationId);
return ResponseEntity.status(HttpStatus.OK)
.body(new Response<>(applicationAmendmentBean, Status.SUCCESS, Translator.toLocale(GepafinConstant.APPLICATION_DATA_FOR_AMENDMENT_SUCCESS_MSG)));
}
@@ -57,9 +57,9 @@ public class ApplicationAmendmentRequestController implements ApplicationAmendme
}
@Override
public ResponseEntity<Response<List<ApplicationAmendmentRequestResponse>>> getAllApplicationAmendmentRequest(HttpServletRequest request) {
public ResponseEntity<Response<List<ApplicationAmendmentRequestResponse>>> getAllApplicationAmendmentRequest(HttpServletRequest request,Long userId) {
log.info("Get All Applications Amendment Request");
List<ApplicationAmendmentRequestResponse> applicationAmendmentRequestResponses = applicationAmendmentRequestService.getAllApplicationAmendmentRequest(request);
List<ApplicationAmendmentRequestResponse> applicationAmendmentRequestResponses = applicationAmendmentRequestService.getAllApplicationAmendmentRequest(request,userId);
return ResponseEntity.status(HttpStatus.OK)
.body(new Response<>(applicationAmendmentRequestResponses, Status.SUCCESS, Translator.toLocale(GepafinConstant.GET_APPLICATION_AMENDMENT_SUCCESS_MSG)));
}