package gcom.gui.cobranca;
import gcom.cobranca.bean.ContaValoresHelper;
import gcom.cobranca.bean.GuiaPagamentoValoresHelper;
import gcom.cobranca.bean.ObterDebitoImovelOuClienteHelper;
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.micromedicao.ControladorMicromedicao;
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;
/**
* Permite efetuar o parcelamento dos d�bitos de um im�vel
*
* UC0214] - Efetuar Parcelamento de D�bitos
*
* Pr�-processamento da segunda p�gina
*
* @author Roberta Costa
* @date 11/02/2006
*/
public class ExibirEfetuarParcelamentoDebitosProcesso2Action extends GcomAction {
private static Logger logger = Logger.getLogger(ExibirEfetuarParcelamentoDebitosProcesso2Action.class);
@SuppressWarnings("rawtypes")
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("processo2");
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
DynaActionForm form = (DynaActionForm) actionForm;
// Pega dados do formul�rio
String codigoImovel = (String)(form.get("matriculaImovel"));
String dataParcelamento = (String)(form.get("dataParcelamento"));
String resolucaoDiretoria = (String)(form.get("resolucaoDiretoria"));
String fimIntervaloParcelamento = (String)form.get("fimIntervaloParcelamento");
String inicioIntervaloParcelamento = (String)form.get("inicioIntervaloParcelamento");
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 indicadorDividaAtiva = (String) form.get("indicadorDividaAtiva");
logger.info("Parcelamento do im�vel " + codigoImovel);
Boolean indicadorContas = true;
if (semIntervaloParcelamento(fimIntervaloParcelamento, inicioIntervaloParcelamento)){
indicadorContas = false;
}
// Atualiza os valores da primeira aba na se��o caso seja confirmado a altera��o de alguma informa��o do primeiro formul�rio
if( httpServletRequest.getParameter("confirmado") != null && httpServletRequest.getParameter("confirmado").equals("ok") ){
sessao.setAttribute("codigoImovelEscolhida", codigoImovel);
sessao.setAttribute("dataParcelamentoEscolhida", dataParcelamento);
sessao.setAttribute("resolucaoDiretoriaEscolhida", resolucaoDiretoria);
sessao.setAttribute("fimIntervaloParcelamentoEscolhida", fimIntervaloParcelamento);
sessao.setAttribute("inicioIntervaloParcelamentoEscolhida", inicioIntervaloParcelamento);
sessao.setAttribute("indicadorContasRevisaoEscolhida", indicadorContasRevisao);
sessao.setAttribute("indicadorGuiasPagamentoEscolhida", indicadorGuiasPagamento);
sessao.setAttribute("indicadorAcrescimosImpotualidadeEscolhida", indicadorAcrescimosImpotualidade);
sessao.setAttribute("indicadorDebitosACobrarEscolhida", indicadorDebitosACobrar);
sessao.setAttribute("indicadorCreditoARealizarEscolhida", indicadorCreditoARealizar);
sessao.setAttribute("indicadorDividaAtivaEscolhida", indicadorDividaAtiva);
limparSessao(sessao);
}
// Verifica de onde est� vindo a chamada para fazer o c�lculo das contas EP e NB
// Se � do bot�o do Calcular ou do Avan�ar ou Aba
String calcula = null;
String verificaCalcula = null;
if (httpServletRequest.getParameter("calcula") != null && !httpServletRequest.getParameter("calcula").equals("")) {
calcula = httpServletRequest.getParameter("calcula");
verificaCalcula = "request";
}else if (sessao.getAttribute("calcula")!= null && !sessao.getAttribute("calcula").equals("")){
if(httpServletRequest.getParameter("limpaCombo")== null || httpServletRequest.getParameter("limpaCombo").equals("")){
calcula = (String) sessao.getAttribute("calcula");
verificaCalcula = "session";
}
}
if(calcula == null){
if (codigoImovel != null && !codigoImovel.trim().equals("")) {
String confirmado = httpServletRequest.getParameter("confirmado");
if (confirmado != null && confirmado.trim().equalsIgnoreCase("ok")) {
form.reset(actionMapping,httpServletRequest);
limparBotoesEPeNB(sessao);
limparOpcaoParcelamento(sessao);
limparSessao2(sessao);
}
//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";
}
// Obter todo o d�bito do im�vel para exibi��o
ObterDebitoImovelOuClienteHelper colecaoDebitoCliente = fachada
.obterDebitoImovelOuCliente(
1, // Indicador de d�bito do im�vel
codigoImovel,
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),
new Integer(indicadorDebitosACobrar),
new Integer(indicadorCreditoARealizar),
1, // Indicador de notas promiss�rias
new Integer(indicadorGuiasPagamento),
new Integer(indicadorAcrescimosImpotualidade),
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 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 valorCreditosAnterioresCurtoPrazo = new BigDecimal("0.00");
BigDecimal valorCreditosAnterioresLongoPrazo = new BigDecimal("0.00");
BigDecimal valorTotalCreditosAnteriores = new BigDecimal("0.00");
Collection<ContaValoresHelper> colecaoContaValores = new ArrayList<ContaValoresHelper>();
ParcelamentoPerfil parcelamentoPerfil = (ParcelamentoPerfil)sessao.getAttribute("parcelamentoPerfil");
fachada.verificarUnicaFatura(colecaoContaValores,parcelamentoPerfil);
if (clientePossuiDebitos(colecaoDebitoCliente)) {
colecaoContaValores.addAll(colecaoDebitoCliente.getColecaoContasValores());
colecaoContaValores.addAll(colecaoDebitoCliente.getColecaoContasValoresPreteritos());
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;
}
Collection<ParcelamentoDescontoAntiguidade> parcelamentosDescontoAntiguidade =
fachada.obterParcelamentoDescontoAntiguidadeParaConta(parcelamentoPerfil, contaValoresHelper.getConta());
ParcelamentoDescontoAntiguidade parcelamentoDescontoAntiguidadeMaior = new ParcelamentoDescontoAntiguidade();
if (parcelamentosDescontoAntiguidade != null && !parcelamentosDescontoAntiguidade.isEmpty()) {
Iterator parcelamentoDescontoAntiguidadeValores = parcelamentosDescontoAntiguidade.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;
}
}
// 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){
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);
if (contaRemovida != null) {
colecaoContaValores.remove(contaRemovida);
}
sessao.setAttribute("colecaoContaValores", 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);
sessao.setAttribute("colecaoGuiaPagamentoValores", colecaoGuiaPagamentoValores);
} else {
form.set("valorGuiasPagamento", "0,00");
}
}else{
form.set("valorGuiasPagamento", "0,00");
}
// Acrescimos por Impontualidade
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;
final int indiceCurtoPrazo = 0;
final int indiceLongoPrazo = 1;
// Debitos A Cobrar
if( indicadorDebitosACobrar.equals("1") ){
Collection colecaoDebitoACobrar = colecaoDebitoCliente.getColecaoDebitoACobrar();
if (colecaoDebitoACobrar != null && !colecaoDebitoACobrar.isEmpty()) {
Iterator debitoACobrarValores = colecaoDebitoACobrar.iterator();
Collection<DebitoACobrar> debitosRemovidos = new ArrayList<DebitoACobrar>();
while (debitoACobrarValores.hasNext()) {
DebitoACobrar debitoACobrar = (DebitoACobrar) debitoACobrarValores
.next();
if(verificaReferenciaIgualReferencialFaturamento(Util.recuperaAnoMesDaData(debitoACobrar.getGeracaoDebito()))) {
debitosRemovidos.add(debitoACobrar);
continue;
}
if(debitoACobrarNaoEhJurosSobreParcelamento(debitoACobrar)){
valorRestanteACobrar = debitoACobrar.getValorTotalComBonus();
BigDecimal[] valoresDeCurtoELongoPrazo = fachada.obterValorCurtoELongoPrazoParaParcelamento(
debitoACobrar.getNumeroPrestacaoDebito(),
debitoACobrar.getNumeroPrestacaoCobradasMaisBonus(),
debitoACobrar.getValorDebito(),
valorRestanteACobrar);
if (isDebitoServicoNormal(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 (isDebitoParcelamento(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("colecaoDebitoACobrar", colecaoDebitoACobrar);
// Servi�os
valorTotalRestanteServicosACobrar.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorTotalRestanteServicosACobrar = valorTotalRestanteServicosACobrarCurtoPrazo.add(valorTotalRestanteServicosACobrarLongoPrazo);
form.set("valorDebitoACobrarServico", Util.formatarMoedaReal(valorTotalRestanteServicosACobrar));
// Parcelamentos
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());
valorCreditosAnterioresCurtoPrazo.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorCreditosAnterioresCurtoPrazo = valorCreditosAnterioresCurtoPrazo.add(valores[indiceCurtoPrazo]);
valorCreditosAnterioresLongoPrazo.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorCreditosAnterioresLongoPrazo = valorCreditosAnterioresLongoPrazo.add(valores[indiceLongoPrazo]);
valorTotalCreditosAnteriores = valorTotalCreditosAnteriores.add(valorCreditosAnterioresCurtoPrazo).add(valorCreditosAnterioresLongoPrazo);
} else {
valorCreditoARealizar.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorCreditoARealizar = valorCreditoARealizar.add(creditoARealizar.getValorTotalComBonus());
}
}
if (!creditosRemovidos.isEmpty())
colecaoCreditoARealizar.removeAll(creditosRemovidos);
sessao.setAttribute("colecaoCreditoARealizar", colecaoCreditoARealizar);
valorCreditoARealizar = valorCreditoARealizar.add(valorTotalCreditosAnteriores);
form.set("valorCreditoARealizar", Util.formatarMoedaReal(valorCreditoARealizar));
form.set("valorCreditosAnterioresCurtoPrazo", Util.formatarMoedaReal(valorCreditosAnterioresCurtoPrazo));
form.set("valorCreditosAnterioresLongoPrazo", Util.formatarMoedaReal(valorCreditosAnterioresLongoPrazo));
form.set("valorTotalCreditosAnteriores", Util.formatarMoedaReal(valorTotalCreditosAnteriores));
} else {
form.set("valorCreditoARealizar", "0,00");
form.set("valorCreditosAnterioresCurtoPrazo", "0,00");
form.set("valorCreditosAnterioresLongoPrazo", "0,00");
form.set("valorTotalCreditosAnteriores", "0,00");
}
}else{
form.set("valorCreditoARealizar", "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);
if( debitoTotalAtualizado.compareTo(new BigDecimal("0.00")) == -1
|| debitoTotalAtualizado.equals(new BigDecimal("0.00")) ){
throw new ActionServletException(
"atencao.nao.existe.debito.a.parcelar");
}
form.set("valorDebitoTotalAtualizado", Util
.formatarMoedaReal(debitoTotalAtualizado));
sessao.setAttribute("valorDebitoTotalAtualizado",
debitoTotalAtualizado);
// Caso o valor Total do D�bito seja negativo n�o h� d�bitos para parcelar
if( debitoTotalAtualizado.compareTo(new BigDecimal("0.00")) == -1 ){
throw new ActionServletException(
"atencao.imovel.sem.debitos", null, codigoImovel);
}
// Limpa os bot�es de r�dio da EP e NB da lista de contas
if(httpServletRequest.getParameter("limpaCombo")!= null && !httpServletRequest.getParameter("limpaCombo").equals("")){
Collection colecaoContas = (Collection)sessao.getAttribute("colecaoContaValores");
Iterator colecaoContasIterator = colecaoContas.iterator();
colecaoContasIterator = colecaoContas.iterator();
while(colecaoContasIterator.hasNext()){
ContaValoresHelper contaValoresHelper = (ContaValoresHelper)colecaoContasIterator.next();
contaValoresHelper.setIndicadorContasDebito(null);
}
}
}
}
else if( calcula != null && calcula.equals("1") ){
// Pega vari�veis da sess�o
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");
Collection<ContaValoresHelper> 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();
ContaValoresHelper contaRemovida = null;
while (contaValores.hasNext()) {
ContaValoresHelper contaValoresHelper = (ContaValoresHelper) contaValores
.next();
if(verificaReferenciaIgualReferencialFaturamento(contaValoresHelper.getConta().getAnoMesReferenciaConta())) {
contaRemovida = contaValoresHelper;
continue;
}
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(NB)
if (indice.equals("2")) {
// Verifica se existe conta em revis�o
if( contaValoresHelper.getConta().getDataRevisao() != null ){
throw new ActionServletException(
"atencao.conta.em.revisao");
}
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.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
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.setScale(Parcelamento.CASAS_DECIMAIS, Parcelamento.TIPO_ARREDONDAMENTO);
valorDebitoTotalAtualizado = valorDebitoTotalAtualizado
.subtract(valorAcrescimosNB);
form
.set("valorTotalContaValores",
Util.formatarMoedaReal(valorTotalContaValores));
form
.set("valorAcrescimosImpontualidade",
Util.formatarMoedaReal(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 boolean isDebitoParcelamento(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 isDebitoServicoNormal(DebitoACobrar debitoACobrar) {
return debitoACobrar.getFinanciamentoTipo().getId().equals(FinanciamentoTipo.SERVICO_NORMAL);
}
private boolean debitoACobrarNaoEhJurosSobreParcelamento(DebitoACobrar debitoACobrar) {
return debitoACobrar.getDebitoTipo().getId() != null &&
!debitoACobrar.getDebitoTipo().getId().equals(DebitoTipo.JUROS_SOBRE_PARCELAMENTO);
}
private boolean clientePossuiDebitos(ObterDebitoImovelOuClienteHelper colecaoDebitoCliente) {
return (colecaoDebitoCliente.getColecaoContasValores() != null && !colecaoDebitoCliente.getColecaoContasValores().isEmpty())
|| (colecaoDebitoCliente.getColecaoContasValoresPreteritos() != null && !colecaoDebitoCliente.getColecaoContasValoresPreteritos().isEmpty());
}
private void limparSessao2(HttpSession sessao) {
sessao.removeAttribute("colecaoGuiaPagamentoValores");
sessao.removeAttribute("colecaoDebitoACobrar");
sessao.removeAttribute("colecaoCreditoARealizar");
sessao.removeAttribute("calcula");
sessao.removeAttribute("colecaoContaValores");
sessao.removeAttribute("colecaoOpcoesParcelamento");
sessao.removeAttribute("colecaoContasEmAntiguidade");
}
private void limparOpcaoParcelamento(HttpSession sessao) {
if( sessao.getAttribute("colecaoContaValoresNegociacao") != null && !sessao.getAttribute("colecaoContaValoresNegociacao").equals("")){
Collection colecaoContaValoresNegociacao = (Collection) sessao.getAttribute("colecaoContaValoresNegociacao");
Iterator contaValores = colecaoContaValoresNegociacao.iterator();
while(contaValores.hasNext()) {
ContaValoresHelper contaValoresHelper = (ContaValoresHelper) contaValores.next();
if( contaValoresHelper.getIndicadorContasDebito() != null && contaValoresHelper.getIndicadorContasDebito().equals(1) ){
contaValoresHelper.setIndicadorContasDebito(null);
}
}
}
}
private void limparBotoesEPeNB(HttpSession sessao) {
if( sessao.getAttribute("colecaoContaValores") != null && !sessao.getAttribute("colecaoContaValores").equals("")){
Collection colecaoContas = (Collection)sessao.getAttribute("colecaoContaValores");
Iterator colecaoContasIterator = colecaoContas.iterator();
colecaoContasIterator = colecaoContas.iterator();
while(colecaoContasIterator.hasNext()){
ContaValoresHelper contaValoresHelper = (ContaValoresHelper)colecaoContasIterator.next();
contaValoresHelper.setIndicadorContasDebito(null);
}
}
}
private void limparSessao(HttpSession sessao) {
// Limpa a sess�o
sessao.removeAttribute("calcula");
sessao.removeAttribute("colecaoContaValores");
sessao.removeAttribute("colecaoGuiaPagamentoValores");
sessao.removeAttribute("opcoesParcelamento");
sessao.removeAttribute("colecaoOpcoesParcelamento");
sessao.removeAttribute("valorDebitoTotalAtualizado");
sessao.removeAttribute("valorTotalContaValores");
sessao.removeAttribute("valorAcrescimosImpontualidade");
sessao.removeAttribute("idsContaEP");
sessao.removeAttribute("colecaoCreditoARealizar");
sessao.removeAttribute("colecaoContasEmAntiguidade");
}
private boolean semIntervaloParcelamento(String fimIntervaloParcelamento, String inicioIntervaloParcelamento) {
return (inicioIntervaloParcelamento == null || inicioIntervaloParcelamento.equals(""))
&& (fimIntervaloParcelamento == null || fimIntervaloParcelamento.equals(""));
}
private boolean isCreditoDeParcelamento(CreditoARealizar creditoARealizar) {
return creditoARealizar.getCreditoOrigem().getId().intValue() == CreditoOrigem.DESCONTOS_CONCEDIDOS_NO_PARCELAMENTO
&& creditoARealizar.getParcelamento() != null;
}
}