package gcom.gui.cobranca; import gcom.atendimentopublico.ligacaoagua.LigacaoAguaSituacao; import gcom.atendimentopublico.ligacaoesgoto.LigacaoEsgotoSituacao; import gcom.cadastro.cliente.Cliente; import gcom.cadastro.cliente.ClienteImovel; import gcom.cadastro.cliente.ClienteRelacaoTipo; import gcom.cadastro.cliente.FiltroCliente; import gcom.cadastro.cliente.FiltroClienteImovel; import gcom.cadastro.imovel.FiltroImovel; import gcom.cadastro.imovel.Imovel; import gcom.cadastro.sistemaparametro.FiltroSistemaParametro; import gcom.cadastro.sistemaparametro.SistemaParametro; import gcom.cobranca.ResolucaoDiretoria; import gcom.cobranca.bean.ContaValoresHelper; import gcom.cobranca.bean.GuiaPagamentoValoresHelper; import gcom.cobranca.bean.ObterDebitoImovelOuClienteHelper; import gcom.cobranca.parcelamento.Parcelamento; import gcom.fachada.Fachada; import gcom.faturamento.FaturamentoGrupo; import gcom.faturamento.credito.CreditoARealizar; import gcom.faturamento.credito.CreditoOrigem; import gcom.faturamento.debito.DebitoACobrar; import gcom.faturamento.debito.DebitoTipo; import gcom.financeiro.FinanciamentoTipo; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.seguranca.acesso.PermissaoEspecial; import gcom.seguranca.acesso.usuario.Usuario; import gcom.util.ControladorException; import gcom.util.Util; import gcom.util.filtro.ParametroNulo; import gcom.util.filtro.ParametroSimples; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.GregorianCalendar; import java.util.Iterator; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.DynaActionForm; import org.jboss.logging.Logger; public class ExibirEfetuarParcelamentoDebitosProcesso1Action extends GcomAction { private static Logger logger = Logger.getLogger(ExibirEfetuarParcelamentoDebitosProcesso1Action.class); public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { ActionForward retorno = actionMapping.findForward("processo1"); Fachada fachada = Fachada.getInstancia(); HttpSession sessao = httpServletRequest.getSession(false); Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado"); verificarPermissoes(httpServletRequest, fachada, usuario); DynaActionForm form = (DynaActionForm) actionForm; // Pega o codigo que o usuario digitou para a pesquisa direta de imovel String codigoImovel = (String) httpServletRequest.getParameter("matriculaImovel"); String codigoImovelAntes = (String) form.get("codigoImovelAntes"); validarCPF(form); pesquisarClienteParcelamento(httpServletRequest, fachada, form); String inscricaoImovel = null; if (httpServletRequest.getParameter("inscricaoImovel") != null && !httpServletRequest.getParameter("inscricaoImovel").equals("")) { inscricaoImovel = (String) httpServletRequest.getParameter("inscricaoImovel"); } if (codigoImovel != null && !codigoImovel.trim().equals("") && inscricaoImovel == null) { logger.info("Parcelamento do im�vel " + codigoImovel); // Pesquisa os dados do cliente e do im�vel boolean existeImovel = pesquisarImovel(codigoImovel, actionForm, httpServletRequest, sessao, usuario); if (existeImovel) { Collection<Parcelamento> colecaoParcelamento = fachada.verificarParcelamentoMesImovel(new Integer(codigoImovel)); if (colecaoParcelamento != null && !colecaoParcelamento.isEmpty()) { throw new ActionServletException("atencao.debito.ja.parcelado.mes.faturamento.corrente"); } ObterDebitoImovelOuClienteHelper colecaoDebitoImovel = obterDebitosImovelOuCliente(fachada, codigoImovel); validarExistenciaDebitosImovel(codigoImovel, colecaoDebitoImovel); // [FS0015] Verificar exist�ncia de contas. // Caso n�o existam contas para o im�vel deixar indispon�vel o campo m�s/ano de refer�ncia inicial e m�s/ano de refer�ncia final if (isImovelSemContas(colecaoDebitoImovel)) { sessao.setAttribute("bloqueiaIntervaloParcelamento", "sim"); form.set("inicioIntervaloParcelamento", ""); form.set("fimIntervaloParcelamento", ""); } // Para o c�lculo do D�bito Total Atualizado BigDecimal valorTotalContas = new BigDecimal("0.00"); BigDecimal valorTotalAcrescimoImpontualidade = new BigDecimal("0.00"); BigDecimal valorTotalRestanteServicosACobrar = new BigDecimal("0.00"); BigDecimal valorTotalRestanteServicosACobrarCurtoPrazo = new BigDecimal("0.00"); BigDecimal valorTotalRestanteServicosACobrarLongoPrazo = new BigDecimal("0.00"); BigDecimal valorTotalRestanteParcelamentosACobrar = new BigDecimal("0.00"); BigDecimal valorTotalRestanteParcelamentosACobrarCurtoPrazo = new BigDecimal("0.00"); BigDecimal valorTotalRestanteParcelamentosACobrarLongoPrazo = new BigDecimal("0.00"); BigDecimal valorTotalGuiasPagamento = new BigDecimal("0.00"); BigDecimal valorTotalAcrescimoImpontualidadeContas = new BigDecimal("0.00"); BigDecimal valorTotalAcrescimoImpontualidadeGuias = new BigDecimal("0.00"); BigDecimal valorCreditoARealizar = new BigDecimal("0.00"); BigDecimal valorRestanteACobrar = new BigDecimal("0.00"); BigDecimal valorAtualizacaoMonetaria = new BigDecimal("0.00"); BigDecimal valorJurosMora = new BigDecimal("0.00"); BigDecimal valorMulta = new BigDecimal("0.00"); BigDecimal valorTotalCreditosAnterioresCurtoPrazo = new BigDecimal("0.00"); BigDecimal valorTotalCreditosAnterioresLongoPrazo = new BigDecimal("0.00"); BigDecimal valorTotalCreditosAnteriores = new BigDecimal("0.00"); // Dados do D�bito do Im�vel - Contas Collection<ContaValoresHelper> colecaoContasImovel = new ArrayList<ContaValoresHelper>(); ContaValoresHelper contaRemovida = null; if (isImovelComContas(colecaoDebitoImovel)) { colecaoContasImovel.addAll(colecaoDebitoImovel.getColecaoContasValoresImovel()); colecaoContasImovel.addAll(colecaoDebitoImovel.getColecaoContasValoresPreteritos()); Iterator<ContaValoresHelper> contaValores = colecaoContasImovel.iterator(); while (contaValores.hasNext()) { ContaValoresHelper contaValoresHelper = (ContaValoresHelper) contaValores.next(); if (verificaReferenciaIgualReferencialFaturamento(contaValoresHelper.getConta().getAnoMesReferenciaConta())) { contaRemovida = contaValoresHelper; continue; } valorTotalContas.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorTotalContas = valorTotalContas.add(contaValoresHelper.getValorTotalConta()); if (contaPossuiAtualizacaoMonetaria(contaValoresHelper)) { valorAtualizacaoMonetaria.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorAtualizacaoMonetaria = valorAtualizacaoMonetaria.add(contaValoresHelper.getValorAtualizacaoMonetaria().setScale( Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO)); } if (contaPossuiJurosMora(contaValoresHelper)) { valorJurosMora.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorJurosMora = valorJurosMora.add(contaValoresHelper.getValorJurosMora().setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO)); } if (contaPossuiMulta(contaValoresHelper)) { valorMulta.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorMulta = valorMulta.add(contaValoresHelper.getValorMulta().setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO)); } valorTotalAcrescimoImpontualidadeContas.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorTotalAcrescimoImpontualidadeContas = valorTotalAcrescimoImpontualidadeContas.add(contaValoresHelper .getValorTotalContaValoresParcelamento()); } if (contaRemovida != null) { colecaoContasImovel.remove(contaRemovida); } sessao.setAttribute("colecaoContaValoresImovel", colecaoContasImovel); form.set("valorTotalContasImovel", Util.formatarMoedaReal(valorTotalContas)); } else { form.set("valorTotalContasImovel", "0,00"); } // Guias de Pagamento Collection<GuiaPagamentoValoresHelper> colecaoGuiaPagamentoValoresImovel = colecaoDebitoImovel.getColecaoGuiasPagamentoValores(); Collection<GuiaPagamentoValoresHelper> guiasRemovidas = new ArrayList<GuiaPagamentoValoresHelper>(); if (colecaoGuiaPagamentoValoresImovel != null && !colecaoGuiaPagamentoValoresImovel.isEmpty()) { Iterator<GuiaPagamentoValoresHelper> guiaPagamentoValores = colecaoGuiaPagamentoValoresImovel.iterator(); while (guiaPagamentoValores.hasNext()) { GuiaPagamentoValoresHelper guiaPagamentoValoresHelper = (GuiaPagamentoValoresHelper) guiaPagamentoValores.next(); if (verificaReferenciaIgualReferencialFaturamento(Util.recuperaAnoMesDaData(guiaPagamentoValoresHelper.getGuiaPagamento().getDataEmissao()))) { guiasRemovidas.add(guiaPagamentoValoresHelper); continue; } if (guiaPagamentoValoresHelper.getGuiaPagamento() != null && !guiaPagamentoValoresHelper.getGuiaPagamento().equals("")) { valorTotalGuiasPagamento.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorTotalGuiasPagamento = valorTotalGuiasPagamento.add(guiaPagamentoValoresHelper.getGuiaPagamento().getValorDebito() .setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO)); } if (guiaPossuiAtualizacaoMonetaria(guiaPagamentoValoresHelper)) { valorAtualizacaoMonetaria.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorAtualizacaoMonetaria = valorAtualizacaoMonetaria.add(guiaPagamentoValoresHelper.getValorAtualizacaoMonetaria().setScale( Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO)); } if (guiaPossuiJurosMora(guiaPagamentoValoresHelper)) { valorJurosMora.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorJurosMora = valorJurosMora.add(guiaPagamentoValoresHelper.getValorJurosMora().setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO)); } if (guiaPossuiMulta(guiaPagamentoValoresHelper)) { valorMulta.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorMulta = valorMulta.add(guiaPagamentoValoresHelper.getValorMulta()); } if (guiaPossuiAcrescimosImpontualidade(guiaPagamentoValoresHelper)) { valorTotalAcrescimoImpontualidadeGuias.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorTotalAcrescimoImpontualidadeGuias = valorTotalAcrescimoImpontualidadeGuias.add(guiaPagamentoValoresHelper .getValorAcrescimosImpontualidade()); } } if (!guiasRemovidas.isEmpty()) colecaoGuiaPagamentoValoresImovel.removeAll(guiasRemovidas); sessao.setAttribute("colecaoGuiaPagamentoValoresImovel", colecaoGuiaPagamentoValoresImovel); form.set("valorGuiasPagamentoImovel", Util.formatarMoedaReal(valorTotalGuiasPagamento)); } else { form.set("valorGuiasPagamentoImovel", "0,00"); } // Acrescimos por Impotualidade BigDecimal retornoSoma = new BigDecimal("0.00"); retornoSoma.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); retornoSoma = retornoSoma.add(valorTotalAcrescimoImpontualidadeContas); retornoSoma = retornoSoma.add(valorTotalAcrescimoImpontualidadeGuias); sessao.setAttribute("valorAcrescimosImpontualidadeImovel", retornoSoma); form.set("valorAcrescimosImpontualidadeImovel", Util.formatarMoedaReal(retornoSoma)); // Para o c�lculo do D�bito Total Atualizado valorTotalAcrescimoImpontualidade = retornoSoma; final int indiceCurtoPrazo = 0; final int indiceLongoPrazo = 1; // Debitos A Cobrar Collection<DebitoACobrar> colecaoDebitoACobrar = colecaoDebitoImovel.getColecaoDebitoACobrar(); Collection<DebitoACobrar> debitosRemovidos = new ArrayList<DebitoACobrar>(); if (colecaoDebitoACobrar != null && !colecaoDebitoACobrar.isEmpty()) { Iterator<DebitoACobrar> debitoACobrarValores = colecaoDebitoACobrar.iterator(); while (debitoACobrarValores.hasNext()) { DebitoACobrar debitoACobrar = (DebitoACobrar) debitoACobrarValores.next(); if (verificaReferenciaIgualReferencialFaturamento(Util.recuperaAnoMesDaData(debitoACobrar.getGeracaoDebito()))) { debitosRemovidos.add(debitoACobrar); continue; } // [FS0022]-Verificar exist�ncia de juros sobre im�vel if (debitoACobrarNaoEhJurosParcelamento(debitoACobrar)) { valorRestanteACobrar = debitoACobrar.getValorTotalComBonus(); BigDecimal[] valoresDeCurtoELongoPrazo = fachada.obterValorCurtoELongoPrazoParaParcelamento( debitoACobrar.getNumeroPrestacaoDebito(), debitoACobrar.getNumeroPrestacaoCobradasMaisBonus(), debitoACobrar.getValorDebito(), valorRestanteACobrar); if (isDebitoACobrarServicoNormal(debitoACobrar)) { valorTotalRestanteServicosACobrarCurtoPrazo.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorTotalRestanteServicosACobrarCurtoPrazo = valorTotalRestanteServicosACobrarCurtoPrazo.add(valoresDeCurtoELongoPrazo[indiceCurtoPrazo]); valorTotalRestanteServicosACobrarLongoPrazo.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorTotalRestanteServicosACobrarLongoPrazo = valorTotalRestanteServicosACobrarLongoPrazo.add(valoresDeCurtoELongoPrazo[indiceLongoPrazo]); } if (isDebitoACobrarParcelamento(debitoACobrar)) { 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]); } } } if (!debitosRemovidos.isEmpty()) colecaoDebitoACobrar.removeAll(debitosRemovidos); sessao.setAttribute("colecaoDebitoACobrarImovel", colecaoDebitoACobrar); // Servi�os valorTotalRestanteServicosACobrar.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorTotalRestanteServicosACobrar = valorTotalRestanteServicosACobrarCurtoPrazo.add(valorTotalRestanteServicosACobrarLongoPrazo); form.set("valorDebitoACobrarServicoLongoPrazo",Util.formatarMoedaReal(valorTotalRestanteServicosACobrarLongoPrazo)); form.set("valorDebitoACobrarServicoCurtoPrazo",Util.formatarMoedaReal(valorTotalRestanteServicosACobrarCurtoPrazo)); form.set("valorDebitoACobrarServicoImovel", Util.formatarMoedaReal(valorTotalRestanteServicosACobrar)); valorTotalRestanteParcelamentosACobrar = valorTotalRestanteParcelamentosACobrarCurtoPrazo.add(valorTotalRestanteParcelamentosACobrarLongoPrazo); form.set("valorDebitoACobrarParcelamentoLongoPrazo",Util.formatarMoedaReal(valorTotalRestanteParcelamentosACobrarLongoPrazo)); form.set("valorDebitoACobrarParcelamentoCurtoPrazo",Util.formatarMoedaReal(valorTotalRestanteParcelamentosACobrarCurtoPrazo)); form.set("valorDebitoACobrarParcelamentoImovel",Util.formatarMoedaReal(valorTotalRestanteParcelamentosACobrar)); } else { form.set("valorDebitoACobrarServicoImovel", "0,00"); form.set("valorDebitoACobrarParcelamentoImovel", "0,00"); } // Cr�dito A Realizar Collection<CreditoARealizar> colecaoCreditoARealizar = colecaoDebitoImovel.getColecaoCreditoARealizar(); Collection<CreditoARealizar> creditosRemovidos = new ArrayList<CreditoARealizar>(); if (colecaoCreditoARealizar != null && !colecaoCreditoARealizar.isEmpty()) { Iterator<CreditoARealizar> creditoARealizarValores = colecaoCreditoARealizar.iterator(); while (creditoARealizarValores.hasNext()) { CreditoARealizar creditoARealizar = (CreditoARealizar) creditoARealizarValores.next(); if (verificaReferenciaIgualReferencialFaturamento(Util.recuperaAnoMesDaData(creditoARealizar.getGeracaoCredito()))) { creditosRemovidos.add(creditoARealizar); continue; } if (isCreditoDeParcelamento(creditoARealizar)) { BigDecimal[] valores = fachada.obterValorCurtoELongoPrazoParaParcelamento( creditoARealizar.getNumeroPrestacaoCredito(), creditoARealizar.getNumeroPrestacaoRealizada(), creditoARealizar.getValorCredito(), creditoARealizar.getValorNaoConcedido()); valorTotalCreditosAnterioresCurtoPrazo.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorTotalCreditosAnterioresCurtoPrazo = valorTotalCreditosAnterioresCurtoPrazo.add(valores[indiceCurtoPrazo]); valorTotalCreditosAnterioresLongoPrazo.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorTotalCreditosAnterioresLongoPrazo = valorTotalCreditosAnterioresLongoPrazo.add(valores[indiceLongoPrazo]); } else { valorCreditoARealizar.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorCreditoARealizar = valorCreditoARealizar.add(creditoARealizar.getValorTotalComBonus()); } } if (!creditosRemovidos.isEmpty()) colecaoCreditoARealizar.removeAll(creditosRemovidos); sessao.setAttribute("colecaoCreditoARealizarImovel", colecaoCreditoARealizar); valorTotalCreditosAnteriores = valorTotalCreditosAnterioresCurtoPrazo.add(valorTotalCreditosAnterioresLongoPrazo); valorCreditoARealizar = valorCreditoARealizar.add(valorTotalCreditosAnteriores); form.set("valorCreditosAnterioresCurtoPrazo",Util.formatarMoedaReal(valorTotalCreditosAnterioresCurtoPrazo)); form.set("valorCreditosAnterioresLongoPrazo",Util.formatarMoedaReal(valorTotalCreditosAnterioresLongoPrazo)); form.set("valorTotalCreditosAnteriores",Util.formatarMoedaReal(valorTotalCreditosAnteriores)); form.set("valorCreditoARealizarImovel", Util.formatarMoedaReal(valorCreditoARealizar)); } else { form.set("valorCreditoARealizarImovel", "0,00"); } // D�bito Total Atualizado BigDecimal debitoTotalAtualizado = new BigDecimal("0.00"); debitoTotalAtualizado.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); debitoTotalAtualizado = debitoTotalAtualizado.add(valorTotalContas); debitoTotalAtualizado = debitoTotalAtualizado.add(valorTotalGuiasPagamento); debitoTotalAtualizado = debitoTotalAtualizado.add(valorTotalAcrescimoImpontualidade); debitoTotalAtualizado = debitoTotalAtualizado.add(valorTotalRestanteServicosACobrar); debitoTotalAtualizado = debitoTotalAtualizado.add(valorTotalRestanteParcelamentosACobrar); debitoTotalAtualizado = debitoTotalAtualizado.subtract(valorCreditoARealizar); sessao.setAttribute("valorDebitoTotalAtualizadoImovel", debitoTotalAtualizado); form.set("valorDebitoTotalAtualizadoImovel", Util.formatarMoedaReal(debitoTotalAtualizado)); validarMudancaImovel(sessao, form, codigoImovelAntes, codigoImovel); calcularIntervaloParcelamento(sessao, form, colecaoContasImovel); form.set("valorAtualizacaoMonetariaImovel", Util.formatarMoedaReal(valorAtualizacaoMonetaria)); form.set("valorJurosMoraImovel", Util.formatarMoedaReal(valorJurosMora)); form.set("valorMultaImovel", Util.formatarMoedaReal(valorMulta)); form.set("matriculaImovel", codigoImovel); } // Atualizando o c�digo do im�vel na var�avel hidden do formul�rio codigoImovelAntes = codigoImovel; form.set("codigoImovelAntes", codigoImovelAntes); } // Coloca a data Atual na data de Parecelamento if (form.get("dataParcelamento").equals("") || form.get("dataParcelamento") == null) { SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy"); Calendar dataCorrente = new GregorianCalendar(); form.set("dataParcelamento", "" + formatoData.format(dataCorrente.getTime())); } validarPermissaoRD(httpServletRequest, fachada); return retorno; } private boolean isCreditoDeParcelamento(CreditoARealizar creditoARealizar) { return creditoARealizar.getCreditoOrigem().getId().intValue() == CreditoOrigem.DESCONTOS_CONCEDIDOS_NO_PARCELAMENTO && creditoARealizar.getParcelamento() != null; } private void validarPermissaoRD(HttpServletRequest httpServletRequest, Fachada fachada) { Collection<ResolucaoDiretoria> colecaoResolucaoDiretoria = new ArrayList<ResolucaoDiretoria>(); if ((Boolean) httpServletRequest.getAttribute("temPermissaoResolucaoDiretoria")) { colecaoResolucaoDiretoria = fachada.pesquisarResolucaoDiretoriaMaiorDataVigenciaInicioPermissaoEspecial(); } else { colecaoResolucaoDiretoria = fachada.pesquisarResolucaoDiretoriaMaiorDataVigenciaInicio(); } if (colecaoResolucaoDiretoria != null && colecaoResolucaoDiretoria.isEmpty()) { throw new ActionServletException("atencao.resolucao_diretoria.inexistente"); } else { httpServletRequest.setAttribute("colecaoResolucaoDiretoria", colecaoResolucaoDiretoria); } } private void calcularIntervaloParcelamento(HttpSession sessao, DynaActionForm form, Collection<ContaValoresHelper> colecaoContasImovel) { // Intervalo do Parcelamento if (colecaoContasImovel != null && colecaoContasImovel.size() != 0) { Iterator contaValores = colecaoContasImovel.iterator(); int anoMesReferenciaColecao = 0; int menorAnoMesReferencia = 999999; int maiorAnoMesReferencia = 0; while (contaValores.hasNext()) { ContaValoresHelper contaValoresHelper = (ContaValoresHelper) contaValores.next(); anoMesReferenciaColecao = contaValoresHelper.getConta().getReferencia(); if (anoMesReferenciaColecao < menorAnoMesReferencia) { menorAnoMesReferencia = anoMesReferenciaColecao; } if (anoMesReferenciaColecao > maiorAnoMesReferencia) { maiorAnoMesReferencia = anoMesReferenciaColecao; } } // Quando n�o houver intervalo de parcelamento inicial e final if (menorAnoMesReferencia != 0) { if ((form.get("inicioIntervaloParcelamento") == null || form.get("inicioIntervaloParcelamento").equals(""))) { sessao.setAttribute("bloqueiaIntervaloParcelamento", "nao"); form.set("inicioIntervaloParcelamento", Util.formatarAnoMesParaMesAno(menorAnoMesReferencia)); } } if (maiorAnoMesReferencia != 0) { if ((form.get("fimIntervaloParcelamento") == null || form.get( "fimIntervaloParcelamento").equals(""))) { form.set("fimIntervaloParcelamento", Util.formatarAnoMesParaMesAno(maiorAnoMesReferencia)); sessao.setAttribute("bloqueiaIntervaloParcelamento", "nao"); } } else { form.set("fimIntervaloParcelamento", "00/0000"); } } else { // [FS0015] Verificar exist�ncia de contas // Caso n�o existam contas para o im�vel deixar indispon�vel o campo m�s/ano // de refer�ncia inicial e m�s/ano de refer�ncia final form.set("inicioIntervaloParcelamento", ""); form.set("fimIntervaloParcelamento", ""); sessao.setAttribute("bloqueiaIntervaloParcelamento", "sim"); } } private void validarMudancaImovel(HttpSession sessao, DynaActionForm form, String codigoImovelAntes, String codigoImovel) { if (!codigoImovelAntes.equals(codigoImovel)) { // Reinicia a Data do Parcelamento SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy"); Calendar dataCorrente = new GregorianCalendar(); form.set("dataParcelamento", "" + formatoData.format(dataCorrente.getTime())); // Limpa Resolu��o de Diretoria form.set("resolucaoDiretoria", ""); form.set("inicioIntervaloParcelamento", ""); // Limpa fim do Intervalo do Parcelamento form.set("fimIntervaloParcelamento", ""); sessao.setAttribute("bloqueiaIntervaloParcelamento", "nao"); // Limpa as perguntas form.set("indicadorContasRevisao", ""); form.set("indicadorGuiasPagamento", ""); form.set("indicadorAcrescimosImpotualidade", ""); form.set("indicadorDebitosACobrar", ""); form.set("indicadorCreditoARealizar", ""); } } private boolean debitoACobrarNaoEhJurosParcelamento(DebitoACobrar debitoACobrar) { return debitoACobrar.getDebitoTipo().getId() != null && !debitoACobrar.getDebitoTipo().getId().equals(DebitoTipo.JUROS_SOBRE_PARCELAMENTO); } private boolean isDebitoACobrarServicoNormal(DebitoACobrar debitoACobrar) { return debitoACobrar.getFinanciamentoTipo().getId().equals(FinanciamentoTipo.SERVICO_NORMAL); } private boolean isDebitoACobrarParcelamento(DebitoACobrar debitoACobrar) { return debitoACobrar.getFinanciamentoTipo().getId().equals(FinanciamentoTipo.PARCELAMENTO_AGUA) || debitoACobrar.getFinanciamentoTipo().getId().equals(FinanciamentoTipo.PARCELAMENTO_ESGOTO) || debitoACobrar.getFinanciamentoTipo().getId().equals(FinanciamentoTipo.PARCELAMENTO_SERVICO); } private boolean guiaPossuiAcrescimosImpontualidade(GuiaPagamentoValoresHelper guiaPagamentoValoresHelper) { return guiaPagamentoValoresHelper.getValorAcrescimosImpontualidade() != null && !guiaPagamentoValoresHelper.getValorAcrescimosImpontualidade().equals(""); } private boolean guiaPossuiMulta(GuiaPagamentoValoresHelper guiaPagamentoValoresHelper) { return guiaPagamentoValoresHelper.getValorMulta() != null && !guiaPagamentoValoresHelper.getValorMulta().equals(""); } private boolean guiaPossuiJurosMora(GuiaPagamentoValoresHelper guiaPagamentoValoresHelper) { return guiaPagamentoValoresHelper.getValorJurosMora() != null && !guiaPagamentoValoresHelper.getValorJurosMora().equals(""); } private boolean guiaPossuiAtualizacaoMonetaria(GuiaPagamentoValoresHelper guiaPagamentoValoresHelper) { return guiaPagamentoValoresHelper.getValorAtualizacaoMonetaria() != null && !guiaPagamentoValoresHelper.getValorAtualizacaoMonetaria().equals(""); } private boolean contaPossuiMulta(ContaValoresHelper contaValoresHelper) { return contaValoresHelper.getValorMulta() != null && !contaValoresHelper.getValorMulta().equals(""); } private boolean contaPossuiJurosMora(ContaValoresHelper contaValoresHelper) { return contaValoresHelper.getValorJurosMora() != null && !contaValoresHelper.getValorJurosMora().equals(""); } private boolean contaPossuiAtualizacaoMonetaria(ContaValoresHelper contaValoresHelper) { return contaValoresHelper.getValorAtualizacaoMonetaria() != null && !contaValoresHelper.getValorAtualizacaoMonetaria().equals(""); } private boolean isImovelComContas(ObterDebitoImovelOuClienteHelper colecaoDebitoImovel) { return (colecaoDebitoImovel.getColecaoContasValoresImovel() != null && !colecaoDebitoImovel.getColecaoContasValoresImovel().isEmpty()) || (colecaoDebitoImovel.getColecaoContasValoresPreteritos() != null && !colecaoDebitoImovel.getColecaoContasValoresPreteritos() .isEmpty()); } private boolean isImovelSemContas(ObterDebitoImovelOuClienteHelper colecaoDebitoImovel) { return (colecaoDebitoImovel.getColecaoContasValoresImovel() == null || colecaoDebitoImovel.getColecaoContasValoresImovel().size() == 0) && (colecaoDebitoImovel.getColecaoContasValoresPreteritos() == null || colecaoDebitoImovel.getColecaoContasValoresPreteritos().size() == 0); } private void validarExistenciaDebitosImovel(String codigoImovel, ObterDebitoImovelOuClienteHelper colecaoDebitoImovel) { if (imovelSemDebitos(colecaoDebitoImovel)) { throw new ActionServletException("atencao.imovel.sem.debitos", null, codigoImovel); } } private boolean imovelSemDebitos(ObterDebitoImovelOuClienteHelper colecaoDebitoImovel) { return (colecaoDebitoImovel.getColecaoContasValoresImovel() == null || colecaoDebitoImovel.getColecaoContasValoresImovel().size() == 0) && (colecaoDebitoImovel.getColecaoContasValoresPreteritos() == null || colecaoDebitoImovel.getColecaoContasValoresPreteritos().size() == 0) && (colecaoDebitoImovel.getColecaoGuiasPagamentoValores() == null || colecaoDebitoImovel.getColecaoGuiasPagamentoValores().size() == 0) && (colecaoDebitoImovel.getColecaoDebitoACobrar() == null || colecaoDebitoImovel.getColecaoDebitoACobrar().size() == 0); } private ObterDebitoImovelOuClienteHelper obterDebitosImovelOuCliente(Fachada fachada, String codigoImovel) { FaturamentoGrupo grupo = fachada.pesquisarGrupoImovel(Integer.valueOf(codigoImovel)); int referenciaCronograma = fachada.pesquisarMaiorAnoMesReferenciaCronogramaGrupoFaturamentoMensal(grupo.getId()); // [UC0067] Obter D�bito do Im�vel ou Cliente ObterDebitoImovelOuClienteHelper colecaoDebitoImovel = fachada.obterDebitoImovelOuCliente(1, // Indicador d�bito im�vel codigoImovel, // Matr�cula do im�vel null, // C�digo do cliente null, // Tipo de rela��o do cliento com o im�vel "000101", // Refer�ncia inicial do d�bito String.valueOf(referenciaCronograma), // Refer�ncia final do d�bito Util.converteStringParaDate("01/01/0001"), // Inicio Vencimento Util.converteStringParaDate("31/12/9999"), // Final Vencimento 1, // Indicador pagamento 1, // Indicador conta em revis�o 1, // Indicador d�bito a cobrar 1, // Indicador cr�dito a realizar 1, // Indicador notas promiss�rias 1, // Indicador guias de pagamento 1, // Indicador acr�scimos por impontualidade null); // Indicador Contas return colecaoDebitoImovel; } private void pesquisarClienteParcelamento(HttpServletRequest httpServletRequest, Fachada fachada, DynaActionForm form) { String idClienteParcelamento = (String) form.get("idClienteParcelamento"); String cpfClienteParcelamento = (String) form.get("cpfClienteParcelamento"); if (idClienteParcelamento != null && !idClienteParcelamento.equals("")) { FiltroCliente filtroCliente = new FiltroCliente(); filtroCliente.adicionarParametro(new ParametroSimples(FiltroCliente.ID, idClienteParcelamento)); Collection clientes = fachada.pesquisar(filtroCliente, Cliente.class.getName()); if (clientes != null && !clientes.isEmpty()) { Cliente cliente = (Cliente) ((List) clientes).get(0); form.set("nomeClienteParcelamento", cliente.getNome()); form.set("foneClienteParcelamento", fachada.pesquisarClienteFonePrincipal(cliente.getId())); form.set("cpfClienteParcelamento", cliente.getCpfFormatado()); form.set("cpfClienteParcelamentoDigitado", ""); if (cliente.getCpf() != null && !cliente.getCpf().equals("")) { httpServletRequest.setAttribute("cpfCliente", "true"); } } else { httpServletRequest.setAttribute("clienteInexistente", "true"); form.set("idClienteParcelamento", ""); form.set("nomeClienteParcelamento", "CLIENTE INEXISTENTE"); form.set("cpfClienteParcelamento", ""); form.set("cpfClienteParcelamentoDigitado", ""); } } else { form.set("nomeClienteParcelamento", ""); if (cpfClienteParcelamento != null && !cpfClienteParcelamento.equals("")) { form.set("cpfClienteParcelamento", Util.formatarCPFApresentacao(cpfClienteParcelamento)); Cliente clienteParcelamento = fachada.obterIdENomeCliente(cpfClienteParcelamento); if (clienteParcelamento != null) { httpServletRequest.setAttribute("cpfCliente", "true"); form.set("idClienteParcelamento", clienteParcelamento.getId().toString()); form.set("nomeClienteParcelamento", clienteParcelamento.getNome()); form.set("foneClienteParcelamento", fachada.pesquisarClienteFonePrincipal(clienteParcelamento.getId())); } else { form.set("cpfClienteParcelamento", ""); form.set("cpfClienteParcelamentoDigitado", ""); httpServletRequest.setAttribute("cpfInexistente", "CPF INEXISTENTE"); } } } } private void validarCPF(DynaActionForm form) { String cpf = (String) form.get("cpfClienteParcelamentoDigitado"); if (cpf != null && !cpf.trim().equalsIgnoreCase("")) { boolean igual = true; Integer i = 0; Integer tam = cpf.length() - 1; while (i < tam) { if ((cpf.charAt(i)) != (cpf.charAt(i + 1))) { igual = false; break; } else { i++; } } if (igual) { throw new ActionServletException("atencao.cpf_invalido"); } } } /** * Verifica as permiss�es especiais para a primeira p�gina de Efetuar * Parcelamento D�bitos * * @author Rodrigo Silveira * @date 07/11/2006 * * @param httpServletRequest * @param fachada * @param usuario */ private void verificarPermissoes(HttpServletRequest httpServletRequest, Fachada fachada, Usuario usuario) { boolean temPermissaoAcrescimoImpontualidade = fachada.verificarPermissaoEspecial(PermissaoEspecial.PARCELAR_SEM_INCLUIR_ACRESCIMOS_POR_IMPONTUALIDADE, usuario); boolean temPermissaoDebitoACobrar = fachada.verificarPermissaoEspecial(PermissaoEspecial.PARCELAR_SEM_INCLUIR_DEBITO_A_COBRAR, usuario); boolean temPermissaoResolucaoDiretoria = fachada.verificarPermissaoEspecial(PermissaoEspecial.USAR_PLANO_PAI_PARA_ORGAO_PUBLICO, usuario); httpServletRequest.setAttribute("temPermissaoAcrescimoImpontualidade", temPermissaoAcrescimoImpontualidade); httpServletRequest.setAttribute("temPermissaoDebitoACobrar", temPermissaoDebitoACobrar); httpServletRequest.setAttribute("temPermissaoResolucaoDiretoria", temPermissaoResolucaoDiretoria); } /** * Pesquisa um imovel informado e prepara os dados para exibi��o na tela * * @author Rodrigo Avellar/Roberta Costa * @created 11/02/2006 */ private boolean pesquisarImovel(String idImovel, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpSession sessao, Usuario usuario) { boolean existeImovel = true; Fachada fachada = Fachada.getInstancia(); DynaActionForm efetuarParcelamentoDebitosActionForm = (DynaActionForm) actionForm; // Pesquisa o imovel na base FiltroImovel filtroImovel = new FiltroImovel(); filtroImovel.adicionarParametro(new ParametroSimples(FiltroImovel.ID, idImovel)); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("localidade"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("setorComercial"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("quadra"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("logradouroBairro.bairro.municipio.unidadeFederacao"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("logradouroCep.cep"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("logradouroCep.logradouro.logradouroTipo"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("logradouroCep.logradouro.logradouroTitulo"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("enderecoReferencia"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("ligacaoAguaSituacao"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("ligacaoEsgotoSituacao"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("imovelPerfil"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("cobrancaSituacao"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("areaConstruidaFaixa"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade("cobrancaSituacaoTipo"); filtroImovel.adicionarCaminhoParaCarregamentoEntidade(FiltroImovel.CONSUMO_TARIFA); Usuario usuarioLogado = (Usuario) sessao.getAttribute(Usuario.USUARIO_LOGADO); Collection<Imovel> imovelPesquisado = fachada.pesquisarImovelEfetuarParcelamento(filtroImovel, usuarioLogado); // Verificar exist�ncioa da matr�cula do im�vel if (imovelPesquisado == null || imovelPesquisado.isEmpty()) { efetuarParcelamentoDebitosActionForm.set("matriculaImovel", ""); efetuarParcelamentoDebitosActionForm.set("inscricaoImovel", "MATR�CULA INEXISTENTE"); httpServletRequest.setAttribute("nomeCampo", "matriculaImovel"); httpServletRequest.setAttribute("idImovelNaoEncontrado", "exception"); existeImovel = false; } else { // Verifica se o Imovel est� Exclu�do Imovel imovel = imovelPesquisado.iterator().next(); if (imovel.getIndicadorExclusao() == Imovel.IMOVEL_EXCLUIDO) { efetuarParcelamentoDebitosActionForm.set("matriculaImovel", ""); efetuarParcelamentoDebitosActionForm.set("inscricaoImovel", "MATR�CULA INEXISTENTE"); httpServletRequest.setAttribute("nomeCampo", "matriculaImovel"); httpServletRequest.setAttribute("idImovelNaoEncontrado", "exception"); existeImovel = false; } else { httpServletRequest.setAttribute("nomeCampo", "resolucaoDiretoria"); // Verifica se Usu�rio est� com d�bito em cobran�a // administrativa // Verifica situa��o liga��o de �gua e esgoto if ((imovel.getLigacaoAguaSituacao() != null) && ((imovel.getLigacaoAguaSituacao().getId() == LigacaoAguaSituacao.POTENCIAL) || (imovel.getLigacaoEsgotoSituacao().getId() == LigacaoAguaSituacao.FACTIVEL)) && (imovel.getLigacaoEsgotoSituacao().getId() != LigacaoEsgotoSituacao.LIGADO)) { throw new ActionServletException("atencao.pesquisa.imovel.inativo"); } // Pega a descri��o da situa��o de �gua if (imovel.getLigacaoAguaSituacao() != null) { efetuarParcelamentoDebitosActionForm.set("situacaoAgua", imovel.getLigacaoAguaSituacao().getDescricao()); efetuarParcelamentoDebitosActionForm.set("situacaoAguaId", "" + imovel.getLigacaoAguaSituacao().getId()); } // Pega a descri��o da situa��o de esgoto if (imovel.getLigacaoEsgotoSituacao() != null) { efetuarParcelamentoDebitosActionForm.set("situacaoEsgoto", imovel.getLigacaoEsgotoSituacao().getDescricao()); efetuarParcelamentoDebitosActionForm.set("situacaoEsgotoId", "" + imovel.getLigacaoEsgotoSituacao().getId()); } efetuarParcelamentoDebitosActionForm.set("perfilImovel", "" + imovel.getImovelPerfil().getId()); efetuarParcelamentoDebitosActionForm.set("descricaoPerfilImovel", "" + imovel.getImovelPerfil().getDescricao()); sessao.setAttribute("imovel", imovel); // Pega o endere�o do Imovel String enderecoFormatado = ""; try { enderecoFormatado = fachada.pesquisarEnderecoFormatado(new Integer(idImovel)); efetuarParcelamentoDebitosActionForm.set("endereco", enderecoFormatado); } catch (NumberFormatException e) { e.printStackTrace(); } catch (ControladorException e) { e.printStackTrace(); } // Pega a inscri��o do Imovel efetuarParcelamentoDebitosActionForm.set("inscricaoImovel", imovel.getInscricaoFormatada()); // Pega as Quantidades de Parcelamentos if (imovel.getNumeroParcelamento() != null) { efetuarParcelamentoDebitosActionForm.set("numeroParcelamento", "" + imovel.getNumeroParcelamento()); } else { efetuarParcelamentoDebitosActionForm.set("numeroParcelamento", "0"); } // Pega as Quantidades de Reparcelamentos if (imovel.getNumeroReparcelamento() != null) { efetuarParcelamentoDebitosActionForm.set("numeroReparcelamento", "" + imovel.getNumeroReparcelamento()); } else { efetuarParcelamentoDebitosActionForm.set("numeroReparcelamento", "0"); } // Pega as Quantidades de Reparcelamentos Consecutivos if (imovel.getNumeroReparcelamentoConsecutivos() != null) { efetuarParcelamentoDebitosActionForm.set("numeroReparcelamentoConsecutivos", "" + imovel.getNumeroReparcelamentoConsecutivos()); } else { efetuarParcelamentoDebitosActionForm.set("numeroReparcelamentoConsecutivos", "0"); } // Filtro para recuperar informa��o do cliente relacionado com o // im�vel FiltroClienteImovel filtroClienteImovel = new FiltroClienteImovel(); filtroClienteImovel.adicionarParametro(new ParametroSimples(FiltroClienteImovel.IMOVEL_ID, idImovel)); filtroClienteImovel.adicionarParametro(new ParametroSimples(FiltroClienteImovel.CLIENTE_RELACAO_TIPO, ClienteRelacaoTipo.USUARIO)); filtroClienteImovel.adicionarParametro(new ParametroNulo(FiltroClienteImovel.DATA_FIM_RELACAO)); filtroClienteImovel.adicionarCaminhoParaCarregamentoEntidade("cliente.clienteTipo"); Collection<ClienteImovel> clientesImovel = fachada.pesquisar(filtroClienteImovel, ClienteImovel.class.getName()); Cliente cliente = clientesImovel.iterator().next().getCliente(); // Manda os dados do cliente para a p�gina if (cliente != null) { sessao.setAttribute("idClienteImovel", cliente.getId()); efetuarParcelamentoDebitosActionForm.set("nomeCliente", cliente.getNome()); if (cliente.getCpf() != null && !cliente.getCpf().equals("")) { efetuarParcelamentoDebitosActionForm.set("cpfCnpj", cliente.getCpfFormatado()); } else if (cliente.getCnpj() != null && !cliente.getCnpj().equals("")) { efetuarParcelamentoDebitosActionForm.set("cpfCnpj", cliente.getCnpjFormatado()); } else { efetuarParcelamentoDebitosActionForm.set("cpfCnpj", "N�O INFORMADO"); } } } } if (existeImovel) { Imovel imovel = imovelPesquisado.iterator().next(); if (imovel.getAreaConstruida() != null) { efetuarParcelamentoDebitosActionForm.set("areaConstruidaImovel", imovel.getAreaConstruida().toString()); } else if (imovel.getAreaConstruidaFaixa() != null && imovel.getAreaConstruidaFaixa().getMaiorFaixa() != null) { efetuarParcelamentoDebitosActionForm.set("areaConstruidaImovel", imovel.getAreaConstruidaFaixa().getMaiorFaixa().toString()); } } return existeImovel; } }