package br.com.centralit.citcorpore.bpm.negocio; import java.sql.Date; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringEscapeUtils; import br.com.centralit.bpm.dto.AtribuicaoFluxoDTO; import br.com.centralit.bpm.dto.EventoFluxoDTO; import br.com.centralit.bpm.dto.FluxoDTO; import br.com.centralit.bpm.dto.TarefaFluxoDTO; import br.com.centralit.bpm.integracao.AtribuicaoFluxoDao; import br.com.centralit.bpm.integracao.TarefaFluxoDao; import br.com.centralit.bpm.negocio.InstanciaFluxo; import br.com.centralit.bpm.negocio.Tarefa; import br.com.centralit.citcorpore.bean.AlcadaDTO; import br.com.centralit.citcorpore.bean.AlcadaProcessoNegocioDTO; import br.com.centralit.citcorpore.bean.CentroResultadoDTO; import br.com.centralit.citcorpore.bean.CidadesDTO; import br.com.centralit.citcorpore.bean.DespesaViagemDTO; import br.com.centralit.citcorpore.bean.EmpregadoDTO; import br.com.centralit.citcorpore.bean.IntegranteViagemDTO; import br.com.centralit.citcorpore.bean.ModeloEmailDTO; import br.com.centralit.citcorpore.bean.ParecerDTO; import br.com.centralit.citcorpore.bean.PrestacaoContasViagemDTO; import br.com.centralit.citcorpore.bean.ProjetoDTO; 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.UsuarioDTO; import br.com.centralit.citcorpore.integracao.CentroResultadoDao; import br.com.centralit.citcorpore.integracao.CidadesDao; import br.com.centralit.citcorpore.integracao.DespesaViagemDAO; import br.com.centralit.citcorpore.integracao.EmpregadoDao; import br.com.centralit.citcorpore.integracao.IntegranteViagemDao; import br.com.centralit.citcorpore.integracao.ModeloEmailDao; import br.com.centralit.citcorpore.integracao.ParecerDao; import br.com.centralit.citcorpore.integracao.PrestacaoContasViagemDao; import br.com.centralit.citcorpore.integracao.ProjetoDao; import br.com.centralit.citcorpore.integracao.RequisicaoViagemDAO; import br.com.centralit.citcorpore.integracao.RoteiroViagemDAO; import br.com.centralit.citcorpore.integracao.SolicitacaoServicoDao; import br.com.centralit.citcorpore.integracao.UsuarioDao; import br.com.centralit.citcorpore.mail.MensagemEmail; import br.com.centralit.citcorpore.negocio.EmpregadoService; import br.com.centralit.citcorpore.negocio.IntegranteViagemService; import br.com.centralit.citcorpore.negocio.RequisicaoViagemService; import br.com.centralit.citcorpore.negocio.RoteiroViagemService; import br.com.centralit.citcorpore.negocio.SolicitacaoServicoServiceEjb; import br.com.centralit.citcorpore.negocio.alcada.AlcadaRequisicaoViagem; import br.com.centralit.citcorpore.util.Enumerados; import br.com.centralit.citcorpore.util.Enumerados.ParametroSistema; import br.com.centralit.citcorpore.util.ParametroUtil; import br.com.citframework.dto.IDto; import br.com.citframework.excecao.LogicException; import br.com.citframework.integracao.TransactionControler; import br.com.citframework.service.ServiceLocator; import br.com.citframework.util.Reflexao; import br.com.citframework.util.UtilDatas; import br.com.citframework.util.UtilI18N; public class ExecucaoRequisicaoViagem extends ExecucaoSolicitacao { public ExecucaoRequisicaoViagem() { super(); } public String i18n_Message(UsuarioDTO usuario, String key) { if (usuario != null) { if (UtilI18N.internacionaliza(usuario.getLocale(), key) != null) { return UtilI18N.internacionaliza(usuario.getLocale(), key); } return key; } return key; } @Override public InstanciaFluxo inicia() throws Exception { return super.inicia(); } @Override public InstanciaFluxo inicia(FluxoDTO fluxoDto, Integer idFase) throws Exception { String idGrupo = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.ID_GRUPO_PADRAO_REQ_VIAGEM_EXECUCAO, null); if (idGrupo == null || idGrupo.trim().equals("")) throw new Exception(i18n_Message("citcorpore.comum.grupoPadraoNaoParametrizado")); getSolicitacaoServicoDto().setIdGrupoAtual(new Integer(idGrupo.trim())); return super.inicia(fluxoDto, idFase); } @Override public void mapObjetoNegocio(Map<String, Object> map) throws Exception { super.mapObjetoNegocio(map); } @Override public void executaEvento(EventoFluxoDTO eventoFluxoDto) throws Exception { super.executaEvento(eventoFluxoDto); } @Override public void complementaInformacoesEmail(SolicitacaoServicoDTO solicitacaoServicoDto) throws Exception { super.complementaInformacoesEmail(solicitacaoServicoDto); RequisicaoViagemDTO requisicaoViagemDto = recuperaRequisicaoViagem(); CentroResultadoDTO centroResultado = new CentroResultadoDTO(); ProjetoDTO projetoDto = new ProjetoDTO(); CidadesDTO cidade = new CidadesDTO(); StringBuilder strItens = new StringBuilder(); if (requisicaoViagemDto != null) { centroResultado = recuperaCentroCusto(requisicaoViagemDto); projetoDto = recuperaProjeto(requisicaoViagemDto); strItens.append("<b>Data Inicio: </b>" + UtilDatas.dateToSTR(requisicaoViagemDto.getDataInicioViagem()) + "<br>"); strItens.append("<b>Data Fim: </b>" + UtilDatas.dateToSTR(requisicaoViagemDto.getDataFimViagem()) + "<br>"); if (requisicaoViagemDto.getIdCidadeOrigem() != null) { cidade = recuperaCidade(requisicaoViagemDto.getIdCidadeOrigem()); strItens.append("<b>Cidade Origem: </b>" + cidade.getNomeCidade() + "<br>"); } if (requisicaoViagemDto.getIdCidadeDestino() != null) { cidade = recuperaCidade(requisicaoViagemDto.getIdCidadeDestino()); strItens.append("<b>Cidade Destino: </b>" + cidade.getNomeCidade() + "<br>"); } if (centroResultado != null) { strItens.append("<b>Centro de custo: </b>" + centroResultado.getNomeCentroResultado() + "<br>"); } if (projetoDto != null) { strItens.append("<b>Projeto: </b>" + projetoDto.getNomeProjeto() + "<br>"); } strItens.append("<b>Motivo: </b><br>"); strItens.append("" + requisicaoViagemDto.getDescricaoMotivo() + ""); solicitacaoServicoDto.setInformacoesComplementaresHTML(strItens.toString()); if(requisicaoViagemDto.getEstado().equalsIgnoreCase(RequisicaoViagemDTO.getAguardandoAprovacao())){ solicitacaoServicoDto.setTituloEmail(this.retornaMenorPrazoContacao(solicitacaoServicoDto.getIdSolicitacaoServico())); } } } public RequisicaoViagemDTO recuperaRequisicaoViagem() throws Exception { RequisicaoViagemDAO requisicaoViagemDao = new RequisicaoViagemDAO(); setTransacaoDao(requisicaoViagemDao); SolicitacaoServicoDTO solicitacaoDto = getSolicitacaoServicoDto(); RequisicaoViagemDTO requisicaoViagemDto = new RequisicaoViagemDTO(); requisicaoViagemDto.setIdSolicitacaoServico(solicitacaoDto.getIdSolicitacaoServico()); requisicaoViagemDto = (RequisicaoViagemDTO) requisicaoViagemDao.restore(requisicaoViagemDto); Reflexao.copyPropertyValues(solicitacaoDto, requisicaoViagemDto); return requisicaoViagemDto; } public String retornaMenorPrazoContacao(Integer idSolicitacaoServico) throws Exception{ DespesaViagemDAO despesaViagemDAO = new DespesaViagemDAO(); List<DespesaViagemDTO> listaDespesa = (List<DespesaViagemDTO>) despesaViagemDAO.findDespesaViagemByIdSolicitacao(idSolicitacaoServico); return UtilDatas.formatTimestamp(listaDespesa.get(0).getValidade()); } public CentroResultadoDTO recuperaCentroCusto(RequisicaoViagemDTO requisicaoViagemDto) throws Exception { CentroResultadoDTO centroCustoDto = new CentroResultadoDTO(); centroCustoDto.setIdCentroResultado(requisicaoViagemDto.getIdCentroCusto()); return (CentroResultadoDTO) new CentroResultadoDao().restore(centroCustoDto); } public ProjetoDTO recuperaProjeto(RequisicaoViagemDTO requisicaoViagemDto) throws Exception { ProjetoDTO projetoDto = new ProjetoDTO(); if (requisicaoViagemDto.getIdProjeto() != null) { projetoDto.setIdProjeto(requisicaoViagemDto.getIdProjeto()); return (ProjetoDTO) new ProjetoDao().restore(projetoDto); } return null; } public CidadesDTO recuperaCidade(Integer idCidade) throws Exception { CidadesDTO cidadeDto = new CidadesDTO(); if (idCidade != null) { cidadeDto.setIdCidade(idCidade); return (CidadesDTO) new CidadesDao().restore(cidadeDto); } return null; } public AlcadaDTO recuperaAlcada(RequisicaoViagemDTO requisicaoViagemDto) throws Exception { return new AlcadaRequisicaoViagem().determinaAlcada(requisicaoViagemDto, recuperaCentroCusto(requisicaoViagemDto), getTransacao()); } public StringBuilder recuperaLoginAutorizadores() throws Exception { RequisicaoViagemDTO requisicaoViagemDto = recuperaRequisicaoViagem(); return recuperaLoginAutorizadores(requisicaoViagemDto); } public StringBuilder recuperaLoginAutorizadores(RequisicaoViagemDTO requisicaoViagemDto) throws Exception { StringBuilder result = new StringBuilder(); AlcadaDTO alcadaDto = recuperaAlcada(requisicaoViagemDto); if (alcadaDto != null && alcadaDto.getColResponsaveis() != null) { int i = 0; UsuarioDao usuarioDao = new UsuarioDao(); for (EmpregadoDTO empregadoDto : alcadaDto.getColResponsaveis()) { UsuarioDTO usuarioDto = usuarioDao.restoreAtivoByIdEmpregado(empregadoDto.getIdEmpregado()); if (usuarioDto != null) { if (i > 0) result.append(";"); result.append(usuarioDto.getLogin()); i++; } } } if (result.length() == 0) throw new LogicException("N�o foi encontrado nenhum autorizador da requisi��o"); return result; } public boolean exigeAutorizacao() throws Exception { RequisicaoViagemDTO requisicaoViagemDto = this.recuperaRequisicaoViagem(); return exigeAutorizacao(requisicaoViagemDto); } public void alteraEstadoCompra() throws Exception { RequisicaoViagemDTO requisicaoViagemDto = this.recuperaRequisicaoViagem(); RequisicaoViagemDAO requisicaoViagemDAO = new RequisicaoViagemDAO(); requisicaoViagemDAO.setTransactionControler(getTransacao()); IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); integranteViagemDao.setTransactionControler(getTransacao()); Collection<IntegranteViagemDTO> colIntegrantes = integranteViagemDao.recuperaIntegrantesViagemByIdSolicitacaoEstado(requisicaoViagemDto.getIdSolicitacaoServico(), RequisicaoViagemDTO.AGUARDANDO_PLANEJAMENTO); if(colIntegrantes != null && colIntegrantes.size() > 0){ for(IntegranteViagemDTO integranteViagemDTO : colIntegrantes){ integranteViagemDTO.setEstado(RequisicaoViagemDTO.AGUARDANDO_COMPRAS); integranteViagemDao.updateNotNull(integranteViagemDTO); } } requisicaoViagemDto = (RequisicaoViagemDTO) requisicaoViagemDAO.restore(requisicaoViagemDto); requisicaoViagemDto.setEstado(RequisicaoViagemDTO.AGUARDANDO_COMPRAS); requisicaoViagemDAO.updateNotNull(requisicaoViagemDto); } /** * Metodo que valida a exigencia da autoriza��o da requisi��o de viagem * * @param requisicaoViagemDto * @return * @throws Exception */ public boolean exigeAutorizacao(RequisicaoViagemDTO requisicaoViagemDto) throws Exception { DespesaViagemDAO despesaViagemDAO = new DespesaViagemDAO(); IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); RequisicaoViagemDTO requisicaoViagem = this.recuperaRequisicaoViagem(); Collection<IntegranteViagemDTO> colIntegrantes = integranteViagemDao.recuperaIntegrantesViagemByIdSolicitacaoEstado(requisicaoViagem.getIdSolicitacaoServico(), RequisicaoViagemDTO.AGUARDANDO_PLANEJAMENTO); if(colIntegrantes != null && !colIntegrantes.isEmpty()){ for(IntegranteViagemDTO dto: colIntegrantes){ if(dto.getRemarcacao() != null && dto.getRemarcacao().equalsIgnoreCase("S")){ Double vlrTotalNovo = despesaViagemDAO.buscaValorTotalViagem(requisicaoViagem.getIdSolicitacaoServico()); Double vlrTotalAntigo = despesaViagemDAO.buscaValorViagemHistorico(requisicaoViagem.getIdSolicitacaoServico()); String valorAlcadaSemAutorizacao = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.VALOR_ALCADA_SEM_NESSIDADE_AUTORIZACAO, "30"); if(valorAlcadaSemAutorizacao == null) throw new LogicException(i18n_Message("requisicaoViagem.percentualDeAceitacaoParaRemarcacaoDeViagem")); Double percentualPermissao = new Double(valorAlcadaSemAutorizacao); if(vlrTotalNovo > vlrTotalAntigo){ Double vlrTotal = vlrTotalNovo - vlrTotalAntigo; Double percentualRemarcado = vlrTotal * 100 / vlrTotalAntigo; if(percentualRemarcado > percentualPermissao) return true; else return false; }else{ return false; } } } } AlcadaDTO alcadaDto = recuperaAlcada(requisicaoViagem); boolean result = false; if (alcadaDto != null) { if (alcadaDto.getColResponsaveis() != null) { result = true; for (EmpregadoDTO empregadoDto : alcadaDto.getColResponsaveis()) { if (getSolicitacaoServicoDto().getIdSolicitante().intValue() == empregadoDto.getIdEmpregado().intValue()) { result = false; } } } } return result; } public ExecucaoRequisicaoViagem(RequisicaoViagemDTO requisicaoViagemDto, TransactionControler tc) { super(requisicaoViagemDto, tc); } public ExecucaoRequisicaoViagem(TransactionControler tc) { super(tc); } public boolean requisicaoAutorizadaSim() throws Exception { RequisicaoViagemDTO requisicaoDto = recuperaRequisicaoViagem(); boolean autorizado = false; if(!requisicaoDto.getEstado().equalsIgnoreCase(Enumerados.SituacaoSolicitacaoServico.Cancelada.name())) { ParecerDTO parecerDto = new ParecerDTO(); if (requisicaoDto.getIdAprovacao() != null) { parecerDto = recuperaParecer(requisicaoDto); if (parecerDto != null) { requisicaoDto.setAutorizado(parecerDto.getAprovado()); autorizado = requisicaoDto.getAutorizado() != null && requisicaoDto.getAutorizado().equalsIgnoreCase("S"); } } } return autorizado; } public boolean requisicaoAutorizadaNao() throws Exception { RequisicaoViagemDTO requisicaoDto = recuperaRequisicaoViagem(); boolean autorizado = false; if(!requisicaoDto.getEstado().equalsIgnoreCase(Enumerados.SituacaoSolicitacaoServico.Cancelada.name())) { ParecerDTO parecerDto = new ParecerDTO(); if (requisicaoDto.getIdAprovacao() != null) { parecerDto = recuperaParecer(requisicaoDto); if (parecerDto != null) { requisicaoDto.setAutorizado(parecerDto.getAprovado()); autorizado = requisicaoDto.getAutorizado() != null && requisicaoDto.getAutorizado().equalsIgnoreCase("N"); } } } return autorizado; } public ParecerDTO recuperaParecer(RequisicaoViagemDTO requisicaoViagemDto) throws Exception { ParecerDTO parecerDto = new ParecerDTO(); if (requisicaoViagemDto.getIdAprovacao() != null) { parecerDto.setIdParecer(requisicaoViagemDto.getIdAprovacao()); ParecerDao parecerDao = new ParecerDao(); parecerDao.setTransactionControler(getTransacao()); return (ParecerDTO) parecerDao.restore(parecerDto); } return null; } public boolean validaPrazoItens() throws Exception { RequisicaoViagemDTO requisicaoViagemDto = this.recuperaRequisicaoViagem(); RoteiroViagemDTO roteiroViagemDTO = new RoteiroViagemDTO(); Timestamp dataHoraAtual = UtilDatas.getDataHoraAtual(); Collection<IntegranteViagemDTO> colIntegrantes = new IntegranteViagemDao().recuperaIntegrantesViagemByIdSolicitacaoEstado(requisicaoViagemDto.getIdSolicitacaoServico(), RequisicaoViagemDTO.EM_AUTORIZACAO); if (colIntegrantes != null && !colIntegrantes.isEmpty() ) { for (IntegranteViagemDTO integranteViagemDto : colIntegrantes) { roteiroViagemDTO = new RoteiroViagemDAO().findByIdIntegrante(integranteViagemDto.getIdIntegranteViagem()); Collection<DespesaViagemDTO> colDespesa = new DespesaViagemDAO().findDespesasAtivasViagemByIdRoteiro(roteiroViagemDTO.getIdRoteiroViagem()); if (colDespesa != null && !colDespesa.isEmpty()) { for (DespesaViagemDTO despesaViagemDTO : colDespesa) { if (despesaViagemDTO.getValidade() != null && !despesaViagemDTO.getValidade().equals("")){ return despesaViagemDTO.getValidade().compareTo(dataHoraAtual) < 0; } } } } } return false; } public StringBuilder recuperaIntegrantesEmPrestacaoContas() throws Exception { RequisicaoViagemDTO requisicaoViagemDto = recuperaRequisicaoViagem(); return recuperaLoginIntegrantesPrestacaoContas(requisicaoViagemDto); } public StringBuilder recuperaLoginIntegrantesPrestacaoContas(RequisicaoViagemDTO requisicaoViagemDto) throws Exception { IntegranteViagemDao dao = new IntegranteViagemDao(); try { Collection<IntegranteViagemDTO> colIntegrantes = (Collection<IntegranteViagemDTO>) dao.recuperaIntegrantesViagemByIdSolicitacaoEstadoPrestConta(requisicaoViagemDto.getIdSolicitacaoServico(), RequisicaoViagemDTO.EM_PRESTACAOCONTAS, "S"); return this.montarUsuarios(colIntegrantes); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public StringBuilder montarUsuarios(Collection<IntegranteViagemDTO> colIntegrantes) throws Exception { StringBuilder result = new StringBuilder(); try { if (colIntegrantes != null) { int i = 0; for (IntegranteViagemDTO integrantes : colIntegrantes) { UsuarioDao usuarioDao = new UsuarioDao(); Integer idEmpregado = integrantes.getIdRespPrestacaoContas() == null ? integrantes.getIdEmpregado() : integrantes.getIdRespPrestacaoContas(); UsuarioDTO usuarioDto = usuarioDao.restoreAtivoByIdEmpregado(idEmpregado); if (usuarioDto != null) { if (i > 0) result.append(";"); result.append(usuarioDto.getLogin()); i++; } } } } catch (Exception e) { e.printStackTrace(); } if (result.length() == 0) throw new LogicException("N�o foi encontrado nenhum Integrante da requisi��o"); return result; } public void setaPrestacaoContaSimIntegrante(Tarefa tarefa) throws Exception { IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); integranteViagemDao.setTransactionControler(getTransacao()); RequisicaoViagemDTO requisicaoViagemDto = recuperaRequisicaoViagem(); List<IntegranteViagemDTO> listIntegranteViagemDTO = (List<IntegranteViagemDTO>) integranteViagemDao.recuperaIntegrantesViagemByIdSolicitacaoEstado(requisicaoViagemDto.getIdSolicitacaoServico(), RequisicaoViagemDTO.EM_PRESTACAOCONTAS); if(listIntegranteViagemDTO != null && listIntegranteViagemDTO.size() > 0){ for (IntegranteViagemDTO integranteViagemDTO : listIntegranteViagemDTO) { integranteViagemDTO.setEmPrestacaoContas("S"); integranteViagemDao.updateNotNull(integranteViagemDTO); break; } } } public void setaIdTarefaAoIntegranteViagem(Tarefa tarefa) throws Exception{ IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); integranteViagemDao.setTransactionControler(getTransacao()); RequisicaoViagemDTO requisicaoViagemDto = recuperaRequisicaoViagem(); List<IntegranteViagemDTO> listIntegranteViagemDTO = (List<IntegranteViagemDTO>) integranteViagemDao.recuperaIntegrantesViagemByIdSolicitacaoEstado(requisicaoViagemDto.getIdSolicitacaoServico(), RequisicaoViagemDTO.EM_PRESTACAOCONTAS); for (IntegranteViagemDTO integranteViagemDTO : listIntegranteViagemDTO) { if(integranteViagemDTO.getIdTarefa() == null || integranteViagemDTO.getIdTarefa().equals("")){ integranteViagemDTO.setIdTarefa(tarefa.getIdItemTrabalho()); integranteViagemDao.update(integranteViagemDTO); break; } } } public void setaIdTarefaAoIntegranteViagemCorrecao(Tarefa tarefa) throws Exception{ IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); integranteViagemDao.setTransactionControler(getTransacao()); RequisicaoViagemDTO requisicaoViagemDto = recuperaRequisicaoViagem(); List<IntegranteViagemDTO> listIntegranteViagemDTO = (List<IntegranteViagemDTO>) integranteViagemDao.recuperaIntegrantesViagemByIdSolicitacaoEstado(requisicaoViagemDto.getIdSolicitacaoServico(), RequisicaoViagemDTO.AGUARDANDO_CORRECAO); for (IntegranteViagemDTO integranteViagemDTO : listIntegranteViagemDTO) { if(integranteViagemDTO.getIdTarefa() == null || integranteViagemDTO.getIdTarefa().equals("")){ integranteViagemDTO.setIdTarefa(tarefa.getIdItemTrabalho()); integranteViagemDao.update(integranteViagemDTO); break; } } } public void setaIdTarefaAoIntegranteConferencia(Tarefa tarefa) throws Exception{ IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); integranteViagemDao.setTransactionControler(getTransacao()); RequisicaoViagemDTO requisicaoViagemDto = recuperaRequisicaoViagem(); List<IntegranteViagemDTO> listIntegranteViagemDTO = (List<IntegranteViagemDTO>) integranteViagemDao.recuperaIntegrantesViagemByIdSolicitacaoEstado(requisicaoViagemDto.getIdSolicitacaoServico(), RequisicaoViagemDTO.AGUARDANDO_CONFERENCIA); for (IntegranteViagemDTO integranteViagemDTO : listIntegranteViagemDTO) { integranteViagemDTO.setIdTarefa(tarefa.getIdItemTrabalho()); integranteViagemDTO.setEstado(RequisicaoViagemDTO.EM_CONFERENCIA); integranteViagemDao.updateNotNull(integranteViagemDTO); break; } } public void setaPrestacaoContaNaoIntegrante(Tarefa tarefa) throws Exception { IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); integranteViagemDao.setTransactionControler(getTransacao()); RequisicaoViagemDTO requisicaoViagemDto = recuperaRequisicaoViagem(); List<IntegranteViagemDTO> listIntegranteViagemDTO = (List<IntegranteViagemDTO>) integranteViagemDao.findAllPrestacaoContasByIdSolicitacao(requisicaoViagemDto.getIdSolicitacaoServico()); if(listIntegranteViagemDTO != null && listIntegranteViagemDTO.size() > 0){ for (IntegranteViagemDTO integranteViagemDTO : listIntegranteViagemDTO) { integranteViagemDTO.setEmPrestacaoContas("N"); integranteViagemDao.updateNotNull(integranteViagemDTO); } } } public void associaItemTrabalhoAoIntegrante(Tarefa tarefa) throws Exception { IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); integranteViagemDao.setTransactionControler(getTransacao()); List<IntegranteViagemDTO> listaIntegrantes = (List<IntegranteViagemDTO>) integranteViagemDao.recuperaIntegrantesViagemByIdSolicitacaoEstado(getSolicitacaoServicoDto().getIdSolicitacaoServico(), RequisicaoViagemDTO.AGUARDANDO_ADIANTAMENTO); if (listaIntegrantes != null && !listaIntegrantes.isEmpty()) { for(IntegranteViagemDTO dto: listaIntegrantes){ dto.setIdTarefa(tarefa.getIdItemTrabalho()); integranteViagemDao.updateNotNull(dto); } } } public void associaItemTrabalhoAutorizacaoRequisicao(Tarefa tarefa) throws Exception { RequisicaoViagemDTO requisicaoViagemDto = recuperaRequisicaoViagem(); RequisicaoViagemDAO dao = new RequisicaoViagemDAO(); setTransacaoDao(dao); if(requisicaoViagemDto != null && requisicaoViagemDto.getIdSolicitacaoServico() != null){ requisicaoViagemDto.setIdItemTrabalho(tarefa.getIdItemTrabalho()); dao.updateNotNull(requisicaoViagemDto); } } public void setEstadoEmAutorizacao() throws Exception { RequisicaoViagemDTO requisicaoViagemDto = recuperaRequisicaoViagem(); IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); integranteViagemDao.setTransactionControler(getTransacao()); List<IntegranteViagemDTO> listIntegranteViagemDTO = (List<IntegranteViagemDTO>) integranteViagemDao.recuperaIntegrantesViagemByIdSolicitacaoEstado(requisicaoViagemDto.getIdSolicitacaoServico(), RequisicaoViagemDTO.AGUARDANDO_APROVACAO); RequisicaoViagemDAO dao = new RequisicaoViagemDAO(); setTransacaoDao(dao); if(requisicaoViagemDto != null && requisicaoViagemDto.getIdSolicitacaoServico() != null){ requisicaoViagemDto.setEscalar(RequisicaoViagemDTO.EM_AUTORIZACAO); dao.updateNotNull(requisicaoViagemDto); } if(listIntegranteViagemDTO != null && !listIntegranteViagemDTO.isEmpty()){ for (IntegranteViagemDTO integranteViagemDTO : listIntegranteViagemDTO) { integranteViagemDTO.setEstado(RequisicaoViagemDTO.EM_AUTORIZACAO); integranteViagemDao.updateNotNull(integranteViagemDTO); } } } @SuppressWarnings("unchecked") public void executaItemTrabalhoPrestacaoConferencia(Tarefa tarefa) throws Exception { PrestacaoContasViagemDao dao = new PrestacaoContasViagemDao(); setTransacaoDao(dao); List<PrestacaoContasViagemDTO> listaItens = (List<PrestacaoContasViagemDTO>) dao.findByTarefa(tarefa.getIdItemTrabalho()); if (listaItens != null) { PrestacaoContasViagemDTO prestacaoContas = listaItens.get(0); prestacaoContas.setIdItemTrabalho(null); dao.update(prestacaoContas); } } @SuppressWarnings("unchecked") public void associaItemTrabalhoPrestacaoCorrecao(Tarefa tarefa) throws Exception { PrestacaoContasViagemDao dao = new PrestacaoContasViagemDao(); Integer idSolicitacaoServico = getSolicitacaoServicoDto().getIdSolicitacaoServico(); setTransacaoDao(dao); List<PrestacaoContasViagemDTO> listaItens = (List<PrestacaoContasViagemDTO>) dao.findBySituacao(idSolicitacaoServico, PrestacaoContasViagemDTO.AGUARDANDO_CORRECAO); if (listaItens != null) { PrestacaoContasViagemDTO prestacaoContas = listaItens.get(0); prestacaoContas.setIdItemTrabalho(tarefa.getIdItemTrabalho()); prestacaoContas.setSituacao(PrestacaoContasViagemDTO.EM_CORRECAO); atribuiUsuarioCorrecao(prestacaoContas, tarefa); dao.update(prestacaoContas); } } public void cancelaTarefaPrestacaoContas(Integer idTarefa, String login) throws Exception{ SolicitacaoServicoDTO solicitacaoDto = getSolicitacaoServicoDto(); TarefaFluxoDTO tarefaDto = recuperaTarefa(idTarefa); String motivo = "Remarca��o"; this.cancelaTarefa(login, solicitacaoDto, tarefaDto, motivo); } @SuppressWarnings("unchecked") public boolean corrigirPrestacaoContas() throws Exception { PrestacaoContasViagemDao dao = new PrestacaoContasViagemDao(); dao.setTransactionControler(getTransacao()); Integer idSolicitacao = getSolicitacaoServicoDto().getIdSolicitacaoServico(); List<PrestacaoContasViagemDTO> listaItens = (List<PrestacaoContasViagemDTO>) dao.findBySituacao(idSolicitacao, PrestacaoContasViagemDTO.NAO_APROVADA); boolean isOk = (listaItens != null && listaItens.size() > 0); if (isOk) { PrestacaoContasViagemDTO prestacaoDto = listaItens.get(0); prestacaoDto.setSituacao(PrestacaoContasViagemDTO.AGUARDANDO_CORRECAO); dao.update(prestacaoDto); } return isOk; } @SuppressWarnings({"unchecked"}) public boolean isTarefaConferencia() throws Exception { PrestacaoContasViagemDao dao = new PrestacaoContasViagemDao(); dao.setTransactionControler(getTransacao()); Integer idSolicitacao = getSolicitacaoServicoDto().getIdSolicitacaoServico(); List<PrestacaoContasViagemDTO> listaItens = (List<PrestacaoContasViagemDTO>) dao.findBySituacaoAndNull(idSolicitacao, PrestacaoContasViagemDTO.AGUARDANDO_CONFERENCIA); boolean isOk = (listaItens != null && listaItens.size() > 0); if (isOk) { PrestacaoContasViagemDTO dto = listaItens.get(0); dto.setSituacao(PrestacaoContasViagemDTO.EM_CONFERENCIA); dao.update(dto); this.setaInicioTarefa(); } return isOk; } public boolean isCancelamentoRequisicaoViagem() throws Exception{ RequisicaoViagemDTO requisicaoViagemDto = recuperaRequisicaoViagem(); return (requisicaoViagemDto != null && requisicaoViagemDto.getCancelarRequisicao() != null && requisicaoViagemDto.getCancelarRequisicao().equalsIgnoreCase("S")); } public boolean isCancelada() throws Exception { RequisicaoViagemDTO requisicaoViagemDTO = recuperaRequisicaoViagem(); if(requisicaoViagemDTO != null && requisicaoViagemDTO.getEstado().equalsIgnoreCase(Enumerados.SituacaoSolicitacaoServico.Cancelada.name())) { return true; } return false; } public boolean isHouveRemarcacaoViagem() throws Exception{ IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); RequisicaoViagemDTO requisicaoViagemDto = recuperaRequisicaoViagem(); boolean isOK = integranteViagemDao.isHouveRemarcacaoViagem(requisicaoViagemDto.getIdSolicitacaoServico()); if(isOK){ return true; }else{ return false; } } @SuppressWarnings("rawtypes") public boolean verificaEtapaDoFluxo(Integer idSolicitacaoServico, String template )throws Exception{ RequisicaoViagemDAO requisicaoViagemDAO = new RequisicaoViagemDAO(); List listaRequisicaoViagem = requisicaoViagemDAO.retornaRequisicaoByTemplateAndIdsolicitacao(idSolicitacaoServico, template); if (listaRequisicaoViagem != null && listaRequisicaoViagem.size() > 0) return true; else return false; } public boolean isEstadoPrestacaoContas() throws Exception { PrestacaoContasViagemDao dao = new PrestacaoContasViagemDao(); RequisicaoViagemDTO requisicaoViagemDto = recuperaRequisicaoViagem(); boolean isOk = dao.isEstadoPrestacaoContas(requisicaoViagemDto); if (isOk) this.setaInicioTarefa(); return isOk; } public boolean isEstadoAutorizacao() throws Exception { IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); integranteViagemDao.setTransactionControler(getTransacao()); RequisicaoViagemDTO requisicaoViagemDto = recuperaRequisicaoViagem(); Collection<IntegranteViagemDTO> colIntegrantes = integranteViagemDao.recuperaIntegrantesViagemByIdSolicitacaoEstado(requisicaoViagemDto.getIdSolicitacaoServico(), RequisicaoViagemDTO.AGUARDANDO_APROVACAO); if(colIntegrantes != null && colIntegrantes.size() > 0){ for(IntegranteViagemDTO integranteViagemDTO: colIntegrantes){ integranteViagemDTO.setEstado(RequisicaoViagemDTO.EM_AUTORIZACAO); integranteViagemDao.update(integranteViagemDTO); } return true; }else{ return false; } } public boolean isCotacaoVencida() throws Exception { RequisicaoViagemDTO requisicaoViagemDto = recuperaRequisicaoViagem(); IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); integranteViagemDao.setTransactionControler(getTransacao()); boolean isOk = false; isOk = this.validaPrazoItens(); if(isOk){ this.alteraEstadoRequisicaoViagem(requisicaoViagemDto ,RequisicaoViagemDTO.EM_PLANEJAMENTO); Collection<IntegranteViagemDTO> colIntegrantesAux = integranteViagemDao.recuperaIntegrantesViagemByIdSolicitacaoEstado(requisicaoViagemDto.getIdSolicitacaoServico(), RequisicaoViagemDTO.EM_AUTORIZACAO); if(colIntegrantesAux != null && colIntegrantesAux.size() > 0){ for(IntegranteViagemDTO integranteViagemDTO: colIntegrantesAux){ integranteViagemDTO.setEstado(RequisicaoViagemDTO.AGUARDANDO_PLANEJAMENTO); integranteViagemDao.updateNotNull(integranteViagemDTO); } } if(requisicaoViagemDto.getIdItemTrabalho() != null){ String motivo = "Data da conta��o forado prazo de validade."; TarefaFluxoDTO tarefaDto = recuperaTarefa(requisicaoViagemDto.getIdItemTrabalho()); this.cancelaTarefa(null, this.getSolicitacaoServicoDto(), tarefaDto, motivo); } } return isOk; } public boolean requisicaoViagemFinalizada() throws Exception { IntegranteViagemDao dao = new IntegranteViagemDao(); Collection<IntegranteViagemDTO> colIntegrantes = dao.findAllByIdSolicitacao(getSolicitacaoServicoDto().getIdSolicitacaoServico()); if(colIntegrantes != null && !colIntegrantes.isEmpty()){ for(IntegranteViagemDTO dto: colIntegrantes){ if(!dto.getEstado().equalsIgnoreCase(RequisicaoViagemDTO.FINALIZADA)){ return false; } } } return true; } public void alteraEstadoRequisicaoViagem(RequisicaoViagemDTO requisicaoViagemDto, String estado) throws Exception { RequisicaoViagemDAO reqViagemDao = new RequisicaoViagemDAO(); setTransacaoDao(reqViagemDao); requisicaoViagemDto.setEstado(estado); requisicaoViagemDto.setTarefaIniciada("N"); reqViagemDao.updateNotNull(requisicaoViagemDto); } public void setaInicioTarefa() throws Exception { RequisicaoViagemDAO dao = new RequisicaoViagemDAO(); setTransacaoDao(dao); RequisicaoViagemDTO requisicaoViagemDto = recuperaRequisicaoViagem(); requisicaoViagemDto.setTarefaIniciada("S"); dao.update(requisicaoViagemDto); } public void setaFimTarefa() throws Exception { RequisicaoViagemDAO dao = new RequisicaoViagemDAO(); setTransacaoDao(dao); RequisicaoViagemDTO requisicaoViagemDto = recuperaRequisicaoViagem(); requisicaoViagemDto.setTarefaIniciada("N"); dao.update(requisicaoViagemDto); } public StringBuilder recuperaLoginResponsaveisAdiantamento() throws Exception { StringBuilder result = new StringBuilder(); Integer idGrupo = Integer.parseInt(ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.ID_GRUPO_PADRAO_RESPONSAVEL_ADIANTAMENTO_VIAGEM, getSolicitacaoServicoDto() .getIdGrupoAtual().toString())); EmpregadoService empregadoService = (EmpregadoService) ServiceLocator.getInstance().getService(EmpregadoService.class, null); Collection<EmpregadoDTO> colEmpregado = empregadoService.listEmpregadosByIdGrupo(idGrupo); if (colEmpregado != null) { int i = 0; UsuarioDao usuarioDao = new UsuarioDao(); for (EmpregadoDTO empregadoDto : colEmpregado) { UsuarioDTO usuarioDto = usuarioDao.restoreAtivoByIdEmpregado(empregadoDto.getIdEmpregado()); if (usuarioDto != null) { if (i > 0) result.append(";"); result.append(usuarioDto.getLogin()); i++; } } } if (result.length() == 0) throw new LogicException("N�o foi encontrado nenhum responsavel para o Adiantamento"); return result; } public StringBuilder recuperaLoginResponsaveisConferencia() throws Exception { StringBuilder result = new StringBuilder(); Integer idGrupo = Integer.parseInt(ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.ID_GRUPO_PADRAO_RESPONSAVEL_CONFERENCIA_VIAGEM, getSolicitacaoServicoDto().getIdGrupoAtual() .toString())); EmpregadoService empregadoService = (EmpregadoService) ServiceLocator.getInstance().getService(EmpregadoService.class, null); Collection<EmpregadoDTO> colEmpregado = empregadoService.listEmpregadosByIdGrupo(idGrupo); if (colEmpregado != null) { int i = 0; UsuarioDao usuarioDao = new UsuarioDao(); for (EmpregadoDTO empregadoDto : colEmpregado) { UsuarioDTO usuarioDto = usuarioDao.restoreAtivoByIdEmpregado(empregadoDto.getIdEmpregado()); if (usuarioDto != null) { if (i > 0) result.append(";"); result.append(usuarioDto.getLogin()); i++; } } } if (result.length() == 0) throw new LogicException("N�o foi encontrado nenhum responsavel para a Confer�ncia"); return result; } public StringBuilder recuperaLoginResponsaveisCotacao() throws Exception { StringBuilder result = new StringBuilder(); Integer idGrupo = Integer.parseInt(ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.ID_GRUPO_PADRAO_RESPONSAVEL_COTACAO_VIAGEM, getSolicitacaoServicoDto().getIdGrupoAtual() .toString())); EmpregadoService empregadoService = (EmpregadoService) ServiceLocator.getInstance().getService(EmpregadoService.class, null); Collection<EmpregadoDTO> colEmpregado = empregadoService.listEmpregadosByIdGrupo(idGrupo); if (colEmpregado != null) { int i = 0; UsuarioDao usuarioDao = new UsuarioDao(); for (EmpregadoDTO empregadoDto : colEmpregado) { UsuarioDTO usuarioDto = usuarioDao.restoreAtivoByIdEmpregado(empregadoDto.getIdEmpregado()); if (usuarioDto != null) { if (i > 0) result.append(";"); result.append(usuarioDto.getLogin()); i++; } } } if (result.length() == 0) throw new LogicException("N�o foi encontrado nenhum responsavel pela Cota��o"); return result; } public StringBuilder recuperaLoginIntegrante() throws Exception { RequisicaoViagemDTO requisicaoViagemDto = recuperaRequisicaoViagem(); StringBuilder result = new StringBuilder(); IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); Collection<IntegranteViagemDTO> colIntegrantes = integranteViagemDao.findAllByIdSolicitacao(requisicaoViagemDto.getIdSolicitacaoServico()); UsuarioDTO usuarioDto; try { if (colIntegrantes != null) { int i = 0; for (IntegranteViagemDTO integrante : colIntegrantes) { UsuarioDao usuarioDao = new UsuarioDao(); if (integrante.getIdRespPrestacaoContas() != null) { usuarioDto = usuarioDao.restoreAtivoByIdEmpregado(integrante.getIdRespPrestacaoContas()); } else { usuarioDto = usuarioDao.restoreAtivoByIdEmpregado(integrante.getIdEmpregado()); } if (usuarioDto != null) { if (i > 0) result.append(";"); result.append(usuarioDto.getLogin()); i++; } } } } catch (Exception e) { e.printStackTrace(); } if (result.length() == 0) throw new LogicException("N�o foi encontrado nenhum Integrante da requisi��o"); return result; } @SuppressWarnings("unchecked") public StringBuilder recuperaLoginIntegranteCorrecao() throws Exception { RequisicaoViagemDTO requisicaoViagemDto = recuperaRequisicaoViagem(); StringBuilder result = new StringBuilder(); PrestacaoContasViagemDao dao = new PrestacaoContasViagemDao(); PrestacaoContasViagemDTO prestacaoContasDto = new PrestacaoContasViagemDTO(); List<PrestacaoContasViagemDTO> lista = (List<PrestacaoContasViagemDTO>) dao.findBySituacao(requisicaoViagemDto.getIdSolicitacaoServico(), PrestacaoContasViagemDTO.AGUARDANDO_CORRECAO); if (lista == null) { return recuperaLoginIntegrante(); } else { try { prestacaoContasDto = lista.get(0); Integer idEmpregado = prestacaoContasDto.getIdEmpregado(); IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); IntegranteViagemDTO integranteViagemDto = integranteViagemDao.recuperaIntegrante(requisicaoViagemDto.getIdSolicitacaoServico(), idEmpregado); if (integranteViagemDto != null) { if (integranteViagemDto.getIdRespPrestacaoContas() != null) { idEmpregado = integranteViagemDto.getIdRespPrestacaoContas(); } } UsuarioDao usuarioDao = new UsuarioDao(); UsuarioDTO usuarioDto = usuarioDao.restoreAtivoByIdEmpregado(prestacaoContasDto.getIdEmpregado()); if (usuarioDto != null) { result.append(usuarioDto.getLogin()); result.append(";"); } } catch (Exception e) { e.printStackTrace(); } if (result.length() == 0) throw new LogicException("N�o foi encontrado nenhum Integrante da requisi��o"); return result; } } @SuppressWarnings("unchecked") public StringBuilder recuperaLoginIntegranteCorrecao(Tarefa tarefa) throws Exception { StringBuilder result = new StringBuilder(); PrestacaoContasViagemDao dao = new PrestacaoContasViagemDao(); Integer idSolicitacaoServico = getSolicitacaoServicoDto().getIdSolicitacaoServico(); setTransacaoDao(dao); List<PrestacaoContasViagemDTO> listaItens = (List<PrestacaoContasViagemDTO>) dao.findBySituacao(idSolicitacaoServico, PrestacaoContasViagemDTO.AGUARDANDO_CORRECAO); if (listaItens != null) { PrestacaoContasViagemDTO prestacaoContas = listaItens.get(0); UsuarioDao usuarioDao = new UsuarioDao(); Integer idEmpregado = prestacaoContas.getIdEmpregado(); IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); IntegranteViagemDTO integranteViagemDto = integranteViagemDao.recuperaIntegrante(prestacaoContas.getIdSolicitacaoServico(), idEmpregado); if (integranteViagemDto != null && integranteViagemDto.getIdRespPrestacaoContas() != null) idEmpregado = integranteViagemDto.getIdRespPrestacaoContas(); UsuarioDTO usuarioDto = usuarioDao.restoreAtivoByIdEmpregado(idEmpregado); if (usuarioDto != null) { result.append(usuarioDto.getLogin()); result.append(";"); } } if (result.length() == 0) throw new LogicException("N�o foi encontrado nenhum Integrante da requisi��o"); return result; } public void enviaEmailNaoAprovado(Integer idModeloEmail, RequisicaoViagemDTO requisicaoViagemDto, PrestacaoContasViagemDTO prestacaoContasViagemDto, TransactionControler tc) throws Exception { if (idModeloEmail == null) return; if (prestacaoContasViagemDto == null) return; EmpregadoDTO empregadoDto = new EmpregadoDTO(); EmpregadoDao empregadoDao = new EmpregadoDao(); empregadoDto.setIdEmpregado(prestacaoContasViagemDto.getIdEmpregado()); empregadoDto = (EmpregadoDTO) empregadoDao.restore(empregadoDto); if (empregadoDto == null) return; String remetente = getRemetenteEmail(); SolicitacaoServicoDTO solicitacaoAuxDto = new SolicitacaoServicoServiceEjb().restoreAll(requisicaoViagemDto.getIdSolicitacaoServico(), tc); if (solicitacaoAuxDto != null) solicitacaoAuxDto.setNomeTarefa(requisicaoViagemDto.getNomeTarefa()); /* Decodifica a mensagem a ser enviada */ if (solicitacaoAuxDto != null) { solicitacaoAuxDto.setDescricao(StringEscapeUtils.unescapeJavaScript(solicitacaoAuxDto.getDescricao())); solicitacaoAuxDto.setResposta(StringEscapeUtils.unescapeJavaScript(solicitacaoAuxDto.getResposta())); solicitacaoAuxDto.setComplementoJustificativa(prestacaoContasViagemDto.getComplemJustificativaAutorizacao()); solicitacaoAuxDto.setNomecontato(empregadoDto.getNome()); } MensagemEmail mensagem = new MensagemEmail(idModeloEmail, new IDto[] { solicitacaoAuxDto }); try { mensagem.envia(empregadoDto.getEmail(), null, remetente); } catch (Exception e) { } } private void atribuiUsuarioCorrecao(PrestacaoContasViagemDTO prestacaoContasViagemDto, Tarefa tarefa) throws Exception{ AtribuicaoFluxoDTO atribuicaoFluxoDto = new AtribuicaoFluxoDTO(); AtribuicaoFluxoDao atribuicaoFluxoDao = new AtribuicaoFluxoDao(); atribuicaoFluxoDao.setTransactionControler(getTransacao()); UsuarioDao usuarioDao = new UsuarioDao(); Integer idEmpregado = prestacaoContasViagemDto.getIdEmpregado(); IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); IntegranteViagemDTO integranteViagemDto = integranteViagemDao.recuperaIntegrante(prestacaoContasViagemDto.getIdSolicitacaoServico(), idEmpregado); if (integranteViagemDto != null && integranteViagemDto.getIdRespPrestacaoContas() != null) idEmpregado = integranteViagemDto.getIdRespPrestacaoContas(); UsuarioDTO usuarioDto = usuarioDao.restoreByIdEmpregado(idEmpregado); atribuicaoFluxoDto.setIdItemTrabalho(tarefa.getIdItemTrabalho()); atribuicaoFluxoDto.setIdUsuario(usuarioDto.getIdUsuario()); atribuicaoFluxoDto.setTipo("Automatica"); atribuicaoFluxoDto.setDataHora(UtilDatas.getDataHoraAtual()); Collection<AtribuicaoFluxoDTO> itensCadastrados = atribuicaoFluxoDao.findByIdItemTrabalhoAndIdUsuarioAndTipo(atribuicaoFluxoDto.getIdItemTrabalho(), atribuicaoFluxoDto.getIdUsuario(), atribuicaoFluxoDto.getTipo()); if(itensCadastrados == null || itensCadastrados.isEmpty()) atribuicaoFluxoDao.create(atribuicaoFluxoDto); } @Override public boolean permiteAprovacaoAlcada(AlcadaProcessoNegocioDTO alcadaProcessoNegocioDto, SolicitacaoServicoDTO solicitacaoServicoDto) throws Exception { Integer idEmpregado = alcadaProcessoNegocioDto.getEmpregadoDto().getIdEmpregado(); if (idEmpregado.intValue() == solicitacaoServicoDto.getIdSolicitante().intValue()) { alcadaProcessoNegocioDto.setComplementoRejeicao("Aprovador n�o pode ser o solicitante"); return false; } String idGrupoViagem = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.ID_GRUPO_PADRAO_REQ_VIAGEM_EXECUCAO, null); if (idGrupoViagem == null || idGrupoViagem.trim().equals("")) throw new Exception("Grupo padr�o de requisi��o de produtos n�o parametrizado"); if (alcadaProcessoNegocioDto.getMapGruposEmpregado().get(idGrupoViagem.trim()) != null) { alcadaProcessoNegocioDto.setComplementoRejeicao("Aprovador n�o pode pertencer ao grupo respons�vel por viagens"); return false; } Collection<IntegranteViagemDTO> listaIntegratesViagem = new IntegranteViagemDao().findAllByIdSolicitacao(solicitacaoServicoDto.getIdSolicitacaoServico()); if (listaIntegratesViagem!=null){ for(IntegranteViagemDTO integranteViagemDto : listaIntegratesViagem){ if (integranteViagemDto.getIdEmpregado().intValue() == idEmpregado.intValue()) { alcadaProcessoNegocioDto.setComplementoRejeicao("Aprovador n�o pode ser um dos integrantes da viagem"); return false; } } } return true; } public String recuperaLoginByIdEmpregado(Integer idEmpregado) throws Exception{ UsuarioDao usuarioDao = new UsuarioDao(); return usuarioDao.restoreAtivoByIdEmpregado(idEmpregado).getLogin(); } @Override public void enviaEmail(String identificador) throws Exception { if (identificador == null) return; ModeloEmailDTO modeloEmailDto = new ModeloEmailDao().findByIdentificador(identificador); if (modeloEmailDto != null) enviaEmail(modeloEmailDto.getIdModeloEmail()); } @Override public void enviaEmail(Integer idModeloEmail) throws Exception { if (idModeloEmail == null) return; String enviaEmail = ParametroUtil.getValorParametroCitSmartHashMap(ParametroSistema.EnviaEmailFluxo, "N"); if (!enviaEmail.equalsIgnoreCase("S")) return; } @Override public void calculaValorAprovadoAnual(CentroResultadoDTO centroResultadoDto, int anoRef, TransactionControler tc) throws Exception { valorAnualAtendCliente = 0.0; valorAnualUsoInterno = 0.0; RequisicaoViagemDAO requisicaoDao = new RequisicaoViagemDAO(); if (tc != null) requisicaoDao.setTransactionControler(tc); Collection<RequisicaoViagemDTO> colRequisicoes = requisicaoDao.findByIdCentroCusto(centroResultadoDto.getIdCentroResultado()); if (colRequisicoes != null) { SolicitacaoServicoDao solicitacaoServicoDao = new SolicitacaoServicoDao(); if (tc != null) solicitacaoServicoDao.setTransactionControler(tc); for (RequisicaoViagemDTO requisicaoViagemDto : colRequisicoes) { SolicitacaoServicoDTO solicitacaoServicoDto = new SolicitacaoServicoDTO(); solicitacaoServicoDto.setIdSolicitacaoServico(requisicaoViagemDto.getIdRequisicaoViagem()); solicitacaoServicoDto = (SolicitacaoServicoDTO) solicitacaoServicoDao.restore(solicitacaoServicoDto); Date dataAux = new Date(requisicaoViagemDto.getDataHoraSolicitacao().getTime()); int ano = UtilDatas.getYear(dataAux); if (ano != anoRef) continue; valorAnualUsoInterno += calculaValorAprovado(requisicaoViagemDto, tc); } } } @Override public void calculaValorAprovadoMensal(CentroResultadoDTO centroResultadoDto, int mesRef, int anoRef, TransactionControler tc) throws Exception { valorMensalAtendCliente = 0.0; valorMensalUsoInterno = 0.0; RequisicaoViagemDAO requisicaoDao = new RequisicaoViagemDAO(); if (tc != null) requisicaoDao.setTransactionControler(tc); Collection<RequisicaoViagemDTO> colRequisicoes = requisicaoDao.findByIdCentroCusto(centroResultadoDto.getIdCentroResultado()); if (colRequisicoes != null) { SolicitacaoServicoDao solicitacaoServicoDao = new SolicitacaoServicoDao(); if (tc != null) solicitacaoServicoDao.setTransactionControler(tc); for (RequisicaoViagemDTO requisicaoViagemDto : colRequisicoes) { /*if (getSolicitacaoServicoDto() != null && getSolicitacaoServicoDto().getIdSolicitacaoServico() != null && getSolicitacaoServicoDto().getIdSolicitacaoServico().intValue() == requisicaoViagemDto.getIdSolicitacaoServico().intValue()) continue;*/ SolicitacaoServicoDTO solicitacaoServicoDto = new SolicitacaoServicoDTO(); solicitacaoServicoDto.setIdSolicitacaoServico(requisicaoViagemDto.getIdRequisicaoViagem()); solicitacaoServicoDto = (SolicitacaoServicoDTO) solicitacaoServicoDao.restore(solicitacaoServicoDto); Date dataAux = new Date(requisicaoViagemDto.getDataHoraSolicitacao().getTime()); int mes = UtilDatas.getMonth(dataAux); int ano = UtilDatas.getYear(dataAux); if (ano != anoRef || mes != mesRef) continue; valorMensalUsoInterno += calculaValorAprovado(requisicaoViagemDto, tc); } } } @Override public double calculaValorAprovado(SolicitacaoServicoDTO solicitacaoServicoDto, TransactionControler tc) throws Exception { DespesaViagemDAO despesaViagemDAO = new DespesaViagemDAO(); if (tc != null) despesaViagemDAO.setTransactionControler(tc); return despesaViagemDAO.buscaValorTotalViagem(solicitacaoServicoDto.getIdSolicitacaoServico()); } /** * Valida se a requisi��o � uma requisi��o de viagem remarcado, caso seja, * valida se todos os integrantes da viagem j� foram remarcadas, caso sim * seta que a requisi��o de viagem n�o � mais rearcada * * @throws Exception * */ public void verificarRequisicaoRemarcada() throws Exception{ RequisicaoViagemDAO dao = new RequisicaoViagemDAO(); setTransacaoDao(dao); RequisicaoViagemDTO requisicaoDto = recuperaRequisicaoViagem(); if(requisicaoDto.getRemarcacao().equals("S")){ RequisicaoViagemService requisicaoViagemService = (RequisicaoViagemService) ServiceLocator.getInstance().getService(RequisicaoViagemService.class, null); RequisicaoViagemDTO requisicao = requisicaoViagemService.recuperaRequisicaoPelaSolicitacao(requisicaoDto.getIdSolicitacaoServico()); IntegranteViagemService integranteViagemService = (IntegranteViagemService) ServiceLocator.getInstance().getService(IntegranteViagemService.class, null); Collection<IntegranteViagemDTO> integrantes = integranteViagemService.findAllRemarcacaoByIdSolicitacao(requisicaoDto.getIdSolicitacaoServico()); if(integrantes == null || integrantes.size() < 1){ requisicao.setRemarcacao("N"); requisicao.setTarefaIniciada("N"); dao.update(requisicao); } } } /** * Verifica se a viagem ja aconteceu para avan�ar o fluxo para presta��o de contas * * @throws Exception * */ public boolean viagemOk() throws Exception{ RequisicaoViagemDTO requisicaoViagemDto = this.recuperaRequisicaoViagem(); IntegranteViagemService integranteViagemService = (IntegranteViagemService) ServiceLocator.getInstance().getService(IntegranteViagemService.class, null); // IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); // integranteViagemDao.setTransactionControler(getTransacao()); RoteiroViagemService roteiroViagemService = (RoteiroViagemService) ServiceLocator.getInstance().getService(RoteiroViagemService.class, null); RoteiroViagemDTO roteiroViagemDTO = new RoteiroViagemDTO(); Collection<IntegranteViagemDTO> integrantes = integranteViagemService.recuperaIntegrantesViagemByIdSolicitacaoEstado(requisicaoViagemDto.getIdSolicitacaoServico(), RequisicaoViagemDTO.AGUARDANDO_PRESTACAOCONTAS); Date dataAtual = UtilDatas.getDataAtual(); Date dataFimViagem = requisicaoViagemDto.getDataFimViagem(); if(integrantes != null && integrantes.size() > 0){ for(IntegranteViagemDTO integranteViagemDTO: integrantes){ roteiroViagemDTO = roteiroViagemService.findByIdIntegrante(integranteViagemDTO.getIdIntegranteViagem()); if(roteiroViagemDTO.getVolta().compareTo(dataAtual) < 0 && integranteViagemDTO.getEstado() != null && integranteViagemDTO.getEstado().equalsIgnoreCase(RequisicaoViagemDTO.AGUARDANDO_PRESTACAOCONTAS)){ integranteViagemDTO = (IntegranteViagemDTO) integranteViagemService.restore(integranteViagemDTO); integranteViagemDTO.setEstado(RequisicaoViagemDTO.EM_PRESTACAOCONTAS); integranteViagemDTO.setEmPrestacaoContas("S"); integranteViagemDTO.setRemarcacao("N"); integranteViagemDTO.setIdTarefa(null); integranteViagemService.update(integranteViagemDTO); return true; } } } return false; } /** * cancela intancia se itens com conta��o vencida * * @throws Exception * */ public void cancelaAutorizacao() throws Exception{ SolicitacaoServicoDTO solicitacaoDto = getSolicitacaoServicoDto(); Collection<TarefaFluxoDTO> colTarefas = new TarefaFluxoDao().findDisponiveisByIdTarefaEstado(solicitacaoDto.getIdSolicitacaoServico(), "Autorizar requisi��o"); if(colTarefas != null && !colTarefas.isEmpty()){ String motivo = "Requisi��o com itens vencidos!"; for(TarefaFluxoDTO tarefaDto: colTarefas){ this.cancelaTarefa(null, solicitacaoDto, tarefaDto, motivo); } } } /** * Valida se a requisi��o foi criada para executar planejamento * */ public boolean isRequisicaoCriada() throws Exception{ RequisicaoViagemDTO requisicaoViagemDto = this.recuperaRequisicaoViagem(); RequisicaoViagemDAO requisicaoViagemDAO = new RequisicaoViagemDAO(); requisicaoViagemDAO.setTransactionControler(getTransacao()); if(requisicaoViagemDto != null && requisicaoViagemDto.getEstado().equalsIgnoreCase("Aguardando Planejamento") && requisicaoViagemDto.getTarefaIniciada().equalsIgnoreCase("") || requisicaoViagemDto.getTarefaIniciada() == null){ requisicaoViagemDto.setEstado(RequisicaoViagemDTO.EM_PLANEJAMENTO); requisicaoViagemDAO.updateNotNull(requisicaoViagemDto); return true; }else{ return false; } } /** * Valida se viagem foi remarcada * @return * @throws Exception */ public boolean isRemarcada() throws Exception{ IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); integranteViagemDao.setTransactionControler(getTransacao()); IntegranteViagemService integranteViagemService = (IntegranteViagemService) ServiceLocator.getInstance().getService(IntegranteViagemService.class, null); Collection<IntegranteViagemDTO> colIntegrantes = new ArrayList<IntegranteViagemDTO>(); SolicitacaoServicoDTO solicitacaoDto = getSolicitacaoServicoDto(); Collection<IntegranteViagemDTO> colIntegrantesAux = new ArrayList<IntegranteViagemDTO>(); RequisicaoViagemDTO requisicaoViagemDto = this.recuperaRequisicaoViagem(); RequisicaoViagemDAO requisicaoViagemDAO = new RequisicaoViagemDAO(); requisicaoViagemDAO.setTransactionControler(getTransacao()); boolean todosRemarcados = true; TarefaFluxoDTO tarefaDto = new TarefaFluxoDTO(); colIntegrantes = integranteViagemService.recuperaIntegrantesViagemByIdSolicitacaoEstado(requisicaoViagemDto.getIdSolicitacaoServico(), RequisicaoViagemDTO.REMARCADO); if(colIntegrantes != null && !colIntegrantes.isEmpty()){ for(IntegranteViagemDTO dto: colIntegrantes){ dto.setEstado(RequisicaoViagemDTO.AGUARDANDO_PLANEJAMENTO); integranteViagemDao.update(dto); } requisicaoViagemDto.setEstado(RequisicaoViagemDTO.EM_PLANEJAMENTO); requisicaoViagemDAO.updateNotNull(requisicaoViagemDto); colIntegrantesAux = integranteViagemService.recuperaIntegrantesViagemByIdSolicitacao(requisicaoViagemDto.getIdSolicitacaoServico()); if(colIntegrantesAux != null && !colIntegrantesAux.isEmpty()){ for(IntegranteViagemDTO dto: colIntegrantesAux){ if((dto.getEstado() != null && dto.getEstado().equalsIgnoreCase(RequisicaoViagemDTO.AGUARDANDO_ADIANTAMENTO))){ todosRemarcados = false; } } } if(todosRemarcados){ String motivo = "Todos integrantes foram remarcados"; if(colIntegrantesAux != null && !colIntegrantesAux.isEmpty()){ for(IntegranteViagemDTO dto: colIntegrantesAux){ if(dto.getIdTarefa() != null){ tarefaDto = this.recuperaTarefa(dto.getIdTarefa()); if(tarefaDto != null && !tarefaDto.getSituacao().equalsIgnoreCase("Executado")){ this.cancelaTarefa(null, solicitacaoDto, tarefaDto, motivo); break; } } } } } return true; }else{ return false; } } @SuppressWarnings({"unchecked"}) public void setaTarefaConferencia(Tarefa tarefa) throws Exception { PrestacaoContasViagemDao dao = new PrestacaoContasViagemDao(); setTransacaoDao(dao); List<PrestacaoContasViagemDTO> listaItens = (List<PrestacaoContasViagemDTO>) dao.findBySolicitacaoAndTaferaConferencia(getSolicitacaoServicoDto().getIdSolicitacaoServico()); IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); integranteViagemDao.setTransactionControler(getTransacao()); Integer idSolicitacao = getSolicitacaoServicoDto().getIdSolicitacaoServico(); Collection<IntegranteViagemDTO> colIntegrantes = integranteViagemDao.recuperaIntegrantesViagemByIdSolicitacaoEstado(idSolicitacao, RequisicaoViagemDTO.AGUARDANDO_CONFERENCIA); Collection<IntegranteViagemDTO> colIntegrantesAux = integranteViagemDao.recuperaIntegrantesViagemByIdSolicitacaoEstado(idSolicitacao, RequisicaoViagemDTO.EM_CONFERENCIA); if (listaItens != null) { PrestacaoContasViagemDTO prestacaoContas = listaItens.get(0); prestacaoContas.setIdItemTrabalho(tarefa.getIdItemTrabalho()); prestacaoContas.setSituacao(PrestacaoContasViagemDTO.EM_CONFERENCIA); dao.update(prestacaoContas); this.setaInicioTarefa(); } if(colIntegrantes != null && colIntegrantes.size() > 0){ for(IntegranteViagemDTO integranteViagemDTO: colIntegrantes){ if(integranteViagemDTO.getIdTarefa() == null || integranteViagemDTO.getIdTarefa().equals("")){ integranteViagemDTO.setIdTarefa(tarefa.getIdItemTrabalho()); integranteViagemDTO.setEstado(RequisicaoViagemDTO.EM_CONFERENCIA); integranteViagemDao.update(integranteViagemDTO); break; } } } if(colIntegrantesAux != null && colIntegrantesAux.size() > 0){ for(IntegranteViagemDTO integranteViagemDTO: colIntegrantesAux){ if(integranteViagemDTO.getIdTarefa() == null || integranteViagemDTO.getIdTarefa().equals("")){ integranteViagemDTO.setIdTarefa(tarefa.getIdItemTrabalho()); integranteViagemDTO.setEstado(RequisicaoViagemDTO.EM_CONFERENCIA); integranteViagemDao.update(integranteViagemDTO); break; } } } } public boolean alteraEstadoIntegrantes() throws Exception { RequisicaoViagemDTO requisicaoViagemDto = this.recuperaRequisicaoViagem(); RequisicaoViagemDAO requisicaoViagemDAO = new RequisicaoViagemDAO(); requisicaoViagemDAO.setTransactionControler(getTransacao()); IntegranteViagemDao integranteViagemDao = new IntegranteViagemDao(); integranteViagemDao.setTransactionControler(getTransacao()); Collection<IntegranteViagemDTO> colIntegrantes = integranteViagemDao.recuperaIntegrantesViagemByIdSolicitacaoEstado(requisicaoViagemDto.getIdSolicitacaoServico(), RequisicaoViagemDTO.AGUARDANDO_PLANEJAMENTO); if(colIntegrantes != null && colIntegrantes.size() > 0){ for(IntegranteViagemDTO integranteViagemDTO : colIntegrantes){ integranteViagemDTO.setEstado(RequisicaoViagemDTO.AGUARDANDO_APROVACAO); integranteViagemDao.updateNotNull(integranteViagemDTO); } } requisicaoViagemDto = (RequisicaoViagemDTO) requisicaoViagemDAO.restore(requisicaoViagemDto); requisicaoViagemDto.setEstado(RequisicaoViagemDTO.AGUARDANDO_APROVACAO); requisicaoViagemDAO.updateNotNull(requisicaoViagemDto); return true; } public void cancelaTarefasDuplicadas(Tarefa tarefa) throws Exception{ SolicitacaoServicoDTO solicitacaoDto = getSolicitacaoServicoDto(); Collection<TarefaFluxoDTO> colTarefas = new TarefaFluxoDao().findDisponiveisByIdTarefaEstado(solicitacaoDto.getIdSolicitacaoServico(), tarefa.getElementoFluxoDto().getNome()); String motivo = "cancela tarefa duplicada na mesma etapa"; if(colTarefas != null && !colTarefas.isEmpty()){ for(TarefaFluxoDTO tarefaDto: colTarefas){ if(tarefaDto != null && !tarefaDto.getIdItemTrabalho().equals(tarefa.getIdItemTrabalho())){ tarefaDto = this.recuperaTarefa(tarefaDto.getIdItemTrabalho()); this.cancelaTarefa(null, solicitacaoDto, tarefaDto, motivo); } } } } /** * Valida se alguma presta��o de contas aguarda confer�ncia * @return * @throws Exception */ public boolean isConferencia() throws Exception{ IntegranteViagemService integranteViagemService = (IntegranteViagemService) ServiceLocator.getInstance().getService(IntegranteViagemService.class, null); Collection<IntegranteViagemDTO> colIntegrantes = new ArrayList<IntegranteViagemDTO>(); RequisicaoViagemDTO requisicaoViagemDto = this.recuperaRequisicaoViagem(); colIntegrantes = integranteViagemService.recuperaIntegrantesViagemByIdSolicitacaoEstado(requisicaoViagemDto.getIdSolicitacaoServico(), RequisicaoViagemDTO.AGUARDANDO_CONFERENCIA); if(colIntegrantes != null && !colIntegrantes.isEmpty()){ return true; }else{ return false; } } }