package gcom.relatorio.cobranca.cobrancaporresultado; import gcom.batch.Relatorio; import gcom.cadastro.imovel.Imovel; import gcom.cadastro.imovel.ImovelPerfil; import gcom.cadastro.sistemaparametro.FiltroSistemaParametro; import gcom.cadastro.sistemaparametro.SistemaParametro; import gcom.cobranca.CobrancaDocumento; import gcom.cobranca.ResolucaoDiretoria; import gcom.cobranca.bean.ContaValoresHelper; import gcom.cobranca.bean.DebitoCreditoParcelamentoHelper; import gcom.cobranca.bean.GuiaPagamentoValoresHelper; import gcom.cobranca.bean.IndicadoresParcelamentoHelper; import gcom.cobranca.bean.NegociacaoOpcoesParcelamentoHelper; import gcom.cobranca.bean.ObterDebitoImovelOuClienteHelper; import gcom.cobranca.bean.ObterOpcoesDeParcelamentoHelper; import gcom.cobranca.parcelamento.Parcelamento; import gcom.fachada.Fachada; import gcom.faturamento.credito.CreditoARealizar; import gcom.faturamento.debito.DebitoACobrar; import gcom.financeiro.FinanciamentoTipo; import gcom.relatorio.ConstantesRelatorios; import gcom.relatorio.RelatorioDataSource; import gcom.relatorio.cobranca.parcelamento.ExtratoDebitoRelatorioHelper; import gcom.seguranca.acesso.usuario.Usuario; import gcom.tarefa.TarefaException; import gcom.tarefa.TarefaRelatorio; import gcom.util.ControladorException; import gcom.util.Util; import gcom.util.agendadortarefas.AgendadorTarefas; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; public class RelatorioDocumentoVisitaCobranca extends TarefaRelatorio { private static final long serialVersionUID = 1L; public RelatorioDocumentoVisitaCobranca(Usuario usuario) { super(usuario, ConstantesRelatorios.RELATORIO_DOCUMENTO_VISITA_COBRANCA); } @Deprecated public RelatorioDocumentoVisitaCobranca() { super(null, ""); } public Object executar() throws TarefaException { // ------------------------------------ Integer idFuncionalidadeIniciada = this.getIdFuncionalidadeIniciada(); // ------------------------------------ Collection<Integer[]> idsImovel = (Collection<Integer[]>) getParametro("idsImovel"); int tipoFormatoRelatorio = (Integer) getParametro("tipoFormatoRelatorio"); // valor de retorno byte[] retorno = null; Fachada fachada = Fachada.getInstancia(); // Par�metros do relat�rio Map parametros = new HashMap(); // adiciona os par�metros do relat�rio // adiciona o laudo da an�lise FiltroSistemaParametro filtroSistemaParametro = new FiltroSistemaParametro(); filtroSistemaParametro.adicionarCaminhoParaCarregamentoEntidade("bairro"); filtroSistemaParametro.adicionarCaminhoParaCarregamentoEntidade("enderecoReferencia"); filtroSistemaParametro.adicionarCaminhoParaCarregamentoEntidade("logradouroBairro"); filtroSistemaParametro.adicionarCaminhoParaCarregamentoEntidade("logradouroCep"); filtroSistemaParametro.adicionarCaminhoParaCarregamentoEntidade("logradouroCep.logradouro.logradouroTipo"); filtroSistemaParametro.adicionarCaminhoParaCarregamentoEntidade("logradouroCep.logradouro.logradouroTitulo"); filtroSistemaParametro.adicionarCaminhoParaCarregamentoEntidade("logradouroCep.cep"); filtroSistemaParametro.adicionarCaminhoParaCarregamentoEntidade("logradouroBairro.bairro.municipio.unidadeFederacao"); filtroSistemaParametro.adicionarCaminhoParaCarregamentoEntidade("cep"); Collection colecaoSistemaParametro = fachada.pesquisar(filtroSistemaParametro,SistemaParametro.class.getName()); SistemaParametro sistemaParametro = (SistemaParametro) colecaoSistemaParametro.iterator().next(); String nomeEmpresa = sistemaParametro.getNomeEmpresa(); String nomeAbreviadoEmpresa = sistemaParametro.getNomeAbreviadoEmpresa(); String cnpjEmpresa = Util.formatarCnpj(sistemaParametro.getCnpjEmpresa()); String numeroAtendimento = sistemaParametro.getNumero0800Empresa(); parametros.put("imagem", sistemaParametro.getImagemRelatorio()); parametros.put("nomeEmpresa", nomeEmpresa); parametros.put("nomeAbreviadoEmpresa", nomeAbreviadoEmpresa); parametros.put("cnpjEmpresa", cnpjEmpresa); parametros.put("numeroAtendimento", numeroAtendimento); parametros.put("dataCorrente", Util.formatarData(new Date())); if (sistemaParametro.getNomeAbreviadoEmpresa().equalsIgnoreCase( SistemaParametro.EMPRESA_CAERN)){ parametros.put("agenciaCodigoCedente", "3795-8/9121-9"); } else if (sistemaParametro.getNomeAbreviadoEmpresa().equalsIgnoreCase( SistemaParametro.EMPRESA_COMPESA)){ parametros.put("agenciaCodigoCedente", "3234-4/2868-1"); } parametros.put("acaoCobranca", "VISITA DE COBRAN�A"); List relatorioBeans = (List) this.gerarExtratoDebito(idsImovel, this.getUsuario()); RelatorioDataSource ds = new RelatorioDataSource(relatorioBeans); retorno = gerarRelatorio(ConstantesRelatorios.RELATORIO_DOCUMENTO_VISITA_COBRANCA, parametros, ds, tipoFormatoRelatorio); // ------------------------------------ // Grava o relat�rio no sistema try { persistirRelatorioConcluido(retorno, Relatorio.RELATORIO_DOCUMENTO_VISITA_COBRANCA, idFuncionalidadeIniciada); } catch (ControladorException e) { e.printStackTrace(); throw new TarefaException("Erro ao gravar relat�rio no sistema", e); } // ------------------------------------ // retorna o relat�rio gerado return retorno; } public List gerarExtratoDebito(Collection<Integer[]> idsImovel, Usuario usuarioLogado){ SistemaParametro sistemaParametro = Fachada.getInstancia().pesquisarParametrosDoSistema(); Collection<CobrancaDocumento> colecaoDocumentoCobranca = new ArrayList(); Iterator iterator = idsImovel.iterator(); while(iterator.hasNext()) { Object[] ids = (Object[]) iterator.next(); Integer idOrdemServico = (Integer) ids[0]; Integer idImovel = (Integer) ids[1]; Imovel imovel = Fachada.getInstancia().pesquisarImovel(idImovel); //Short indicadorGeracaoTaxaCobranca = new Short("2") ; // no caso do parcelamento sempre 2 // seta valores constantes para chamar o metodo que consulta debitos do // imovel Integer tipoImovel = new Integer(1); Integer indicadorPagamento = new Integer(1); Integer indicadorConta = new Integer(1); Integer indicadorDebito = new Integer(1); Integer indicadorCredito = new Integer(1); Integer indicadorNotas = new Integer(1); Integer indicadorGuias = new Integer(1); Integer indicadorAtualizar = new Integer(1); Short tipoRelacao = null; // Para auxiliar na formata��o de uma data SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy"); String referenciaInicial = "01/0001"; String referenciaFinal = "12/9999"; String mesInicial = referenciaInicial.substring(0, 2); String anoInicial = referenciaInicial.substring(3, referenciaInicial.length()); String anoMesInicial = anoInicial + mesInicial; String mesFinal = referenciaFinal.substring(0, 2); String anoFinal = referenciaFinal .substring(3, referenciaFinal.length()); String anoMesFinal = anoFinal + mesFinal; String dataVencimentoInicial = "01/01/0001"; String dataVencimentoFinal = "31/12/9999"; Date dataVencimentoDebitoI; Date dataVencimentoDebitoF; try { dataVencimentoDebitoI = formatoData.parse(dataVencimentoInicial); } catch (ParseException ex) { dataVencimentoDebitoI = null; } try { dataVencimentoDebitoF = formatoData.parse(dataVencimentoFinal); } catch (ParseException ex) { dataVencimentoDebitoF = null; } // Obtendo os d�bitos do imovel ObterDebitoImovelOuClienteHelper colecaoDebitoImovel = Fachada.getInstancia() .obterDebitoImovelOuCliente(tipoImovel.intValue(), imovel.getId().toString(), null, tipoRelacao, anoMesInicial, anoMesFinal, dataVencimentoDebitoI, dataVencimentoDebitoF, indicadorPagamento.intValue(), indicadorConta.intValue(), indicadorDebito.intValue(), indicadorCredito.intValue(), indicadorNotas.intValue(), indicadorGuias.intValue(), indicadorAtualizar .intValue(), null); Collection<ContaValoresHelper> colecaoContaValores = colecaoDebitoImovel .getColecaoContasValores(); ContaValoresHelper dadosConta = null; BigDecimal valorConta = new BigDecimal("0.00"); BigDecimal valorAcrescimo = new BigDecimal("0.00"); BigDecimal valorAgua = new BigDecimal("0.00"); BigDecimal valorEsgoto = new BigDecimal("0.00"); BigDecimal valorDebito = new BigDecimal("0.00"); BigDecimal valorCredito = new BigDecimal("0.00"); BigDecimal valorImposto = new BigDecimal("0.00"); BigDecimal valorAtualizacaoMonetaria = new BigDecimal("0.00"); BigDecimal valorJurosMora = new BigDecimal("0.00"); BigDecimal valorMulta = new BigDecimal("0.00"); if (colecaoContaValores != null && !colecaoContaValores.isEmpty()) { java.util.Iterator<ContaValoresHelper> colecaoContaValoresIterator = colecaoContaValores.iterator(); // percorre a colecao de conta somando o valor para obter um valor total while (colecaoContaValoresIterator.hasNext()) { dadosConta = (ContaValoresHelper) colecaoContaValoresIterator.next(); valorConta = valorConta.add(dadosConta.getConta().getValorTotal()); valorAcrescimo = valorAcrescimo.add(dadosConta.getValorTotalContaValores()); valorAgua = valorAgua.add(dadosConta.getConta().getValorAgua()); valorEsgoto = valorEsgoto.add(dadosConta.getConta().getValorEsgoto()); valorDebito = valorDebito.add(dadosConta.getConta().getDebitos()); valorCredito = valorCredito.add(dadosConta.getConta().getValorCreditos()); valorImposto = valorImposto.add(dadosConta.getConta().getValorImposto()); if (dadosConta.getValorAtualizacaoMonetaria() != null && !dadosConta.getValorAtualizacaoMonetaria().equals("")) { valorAtualizacaoMonetaria.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO); valorAtualizacaoMonetaria = valorAtualizacaoMonetaria.add(dadosConta.getValorAtualizacaoMonetaria().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO)); } if (dadosConta.getValorJurosMora() != null && !dadosConta.getValorJurosMora().equals("")) { valorJurosMora.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO); valorJurosMora = valorJurosMora.add(dadosConta.getValorJurosMora().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO)); } if (dadosConta.getValorMulta() != null && !dadosConta.getValorMulta().equals("")) { valorMulta.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO); valorMulta = valorMulta.add(dadosConta.getValorMulta().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO)); } } } Collection<DebitoACobrar> colecaoDebitoACobrar = colecaoDebitoImovel.getColecaoDebitoACobrar(); BigDecimal valorDebitoACobrar = new BigDecimal("0.00"); DebitoACobrar dadosDebito = null; BigDecimal valorRestanteACobrar = new BigDecimal("0.00"); BigDecimal valorTotalRestanteParcelamentosACobrarCurtoPrazo = new BigDecimal("0.00"); BigDecimal valorTotalRestanteParcelamentosACobrarLongoPrazo = new BigDecimal("0.00"); BigDecimal valorTotalRestanteParcelamentosACobrar = new BigDecimal("0.00"); int indiceCurtoPrazo = 0; int indiceLongoPrazo = 1; if (colecaoDebitoACobrar != null && !colecaoDebitoACobrar.isEmpty()) { java.util.Iterator<DebitoACobrar> colecaoDebitoACobrarIterator = colecaoDebitoACobrar.iterator(); // percorre a colecao de debito a cobrar somando o valor para obter um valor total while (colecaoDebitoACobrarIterator.hasNext()) { dadosDebito = (DebitoACobrar) colecaoDebitoACobrarIterator.next(); valorDebitoACobrar = valorDebitoACobrar.add(dadosDebito.getValorTotalComBonus()); //Debitos A Cobrar - Parcelamento if (dadosDebito.getFinanciamentoTipo().getId().equals(FinanciamentoTipo.PARCELAMENTO_AGUA) || dadosDebito.getFinanciamentoTipo().getId().equals(FinanciamentoTipo.PARCELAMENTO_ESGOTO) || dadosDebito.getFinanciamentoTipo().getId().equals(FinanciamentoTipo.PARCELAMENTO_SERVICO)) { // [SB0001] Obter Valores de Curto e Longo Prazo valorRestanteACobrar = dadosDebito.getValorTotalComBonus(); BigDecimal[] valoresDeCurtoELongoPrazo = Fachada.getInstancia().obterValorCurtoELongoPrazo( dadosDebito.getNumeroPrestacaoDebito(), dadosDebito.getNumeroPrestacaoCobradasMaisBonus(), valorRestanteACobrar); valorTotalRestanteParcelamentosACobrarCurtoPrazo.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO); valorTotalRestanteParcelamentosACobrarCurtoPrazo = valorTotalRestanteParcelamentosACobrarCurtoPrazo.add(valoresDeCurtoELongoPrazo[indiceCurtoPrazo]); valorTotalRestanteParcelamentosACobrarLongoPrazo.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO); valorTotalRestanteParcelamentosACobrarLongoPrazo = valorTotalRestanteParcelamentosACobrarLongoPrazo.add(valoresDeCurtoELongoPrazo[indiceLongoPrazo]); } } valorTotalRestanteParcelamentosACobrar = valorTotalRestanteParcelamentosACobrarCurtoPrazo.add(valorTotalRestanteParcelamentosACobrarLongoPrazo); } Collection<CreditoARealizar> colecaoCreditoARealizar = colecaoDebitoImovel.getColecaoCreditoARealizar(); BigDecimal valorCreditoARealizar = new BigDecimal("0.00"); CreditoARealizar dadosCredito = null; if (colecaoCreditoARealizar != null && !colecaoCreditoARealizar.isEmpty()) { java.util.Iterator<CreditoARealizar> colecaoCreditoARealizarIterator = colecaoCreditoARealizar.iterator(); // percorre a colecao de credito a realizar somando o valor para obter um valor total while (colecaoCreditoARealizarIterator.hasNext()) { dadosCredito = (CreditoARealizar) colecaoCreditoARealizarIterator.next(); valorCreditoARealizar = valorCreditoARealizar.add(dadosCredito.getValorTotalComBonus()); } } Collection<GuiaPagamentoValoresHelper> colecaoGuiaPagamentoValores = colecaoDebitoImovel .getColecaoGuiasPagamentoValores(); BigDecimal valorGuiaPagamento = new BigDecimal("0.00"); GuiaPagamentoValoresHelper dadosGuiaPagamentoValoresHelper = null; if (colecaoGuiaPagamentoValores != null && !colecaoGuiaPagamentoValores.isEmpty()) { java.util.Iterator<GuiaPagamentoValoresHelper> colecaoGuiaPagamentoValoresHelperIterator = colecaoGuiaPagamentoValores .iterator(); // percorre a colecao de guia de pagamento somando o valor para // obter um valor total while (colecaoGuiaPagamentoValoresHelperIterator.hasNext()) { dadosGuiaPagamentoValoresHelper = (GuiaPagamentoValoresHelper) colecaoGuiaPagamentoValoresHelperIterator.next(); valorGuiaPagamento = valorGuiaPagamento .add(dadosGuiaPagamentoValoresHelper.getGuiaPagamento().getValorDebito()); if (dadosGuiaPagamentoValoresHelper.getValorAtualizacaoMonetaria() != null && !dadosGuiaPagamentoValoresHelper.getValorAtualizacaoMonetaria().equals("")) { valorAtualizacaoMonetaria.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO); valorAtualizacaoMonetaria = valorAtualizacaoMonetaria.add(dadosGuiaPagamentoValoresHelper.getValorAtualizacaoMonetaria().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO)); } if (dadosGuiaPagamentoValoresHelper.getValorJurosMora() != null && !dadosGuiaPagamentoValoresHelper.getValorJurosMora().equals("")) { valorJurosMora.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO); valorJurosMora = valorJurosMora.add(dadosGuiaPagamentoValoresHelper.getValorJurosMora().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO)); } if (dadosGuiaPagamentoValoresHelper.getValorMulta() != null && !dadosGuiaPagamentoValoresHelper.getValorMulta().equals("")) { valorMulta.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO); valorMulta = valorMulta.add(dadosGuiaPagamentoValoresHelper.getValorMulta().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO)); } } } // Soma o valor total dos debitos e subtrai dos creditos BigDecimal valorTotalSemAcrescimo = valorConta.add(valorDebitoACobrar); valorTotalSemAcrescimo = valorTotalSemAcrescimo.add(valorGuiaPagamento); valorTotalSemAcrescimo = valorTotalSemAcrescimo.subtract(valorCreditoARealizar); BigDecimal valorTotalComAcrescimo = valorTotalSemAcrescimo.add(valorAcrescimo); IndicadoresParcelamentoHelper indicadoresParcelamentoHelper = new IndicadoresParcelamentoHelper(); indicadoresParcelamentoHelper.setIndicadorDebitosACobrar(new Integer("1")); indicadoresParcelamentoHelper.setIndicadorCreditoARealizar(new Integer("1")); indicadoresParcelamentoHelper.setIndicadorGuiasPagamento(new Integer("1")); indicadoresParcelamentoHelper.setIndicadorAcrescimosImpotualidade(new Integer("1")); indicadoresParcelamentoHelper.setIndicadorContasRevisao(new Integer("1")); indicadoresParcelamentoHelper.setIndicadorDividaAtiva(new Integer("3")); BigDecimal valorTotalDescontoPagamentoAVista = null; BigDecimal valorPagamentoAVista = null; if(sistemaParametro.getResolucaoDiretoria() != null){ ImovelPerfil imovelPerfil = Fachada.getInstancia().obterImovelPerfil(new Integer(imovel.getId())); Short numeroReparcelamentoConsecutivos = Fachada.getInstancia().consultarNumeroReparcelamentoConsecutivosImovel(imovel.getId()); if(numeroReparcelamentoConsecutivos == null){ numeroReparcelamentoConsecutivos = new Short("0"); } //CARREGANDO O HELPER COM AS INFORMA��ES DO PARCELAMENTO ObterOpcoesDeParcelamentoHelper helper = new ObterOpcoesDeParcelamentoHelper( sistemaParametro.getResolucaoDiretoria().getId(), imovel.getId(), new BigDecimal("0.00"), new Integer("3"), new Integer("1"), imovelPerfil.getId(), "01/0001", new Integer("2"),//indicador de restabelecimento colecaoContaValores, valorTotalComAcrescimo, valorMulta, valorJurosMora, valorAtualizacaoMonetaria, new Integer(numeroReparcelamentoConsecutivos.toString()), colecaoGuiaPagamentoValores, usuarioLogado, valorTotalRestanteParcelamentosACobrar, Util.formatarMesAnoComBarraParaAnoMes("01/0001"), Util.formatarMesAnoComBarraParaAnoMes("12/9999"), indicadoresParcelamentoHelper, valorCreditoARealizar); NegociacaoOpcoesParcelamentoHelper negociacaoOpcoesParcelamentoHelper = Fachada.getInstancia().calcularValorDosDescontosPagamentoAVista(helper); valorTotalDescontoPagamentoAVista = negociacaoOpcoesParcelamentoHelper.getValorTotalDescontoPagamentoAVista(); valorPagamentoAVista = valorTotalComAcrescimo.subtract(valorTotalDescontoPagamentoAVista); } else { valorPagamentoAVista = valorTotalSemAcrescimo; } Short indicadorGeracaoTaxaCobranca = new Short("2") ; // no caso do parcelamento sempre 2 ResolucaoDiretoria resolucaoDiretoria = null; Collection<DebitoCreditoParcelamentoHelper> colecaoAntecipacaoDebitosDeParcelamento = null; Collection<DebitoCreditoParcelamentoHelper> colecaoAntecipacaoCreditosDeParcelamento = null; ExtratoDebitoRelatorioHelper extratoDebitoRelatorioHelper = Fachada.getInstancia().gerarEmitirExtratoDebito( imovel,indicadorGeracaoTaxaCobranca,colecaoContaValores,colecaoGuiaPagamentoValores,colecaoDebitoACobrar, valorAcrescimo,valorTotalDescontoPagamentoAVista,valorPagamentoAVista, colecaoCreditoARealizar, null, resolucaoDiretoria, colecaoAntecipacaoDebitosDeParcelamento, colecaoAntecipacaoCreditosDeParcelamento); CobrancaDocumento documentoCobranca = extratoDebitoRelatorioHelper.getDocumentoCobranca(); Fachada.getInstancia().atualizarDocumentoCobrancaOS(idOrdemServico, documentoCobranca.getId()); colecaoDocumentoCobranca.add(documentoCobranca); } // tamanho m�ximo de contas a aparecerem no relat�rio. int tamanhoMaximoDebito = 11; List relatorioBeans = (List) Fachada.getInstancia().gerarEmitirDocumentoVisitaCobranca( tamanhoMaximoDebito, null, colecaoDocumentoCobranca); return relatorioBeans; } @Override public int calcularTotalRegistrosRelatorio() { Collection<Integer[]> idsImovel = (Collection<Integer[]>) getParametro("idsImovel"); return idsImovel.size(); } public void agendarTarefaBatch() { AgendadorTarefas.agendarTarefa("RelatorioDocumentoVisitaCobranca", this); } }