package br.com.centralit.citcorpore.negocio; import java.util.ArrayList; import java.util.Collection; import java.util.List; import br.com.centralit.citcorpore.bean.AdiantamentoViagemDTO; import br.com.centralit.citcorpore.bean.DespesaViagemDTO; import br.com.centralit.citcorpore.bean.IntegranteViagemDTO; import br.com.centralit.citcorpore.bean.RequisicaoViagemDTO; import br.com.centralit.citcorpore.bean.RoteiroViagemDTO; import br.com.centralit.citcorpore.bean.SolicitacaoServicoDTO; import br.com.centralit.citcorpore.bean.TipoMovimFinanceiraViagemDTO; import br.com.centralit.citcorpore.integracao.AdiantamentoViagemDAO; import br.com.centralit.citcorpore.integracao.IntegranteViagemDao; import br.com.centralit.citcorpore.integracao.RequisicaoViagemDAO; import br.com.centralit.citcorpore.integracao.RoteiroViagemDAO; import br.com.centralit.citcorpore.util.Enumerados; import br.com.citframework.dto.IDto; import br.com.citframework.excecao.LogicException; import br.com.citframework.excecao.ServiceException; import br.com.citframework.integracao.TransactionControler; import br.com.citframework.service.ServiceLocator; import br.com.citframework.util.UtilDatas; import br.com.citframework.util.WebUtil; public class AdiantamentoViagemServiceEjb extends ComplemInfSolicitacaoServicoServiceEjb implements AdiantamentoViagemService { private AdiantamentoViagemDAO dao; @Override protected AdiantamentoViagemDAO getDao() { if (dao == null) { dao = new AdiantamentoViagemDAO(); } return dao; } @Override public IDto deserializaObjeto(final String serialize) throws Exception { DespesaViagemDTO despesaViagemDTO = null; if (serialize != null) { despesaViagemDTO = (DespesaViagemDTO) WebUtil.deserializeObject(DespesaViagemDTO.class, serialize); } return despesaViagemDTO; } @Override public void validaCreate(final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception {} @Override public void validaDelete(final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception {} @Override public void validaUpdate(final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception {} @Override public IDto create(final TransactionControler tc, final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception { return null; } @Override public void update(final TransactionControler tc, final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception { final DespesaViagemDTO despesaViagemDTO = (DespesaViagemDTO) model; final DespesaViagemService despesaViagemService = (DespesaViagemService) ServiceLocator.getInstance().getService(DespesaViagemService.class, null); final RoteiroViagemDAO roteiroViagemDAO = new RoteiroViagemDAO(); Collection<DespesaViagemDTO> colDespesas = new ArrayList<DespesaViagemDTO>(); RoteiroViagemDTO roteiro = new RoteiroViagemDTO(); TipoMovimFinanceiraViagemDTO tipoMovimFinanceiraViagemDTO = new TipoMovimFinanceiraViagemDTO(); final TipoMovimFinanceiraViagemService tipoMovimFinanceiraViagemService = (TipoMovimFinanceiraViagemService) ServiceLocator.getInstance().getService( TipoMovimFinanceiraViagemService.class, null); if (despesaViagemDTO.getConfirma() == null || despesaViagemDTO.getConfirma().equals("N")) { throw new LogicException("� preciso confirmar o adiantamento para os integrantes para avan�ar o fluxo!"); } RequisicaoViagemDTO requisicaoViagemDto = new RequisicaoViagemDTO(); final RequisicaoViagemDAO requisicaoViagemDAO = new RequisicaoViagemDAO(); final IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); Collection<IntegranteViagemDTO> integrantesViagem = null; requisicaoViagemDAO.setTransactionControler(tc); integranteViagemDao.setTransactionControler(tc); if (despesaViagemDTO != null && despesaViagemDTO.getCancelarRequisicao() != null && despesaViagemDTO.getCancelarRequisicao().equalsIgnoreCase("S")) { requisicaoViagemDto.setIdSolicitacaoServico(solicitacaoServicoDto.getIdSolicitacaoServico()); requisicaoViagemDto = (RequisicaoViagemDTO) requisicaoViagemDAO.restore(requisicaoViagemDto); requisicaoViagemDto.setCancelarRequisicao("S"); solicitacaoServicoDto.setSituacao(Enumerados.SituacaoSolicitacaoServico.Cancelada.name()); requisicaoViagemDAO.updateNotNull(requisicaoViagemDto); return; } if (solicitacaoServicoDto.getAcaoFluxo().equalsIgnoreCase("E")) { this.validaUpdate(solicitacaoServicoDto, model); requisicaoViagemDto.setIdSolicitacaoServico(solicitacaoServicoDto.getIdSolicitacaoServico()); requisicaoViagemDto = (RequisicaoViagemDTO) requisicaoViagemDAO.restore(requisicaoViagemDto); requisicaoViagemDto.setEstado(RequisicaoViagemDTO.AGUARDANDO_PRESTACAOCONTAS); requisicaoViagemDAO.update(requisicaoViagemDto); integrantesViagem = integranteViagemDao.recuperaIntegrantesViagemByIdSolicitacaoEstado(despesaViagemDTO.getIdSolicitacaoServico(), RequisicaoViagemDTO.AGUARDANDO_ADIANTAMENTO); if (integrantesViagem != null && !integrantesViagem.isEmpty()) { for (final IntegranteViagemDTO integranteViagemDTO : integrantesViagem) { roteiro = roteiroViagemDAO.findByIdIntegrante(integranteViagemDTO.getIdIntegranteViagem()); if (roteiro != null) { colDespesas = despesaViagemService.findDespesasAtivasViagemByIdRoteiro(roteiro.getIdRoteiroViagem()); } if (colDespesas != null && !colDespesas.isEmpty()) { for (final DespesaViagemDTO dto : colDespesas) { tipoMovimFinanceiraViagemDTO.setIdtipoMovimFinanceiraViagem(dto.getIdTipo()); tipoMovimFinanceiraViagemDTO = (TipoMovimFinanceiraViagemDTO) tipoMovimFinanceiraViagemService.restore(tipoMovimFinanceiraViagemDTO); if (tipoMovimFinanceiraViagemDTO.getPermiteAdiantamento().equalsIgnoreCase("S")) { dto.setDataHoraCompra(UtilDatas.getDataHoraAtual()); dto.setIdResponsavelCompra(solicitacaoServicoDto.getUsuarioDto().getIdEmpregado()); dto.setSituacao("Adiantado"); despesaViagemService.update(dto); } } } integranteViagemDTO.setEstado(RequisicaoViagemDTO.AGUARDANDO_PRESTACAOCONTAS); integranteViagemDao.update(integranteViagemDTO); } } } } @Override public void delete(final TransactionControler tc, final SolicitacaoServicoDTO solicitacaoServicoDto, final IDto model) throws Exception { } @Override public IDto create(final IDto model) throws ServiceException, LogicException { return null; } @Override public void update(final IDto model) throws ServiceException, LogicException { } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ @Override public Integer recuperaIdAdiantamentoSeExistir(AdiantamentoViagemDTO adiantamentoViagemDto) throws Exception { final List<AdiantamentoViagemDTO> lista = this.getDao().findBySolicitacaoAndEmpregado(adiantamentoViagemDto); if (lista != null && !lista.isEmpty()) { adiantamentoViagemDto = lista.get(0); if (adiantamentoViagemDto.getIdAdiantamentoViagem() != null && adiantamentoViagemDto.getIdAdiantamentoViagem() > 0) { return adiantamentoViagemDto.getIdAdiantamentoViagem(); } } return null; } /** * Consultar entidade AdiantamentoViagemDTO pelos parametros * * @param IdSolicitacaoServico * @param idEmpregado * @return * @throws Exception */ @Override public AdiantamentoViagemDTO consultarAdiantamentoViagem(final Integer IdSolicitacaoServico, final Integer idEmpregado) throws Exception { final List<AdiantamentoViagemDTO> lista = this.getDao().consultarPorSolicitacaoEEmpregado(IdSolicitacaoServico, idEmpregado); if (lista != null && !lista.isEmpty()) { return lista.get(0); } return null; } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ @Override public AdiantamentoViagemDTO consultarAdiantamentoViagemByIdSolicitacao(final Integer IdSolicitacaoServico) throws Exception { final List<AdiantamentoViagemDTO> lista = this.getDao().consultarPorSolicitacao(IdSolicitacaoServico); if (lista != null && !lista.isEmpty()) { return lista.get(0); } return null; } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ @Override public AdiantamentoViagemDTO consultarAdiantamentoViagem(final Integer IdSolicitacaoServico, final String nomeFunc) throws Exception { final List<AdiantamentoViagemDTO> lista = this.getDao().consultarPorSolicitacaoENomeNaoFuncionario(IdSolicitacaoServico, nomeFunc); if (lista != null && !lista.isEmpty()) { return lista.get(0); } return null; } }