package gcom.faturamento.conta; import gcom.atendimentopublico.ligacaoagua.LigacaoAguaSituacao; import gcom.atendimentopublico.ligacaoesgoto.LigacaoEsgotoSituacao; import gcom.cadastro.imovel.ControladorImovelLocal; import gcom.cadastro.imovel.ControladorImovelLocalHome; import gcom.cadastro.sistemaparametro.SistemaParametro; import gcom.faturamento.ControladorFaturamentoLocal; import gcom.faturamento.ControladorFaturamentoLocalHome; import gcom.faturamento.IRepositorioFaturamento; import gcom.faturamento.bean.CalcularValoresAguaEsgotoHelper; import gcom.faturamento.controladores.ControladorRetificarContaLocal; import gcom.faturamento.controladores.ControladorRetificarContaLocalHome; import gcom.seguranca.acesso.usuario.Usuario; import gcom.util.ConstantesJNDI; import gcom.util.ConstantesSistema; import gcom.util.ControladorException; import gcom.util.ServiceLocator; import gcom.util.ServiceLocatorException; import gcom.util.SistemaException; import gcom.util.Util; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.Iterator; import javax.ejb.CreateException; import javax.ejb.SessionContext; /** * Esta classe tem como finalidade encapsular o caso de uso [UC0146] - Manter Conta, gerando * maior facilidade na manuten��o do mesmo. * * @author Raphael Rossiter * @date 04/11/2008 */ public class UC0146ManterConta { private static UC0146ManterConta instancia; @SuppressWarnings("unused") private IRepositorioFaturamento repositorioFaturamento; @SuppressWarnings("unused") private SessionContext sessionContext; private UC0146ManterConta(IRepositorioFaturamento repositorioFaturamento, SessionContext sessionContext) { this.repositorioFaturamento = repositorioFaturamento; this.sessionContext = sessionContext; } public static UC0146ManterConta getInstancia(IRepositorioFaturamento repositorioFaturamento, SessionContext sessionContext) { if (instancia == null) { instancia = new UC0146ManterConta(repositorioFaturamento, sessionContext); } return instancia; } /** * Controlador Imovel * * @author Raphael Rossiter * @date 30/04/2008 * * @return ControladorImovelLocal */ protected ControladorImovelLocal getControladorImovel() { ControladorImovelLocalHome localHome = null; ControladorImovelLocal local = null; ServiceLocator locator = null; try { locator = ServiceLocator.getInstancia(); localHome = (ControladorImovelLocalHome) locator .getLocalHome(ConstantesJNDI.CONTROLADOR_IMOVEL_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); } } /** * Controlador Faturamento * * @author Raphael Rossiter * @date 30/04/2008 * * @return ControladorFaturamentoLocal */ private ControladorFaturamentoLocal getControladorFaturamento() { ControladorFaturamentoLocalHome localHome = null; ControladorFaturamentoLocal local = null; ServiceLocator locator = null; try { locator = ServiceLocator.getInstancia(); localHome = (ControladorFaturamentoLocalHome) locator .getLocalHomePorEmpresa(ConstantesJNDI.CONTROLADOR_FATURAMENTO_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); } } private ControladorRetificarContaLocal getControladorRetificarConta() { ControladorRetificarContaLocalHome localHome = null; ControladorRetificarContaLocal local = null; ServiceLocator locator = null; try { locator = ServiceLocator.getInstancia(); localHome = (ControladorRetificarContaLocalHome) locator.getLocalHome(ConstantesJNDI.CONTROLADOR_RETIFICAR_CONTA); // 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); } } /** * [UC0146] - Manter Conta * * Retificar Conjunto de Conta * * @author Raphael Rossiter * @date 04/11/2008 * * @param colecaoContas * @param identificadores * @param sistemaParametro * @param usuarioLogado * @return Collection * @throws ControladorException */ public Collection gerarColecaoContaSelecaoParaRetificacao(Collection<Conta> colecaoContas, String identificadores, SistemaParametro sistemaParametro, Usuario usuarioLogado) throws ControladorException { Collection<Conta> colecaoContasSelecionadas = new ArrayList(); Conta contaColecao; //Verifica se houve sele��o de contas String[] arrayIdentificadores = null; if (identificadores != null) { arrayIdentificadores = identificadores.split(","); } Iterator colecaoContasIt = colecaoContas.iterator(); while (colecaoContasIt.hasNext()) { contaColecao = (Conta) colecaoContasIt.next(); if (identificadores != null) { for (int index = 0; index < arrayIdentificadores.length; index++) { String dadosConta = arrayIdentificadores[index]; String[] idUltimaAlteracao = dadosConta.split("-"); // Contas que sofrer�o altera��o na sua data de vencimento if (contaColecao.getId().equals(new Integer(idUltimaAlteracao[0]))) { if (sistemaParametro.getIndicadorLimiteAlteracaoVencimento().equals(ConstantesSistema.SIM)) { //[FS0023] - Verificar Limite de Altera��o de vencimento. this.getControladorFaturamento().verificarQuantidadeAlteracoesVencimentoConta(contaColecao.getId()); } colecaoContasSelecionadas.add(contaColecao); } } } else { colecaoContasSelecionadas.add(contaColecao); } } return colecaoContasSelecionadas; } /* * Comentado por: Hugo Leonardo * Data: 11/08/2010 * Analista: Aryed Lins * * * [UC0146] - Manter Conta * * [FS0023] - Verificar Limite de Altera��o de vencimento. * * @author Raphael Rossiter * @date 04/11/2008 * * @param conta * @param sistemaParametro * @param usuarioLogado * @throws ControladorException public void verificarLimiteAlteracaoVencimento(Conta conta, SistemaParametro sistemaParametro, Usuario usuarioLogado) throws ControladorException { //------------------------------------------------------------------------------------------- // Alterado por : Yara Taciane - data : 17/07/2008 // Analista : Denys Guimar�es //------------------------------------------------------------------------------------------- // [FS0023] - Verificar Limite de Altera��o de vencimento. if (sistemaParametro.getIndicadorLimiteAlteracaoVencimento().equals(ConstantesSistema.SIM)) { boolean temPermissaoParaAlterarVencimentoJaAlterado = getControladorPermissaoEspecial().verificarPermissaoEspecial( PermissaoEspecial.ALTERAR_VENCIMENTO_JA_ALTERADO,usuarioLogado); Integer idConta = conta.getId(); Integer idImovel = conta.getImovel().getId(); // Verifica se existe algum registro de altera��o de vencimento para esse imovel e essa conta. Integer qtdOperacaoEfetuadaAltVencConta = getControladorTransacao() .pesquisarOperacaoEfetuada(Operacao.OPERACAO_ALTERAR_VENCIMENTO_CONTA,idImovel,idConta); if(qtdOperacaoEfetuadaAltVencConta > 0) { // Altera��o de Vencimento. if (temPermissaoParaAlterarVencimentoJaAlterado == false) { throw new ControladorException("atencao.necessario_permissao_especial_para_novo_vencimento",null); } } // Verifica se existe algum registro de retifica��o de conta para esse imovel e essa conta. Integer qtdOperacaoEfetuadaRetifConta = getControladorTransacao() .pesquisarOperacaoEfetuada(Operacao.OPERACAO_CONTA_RETIFICAR,idImovel,idConta); if(qtdOperacaoEfetuadaRetifConta > 0 ){ Integer qtdTabelaLinhaColunaAlteracao = getControladorTransacao() .pesquisarTabelaLinhaColunaAlteracao(idConta, TabelaColuna.DATA_VENCIMENTO_CONTA); if(qtdTabelaLinhaColunaAlteracao > 0 && temPermissaoParaAlterarVencimentoJaAlterado == false){ throw new ControladorException("atencao.necessario_permissao_especial_para_novo_vencimento",null); } } } } */ /** * Retificar Conjunto de Conta * * @author Raphael Rossiter * @date 21/08/2007 * * @throws ControladorException */ public void retificarConjuntoConta(Collection<Conta> colecaoContas, LigacaoAguaSituacao ligacaoAguaSituacao, Integer consumoAgua, LigacaoEsgotoSituacao ligacaoEsgotoSituacao, Integer consumoEsgoto, Date dataVencimento, ContaMotivoRetificacao contaMotivoRetificacao, Short indicadorCategoriaEconomiaConta, SistemaParametro sistemaParametro, Usuario usuarioLogado) throws ControladorException { if (colecaoContas != null && !colecaoContas.isEmpty()) { Iterator colecaoContasIterator = colecaoContas.iterator(); while (colecaoContasIterator.hasNext()) { Conta conta = (Conta) colecaoContasIterator.next(); Collection colecaoCategoriaOUSubcategoria = null; if (sistemaParametro.getIndicadorTarifaCategoria().equals(SistemaParametro.INDICADOR_TARIFA_SUBCATEGORIA)){ if (indicadorCategoriaEconomiaConta.equals(ConstantesSistema.SIM)) { // [UC0108] - Quantidade de economias por categoria colecaoCategoriaOUSubcategoria = this.getControladorImovel() .obterQuantidadeEconomiasContaCategoriaPorSubcategoria(conta); } else { colecaoCategoriaOUSubcategoria = this.getControladorImovel().obterQuantidadeEconomiasSubCategoria(conta.getImovel().getId()); } } else{ if (indicadorCategoriaEconomiaConta.equals(ConstantesSistema.SIM)) { // [UC0108] - Quantidade de economias por categoria colecaoCategoriaOUSubcategoria = this.getControladorImovel().obterQuantidadeEconomiasContaCategoria(conta); } else { colecaoCategoriaOUSubcategoria = this.getControladorImovel().obterQuantidadeEconomiasCategoria(conta.getImovel()); } } Collection colecaoCreditoRealizado = this.getControladorFaturamento().obterCreditosRealizadosConta(conta); Collection colecaoDebitoCobrado = this.getControladorFaturamento().obterDebitosCobradosConta(conta); //[UC0120] - Calcular Valores de �gua e/ou Esgoto Collection<CalcularValoresAguaEsgotoHelper> valoresConta = this.getControladorFaturamento().calcularValoresConta( Util.formatarAnoMesParaMesAno(conta.getReferencia()), conta.getImovel().getId().toString(), ligacaoAguaSituacao.getId(), ligacaoEsgotoSituacao.getId(), colecaoCategoriaOUSubcategoria, consumoAgua.toString(), consumoEsgoto.toString(), conta.getPercentualEsgoto().toString(), conta .getConsumoTarifa().getId(), usuarioLogado); //[UC0150] - Retificar Conta Conta contaParaRetificacao = this.getControladorRetificarConta().pesquisarContaRetificacao(conta.getId()); this.getControladorRetificarConta().retificarConta( contaParaRetificacao.getReferencia(), contaParaRetificacao, contaParaRetificacao.getImovel(), colecaoDebitoCobrado, colecaoCreditoRealizado, ligacaoAguaSituacao, ligacaoEsgotoSituacao, colecaoCategoriaOUSubcategoria, consumoAgua.toString(), consumoEsgoto.toString(), contaParaRetificacao.getPercentualEsgoto().toString(), dataVencimento, valoresConta, contaMotivoRetificacao, null, usuarioLogado, contaParaRetificacao.getConsumoTarifa().getId().toString(), false,null,null,false, null,null,null,null,null, null); } } } }