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.ObterDebitoImovelOuClienteHelper;
import gcom.cobranca.bean.ObterOpcoesDeParcelamentoHelper;
import gcom.cobranca.bean.OpcoesParcelamentoHelper;
import gcom.cobranca.parcelamento.Parcelamento;
import gcom.cobranca.parcelamento.ParcelamentoDescontoAntiguidade;
import gcom.cobranca.parcelamento.ParcelamentoPerfil;
import gcom.fachada.Fachada;
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.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;
import org.jboss.logging.Logger;
public class ExibirEfetuarParcelamentoDebitosProcesso3Action extends GcomAction {
private static Logger logger = Logger.getLogger(ExibirEfetuarParcelamentoDebitosProcesso3Action.class);
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("processo3");
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
DynaActionForm form = (DynaActionForm) actionForm;
// Faz os c�lculos quando a entrada for modificada
String calculaOpcaoParcelamento = null;
if( httpServletRequest.getParameter("calculaOpcaoParcelamento") != null ){
calculaOpcaoParcelamento = httpServletRequest.getParameter("calculaOpcaoParcelamento");
}else if(sessao.getAttribute("calculaOpcaoParcelamento") != null ){
calculaOpcaoParcelamento = (String) sessao.getAttribute("calculaOpcaoParcelamento");
}
// Pega vari�veis do formul�rio
String codigoImovel = (String) form.get("matriculaImovel");
String codigoImovelAntes = (String) form.get("codigoImovelAntes");
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"));
String dataParcelamento = (String)(form.get("dataParcelamento"));
String resolucaoDiretoria = (String) form.get("resolucaoDiretoria");
String inicioIntervaloParcelamento = (String) form.get("inicioIntervaloParcelamento");
String fimIntervaloParcelamento = (String)form.get("fimIntervaloParcelamento");
String indicadorContasRevisao = (String) form.get("indicadorContasRevisao");
String indicadorGuiasPagamento = (String) form.get("indicadorGuiasPagamento");
String indicadorAcrescimosImpotualidade = (String) form.get("indicadorAcrescimosImpotualidade");
String indicadorDebitosACobrar = (String) form.get("indicadorDebitosACobrar");
String indicadorCreditoARealizar = (String) form.get("indicadorCreditoARealizar");
String valorDebitoACobrarParcelamentoImovel =( (String)form.get("valorDebitoACobrarParcelamentoImovel"));
String indicadorDividaAtiva = (String) form.get("indicadorDividaAtiva");
logger.info("Parcelamento do im�vel " + codigoImovel);
BigDecimal valorDebitoACobrarParcelamentoImovelBigDecimal = new BigDecimal("0.00");
String bloqueiaIntervaloParcelamento = (String) sessao.getAttribute("bloqueiaIntervaloParcelamento");
Integer fimIntervaloParcelamentoFormatado = null;
Integer inicioIntervaloParcelamentoFormatado = null;
if (bloqueiaIntervaloParcelamento != null
&& bloqueiaIntervaloParcelamento.equalsIgnoreCase("nao")){
fimIntervaloParcelamentoFormatado = Util.formatarMesAnoComBarraParaAnoMes(fimIntervaloParcelamento);
inicioIntervaloParcelamentoFormatado = Util.formatarMesAnoComBarraParaAnoMes(inicioIntervaloParcelamento);
}
if (valorDebitoACobrarParcelamentoImovel != null){
valorDebitoACobrarParcelamentoImovelBigDecimal = Util.formatarMoedaRealparaBigDecimal(valorDebitoACobrarParcelamentoImovel);
}
IndicadoresParcelamentoHelper indicadoresParcelamentoHelper = new IndicadoresParcelamentoHelper();
indicadoresParcelamentoHelper.setIndicadorContasRevisao(new Integer(indicadorContasRevisao));
indicadoresParcelamentoHelper.setIndicadorDebitosACobrar(new Integer(indicadorDebitosACobrar));
indicadoresParcelamentoHelper.setIndicadorCreditoARealizar(new Integer(indicadorCreditoARealizar));
indicadoresParcelamentoHelper.setIndicadorGuiasPagamento(new Integer(indicadorGuiasPagamento));
indicadoresParcelamentoHelper.setIndicadorAcrescimosImpotualidade(new Integer(indicadorAcrescimosImpotualidade));
indicadoresParcelamentoHelper.setIndicadorDividaAtiva(new Integer(indicadorDividaAtiva));
Boolean indicadorContas = true;
//se o intervalo de parcelamento estiver igual a null
//n�o se deve levar em considera��o no parcelamento a cole�o de contas
if ((inicioIntervaloParcelamento == null || inicioIntervaloParcelamento.equals(""))
&& (fimIntervaloParcelamento == null || fimIntervaloParcelamento.equals(""))){
indicadorContas = false;
}
BigDecimal valorCreditoARealizar = new BigDecimal("0.00");
BigDecimal valorTotalCreditosAnterioresCurtoPrazo = new BigDecimal("0.00");
BigDecimal valorTotalCreditosAnterioresLongoPrazo = new BigDecimal("0.00");
BigDecimal valorTotalCreditosAnteriores = new BigDecimal("0.00");
// Valor Entrada Informado
BigDecimal valorEntradaInformado = null;
BigDecimal valorEntradaInformadoAntes = new BigDecimal("0.00");
if( form.get("valorEntradaInformado") != null
&& form.get("valorEntradaInformado").equals("")) {
valorEntradaInformado = BigDecimal.ZERO;
form.set("valorEntradaInformado",Util.formatarMoedaReal(valorEntradaInformado));
}
if( form.get("valorEntradaInformado") != null
&& !form.get("valorEntradaInformado").equals("")
&& !form.get("valorEntradaInformado").equals("0.00")){
if (form.get("valorEntradaInformado").equals("0") ){
valorEntradaInformado = BigDecimal.ZERO;
form.set("valorEntradaInformado",Util.formatarMoedaReal(valorEntradaInformado));
}else{
valorEntradaInformado = Util.formatarMoedaRealparaBigDecimal((String) form.get("valorEntradaInformado"));
}
}
if( form.get("valorEntradaInformadoAntes") != null
&& !form.get("valorEntradaInformadoAntes").equals("")
&& !form.get("valorEntradaInformadoAntes").equals("0.00")){
valorEntradaInformadoAntes = Util.formatarMoedaRealparaBigDecimal((String) form.get("valorEntradaInformadoAntes"));
}
// 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")));
}
//Caso o periodo inicial do intervalo do parcelamento n�o seja informado
if (inicioIntervaloParcelamento == null || inicioIntervaloParcelamento.equals("")){
inicioIntervaloParcelamento = "01/0001";
}
// Caso o periodo final do intervalo do parcelamento n�o seja informado
if( fimIntervaloParcelamento == null || fimIntervaloParcelamento.equals("")){
fimIntervaloParcelamento = "12/9999";
}
// Verifica se a chamada � pela aba 2(colecaoContaValores) ou pela aba 1(colecaoContaValoresImovel)
Collection<ContaValoresHelper> colecaoContaValoresNegociacao = null;
Collection<GuiaPagamento> colecaoGuiaPagamento = null;
BigDecimal valorDebitoTotalAtualizado = new BigDecimal("0.00");
BigDecimal valorAcrescimosImpontualidade = new BigDecimal("0.00");
if (sessao.getAttribute("colecaoContaValores") != null) {
colecaoContaValoresNegociacao = (Collection<ContaValoresHelper>) sessao.getAttribute("colecaoContaValores");
colecaoGuiaPagamento = (Collection<GuiaPagamento>) sessao.getAttribute("colecaoGuiaPagamentoValores");
valorDebitoTotalAtualizado = BigDecimal.ZERO;
if (!((String) form.get("valorDebitoTotalAtualizado")).equals("")){
valorDebitoTotalAtualizado = Util.formatarMoedaRealparaBigDecimal((String) form.get("valorDebitoTotalAtualizado"));
}
valorAcrescimosImpontualidade = Util.formatarMoedaRealparaBigDecimal((String) form.get("valorAcrescimosImpontualidade"));
valorCreditoARealizar = Util.formatarMoedaRealparaBigDecimal((String) form.get("valorCreditoARealizar"));
}
else {
// Pesquisa os d�bitos do im�vel
Object[] debitosImovel = fachada.pesquisarDebitosImovel(codigoImovel, codigoImovelAntes,
dataParcelamento, resolucaoDiretoria, fimIntervaloParcelamento,
inicioIntervaloParcelamento , indicadorContasRevisao,
indicadorGuiasPagamento, indicadorAcrescimosImpotualidade,
indicadorDebitosACobrar, indicadorCreditoARealizar,indicadorContas, indicadorDividaAtiva);
// Valores dos ind�ces definidos no controlador
colecaoContaValoresNegociacao = (Collection) debitosImovel[0];
colecaoGuiaPagamento = (Collection) debitosImovel[2];
//valorDebitoTotalAtualizado = (BigDecimal) debitosImovel[14];
//Obter todo o d�bito do im�vel para exibi��o na ABA 4(Conclus�o)
//ou para inserir a partir da aba 3
ObterDebitoImovelOuClienteHelper colecaoDebitoCliente = fachada.obterDebitoImovelOuCliente(
1, // Indicador de d�bito do im�vel
codigoImovel, // Matr�cula do im�vel
null, // C�digo do cliente
null, // Tipo de rela��o cliente im�vel
Util.formatarMesAnoParaAnoMesSemBarra(inicioIntervaloParcelamento), // Refer�ncia inicial do d�bito
Util.formatarMesAnoParaAnoMesSemBarra(fimIntervaloParcelamento), // Fim do d�bito
Util.converteStringParaDate("01/01/0001"), // Inicio vencimento
Util.converteStringParaDate("31/12/9999"), // Fim vencimento
1, // Indicador de pagamento
new Integer(indicadorContasRevisao), // conta em revis�o
new Integer(indicadorDebitosACobrar), // D�bito a cobrar
new Integer(indicadorCreditoARealizar), // cr�dito a realizar
1, // Indicador de notas promiss�rias
new Integer(indicadorGuiasPagamento), //guias pagamento
new Integer(indicadorAcrescimosImpotualidade), // acr�scimos impontualidade
indicadorContas,
new Integer(indicadorDividaAtiva));
// 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 valorRestanteACobrar = new BigDecimal("0.00");
BigDecimal valorAtualizacaoMonetaria = new BigDecimal("0.00");
BigDecimal valorJurosMora = new BigDecimal("0.00");
BigDecimal valorMulta = new BigDecimal("0.00");
// Dados do D�bito do Im�vel - Contas
Collection<ContaValoresHelper> colecaoContaValores = colecaoDebitoCliente.getColecaoContasValores();
ParcelamentoPerfil parcelamentoPerfil = (ParcelamentoPerfil)sessao.getAttribute("parcelamentoPerfil");
//[SB0011] Verificar �nica Fatura
fachada.verificarUnicaFatura(colecaoContaValores,parcelamentoPerfil);
if (colecaoContaValores != null && !colecaoContaValores.isEmpty()) {
int quantidadeMinimaMesesAntiguidade = 0;
int maiorQuantidadeMinimaMesesAntiguidade = 0;
Iterator contaValores = colecaoContaValores.iterator();
ContaValoresHelper contaRemovida = null;
while (contaValores.hasNext()) {
ContaValoresHelper contaValoresHelper = (ContaValoresHelper)contaValores.next();
if(verificaReferenciaIgualReferencialFaturamento(contaValoresHelper.getConta().getAnoMesReferenciaConta())) {
contaRemovida = contaValoresHelper;
continue;
}
//Colocado por Raphael Rossiter em 04/12/2008
//=============================================================================================
Collection<ParcelamentoDescontoAntiguidade> colecaoParcelamentoDescontoAntiguidade =
fachada.obterParcelamentoDescontoAntiguidadeParaConta(parcelamentoPerfil,
contaValoresHelper.getConta());
ParcelamentoDescontoAntiguidade parcelamentoDescontoAntiguidadeMaior = new ParcelamentoDescontoAntiguidade();
// Caso nenhuma ocorr�ncia tenha sido selecionada passar para a pr�xima conta
if (colecaoParcelamentoDescontoAntiguidade != null &&
!colecaoParcelamentoDescontoAntiguidade.isEmpty()) {
Iterator parcelamentoDescontoAntiguidadeValores = colecaoParcelamentoDescontoAntiguidade
.iterator();
quantidadeMinimaMesesAntiguidade = 0;
maiorQuantidadeMinimaMesesAntiguidade = 0;
// 2.4 Determina o percentual de desconto por antiguidade do d�bito
while (parcelamentoDescontoAntiguidadeValores.hasNext()) {
ParcelamentoDescontoAntiguidade parcelamentoDescontoAntiguidade = (ParcelamentoDescontoAntiguidade) parcelamentoDescontoAntiguidadeValores
.next();
quantidadeMinimaMesesAntiguidade = parcelamentoDescontoAntiguidade
.getQuantidadeMinimaMesesDebito();
if (quantidadeMinimaMesesAntiguidade > maiorQuantidadeMinimaMesesAntiguidade) {
maiorQuantidadeMinimaMesesAntiguidade = quantidadeMinimaMesesAntiguidade;
parcelamentoDescontoAntiguidadeMaior = parcelamentoDescontoAntiguidade;
}
}
/*
* Colocado por Raphael Rossiter em 03/12/2008
* As contas onde o perfil de parcelamento para desconto de antiguidade estiver com
* o motivo de revis�o informado N�O entrar�o no parcelamento.
*/
valorTotalContas.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorTotalContas = valorTotalContas.add(contaValoresHelper.getValorTotalConta());
if (contaValoresHelper.getValorAtualizacaoMonetaria() != null && !contaValoresHelper.getValorAtualizacaoMonetaria().equals("")) {
valorAtualizacaoMonetaria.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO);
valorAtualizacaoMonetaria = valorAtualizacaoMonetaria.add(contaValoresHelper.getValorAtualizacaoMonetaria().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO));
}
if (contaValoresHelper.getValorJurosMora() != null && !contaValoresHelper.getValorJurosMora().equals("")) {
valorJurosMora.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO);
valorJurosMora = valorJurosMora.add(contaValoresHelper.getValorJurosMora().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO));
}
if (contaValoresHelper.getValorMulta() != null && !contaValoresHelper.getValorMulta().equals("")) {
valorMulta.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO);
valorMulta = valorMulta.add(contaValoresHelper.getValorMulta().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO));
}
// Para c�lculo do Acrescimo de Impontualidade
valorTotalAcrescimoImpontualidadeContas.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorTotalAcrescimoImpontualidadeContas = valorTotalAcrescimoImpontualidadeContas.add(contaValoresHelper.getValorTotalContaValoresParcelamento());
if (parcelamentoDescontoAntiguidadeMaior.getContaMotivoRevisao() != null){
//CONTA ENTRAR� EM REVIS�O
contaValoresHelper.setRevisao(1);
}
}
else{
valorTotalContas.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorTotalContas = valorTotalContas.add(contaValoresHelper.getValorTotalConta());
if (contaValoresHelper.getValorAtualizacaoMonetaria() != null && !contaValoresHelper.getValorAtualizacaoMonetaria().equals("")) {
valorAtualizacaoMonetaria.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO);
valorAtualizacaoMonetaria = valorAtualizacaoMonetaria.add(contaValoresHelper.getValorAtualizacaoMonetaria().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO));
}
if (contaValoresHelper.getValorJurosMora() != null && !contaValoresHelper.getValorJurosMora().equals("")) {
valorJurosMora.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO);
valorJurosMora = valorJurosMora.add(contaValoresHelper.getValorJurosMora().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO));
}
if (contaValoresHelper.getValorMulta() != null && !contaValoresHelper.getValorMulta().equals("")) {
valorMulta.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO);
valorMulta = valorMulta.add(contaValoresHelper.getValorMulta().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO));
}
// Para c�lculo do Acrescimo de Impontualidade
valorTotalAcrescimoImpontualidadeContas.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorTotalAcrescimoImpontualidadeContas = valorTotalAcrescimoImpontualidadeContas.add(contaValoresHelper.getValorTotalContaValoresParcelamento());
}
//=============================================================================================
}
form.set("valorTotalContaValores", Util.formatarMoedaReal(valorTotalContas));
sessao.setAttribute("valorTotalContaValores",valorTotalContas);
// Pega os dados do D�bito do Cliente
if( sessao.getAttribute("colecaoContaValores") == null ){
sessao.setAttribute("colecaoContaValores", contaRemovida != null ? colecaoContaValores.remove(contaRemovida) : colecaoContaValores);
}
}
else {
form.set("valorTotalContaValores", "0,00");
sessao.setAttribute("valorTotalContaValores",valorTotalContas);
}
// Guias de Pagamento
if( indicadorGuiasPagamento.equals("1") ){
Collection<GuiaPagamentoValoresHelper> colecaoGuiaPagamentoValores = colecaoDebitoCliente.getColecaoGuiasPagamentoValores();
if (colecaoGuiaPagamentoValores != null && !colecaoGuiaPagamentoValores.isEmpty() ){
Iterator guiaPagamentoValores = colecaoGuiaPagamentoValores.iterator();
Collection<GuiaPagamentoValoresHelper> guiasRemovidas = new ArrayList<GuiaPagamentoValoresHelper>();
while (guiaPagamentoValores.hasNext()) {
GuiaPagamentoValoresHelper guiaPagamentoValoresHelper = (GuiaPagamentoValoresHelper) guiaPagamentoValores.next();
if(verificaReferenciaIgualReferencialFaturamento(Util.recuperaAnoMesDaData(guiaPagamentoValoresHelper.getGuiaPagamento().getDataEmissao()))) {
guiasRemovidas.add(guiaPagamentoValoresHelper);
continue;
}
valorTotalGuiasPagamento.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorTotalGuiasPagamento = valorTotalGuiasPagamento.add(guiaPagamentoValoresHelper.getGuiaPagamento().getValorDebito());
if (guiaPagamentoValoresHelper.getValorAtualizacaoMonetaria() != null && !guiaPagamentoValoresHelper.getValorAtualizacaoMonetaria().equals("")) {
valorAtualizacaoMonetaria.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO);
valorAtualizacaoMonetaria = valorAtualizacaoMonetaria.add(guiaPagamentoValoresHelper.getValorAtualizacaoMonetaria().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO));
}
if (guiaPagamentoValoresHelper.getValorJurosMora() != null && !guiaPagamentoValoresHelper.getValorJurosMora().equals("")) {
valorJurosMora.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO);
valorJurosMora = valorJurosMora.add(guiaPagamentoValoresHelper.getValorJurosMora().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO));
}
if (guiaPagamentoValoresHelper.getValorMulta() != null && !guiaPagamentoValoresHelper.getValorMulta().equals("")) {
valorMulta.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO);
valorMulta = valorMulta.add(guiaPagamentoValoresHelper.getValorMulta().setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO));
}
// Para c�lculo do Acrescimo de Impontualidade
valorTotalAcrescimoImpontualidadeGuias.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorTotalAcrescimoImpontualidadeGuias = valorTotalAcrescimoImpontualidadeGuias.add(guiaPagamentoValoresHelper.getValorAcrescimosImpontualidade());
}
form.set("valorGuiasPagamento",Util.formatarMoedaReal(valorTotalGuiasPagamento));
if(!guiasRemovidas.isEmpty())
colecaoGuiaPagamentoValores.removeAll(guiasRemovidas);
// Pega as Guias de Pagamento em D�bito
sessao.setAttribute("colecaoGuiaPagamentoValores", colecaoGuiaPagamentoValores);
} else {
form.set("valorGuiasPagamento", "0,00");
}
}else{
form.set("valorGuiasPagamento", "0,00");
}
// Acrescimos por Impotualidade
BigDecimal retornoSoma = new BigDecimal("0.00");
if( indicadorAcrescimosImpotualidade.equals("1") ){
retornoSoma.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
retornoSoma = retornoSoma.add(valorTotalAcrescimoImpontualidadeContas);
retornoSoma = retornoSoma.add(valorTotalAcrescimoImpontualidadeGuias);
form.set("valorAcrescimosImpontualidade", Util.formatarMoedaReal(retornoSoma));
sessao.setAttribute("valorAcrescimosImpontualidade", retornoSoma);
}else{
form.set("valorAcrescimosImpontualidade", "0,00");
sessao.setAttribute("valorAcrescimosImpontualidade", new BigDecimal("0.00"));
}
form.set("valorAtualizacaoMonetaria", Util.formatarMoedaReal(valorAtualizacaoMonetaria));
form.set("valorJurosMora", Util.formatarMoedaReal(valorJurosMora));
form.set("valorMulta", Util.formatarMoedaReal(valorMulta));
// Para o c�lculo do D�bito Total Atualizado
valorTotalAcrescimoImpontualidade = retornoSoma;
valorAcrescimosImpontualidade = valorTotalAcrescimoImpontualidade;
final int indiceCurtoPrazo = 0;
final int indiceLongoPrazo = 1;
// Debitos A Cobrar
if( indicadorDebitosACobrar.equals("1") ){
//[FS0022]-Verificar exist�ncia de juros sobre im�vel
Collection colecaoDebitoACobrar = colecaoDebitoCliente.getColecaoDebitoACobrar();
Collection<DebitoACobrar> debitosRemovidos = new ArrayList<DebitoACobrar>();
if (colecaoDebitoACobrar != null && !colecaoDebitoACobrar.isEmpty()) {
Iterator 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(debitoACobrar.getDebitoTipo().getId() != null &&
!debitoACobrar.getDebitoTipo().getId().equals(DebitoTipo.JUROS_SOBRE_PARCELAMENTO)){
//Debitos A Cobrar - Servi�o
if (debitoACobrar.getFinanciamentoTipo().getId().equals(FinanciamentoTipo.SERVICO_NORMAL)) {
// [SB0001] Obter Valores de Curto e Longo Prazo
valorRestanteACobrar = debitoACobrar.getValorTotalComBonus();
BigDecimal[] valoresDeCurtoELongoPrazo = fachada.obterValorCurtoELongoPrazo(
debitoACobrar.getNumeroPrestacaoDebito(),debitoACobrar.getNumeroPrestacaoCobradasMaisBonus(),valorRestanteACobrar);
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]);
}
// Debitos A Cobrar - Parcelamento
if (debitoACobrar.getFinanciamentoTipo().getId().equals(FinanciamentoTipo.PARCELAMENTO_AGUA)
|| debitoACobrar.getFinanciamentoTipo().getId().equals(FinanciamentoTipo.PARCELAMENTO_ESGOTO)
|| debitoACobrar.getFinanciamentoTipo().getId().equals(FinanciamentoTipo.PARCELAMENTO_SERVICO)) {
// [SB0001] Obter Valores de Curto e Longo Prazo
valorRestanteACobrar = debitoACobrar.getValorTotalComBonus();
BigDecimal[] valoresDeCurtoELongoPrazo = fachada.obterValorCurtoELongoPrazo(
debitoACobrar.getNumeroPrestacaoDebito(),debitoACobrar.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]);
}
}
}
if(!debitosRemovidos.isEmpty())
colecaoDebitoACobrar.removeAll(debitosRemovidos);
sessao.setAttribute("colecaoDebitoACobrar", colecaoDebitoACobrar);
valorTotalRestanteServicosACobrar.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorTotalRestanteServicosACobrar = valorTotalRestanteServicosACobrarCurtoPrazo.add(valorTotalRestanteServicosACobrarLongoPrazo);
form.set("valorDebitoACobrarServico", Util.formatarMoedaReal(valorTotalRestanteServicosACobrar));
valorTotalRestanteParcelamentosACobrar.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorTotalRestanteParcelamentosACobrar = valorTotalRestanteParcelamentosACobrarCurtoPrazo.add(valorTotalRestanteParcelamentosACobrarLongoPrazo);
form.set("valorDebitoACobrarParcelamento", Util.formatarMoedaReal(valorTotalRestanteParcelamentosACobrar));
}else{
form.set("valorDebitoACobrarServico", "0,00");
form.set("valorDebitoACobrarParcelamento", "0,00");
form.set("valorDebitoACobrarServicoLongoPrazo", "0,00");
form.set("valorDebitoACobrarServicoCurtoPrazo", "0,00");
form.set("valorDebitoACobrarParcelamentoLongoPrazo", "0,00");
form.set("valorDebitoACobrarParcelamentoCurtoPrazo", "0,00");
}
}else{
form.set("valorDebitoACobrarServico", "0,00");
form.set("valorDebitoACobrarParcelamento", "0,00");
form.set("valorDebitoACobrarServicoLongoPrazo", "0,00");
form.set("valorDebitoACobrarServicoCurtoPrazo", "0,00");
form.set("valorDebitoACobrarParcelamentoLongoPrazo", "0,00");
form.set("valorDebitoACobrarParcelamentoCurtoPrazo", "0,00");
}
// Cr�dito A Realizar
if( indicadorCreditoARealizar.equals("1") ){
Collection<CreditoARealizar> colecaoCreditoARealizar = colecaoDebitoCliente.getColecaoCreditoARealizar();
if (colecaoCreditoARealizar != null && !colecaoCreditoARealizar.isEmpty() ) {
Iterator creditoARealizarValores = colecaoCreditoARealizar.iterator();
Collection<CreditoARealizar> creditosRemovidos = new ArrayList<CreditoARealizar>();
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("colecaoCreditoARealizar",colecaoCreditoARealizar);
form.set("valorCreditoARealizar",Util.formatarMoedaReal(valorCreditoARealizar));
}else{
form.set("valorCreditoARealizar", "0,00");
}
}else{
form.set("valorCreditoARealizar", "0,00");
}
// D�bito Total Atualizado
valorDebitoTotalAtualizado.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorDebitoTotalAtualizado = valorDebitoTotalAtualizado.add(valorTotalContas);
valorDebitoTotalAtualizado = valorDebitoTotalAtualizado.add(valorTotalGuiasPagamento);
valorDebitoTotalAtualizado = valorDebitoTotalAtualizado.add(valorTotalAcrescimoImpontualidade);
valorDebitoTotalAtualizado = valorDebitoTotalAtualizado.add(valorTotalRestanteServicosACobrar);
valorDebitoTotalAtualizado = valorDebitoTotalAtualizado.add(valorTotalRestanteParcelamentosACobrar);
valorDebitoTotalAtualizado = valorDebitoTotalAtualizado.subtract(valorCreditoARealizar);
}
// Vari�veis
BigDecimal valorTotalMultas = new BigDecimal("0.00");
BigDecimal valorTotalJurosMora = new BigDecimal("0.00");
BigDecimal valorTotalAtualizacoesMonetarias = new BigDecimal("0.00");
BigDecimal descontoFaixaReferenciaConta = new BigDecimal("0.00");
BigDecimal descontoAcrescimosImpontualidade = new BigDecimal("0.00");
BigDecimal descontoAntiguidadeDebito = new BigDecimal("0.00");
BigDecimal descontoInatividadeLigacaoAgua = new BigDecimal("0.00");
BigDecimal percentualDescontoAcrescimosImpontualidade = new BigDecimal("0.00");
BigDecimal percentualDescontoAntiguidadeDebito = new BigDecimal("0.00");
BigDecimal percentualDescontoInatividadeLigacaoAgua = new BigDecimal("0.00");
//BigDecimal valorDescontoPagamentoAVista = new BigDecimal("0.00");
BigDecimal valorPagamentoAVista = new BigDecimal("0.00");
ParcelamentoPerfil parcelamentoPerfil = null;
BigDecimal valorMinimoPrestacao = new BigDecimal("0.00");
BigDecimal valorTotalImpostosConta = new BigDecimal("0.00");
BigDecimal descontoSancoesRDEspecial = new BigDecimal("0.00");
BigDecimal descontoTarifaSocialRDEspecial = new BigDecimal("0.00");
BigDecimal descontoTotalPagamentoAVista = new BigDecimal("0.00");
// Quando n�o � pelo bot�o Calcular
if ( calculaOpcaoParcelamento == null ){
// Verifica se alguma EP foi marcada
boolean marcadaEP = false;
//boolean marcadaNB = false;
if (colecaoContaValoresNegociacao != null && !colecaoContaValoresNegociacao.isEmpty()) {
Iterator contaValoresNegociacao = colecaoContaValoresNegociacao.iterator();
while (contaValoresNegociacao.hasNext()) {
ContaValoresHelper contaValoresHelperNegociacao = (ContaValoresHelper) contaValoresNegociacao.next();
if( contaValoresHelperNegociacao.getIndicadorContasDebito() != null ){
if( contaValoresHelperNegociacao.getIndicadorContasDebito().equals(new Integer("1")) ){
marcadaEP = true;
sessao.removeAttribute("calculaNegociacao");
}else if( contaValoresHelperNegociacao.getIndicadorContasDebito().equals(new Integer("2")) ){
//marcadaNB = true;
sessao.removeAttribute("calculaNegociacao");
}
}
}
}
BigDecimal valorEntradaDebitos = new BigDecimal("0.00"); // Valor de Entrada da Aba 2
if( form.get("valorEntradaInformado") != null
&& !form.get("valorEntradaInformado").equals("") && !marcadaEP ){
valorEntradaDebitos = Util.formatarMoedaRealparaBigDecimal((String) form.get("valorEntradaInformado"));
}else{
valorEntradaDebitos = (BigDecimal) sessao.getAttribute("valorEntradaMinima");
}
// Caso n�o esteja marcada EP e n�o tenha sido calculado
if( !marcadaEP && sessao.getAttribute("calculaNegociacao") == null ){
valorEntradaInformado = null; //new BigDecimal("0.00");
// Caso tenha EP marcada e seja valor diferente do anterior
}else if( !( valorEntradaDebitos.compareTo(valorEntradaInformadoAntes) == 0) ){
valorEntradaInformado = (BigDecimal) sessao.getAttribute("valorEntradaMinima");
}
if (colecaoContaValoresNegociacao != null && !colecaoContaValoresNegociacao.isEmpty()) {
Iterator contaValoresNegociacao = colecaoContaValoresNegociacao.iterator();
while (contaValoresNegociacao.hasNext()) {
ContaValoresHelper contaValoresHelperNegociacao = (ContaValoresHelper) contaValoresNegociacao.next();
// Caso tenha vindo da aba 2
if (sessao.getAttribute("colecaoContaValores") != null) {
// Caso n�o tenha marcado a conta
if (contaValoresHelperNegociacao.getIndicadorContasDebito() == null ){
if (contaValoresHelperNegociacao.getValorMulta() != null) {
valorTotalMultas.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorTotalMultas = valorTotalMultas.add(contaValoresHelperNegociacao.getValorMulta());
}
if (contaValoresHelperNegociacao.getValorJurosMora() != null) {
valorTotalJurosMora.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorTotalJurosMora = valorTotalJurosMora.add(contaValoresHelperNegociacao.getValorJurosMora());
}
if (contaValoresHelperNegociacao.getValorAtualizacaoMonetaria() != null) {
valorTotalAtualizacoesMonetarias.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorTotalAtualizacoesMonetarias = valorTotalAtualizacoesMonetarias
.add(contaValoresHelperNegociacao.getValorAtualizacaoMonetaria());
}
}
} else {
// Caso tenha vindo direto da aba 1
if (contaValoresHelperNegociacao.getValorMulta() != null) {
valorTotalMultas.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorTotalMultas = valorTotalMultas.add(contaValoresHelperNegociacao.getValorMulta());
}
if (contaValoresHelperNegociacao.getValorJurosMora() != null) {
valorTotalJurosMora.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorTotalJurosMora = valorTotalJurosMora.add(contaValoresHelperNegociacao.getValorJurosMora());
}
if (contaValoresHelperNegociacao.getValorAtualizacaoMonetaria() != null) {
valorTotalAtualizacoesMonetarias.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorTotalAtualizacoesMonetarias = valorTotalAtualizacoesMonetarias
.add(contaValoresHelperNegociacao.getValorAtualizacaoMonetaria());
}
}
}
}
// Caso o in�cio do intervalo seja vazio preencher com o padr�o da aba 1
if( inicioIntervaloParcelamento == null || inicioIntervaloParcelamento.equals("") ){
inicioIntervaloParcelamento = "01/0001";
}
//[SB0002] - Obter Op��es de Parcelamento
//CARREGANDO O HELPER COM AS INFORMA��ES DO PARCELAMENTO
ObterOpcoesDeParcelamentoHelper helper = new ObterOpcoesDeParcelamentoHelper(
new Integer(resolucaoDiretoria), new Integer(codigoImovel), valorEntradaInformado, situacaoAguaId,
situacaoEsgotoId, perfilImovel, inicioIntervaloParcelamento, indicadorRestabelecimento,
colecaoContaValoresNegociacao, valorDebitoTotalAtualizado, valorTotalMultas, valorTotalJurosMora,
valorTotalAtualizacoesMonetarias, numeroReparcelamentoConsecutivos, colecaoGuiaPagamento, usuario,
valorDebitoACobrarParcelamentoImovelBigDecimal, inicioIntervaloParcelamentoFormatado,
fimIntervaloParcelamentoFormatado, indicadoresParcelamentoHelper,valorCreditoARealizar);
Collection<OpcoesParcelamentoHelper> colecaoOpcoesParcelamento = null;
NegociacaoOpcoesParcelamentoHelper opcoesParcelamento = null;
opcoesParcelamento = fachada.obterOpcoesDeParcelamento(helper);
colecaoOpcoesParcelamento = opcoesParcelamento.getOpcoesParcelamento();
// Verifica se alguma op��o de parcelamento foi marcada
if( colecaoOpcoesParcelamento != null && ! colecaoOpcoesParcelamento.isEmpty() ){
Iterator opcoesParcelamentoValores = colecaoOpcoesParcelamento.iterator();
while(opcoesParcelamentoValores.hasNext()) {
OpcoesParcelamentoHelper opcoesParcelamentoHelper = (OpcoesParcelamentoHelper) opcoesParcelamentoValores.next();
if(form.get("indicadorQuantidadeParcelas") != null ){
if( ((String)form.get("indicadorQuantidadeParcelas")).equals(opcoesParcelamentoHelper.getQuantidadePrestacao().toString()) ){
opcoesParcelamentoHelper.setIndicadorQuantidadeParcelas(new Short(opcoesParcelamentoHelper.getQuantidadePrestacao().toString()));
}
}
}
}
// Colocando na sess�o
sessao.setAttribute("opcoesParcelamento",opcoesParcelamento);
sessao.setAttribute("colecaoOpcoesParcelamento",colecaoOpcoesParcelamento);
descontoFaixaReferenciaConta = opcoesParcelamento.getValorDescontoFaixaReferenciaConta();
descontoAcrescimosImpontualidade = opcoesParcelamento.getValorDescontoAcrecismosImpotualidade().setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
descontoSancoesRDEspecial = opcoesParcelamento.getValorDescontoSancoesRDEspecial();
descontoTarifaSocialRDEspecial = opcoesParcelamento.getValorDescontoTarifaSocialRDEspecial();
descontoAntiguidadeDebito = opcoesParcelamento.getValorDescontoAntiguidade();
descontoInatividadeLigacaoAgua = opcoesParcelamento.getValorDescontoInatividade();
descontoTotalPagamentoAVista = opcoesParcelamento.getValorTotalDescontoPagamentoAVista();
percentualDescontoAcrescimosImpontualidade = opcoesParcelamento.getPercentualDescontoAcrescimosImpontualidade();
percentualDescontoAntiguidadeDebito = opcoesParcelamento.getPercentualDescontoAntiguidadeDebito();
percentualDescontoInatividadeLigacaoAgua = opcoesParcelamento.getPercentualDescontoInatividadeLigacaoAgua();
parcelamentoPerfil = opcoesParcelamento.getParcelamentoPerfil();
BigDecimal valorEntradaMinima = opcoesParcelamento.getValorEntradaMinima();
valorMinimoPrestacao = opcoesParcelamento.getValorMinimoPrestacao();
// Inicia o valor da Entrada com a Min�ma caso n�o tenha marcardo nenhuma conta
if( marcadaEP ){
form.set("valorEntradaInformado", Util.formatarMoedaReal(valorEntradaInformado));
form.set("valorEntradaInformadoAntes", Util.formatarMoedaReal(valorEntradaInformado));
}else{
if( (valorEntradaInformado != null && ! (valorEntradaMinima.compareTo(valorEntradaInformado) == 0))
&& sessao.getAttribute("calculaNegociacao") != null ){
valorEntradaMinima = valorEntradaInformado;
}
form.set("valorEntradaInformado", Util.formatarMoedaReal(valorEntradaMinima));
form.set("valorEntradaInformadoAntes", Util.formatarMoedaReal(valorEntradaMinima));
}
// Caso tenha acionado o bot�o calcular da aba 3
}else{
// Ver uma maneira de guardar o valor da entrada quando acionar o bot�o calcular
sessao.setAttribute("calculaNegociacao", "1");
// Verifica se a entrada informada � menor que a m�nima
if (colecaoContaValoresNegociacao != null && !colecaoContaValoresNegociacao.isEmpty()) {
Iterator contaValoresNegociacao = colecaoContaValoresNegociacao.iterator();
while (contaValoresNegociacao.hasNext()) {
ContaValoresHelper contaValoresHelperNegociacao = (ContaValoresHelper) contaValoresNegociacao.next();
if (sessao.getAttribute("colecaoContaValores") != null) {
// Caso n�o tenha marcado a conta
if (contaValoresHelperNegociacao.getIndicadorContasDebito() == null) {
if (contaValoresHelperNegociacao.getValorMulta() != null) {
valorTotalMultas.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorTotalMultas = valorTotalMultas.add(contaValoresHelperNegociacao.getValorMulta());
}
if (contaValoresHelperNegociacao
.getValorJurosMora() != null) {
valorTotalJurosMora.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorTotalJurosMora = valorTotalJurosMora.add(contaValoresHelperNegociacao.getValorJurosMora());
}
if (contaValoresHelperNegociacao
.getValorAtualizacaoMonetaria() != null) {
valorTotalAtualizacoesMonetarias.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorTotalAtualizacoesMonetarias = valorTotalAtualizacoesMonetarias
.add(contaValoresHelperNegociacao.getValorAtualizacaoMonetaria());
}
}
}
}
}
// Limpando as op��es da sess�o
sessao.removeAttribute("opcoesParcelamento");
sessao.removeAttribute("colecaoOpcoesParcelamento");
//[SB0002] - Obter Op��es de Parcelamento de acordo com a entrada informada
//CARREGANDO O HELPER COM AS INFORMA��ES DO PARCELAMENTO
ObterOpcoesDeParcelamentoHelper helper = new ObterOpcoesDeParcelamentoHelper(
new Integer(resolucaoDiretoria), new Integer(codigoImovel), valorEntradaInformado, situacaoAguaId,
situacaoEsgotoId, perfilImovel, inicioIntervaloParcelamento, indicadorRestabelecimento,
colecaoContaValoresNegociacao, valorDebitoTotalAtualizado, valorTotalMultas, valorTotalJurosMora,
valorTotalAtualizacoesMonetarias, numeroReparcelamentoConsecutivos, colecaoGuiaPagamento, usuario,
valorDebitoACobrarParcelamentoImovelBigDecimal, inicioIntervaloParcelamentoFormatado,
fimIntervaloParcelamentoFormatado, indicadoresParcelamentoHelper,valorCreditoARealizar);
NegociacaoOpcoesParcelamentoHelper opcoesParcelamento = fachada.obterOpcoesDeParcelamento(helper);
descontoFaixaReferenciaConta = opcoesParcelamento.getValorDescontoFaixaReferenciaConta();
descontoAcrescimosImpontualidade = opcoesParcelamento.getValorDescontoAcrecismosImpotualidade();
descontoSancoesRDEspecial = opcoesParcelamento.getValorDescontoSancoesRDEspecial();
descontoTarifaSocialRDEspecial = opcoesParcelamento.getValorDescontoTarifaSocialRDEspecial();
descontoAntiguidadeDebito = opcoesParcelamento.getValorDescontoAntiguidade();
descontoInatividadeLigacaoAgua = opcoesParcelamento.getValorDescontoInatividade();
descontoTotalPagamentoAVista = opcoesParcelamento.getValorTotalDescontoPagamentoAVista();
percentualDescontoAcrescimosImpontualidade = opcoesParcelamento.getPercentualDescontoAcrescimosImpontualidade();
percentualDescontoAntiguidadeDebito = opcoesParcelamento.getPercentualDescontoAntiguidadeDebito();
percentualDescontoInatividadeLigacaoAgua = opcoesParcelamento.getPercentualDescontoInatividadeLigacaoAgua();
parcelamentoPerfil = opcoesParcelamento.getParcelamentoPerfil();
BigDecimal valorEntradaMinima = opcoesParcelamento.getValorEntradaMinima();
valorMinimoPrestacao = opcoesParcelamento.getValorMinimoPrestacao();
Collection<OpcoesParcelamentoHelper> colecaoOpcoesParcelamento = opcoesParcelamento.getOpcoesParcelamento();
if (valorEntradaInformado != null && valorEntradaInformado.compareTo(
valorEntradaMinima.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO)) == -1) {
// -----------------------------------------------------------
// Verificar permiss�o especial
boolean temPermissaoValMinimoEntrada = fachada.verificarPermissaoValMinimoEntrada(usuario);
// -----------------------------------------------------------
if(!temPermissaoValMinimoEntrada){
throw new ActionServletException(
"atencao.valor.entrada.deve.ser.maior.igual.minima", null, Util.formatarMoedaReal(valorEntradaMinima));
}else{
valorEntradaMinima = valorEntradaInformado;
}
}else{
valorEntradaMinima = valorEntradaInformado;
}
sessao.setAttribute("opcoesParcelamento",opcoesParcelamento);
sessao.setAttribute("colecaoOpcoesParcelamento",colecaoOpcoesParcelamento);
// Limpa os EP da Cole��o de Contas
if(colecaoContaValoresNegociacao !=null && !colecaoContaValoresNegociacao.isEmpty()){
Iterator contaValores = colecaoContaValoresNegociacao.iterator();
while(contaValores.hasNext()) {
ContaValoresHelper contaValoresHelper = (ContaValoresHelper) contaValores.next();
if (contaValoresHelper.getIndicadorContasDebito() != null && !contaValoresHelper.getIndicadorContasDebito().equals(new Integer("2"))){
contaValoresHelper.setIndicadorContasDebito(null);
}
}
}
// Limpando a op��o de parcelamento
if( colecaoOpcoesParcelamento != null && !colecaoOpcoesParcelamento.equals("") ){
Iterator opcoesParcelamentoValores = colecaoOpcoesParcelamento.iterator();
while(opcoesParcelamentoValores.hasNext()) {
OpcoesParcelamentoHelper opcoesParcelamentoHelper = (OpcoesParcelamentoHelper) opcoesParcelamentoValores.next();
opcoesParcelamentoHelper.setIndicadorQuantidadeParcelas(null);
form.set("indicadorQuantidadeParcelas", null);
}
}
// Atribui ao hidden o valor da entrada digitado
form.set("valorEntradaInformadoAntes", Util.formatarMoedaReal(valorEntradaInformado));
}
// Verifica se o valor do d�bito menos o valor dos descontos � menor que o valor minimo da parcela
BigDecimal valorTotalDescontos = new BigDecimal("0.00");
BigDecimal resultadoDiferenca = new BigDecimal("0.00");
valorTotalDescontos.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorTotalDescontos = descontoAcrescimosImpontualidade.add(descontoAntiguidadeDebito);
valorTotalDescontos = valorTotalDescontos.add(descontoFaixaReferenciaConta);
valorTotalDescontos = valorTotalDescontos.add(descontoInatividadeLigacaoAgua);
valorTotalDescontos = valorTotalDescontos.add(descontoSancoesRDEspecial);
valorTotalDescontos = valorTotalDescontos.add(descontoTarifaSocialRDEspecial);
resultadoDiferenca.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
resultadoDiferenca = valorDebitoTotalAtualizado.subtract(valorTotalDescontos);
if (!fachada.verificarQtdeReparcelamentoPerfil(parcelamentoPerfil.getId(),new Short(numeroReparcelamentoConsecutivos.shortValue()))){
throw new ActionServletException("atencao.nao.existe.condicao.por.quantidade.reparcelamentos.perfil");
}
// Coloca os valores no formul�rio
form.set("descontoFaixaReferenciaConta", Util.formatarMoedaReal(descontoFaixaReferenciaConta));
form.set("descontoAcrescimosImpontualidade", Util.formatarMoedaReal(descontoAcrescimosImpontualidade));
form.set("descontoAntiguidadeDebito",Util.formatarMoedaReal(descontoAntiguidadeDebito));
form.set("descontoInatividadeLigacaoAgua", Util.formatarMoedaReal(descontoInatividadeLigacaoAgua));
form.set("percentualDescontoAcrescimosImpontualidade", Util.formatarMoedaReal(percentualDescontoAcrescimosImpontualidade));
form.set("valorTotalDescontos", Util.formatarMoedaReal(valorTotalDescontos));
form.set("descontoSancoesRDEspecial",Util.formatarMoedaReal(descontoSancoesRDEspecial));
form.set("descontoTarifaSocialRDEspecial",Util.formatarMoedaReal(descontoTarifaSocialRDEspecial));
valorTotalImpostosConta = obterValorImpostosDasContasDoParcelamento(colecaoContaValoresNegociacao);
valorPagamentoAVista.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorPagamentoAVista = valorDebitoTotalAtualizado.subtract(descontoTotalPagamentoAVista);
valorPagamentoAVista = valorPagamentoAVista.subtract(valorTotalImpostosConta);
// Colocando os valores no formul�rio
form.set("valorDebitoTotalAtualizado",Util.formatarMoedaReal(valorDebitoTotalAtualizado));
form.set("valorDescontoPagamentoAVista",Util.formatarMoedaReal(descontoTotalPagamentoAVista));
form.set("valorPagamentoAVista",Util.formatarMoedaReal(valorPagamentoAVista));
form.set("valorTotalImpostos",Util.formatarMoedaReal(valorTotalImpostosConta));
if (percentualDescontoAntiguidadeDebito != null) {
form.set("percentualDescontoAntiguidadeDebito", Util.formatarMoedaReal(percentualDescontoAntiguidadeDebito));
} else {
form.set("percentualDescontoAntiguidadeDebito", "0.00");
}
if (percentualDescontoInatividadeLigacaoAgua != null) {
form.set("percentualDescontoInatividadeLigacaoAgua", Util
.formatarMoedaReal(percentualDescontoInatividadeLigacaoAgua));
} else {
form.set("percentualDescontoInatividadeLigacaoAgua", "0.00");
}
if (parcelamentoPerfil != null) {
form.set("parcelamentoPerfilId",parcelamentoPerfil.getId().toString());
} else {
form.set("parcelamentoPerfilId", "0");
}
// O valor do d�bito � menor que o valor da parcela m�nima permitida.
// Utilizar a op��o Pagamento � Vista.
if (valorDebitoTotalAtualizado.compareTo(valorMinimoPrestacao) == -1){
httpServletRequest.setAttribute("vlDebitoMenor","1");
}
form.set("valorMinimoPrestacao", Util.formatarMoedaReal(valorMinimoPrestacao));
String habilitaPagamentoAVista = "1";
if (colecaoContaValoresNegociacao == null || colecaoContaValoresNegociacao.isEmpty()) {
habilitaPagamentoAVista = "2";
}
sessao.setAttribute("habilitaPagamentoAVista", habilitaPagamentoAVista);
sessao.setAttribute("colecaoContaValoresNegociacao",colecaoContaValoresNegociacao);
sessao.setAttribute("colecaoGuiaPagamentoNegociacao", colecaoGuiaPagamento);
sessao.setAttribute("valorAcrescimosImpontualidadeNegociacao", valorAcrescimosImpontualidade);
return retorno;
}
private BigDecimal obterValorImpostosDasContasDoParcelamento(Collection colecaoContas){
BigDecimal valorTotalImpostos = BigDecimal.ZERO;
if (colecaoContas != null && !colecaoContas.isEmpty()) {
Iterator contas = colecaoContas.iterator();
while (contas.hasNext()) {
ContaValoresHelper contaValoresHelper = (ContaValoresHelper) contas.next();
if (contaValoresHelper.getConta().getValorImposto() != null) {
valorTotalImpostos = valorTotalImpostos.add(contaValoresHelper.getConta().getValorImposto());
}
}
}
return valorTotalImpostos;
}
private boolean isCreditoDeParcelamento(CreditoARealizar creditoARealizar) {
return creditoARealizar.getCreditoOrigem().getId().intValue() == CreditoOrigem.DESCONTOS_CONCEDIDOS_NO_PARCELAMENTO
&& creditoARealizar.getParcelamento() != null;
}
}