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.ApplicationAmendmentRequestDao; import net.gepafin.tendermanagement.entities.ApplicationAmendmentRequestEntity; import net.gepafin.tendermanagement.entities.ApplicationEvaluationEntity; import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.enums.ApplicationAmendmentRequestEnum; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentPaginationRequestBean; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequest; import net.gepafin.tendermanagement.model.request.ApplicationAmendmentRequestBean; import net.gepafin.tendermanagement.model.request.CloseAmendmentRequest; import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestResponse; import net.gepafin.tendermanagement.model.response.ApplicationAmendmentRequestViewResponse; import net.gepafin.tendermanagement.model.response.PageableResponseBean; import net.gepafin.tendermanagement.model.response.GetAllAmendmentResponseBean; import net.gepafin.tendermanagement.repositories.ApplicationAmendmentRequestRepository; import net.gepafin.tendermanagement.repositories.ApplicationEvaluationRepository; import net.gepafin.tendermanagement.service.ApplicationAmendmentRequestService; import net.gepafin.tendermanagement.service.UserService; 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.List; import java.util.Optional; @Service public class ApplicationAmendmentRequestServiceImpl implements ApplicationAmendmentRequestService { @Autowired private Validator validator; @Autowired private ApplicationAmendmentRequestDao applicationAmendmentRequestDao; @Autowired private ApplicationAmendmentRequestRepository applicationAmendmentRequestRepository; @Autowired private ApplicationEvaluationRepository applicationEvaluationRepository; @Autowired private UserService userService; @Override public ApplicationAmendmentRequestResponse getApplicationDataForAmendment(HttpServletRequest request, Long applicationEvaluationId) { Optional entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(applicationEvaluationId); entityOptional.ifPresent(applicationEvaluationEntity -> validator.validatePreInstructor(request, applicationEvaluationEntity.getUserId())); return applicationAmendmentRequestDao.getApplicationDataForAmendment(applicationEvaluationId); } @Override @Transactional(rollbackFor = Exception.class) public ApplicationAmendmentRequestResponse createApplicationAmendmentRequest(HttpServletRequest request, Long applicationEvaluationId , ApplicationAmendmentRequest applicationAmendmentRequest) { Optional entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(applicationEvaluationId); entityOptional.ifPresent(applicationEvaluationEntity -> validator.validatePreInstructor(request, applicationEvaluationEntity.getUserId())); return applicationAmendmentRequestDao.createApplicationAmendmentRequest(applicationEvaluationId,applicationAmendmentRequest); } @Override @Transactional(rollbackFor = Exception.class) public void deleteApplicationAmendmentRequest(HttpServletRequest request, Long id) { ApplicationAmendmentRequestEntity amendment = applicationAmendmentRequestRepository.findByIdAndIsDeletedFalse(id) .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.APPLICATION_AMENDMENT_NOT_FOUND_MSG))); Optional entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(amendment.getApplicationEvaluationEntity().getId()); if (entityOptional.isPresent()) { UserEntity user = validator.validatePreInstructor(request, entityOptional.get().getUserId()); applicationAmendmentRequestDao.deleteById(id); } } @Override public ApplicationAmendmentRequestResponse getApplicationAmendmentRequestById(HttpServletRequest request,Long id) { ApplicationAmendmentRequestEntity amendment = applicationAmendmentRequestRepository.findByIdAndIsDeletedFalse(id) .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.APPLICATION_AMENDMENT_NOT_FOUND_MSG))); Optional entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(amendment.getApplicationEvaluationEntity().getId()); if (entityOptional.isPresent()) { UserEntity user = validator.validatePreInstructor(request, entityOptional.get().getUserId()); } return applicationAmendmentRequestDao.getApplicationAmendmentRequestById(id); } @Override public List getAllApplicationAmendmentRequest(HttpServletRequest request, Long userId) { return applicationAmendmentRequestDao.getAllApplicationAmendmentRequest(request,userId); } @Override @Transactional(rollbackFor = Exception.class) public ApplicationAmendmentRequestResponse updateApplicationAmendment(HttpServletRequest request, Long id, ApplicationAmendmentRequestBean applicationAmendmentRequestBean) { return applicationAmendmentRequestDao.updateApplicationAmendment(id,applicationAmendmentRequestBean); } @Override public ApplicationAmendmentRequestEntity validateApplicationAmendmentRequest(Long applicationAmendmentId) { return applicationAmendmentRequestDao.validateApplicationAmendmentRequest(applicationAmendmentId); } @Override public List getAllAmendmentRequestByBeneficiaryId(HttpServletRequest request, Long beneficiaryUserId) { UserEntity user= validator.validateUser(request); return applicationAmendmentRequestDao.getAllAmendmentRequestByBeneficiaryId(beneficiaryUserId); } @Override @Transactional(rollbackFor = Exception.class) public ApplicationAmendmentRequestResponse closeAmendmentRequest(HttpServletRequest request, Long id, CloseAmendmentRequest closeAmendmentRequest) { ApplicationAmendmentRequestEntity amendment = applicationAmendmentRequestRepository.findByIdAndIsDeletedFalse(id) .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.APPLICATION_AMENDMENT_NOT_FOUND_MSG))); Optional entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(amendment.getApplicationEvaluationEntity().getId()); if (entityOptional.isPresent()) { UserEntity user = validator.validatePreInstructor(request, entityOptional.get().getUserId()); } return applicationAmendmentRequestDao.closeAmendmentRequest(id,closeAmendmentRequest); } @Override @Transactional(rollbackFor = Exception.class) public ApplicationAmendmentRequestResponse extendResponseDays(HttpServletRequest request, Long id, Long addedDays) { UserEntity user= validator.validateUser(request); return applicationAmendmentRequestDao.extendResponseDays(id, addedDays); } public List getAmendmentByApplicationId(HttpServletRequest request, Long applicationId,List statuses) { return applicationAmendmentRequestDao.getAmendmentByApplicationId(request,applicationId,statuses); } @Override @Transactional(rollbackFor = Exception.class) public ApplicationAmendmentRequestResponse updateApplicationAmendmentStatus(HttpServletRequest request, Long applicationAmendmentId, ApplicationAmendmentRequestEnum status) { return applicationAmendmentRequestDao.updateApplicationAmendmentStatus(applicationAmendmentId, status); } @Override public void sendReminderEmail(HttpServletRequest request,Long amendmentId) { ApplicationAmendmentRequestEntity amendment = applicationAmendmentRequestRepository.findByIdAndIsDeletedFalse(amendmentId) .orElseThrow(() -> new ResourceNotFoundException(Status.NOT_FOUND, Translator.toLocale(GepafinConstant.APPLICATION_AMENDMENT_NOT_FOUND_MSG))); Optional entityOptional = applicationEvaluationRepository.findByIdAndIsDeletedFalse(amendment.getApplicationEvaluationEntity().getId()); if (entityOptional.isPresent()) { UserEntity user = validator.validatePreInstructor(request, entityOptional.get().getUserId()); applicationAmendmentRequestDao.sendReminderEmail(amendmentId); } } @Override public PageableResponseBean> getApplicationAmendmentByPaginnation(HttpServletRequest request, Long userId, ApplicationAmendmentPaginationRequestBean amendmentPaginationRequestBean) { boolean isSpecialUser = validator.checkIsBeneficiary() || validator.checkIsConfidi() || validator.checkIsPreInstructor() || validator.checkIsInstructorManager(); if (isSpecialUser && Boolean.TRUE.equals(validator.checkRequestedUserWithUserId(request,userId))) { throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.INVALID_USER_ID)); } return applicationAmendmentRequestDao.getApplicationAmendmentByPaginationByView(userId,amendmentPaginationRequestBean); } }