package gcom.atendimentopublico.ligacaoesgoto; import gcom.atendimentopublico.bean.IntegracaoComercialHelper; import gcom.atendimentopublico.ordemservico.ControladorOrdemServicoLocal; import gcom.atendimentopublico.ordemservico.ControladorOrdemServicoLocalHome; import gcom.atendimentopublico.ordemservico.OrdemServico; import gcom.atendimentopublico.ordemservico.ServicoTipo; import gcom.cadastro.imovel.Imovel; import gcom.cadastro.sistemaparametro.FiltroSistemaParametro; import gcom.cadastro.sistemaparametro.SistemaParametro; import gcom.interceptor.RegistradorOperacao; import gcom.micromedicao.ControladorMicromedicaoLocal; import gcom.micromedicao.ControladorMicromedicaoLocalHome; import gcom.seguranca.acesso.Operacao; import gcom.seguranca.acesso.usuario.Usuario; import gcom.seguranca.acesso.usuario.UsuarioAcao; import gcom.seguranca.acesso.usuario.UsuarioAcaoUsuarioHelper; import gcom.seguranca.transacao.ControladorTransacaoLocal; import gcom.seguranca.transacao.ControladorTransacaoLocalHome; import gcom.util.ConstantesJNDI; import gcom.util.ConstantesSistema; import gcom.util.ControladorException; import gcom.util.ControladorUtilLocal; import gcom.util.ControladorUtilLocalHome; import gcom.util.ErroRepositorioException; import gcom.util.ServiceLocator; import gcom.util.ServiceLocatorException; import gcom.util.SistemaException; import gcom.util.Util; import gcom.util.filtro.ParametroSimples; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.Iterator; import javax.ejb.CreateException; import javax.ejb.SessionBean; import javax.ejb.SessionContext; /** * Defini��o da l�gica de neg�cio do Session Bean de ControladorLigacaoEsgoto * * @author Leonardo Regis * @date 08/09/2006 */ public class ControladorLigacaoEsgotoSEJB implements SessionBean { private static final long serialVersionUID = 1L; SessionContext sessionContext; private IRepositorioLigacaoEsgoto repositorioLigacaoEsgoto = null; /** * @exception CreateException */ public void ejbCreate() throws CreateException { repositorioLigacaoEsgoto = RepositorioLigacaoEsgotoHBM .getInstancia(); } /** */ public void ejbRemove() { } /** */ public void ejbActivate() { } /** */ public void ejbPassivate() { } /** * Seta o valor de sessionContext * * @param sessionContext * O novo valor de sessionContext */ public void setSessionContext(SessionContext sessionContext) { this.sessionContext = sessionContext; } /** * Retorna o valor de controladorUtil * * @return O valor de controladorUtil */ private ControladorUtilLocal getControladorUtil() { ControladorUtilLocalHome localHome = null; ControladorUtilLocal local = null; // pega a inst�ncia do ServiceLocator. ServiceLocator locator = null; try { locator = ServiceLocator.getInstancia(); localHome = (ControladorUtilLocalHome) locator .getLocalHome(ConstantesJNDI.CONTROLADOR_UTIL_SEJB); // guarda a referencia de um objeto capaz de fazer chamadas � // objetos remotamente local = localHome.create(); return local; } catch (CreateException e) { throw new SistemaException(e); } catch (ServiceLocatorException e) { throw new SistemaException(e); } } /** * Retorna o valor do ControladorMicromedicao * * @author Leonardo Regis * @date 22/09/2006 * * @return O valor de controladorMicromedicao */ private ControladorMicromedicaoLocal getControladorMicromedicao() { ControladorMicromedicaoLocalHome localHome = null; ControladorMicromedicaoLocal local = null; // pega a inst�ncia do ServiceLocator. ServiceLocator locator = null; try { locator = ServiceLocator.getInstancia(); localHome = (ControladorMicromedicaoLocalHome) locator .getLocalHomePorEmpresa(ConstantesJNDI.CONTROLADOR_MICROMEDICAO_SEJB); // guarda a referencia de um objeto capaz de fazer chamadas � // objetos remotamente local = localHome.create(); return local; } catch (CreateException e) { throw new SistemaException(e); } catch (ServiceLocatorException e) { throw new SistemaException(e); } } /** * Retorna o valor do ControladorMicromedicao * * @author Leonardo Regis * @date 22/09/2006 * * @return O valor de controladorMicromedicao */ private ControladorOrdemServicoLocal getControladorOrdemServico() { ControladorOrdemServicoLocalHome localHome = null; ControladorOrdemServicoLocal local = null; // pega a inst�ncia do ServiceLocator. ServiceLocator locator = null; try { locator = ServiceLocator.getInstancia(); localHome = (ControladorOrdemServicoLocalHome) locator .getLocalHome(ConstantesJNDI.CONTROLADOR_ORDEM_SERVICO_SEJB); // guarda a referencia de um objeto capaz de fazer chamadas � // objetos remotamente local = localHome.create(); return local; } catch (CreateException e) { throw new SistemaException(e); } catch (ServiceLocatorException e) { throw new SistemaException(e); } } /** * [UC0367]Atualizar Liga��o de Esgoto no sistema. * * [SB002] Atualiza liga��o de esgoto. * * @author Leonardo Regis * @date 17/07/2006 * * @param ligacaoEsgoto * @throws ControladorException */ public void atualizarLigacaoEsgoto(LigacaoEsgoto ligacaoEsgoto,Usuario usuario) throws ControladorException { this.verificarLigacaoEsgotoControleConcorrencia(ligacaoEsgoto); // ------------ REGISTRAR TRANSA��O ---------------- RegistradorOperacao registradorOperacao = new RegistradorOperacao( Operacao.OPERACAO_LIGACAO_ESGOTO_ATUALIZAR, ligacaoEsgoto.getId(),ligacaoEsgoto.getId(), new UsuarioAcaoUsuarioHelper(usuario, UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO)); registradorOperacao.registrarOperacao(ligacaoEsgoto); // ------------ REGISTRAR TRANSA��O ---------------- // Atualiza Liga��o de Esgoto getControladorUtil().atualizar(ligacaoEsgoto); } /** * Faz o controle de concorrencia de ligacao Esgoto * * @author Rafael Pinto * @throws ControladorException */ private void verificarLigacaoEsgotoControleConcorrencia(LigacaoEsgoto ligacaoEsgoto) throws ControladorException { FiltroLigacaoEsgoto filtroLigacaoEsgoto = new FiltroLigacaoEsgoto(); filtroLigacaoEsgoto.adicionarParametro(new ParametroSimples(FiltroLigacaoEsgoto.ID, ligacaoEsgoto.getId())); Collection colecaoLigacao = getControladorUtil().pesquisar(filtroLigacaoEsgoto, LigacaoEsgoto.class.getName()); if (colecaoLigacao == null || colecaoLigacao.isEmpty()) { sessionContext.setRollbackOnly(); throw new ControladorException("atencao.atualizacao.timestamp"); } LigacaoEsgoto ligacaoEsgotoAtualizado = (LigacaoEsgoto) Util.retonarObjetoDeColecao(colecaoLigacao); if (ligacaoEsgotoAtualizado.getUltimaAlteracao().after(ligacaoEsgoto.getUltimaAlteracao())) { sessionContext.setRollbackOnly(); throw new ControladorException("atencao.atualizacao.timestamp"); } } /** * * Este m�todo se destina a validar todas as situa��es e particularidades da * liga��o de esgoto do im�vel no momento da exibi��o. * * [FS0001] Verificar exist�ncia da matr�cula do im�vel. [FS0002] Verificar * Situa��o do Imovel. [FS0003] Validar Situa��o de Esgoto do im�vel. * * @author Leonardo Regis * @date 20/07/2006 * * @param ligacaoEsgoto */ public void validarLigacaoEsgotoImovelExibir(OrdemServico ordem, boolean veioEncerrarOS) throws ControladorException { //[FS0001] Validar Ordem de Servico //Caso 2 if(ordem.getServicoTipo().getId().intValue() != ServicoTipo.TIPO_LIGACAO_ESGOTO && ordem.getServicoTipo().getId().intValue() != ServicoTipo.TIPO_CONFIRMAR_DADOS_LIGACAO_ESGOTO ){ sessionContext.setRollbackOnly(); throw new ControladorException("atencao.servico_associado_atualizar_ligacao_esgoto_invalida"); } //Caso 3 this.getControladorOrdemServico().validaOrdemServicoAtualizacao(ordem, veioEncerrarOS); //Caso 4 if(ordem.getRegistroAtendimento().getImovel() == null ){ sessionContext.setRollbackOnly(); throw new ControladorException("atencao.ordem_servico_ra_imovel_invalida",null,""+ordem.getRegistroAtendimento().getId()); } // [FS0009] Validar Data do Encerramento da Ordem de Servico if(ordem.getServicoTipo().getId().intValue() == ServicoTipo.TIPO_LIGACAO_ESGOTO){ Date dataEncerramento = ordem.getDataEncerramento(); if(dataEncerramento != null){ int qtdDias = Util.obterQuantidadeDiasEntreDuasDatas(dataEncerramento,new Date()); FiltroSistemaParametro filtroSistemaParametro = new FiltroSistemaParametro(); Collection colecao = getControladorUtil().pesquisar(filtroSistemaParametro,SistemaParametro.class.getName()); if(colecao != null && !colecao.isEmpty()){ SistemaParametro sistemaParametro = (SistemaParametro) Util.retonarObjetoDeColecao(colecao); int qtdMaximo = sistemaParametro.getDiasMaximoAlterarOS().intValue(); if(qtdDias > qtdMaximo){ String[] msg = new String[2]; msg[0] = ""+ordem.getId(); msg[1] = ""+qtdMaximo; sessionContext.setRollbackOnly(); throw new ControladorException( "atencao.ligacao_esgoto_data_encerramento_os_invalida",null,msg); } } } } Imovel imovel = ordem.getRegistroAtendimento().getImovel(); // Verificar Liga��o de Esgoto do Imovel. if (imovel.getLigacaoEsgoto() == null) { sessionContext.setRollbackOnly(); throw new ControladorException("atencao.atualizar_ligacao_esgoto_inexistente", null, imovel.getId().toString()); } // [FS0002] Verificar Situa��o do Imovel. if (imovel.getIndicadorExclusao().intValue() != ConstantesSistema.INDICADOR_IMOVEL_ATIVO) { sessionContext.setRollbackOnly(); throw new ControladorException( "atencao.atualizar_situacao_imovel_indicador_exclusao_esgoto", null, imovel.getId().toString()); } // [FS003] Validar Situa��o de Esgoto do im�vel. if (imovel.getLigacaoEsgotoSituacao().getId().intValue() == LigacaoEsgotoSituacao.POTENCIAL .intValue() || imovel.getLigacaoEsgotoSituacao().getId().intValue() == LigacaoEsgotoSituacao.FACTIVEL .intValue()) { sessionContext.setRollbackOnly(); throw new ControladorException( "atencao.atualizar_situacao_ligacao_esgoto_invalida", null, imovel.getLigacaoEsgotoSituacao().getDescricao()); } // [FS0009] Validar Data do Encerramento da Ordem de Servico if (ordem.getServicoTipo().getId().intValue() == ServicoTipo.TIPO_CONFIRMAR_DADOS_LIGACAO_ESGOTO) { Date dataEncerramento = ordem.getDataEncerramento(); if (dataEncerramento != null) { int qtdDias = Util.obterQuantidadeDiasEntreDuasDatas( dataEncerramento, new Date()); FiltroSistemaParametro filtroSistemaParametro = new FiltroSistemaParametro(); Collection colecao = getControladorUtil().pesquisar( filtroSistemaParametro, SistemaParametro.class.getName()); if (colecao != null && !colecao.isEmpty()) { SistemaParametro sistemaParametro = (SistemaParametro) Util .retonarObjetoDeColecao(colecao); int qtdMaximo = sistemaParametro.getDiasMaximoAlterarOS() .intValue(); if (qtdDias > qtdMaximo) { sessionContext.setRollbackOnly(); throw new ControladorException( "atencao.instalacao_hidrometro_data_encerramento_os_invalida", null, new String[] { ordem.getId().toString(), qtdMaximo + "" }); } } } } } /** * * Este m�todo se destina a validar todas as situa��es e particularidades da * liga��o de esgoto do im�vel no momento da atualiza��o. * * [FS0006] Validar Percentual de Coleta. [FS0007] Validar Volume M�nimo * Fixado. * * @author Leonardo Regis * @date 20/07/2006 * * @param ligacaoEsgoto */ public void validarLigacaoEsgotoImovelAtualizar(Imovel imovel) throws ControladorException { // Valida��es da liga��o de esgoto if (imovel.getLigacaoEsgoto() != null) { // [FS0006] Validar Percentual de Coleta. if (imovel.getLigacaoEsgoto().getPercentualAguaConsumidaColetada() .intValue() > ConstantesSistema.NUMERO_MAXIMO_CONSUMO_MINIMO_FIXADO) { sessionContext.setRollbackOnly(); throw new ControladorException( "atencao.atualizar_percentual_informado_maior_maximo_permitido", null, ""); } } else { // Se entrar aqui significa que a base est� inconsistente. sessionContext.setRollbackOnly(); throw new ControladorException( "atencao.atualizar_ligacao_esgoto_invalida", null, imovel.getId().toString()); } } /** * [UC0464] Atualizar Volume M�nimo de Liga��o de Esgoto * * Este m�todo se destina a validar todas as situa��es e particularidades da * atualiza��o do volume m�nimo da liga��o de esgoto * * @author Leonardo Regis * @date 22/09/2006 * * @param OrdemServico * @param veioEncerrarOS * @throws ControladorException */ public void validarExibirAtualizarVolumeMinimoLigacaoEsgoto( OrdemServico ordemServico, boolean veioEncerrarOS) throws ControladorException { /* * Caso o SERVICO_TIPO da ordem de servi�o recebida esteja associado a opera��o * EFETUAR ATUALIZACAO VOLUME MINIMO LIGACAO ESGOTO, n�o ser� necess�rio realizar as valida��es abaixo. * * Autor: Raphael Rossiter * Data: 26/04/2007 * */ Integer idOperacao = this.getControladorOrdemServico() .pesquisarServicoTipoOperacao(ordemServico.getServicoTipo().getId()); if (idOperacao == null || idOperacao.intValue() != Operacao.OPERACAO_VOLUME_MINIMO_LIGACAO_ESGOTO_ATUALIZAR_INT){ //[FS0001] Validar Ordem de Servico //Caso 2 if(ordemServico.getServicoTipo().getId().intValue() != ServicoTipo.TIPO_CALCULAR_VOLUME_MINIMO_ESGOTO){ sessionContext.setRollbackOnly(); throw new ControladorException("atencao.atualizar_volume_minimo_ligacao_esgoto_servico"); } } /* * Valida��es j� contidas no m�todo anteriormente * Autor: Raphael Rossiter * Data: 26/04/2007 * * =============================================================================== */ //Caso 3 this.getControladorOrdemServico().validaOrdemServico(ordemServico, veioEncerrarOS); //Caso 4 if(ordemServico.getRegistroAtendimento().getImovel() == null ){ sessionContext.setRollbackOnly(); throw new ControladorException("atencao.ordem_servico_ra_imovel_invalida",null, ""+ordemServico.getRegistroAtendimento().getId()); } Imovel imovel = ordemServico.getRegistroAtendimento().getImovel(); // [FS0002] Verificar Situa��o do Imovel. if (imovel.getIndicadorExclusao() != null && imovel.getIndicadorExclusao().intValue() != ConstantesSistema.INDICADOR_IMOVEL_ATIVO) { sessionContext.setRollbackOnly(); throw new ControladorException( "atencao.atualizar_imovel_situacao_invalida", null, imovel.getId().toString()); } if(imovel.getLigacaoEsgoto() == null){ sessionContext.setRollbackOnly(); throw new ControladorException("atencao.naocadastrado",null, "Liga��o de Esgoto"); } /* * =================================================================================== */ } /** * [UC0464] Atualizar Volume M�nimo de Liga��o de Esgoto * * [FS004] Validar Volume M�nimo * * @author Leonardo Regis * @date 22/09/2006 * * @param imovel * @throws ControladorException */ public void validarVolumeMinimoLigacaoEsgoto(Imovel imovel) throws ControladorException { // Valida��es da liga��o de esgoto if (imovel.getLigacaoEsgoto() != null) { // [UC105] Obter Consumo M�nimo da Liga��o int volumeObtido = getControladorMicromedicao().obterConsumoMinimoLigacao(imovel, null); if (imovel.getLigacaoEsgoto().getConsumoMinimo().intValue() < volumeObtido){ sessionContext.setRollbackOnly(); throw new ControladorException("atencao.atualizar_situacao_volume_minimo_fixado_menor_minimo", null, volumeObtido+""); } } else { // Se entrar aqui significa que a base est� inconsistente. sessionContext.setRollbackOnly(); throw new ControladorException( "atencao.atualizar_volume_minimo_ligacao_esgoto_invalida", null, imovel.getId().toString()); } } /** * [UC0464] Atualizar Volume M�nimo da Liga��o de Esgoto * * [SB0001] Atualizar Liga��o de Esgoto. * * @author Leonardo Regis * @date 22/09/2006 * * @param ligacaoEsgoto * @throws ControladorException */ public void atualizarVolumeMinimoLigacaoEsgoto(IntegracaoComercialHelper integracaoComercialHelper) throws ControladorException { LigacaoEsgoto ligacaoEsgoto = integracaoComercialHelper.getLigacaoEsgoto(); ligacaoEsgoto.setUltimaAlteracao(new Date()); this.verificarLigacaoEsgotoControleConcorrencia(ligacaoEsgoto); /* * [UC0107] Registrar Transa��o * */ RegistradorOperacao registradorOperacao = new RegistradorOperacao( Operacao.OPERACAO_VOLUME_MINIMO_LIGACAO_ESGOTO_ATUALIZAR, ligacaoEsgoto.getId(), ligacaoEsgoto.getId(), new UsuarioAcaoUsuarioHelper(integracaoComercialHelper.getUsuarioLogado(), UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO)); registradorOperacao.registrarOperacao(ligacaoEsgoto); getControladorTransacao().registrarTransacao(ligacaoEsgoto); // [UC0107] -Fim- Registrar Transa��o try { // Atualizar Tabela Liga��o de Esgoto com novo valor de volume m�nimo repositorioLigacaoEsgoto.atualizarVolumeMinimoLigacaoEsgoto(ligacaoEsgoto); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); ex.printStackTrace(); throw new ControladorException("erro.sistema", ex); } } /** * [UC0488] Informar Retorno Ordem de Fiscaliza��o * * [SB0004] - Calcular Valor de �gua e/ou Esgoto * * * @author S�vio Luiz * @date 04/12/2006 * * @param idOS * @return OrdemServico * @throws ControladorException */ public BigDecimal recuperarPercentualEsgoto(Integer idLigacaoEsgoto) throws ControladorException { BigDecimal percentual = null; try { percentual = repositorioLigacaoEsgoto.recuperarPercentualEsgoto(idLigacaoEsgoto); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); ex.printStackTrace(); throw new ControladorException("erro.sistema", ex); } return percentual; } /** * [UC0349] Emitir Documento de Cobran�a - Ordem de Fiscaliza��o * * @author S�vio Luiz * @date 21/12/2006 * * @param idOS * @return OrdemServico * @throws ControladorException */ public Integer recuperarConsumoMinimoEsgoto(Integer idImovel) throws ControladorException { Integer consumoMinimo = null; try { consumoMinimo = repositorioLigacaoEsgoto.recuperarConsumoMinimoEsgoto(idImovel); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); ex.printStackTrace(); throw new ControladorException("erro.sistema", ex); } return consumoMinimo; } private ControladorTransacaoLocal getControladorTransacao() { ControladorTransacaoLocalHome localHome = null; ControladorTransacaoLocal local = null; // pega a inst�ncia do ServiceLocator. ServiceLocator locator = null; try { locator = ServiceLocator.getInstancia(); localHome = (ControladorTransacaoLocalHome) locator .getLocalHome(ConstantesJNDI.CONTROLADOR_TRANSACAO_SEJB); // guarda a referencia de um objeto capaz de fazer chamadas // objetos remotamente local = localHome.create(); return local; } catch (CreateException e) { throw new SistemaException(e); } catch (ServiceLocatorException e) { throw new SistemaException(e); } } /** * [UC0113] - Faturar Grupo de Faturamento * * [SB0001 - Determinar Faturamento para o Im�vel] * * @author Raphael Rossiter * @date 04/06/2008 * * @param idLigacaoEsgotoSituacao * @param idConsumoTipo * @return LigacaoEsgotoSituacaoConsumoTipo * @throws ControladorException */ public LigacaoEsgotoSituacaoConsumoTipo pesquisarLigacaoEsgotoSituacaoConsumoTipo(Integer idLigacaoEsgotoSituacao, Integer idConsumoTipo) throws ControladorException{ try { return repositorioLigacaoEsgoto.pesquisarLigacaoEsgotoSituacaoConsumoTipo( idLigacaoEsgotoSituacao, idConsumoTipo); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); ex.printStackTrace(); throw new ControladorException("erro.sistema", ex); } } /** * * * @autor: Wellington Rocha * @date: 21/03/2012 * * Pesquisar Situa��es de Liga��o de Esgoto ativas. * * Gera��o de rotas para recadastramento * * @return Collection * @throws ControladorException * */ public Collection<LigacaoEsgotoSituacao> pesquisarLigacaoEsgotoSituacao() throws ControladorException { try { Collection<LigacaoEsgotoSituacao> colecaoLigacaoEsgotoSituacao = new ArrayList<LigacaoEsgotoSituacao>(); Collection colecao = repositorioLigacaoEsgoto.pesquisarLigacaoEsgotoSituacao(); if (colecao != null && !colecao.isEmpty()) { Iterator colecaoIterator = colecao.iterator(); while (colecaoIterator.hasNext()) { LigacaoEsgotoSituacao ligacaoEsgotoSituacao = (LigacaoEsgotoSituacao) colecaoIterator .next(); colecaoLigacaoEsgotoSituacao.add(ligacaoEsgotoSituacao); } } return colecaoLigacaoEsgotoSituacao; } catch (ErroRepositorioException e) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", e); } } }