package net.gepafin.tendermanagement.service.impl; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.dao.ApplicationDao; import net.gepafin.tendermanagement.dao.FlowFormDao; import net.gepafin.tendermanagement.entities.ApplicationEntity; import net.gepafin.tendermanagement.entities.CompanyEntity; import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.model.request.ApplicationPageableRequestBean; import net.gepafin.tendermanagement.model.request.ApplicationRequest; import net.gepafin.tendermanagement.enums.ApplicationStatusTypeEnum; import net.gepafin.tendermanagement.enums.FormActionEnum; import net.gepafin.tendermanagement.model.request.ApplicationRequestBean; import net.gepafin.tendermanagement.model.response.*; import net.gepafin.tendermanagement.service.ApplicationService; import net.gepafin.tendermanagement.util.Validator; import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.util.List; @Service public class ApplicationServiceImpl implements ApplicationService { @Autowired private ApplicationDao applicationDao; @Autowired private FlowFormDao flowFormDao; @Autowired private Validator validator; @Override @Transactional(rollbackFor = Exception.class) public ApplicationResponseBean createApplication(HttpServletRequest request, ApplicationRequestBean applicationRequestBean, Long applicationId, Long formId) { return applicationDao.createApplication(request, applicationRequestBean, formId, applicationId); } @Override @Transactional(readOnly = true) public ApplicationGetResponseBean getApplicationByFormId(HttpServletRequest request, Long applicationId,Long formId) { return applicationDao.getApplicationByFormId(request, applicationId,formId); } @Override @Transactional(rollbackFor = Exception.class) public void deleteApplication(HttpServletRequest request, Long applicationId) { applicationDao.deleteById(request, applicationId); } @Override public ApplicationEntity validateApplication(Long applicationId) { return applicationDao.validateApplication(applicationId); } @Override @Transactional(rollbackFor = Exception.class) public ApplicationResponse createApplication(HttpServletRequest request, Long companyId, ApplicationRequest applicationRequest, Long callId) { UserEntity userEntity = validator.validateUser(request); if(companyId==null){ throw new CustomValidationException(Status.VALIDATION_ERROR, Translator.toLocale(GepafinConstant.USER_MUST_BE_ASSOCIATED_WITH_COMPANY)); } CompanyEntity companyEntity = validator.validateUserWithCompany(request, companyId); validator.validateUserWithCall(userEntity, callId); return applicationDao.createApplicationByCallId(companyEntity, applicationRequest, callId, userEntity); } @Override public NextOrPreviousFormResponse getNextOrPreviousForm(HttpServletRequest request, Long applicationId, Long formId, FormActionEnum action) { ApplicationEntity applicationEntity = validateApplication(applicationId); validator.validateUserWithCompany(request, applicationEntity.getCompanyId()); return flowFormDao.getNextOrPreviousForm(applicationEntity, formId, action); } @Override @Transactional(rollbackFor = Exception.class) public ApplicationResponse updateApplicationStatus(HttpServletRequest request, Long applicationId, ApplicationStatusTypeEnum status) { return applicationDao.updateApplicationStatus(request, applicationId, status); } @Override @Transactional(readOnly = true) public List getAllApplications(HttpServletRequest request, Long callId, Long companyId ,List statusList) { UserEntity userEntity = validator.validateUser(request); if (companyId != null) { validator.validateUserWithCompany(request, companyId); } return applicationDao.getAllApplications(userEntity, callId, companyId , statusList); } @Override @Transactional(rollbackFor = Exception.class) public ApplicationSignedDocumentResponse uploadSignedDocument(HttpServletRequest request, Long applicationId, MultipartFile file) { return applicationDao.uploadSignedDocument(request, applicationId, file); } @Override @Transactional(readOnly = true) public ApplicationSignedDocumentResponse getSignedDocument(HttpServletRequest request, Long applicationId) { return applicationDao.getSignedDocument(request, applicationId); } @Override @Transactional(rollbackFor = Exception.class) public void deleteSignedDocument(HttpServletRequest request, Long applicationId) { applicationDao.deleteSignedDocument(request, applicationId); } @Override @Transactional(rollbackFor = Exception.class) public ApplicationResponse validateApplication(HttpServletRequest request, Long applicationId) { return applicationDao.validateApplication(request, applicationId); } @Override @Transactional(readOnly = true) public byte[] downloadApplicationDocumentsAsZip(HttpServletRequest request, Long applicationId) { return applicationDao.downloadApplicationDocumentsAsZip(request,applicationId); } @Override public PageableResponseBean> getAllApplicationByPagination(HttpServletRequest request, Long callId, Long companyId, ApplicationPageableRequestBean applicationPageableRequestBean) { UserEntity userEntity = validator.validateUser(request); if (companyId != null) { validator.validateUserWithCompany(request, companyId); } return applicationDao.getAllApplicationByPagination(userEntity,callId,companyId,applicationPageableRequestBean); } }