package gcom.gui.cobranca; import gcom.arrecadacao.pagamento.GuiaPagamento; import gcom.cobranca.bean.ContaValoresHelper; import gcom.cobranca.bean.GuiaPagamentoValoresHelper; import gcom.cobranca.bean.IndicadoresParcelamentoHelper; import gcom.cobranca.bean.NegociacaoOpcoesParcelamentoHelper; import gcom.cobranca.bean.ObterOpcoesDeParcelamentoHelper; import gcom.cobranca.parcelamento.Parcelamento; import gcom.fachada.Fachada; import gcom.faturamento.debito.DebitoACobrar; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.seguranca.acesso.usuario.Usuario; import gcom.util.Util; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; 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; /** * Permite efetuar o parcelamento dos d�bitos de um im�vel * * [UC0214] Efetuar Parcelamento de D�bitos * * @author Roberta Costa * @date 24/01/2006 */ public class ProcessarEfetuarParcelamentoDebitosProcesso2Action extends GcomAction { public ActionForward execute(ActionMapping actionMapping,ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { ActionForward retorno = actionMapping.findForward("processo2"); HttpSession sessao = httpServletRequest.getSession(false); Fachada fachada = Fachada.getInstancia(); Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado"); DynaActionForm form = (DynaActionForm) actionForm; Integer indicadorGuiasPagamento = new Integer((String) (form.get("indicadorGuiasPagamento"))); Integer indicadorDebitosACobrar = new Integer((String) (form.get("indicadorDebitosACobrar"))); Integer indicadorCreditoARealizar = new Integer((String) (form.get("indicadorCreditoARealizar"))); String valorDebitoACobrarParcelamentoImovel =((String)form.get("valorDebitoACobrarParcelamentoImovel")); String valorCreditoARealizar =((String)form.get("valorCreditoARealizar")); String indicadorAcrescimosImpotualidade = (String) form.get("indicadorAcrescimosImpotualidade"); Integer indicadorContasRevisao = new Integer((String) form.get("indicadorContasRevisao")); Integer indicadorDividaAtiva = new Integer((String) form.get("indicadorDividaAtiva")); String inicioIntervaloParcelamento = (String) form.get("inicioIntervaloParcelamento"); String fimIntervaloParcelamento = (String)form.get("fimIntervaloParcelamento"); BigDecimal valorDebitoACobrarParcelamentoImovelBigDecimal = new BigDecimal("0.00"); Integer fimIntervaloParcelamentoFormatado = null; Integer inicioIntervaloParcelamentoFormatado = null; if(inicioIntervaloParcelamento !=null && !inicioIntervaloParcelamento.equalsIgnoreCase("")){ fimIntervaloParcelamentoFormatado = Util.formatarMesAnoComBarraParaAnoMes(fimIntervaloParcelamento); inicioIntervaloParcelamentoFormatado = Util.formatarMesAnoComBarraParaAnoMes(inicioIntervaloParcelamento); } IndicadoresParcelamentoHelper indicadoresParcelamentoHelper = new IndicadoresParcelamentoHelper(); indicadoresParcelamentoHelper.setIndicadorContasRevisao(indicadorContasRevisao); indicadoresParcelamentoHelper.setIndicadorDebitosACobrar(indicadorDebitosACobrar); indicadoresParcelamentoHelper.setIndicadorCreditoARealizar(indicadorCreditoARealizar); indicadoresParcelamentoHelper.setIndicadorGuiasPagamento(indicadorGuiasPagamento); indicadoresParcelamentoHelper.setIndicadorAcrescimosImpotualidade(new Integer(indicadorAcrescimosImpotualidade)); indicadoresParcelamentoHelper.setIndicadorDividaAtiva(new Integer(indicadorDividaAtiva)); if (valorDebitoACobrarParcelamentoImovel != null && !valorDebitoACobrarParcelamentoImovel.equals("") ){ valorDebitoACobrarParcelamentoImovelBigDecimal = Util.formatarMoedaRealparaBigDecimal(valorDebitoACobrarParcelamentoImovel); } // Cria um boolean para verificar se todos os radio buttons do jsp anterior foi escolhido, caso seja ent�o n�o deixa passar para a aba 3. boolean verificaRadioButton = true; // Armazena a Cole��o de Contas BigDecimal valorEntradaParcelamento = new BigDecimal("0.00"); boolean marcadaEP = false; boolean marcadaNB = false; Collection<ContaValoresHelper> colecaoContaValores = (Collection<ContaValoresHelper>)sessao.getAttribute("colecaoContaValores"); // Guias de Pagamento Collection<GuiaPagamentoValoresHelper> colecaoGuiaPagamentoDebito = null; if( indicadorGuiasPagamento.equals(new Integer("1")) ){ colecaoGuiaPagamentoDebito = (Collection<GuiaPagamentoValoresHelper>)sessao.getAttribute("colecaoGuiaPagamentoValores"); } // Debitos A Cobrar Collection<DebitoACobrar> colecaoDebitoACobrarDebito = null; if( indicadorDebitosACobrar.equals(new Integer("1")) ){ colecaoDebitoACobrarDebito = (Collection<DebitoACobrar>)sessao.getAttribute("colecaoContaValores"); } // Verifica se as contas foram marcadas Collection<Integer> idsContaEP = new ArrayList<Integer>(); Collection<ContaValoresHelper> colecaoContaValoresSemContasNB = new ArrayList<ContaValoresHelper>(); if( colecaoContaValores != null && ! colecaoContaValores.isEmpty() ){ Iterator contaValores = colecaoContaValores.iterator(); while(contaValores.hasNext()) { ContaValoresHelper contaValoresHelper = (ContaValoresHelper) contaValores.next(); if( httpServletRequest.getParameter("indicadorContasDebito"+ contaValoresHelper.getConta().getId().toString()) != null ){ String indice = httpServletRequest.getParameter("indicadorContasDebito"+contaValoresHelper.getConta().getId().toString()); contaValoresHelper.setIndicadorContasDebito(new Integer(indice)); // Verifica se a conta foi marcada como EP if( contaValoresHelper.isContaEP()){ valorEntradaParcelamento.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorEntradaParcelamento = valorEntradaParcelamento.add(contaValoresHelper.getValorTotalConta()); marcadaEP = true; idsContaEP.add(contaValoresHelper.getConta().getId()); colecaoContaValoresSemContasNB.add(contaValoresHelper); // Verifica se as contas foram marcadas como NB }else if( contaValoresHelper.isContaNB() ){ marcadaNB = true; if( contaValoresHelper.getConta().getDataRevisao() != null ){ throw new ActionServletException("atencao.conta.em.revisao"); } } }else{ verificaRadioButton = false; contaValoresHelper.setIndicadorContasDebito(null); colecaoContaValoresSemContasNB.add(contaValoresHelper); } } // Verifica se tem algum d�bito a parcelar de acordo com as op��es marcadas validarEfetivacaoParcelamento(indicadorGuiasPagamento, indicadorCreditoARealizar, verificaRadioButton, colecaoGuiaPagamentoDebito, colecaoDebitoACobrarDebito); } sessao.setAttribute("idsContaEP",idsContaEP); sessao.setAttribute("colecaoContaValoresSemContasNB" , colecaoContaValoresSemContasNB); // Verifica se as entradas escolhidas s�o menores que a entrada minima if( marcadaEP ){ String resolucaoDiretoria = (String)form.get("resolucaoDiretoria"); String codigoImovel = (String) form.get("matriculaImovel"); Integer situacaoAguaId = new Integer((String) form.get("situacaoAguaId")); Integer situacaoEsgotoId = new Integer((String) form.get("situacaoEsgotoId")); Integer perfilImovel = new Integer((String)form.get("perfilImovel")); Integer numeroReparcelamentoConsecutivos = new Integer((String)form.get("numeroReparcelamentoConsecutivos")); BigDecimal valorDebitoTotalAtualizado = (BigDecimal) sessao.getAttribute("valorDebitoTotalAtualizado"); // O indicador s� ser� usado caso a situa��o de �gua do Im�vel seja SUPRIMIDO, SUPRIMIDO PARCIAL, SUPRIMIDO PARCIAL A PEDIDO Integer indicadorRestabelecimento = new Integer("0"); if (form.get("indicadorRestabelecimento") != null && !form.get("indicadorRestabelecimento").equals("")) { indicadorRestabelecimento = new Integer(String.valueOf(form.get("indicadorRestabelecimento"))); } BigDecimal valorTotalMultas = new BigDecimal("0.00"); BigDecimal valorTotalJurosMora = new BigDecimal("0.00"); BigDecimal valorTotalAtualizacoesMonetarias = new BigDecimal("0.00"); Collection<GuiaPagamento> colecaoGuiaPagamento = (Collection<GuiaPagamento>) sessao.getAttribute("colecaoGuiaPagamentoValores"); if (colecaoContaValores != null && !colecaoContaValores.isEmpty()) { Iterator contaValores = colecaoContaValores.iterator(); while (contaValores.hasNext()) { ContaValoresHelper contaValoresHelper = (ContaValoresHelper) contaValores.next(); if (sessao.getAttribute("colecaoContaValores") != null) { if (contaValoresHelper.getIndicadorContasDebito() == null) { if (contaValoresHelper.getValorMulta() != null) { valorTotalMultas.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorTotalMultas = valorTotalMultas.add(contaValoresHelper.getValorMulta()); } if (contaValoresHelper.getValorJurosMora() != null) { valorTotalJurosMora.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorTotalJurosMora = valorTotalJurosMora.add(contaValoresHelper.getValorJurosMora()); } if (contaValoresHelper.getValorAtualizacaoMonetaria() != null) { valorTotalAtualizacoesMonetarias.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorTotalAtualizacoesMonetarias = valorTotalAtualizacoesMonetarias.add(contaValoresHelper.getValorAtualizacaoMonetaria()); } } } } } BigDecimal valorEntradaInformado = new BigDecimal("0.00"); if( form.get("valorEntradaInformado") != null && !form.get("valorEntradaInformado").equals("") && !form.get("valorEntradaInformado").equals("0.00")){ valorEntradaInformado = Util.formatarMoedaRealparaBigDecimal((String) form.get("valorEntradaInformado")); } //[SB0002] - Obter Op��es de Parcelamento de acordo com a entrada informada BigDecimal valorCreditoARealizarBigDecimal = new BigDecimal("0.00"); if (valorCreditoARealizar != null){ valorCreditoARealizarBigDecimal = Util.formatarMoedaRealparaBigDecimal(valorCreditoARealizar); } //CARREGANDO O HELPER COM AS INFORMA��ES DO PARCELAMENTO ObterOpcoesDeParcelamentoHelper helper = new ObterOpcoesDeParcelamentoHelper( new Integer(resolucaoDiretoria), new Integer(codigoImovel), new BigDecimal("0.00"), situacaoAguaId, situacaoEsgotoId, perfilImovel, inicioIntervaloParcelamento, indicadorRestabelecimento, colecaoContaValores, valorDebitoTotalAtualizado, valorTotalMultas, valorTotalJurosMora, valorTotalAtualizacoesMonetarias, numeroReparcelamentoConsecutivos, colecaoGuiaPagamento, usuario, valorDebitoACobrarParcelamentoImovelBigDecimal, inicioIntervaloParcelamentoFormatado, fimIntervaloParcelamentoFormatado, indicadoresParcelamentoHelper,valorCreditoARealizarBigDecimal); NegociacaoOpcoesParcelamentoHelper opcoesParcelamento = fachada.obterOpcoesDeParcelamento(helper); BigDecimal valorEntradaMinima = opcoesParcelamento.getValorEntradaMinima(); // Atualizando o valor do d�bito total form.set("valorDebitoTotalAtualizado",Util.formatarMoedaReal(valorDebitoTotalAtualizado)); // Verifica se existe valor de entrada de parcelamento marcada pelas EP if (valorEntradaParcelamento != null && !valorEntradaParcelamento.equals(new BigDecimal("0.00")) ){ boolean temPermissaoValMinimoEntrada = fachada.verificarPermissaoValMinimoEntrada(usuario); if (valorEntradaParcelamento.compareTo(valorEntradaMinima.setScale(2,BigDecimal.ROUND_HALF_UP)) == -1 && !temPermissaoValMinimoEntrada) { throw new ActionServletException("atencao.valor.entrada.deve.ser.maior.igual.minima", null,Util.formatarMoedaReal(valorEntradaMinima)); }else{ valorEntradaMinima = valorEntradaParcelamento; } }else{ valorEntradaMinima = valorEntradaInformado; } // Colocando o valor da entrada na sess�o caso tenha sido marcada EP sessao.setAttribute("valorEntradaMinima", valorEntradaMinima); }else{ // Colocando o valor da entrada na sess�o caso n�o tenha sido marcada EP if( ! marcadaNB ){ sessao.setAttribute("valorEntradaMinima", new BigDecimal("0.00")); } } // Faz os c�lculos quando as contas NB forem marcadas, quando o bot�o calcular n�o for acionado // Apenas as NB s�o retiradas do d�bito String calcula = (String) sessao.getAttribute("calcula"); String verificaCalcula = "session"; if( calcula == null && marcadaNB ){ BigDecimal valorTotalContaValores = (BigDecimal) sessao.getAttribute("valorTotalContaValores"); BigDecimal valorAcrescimosImpontualidade = (BigDecimal) sessao.getAttribute("valorAcrescimosImpontualidade"); BigDecimal valorDebitoTotalAtualizado = (BigDecimal) sessao.getAttribute("valorDebitoTotalAtualizado"); // Atribui 1 a calcula na sess�o sessao.setAttribute("calcula", "1"); colecaoContaValores = (Collection<ContaValoresHelper>) sessao.getAttribute("colecaoContaValores"); BigDecimal valorContaNB = new BigDecimal("0.00"); BigDecimal valorAcrescimosNB = new BigDecimal("0.00"); if (colecaoContaValores != null && !colecaoContaValores.isEmpty()) { Iterator contaValores = colecaoContaValores.iterator(); while (contaValores.hasNext()) { ContaValoresHelper contaValoresHelper = (ContaValoresHelper) contaValores.next(); if (verificaCalcula != null && verificaCalcula.equals("request")) { if (httpServletRequest.getParameter("indicadorContasDebito" + contaValoresHelper.getConta().getId().toString()) != null) { String indice = httpServletRequest.getParameter("indicadorContasDebito" + contaValoresHelper.getConta().getId().toString()); contaValoresHelper.setIndicadorContasDebito(new Integer(indice)); // Caso as contas sejam n�o baixadas if (indice.equals("2")) { valorContaNB.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorContaNB = valorContaNB.add(contaValoresHelper.getConta().getValorTotal()); if( indicadorAcrescimosImpotualidade.equals("1") ){ valorAcrescimosNB.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorAcrescimosNB = valorAcrescimosNB.add(contaValoresHelper.getValorTotalContaValoresParcelamento()); } } } } else { if (contaValoresHelper.getIndicadorContasDebito() != null) { if (contaValoresHelper.getIndicadorContasDebito().equals(2)) { valorContaNB.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorContaNB = valorContaNB.add(contaValoresHelper.getConta().getValorTotal()); valorAcrescimosNB.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorAcrescimosNB = valorAcrescimosNB.add(contaValoresHelper.getValorTotalContaValoresParcelamento()); } } } } valorTotalContaValores.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorTotalContaValores = valorTotalContaValores.subtract(valorContaNB); if( indicadorAcrescimosImpotualidade.equals("1") ){ valorAcrescimosImpontualidade = valorAcrescimosImpontualidade.subtract(valorAcrescimosNB); } // Calcula sempre em cima do valor do debito valorDebitoTotalAtualizado.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO); valorDebitoTotalAtualizado = valorDebitoTotalAtualizado.subtract(valorContaNB); valorDebitoTotalAtualizado = valorDebitoTotalAtualizado.subtract(valorAcrescimosNB); form.set("valorTotalContaValores",Util.formatarMoedaReal(valorTotalContaValores)); form.set("valorAcrescimosImpontualidade",Util.formatarMoedaReal(valorAcrescimosImpontualidade)); sessao.setAttribute("valorAcrescimosImpontualidade", valorAcrescimosImpontualidade); if( valorDebitoTotalAtualizado.compareTo(new BigDecimal("0.00")) == -1 || valorDebitoTotalAtualizado.equals(new BigDecimal("0.00")) ){ throw new ActionServletException("atencao.nao.existe.debito.a.parcelar"); } form.set("valorDebitoTotalAtualizado",Util.formatarMoedaReal(valorDebitoTotalAtualizado)); } } return retorno; } private void validarEfetivacaoParcelamento(Integer indicadorGuiasPagamento, Integer indicadorCreditoARealizar, boolean verificaRadioButton, Collection<GuiaPagamentoValoresHelper> colecaoGuiaPagamentoDebito, Collection<DebitoACobrar> colecaoDebitoACobrarDebito) { if(verificaRadioButton && indicadorGuiasPagamento.equals(new Integer("1")) && indicadorCreditoARealizar.equals(new Integer("1")) && ( ( colecaoGuiaPagamentoDebito == null || colecaoGuiaPagamentoDebito.equals("") ) || ( colecaoDebitoACobrarDebito == null || colecaoDebitoACobrarDebito.equals("") ) )){ throw new ActionServletException("atencao.nao.efetuar.parcelamento"); } } }