package gcom.gui.cobranca;
import gcom.arrecadacao.pagamento.GuiaPagamento;
import gcom.cobranca.bean.ContaValoresHelper;
import gcom.cobranca.bean.IndicadoresParcelamentoHelper;
import gcom.cobranca.bean.NegociacaoOpcoesParcelamentoHelper;
import gcom.cobranca.bean.ObterOpcoesDeParcelamentoHelper;
import gcom.cobranca.bean.OpcoesParcelamentoHelper;
import gcom.cobranca.parcelamento.Parcelamento;
import gcom.cobranca.parcelamento.ParcelamentoPerfil;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import java.math.BigDecimal;
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 ProcessarEfetuarParcelamentoDebitosProcesso3Action extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("processo3");
HttpSession sessao = httpServletRequest.getSession(false);
Fachada fachada = Fachada.getInstancia();
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
DynaActionForm efetuarParcelamentoDebitosActionForm = (DynaActionForm) actionForm;
// Pega vari�veis do formul�rio
String codigoImovel = (String)efetuarParcelamentoDebitosActionForm.get("matriculaImovel");
Integer situacaoAguaId = new Integer( (String)efetuarParcelamentoDebitosActionForm.get("situacaoAguaId"));
Integer situacaoEsgotoId = new Integer( (String)efetuarParcelamentoDebitosActionForm.get("situacaoEsgotoId"));
Integer perfilImovel = new Integer( (String)efetuarParcelamentoDebitosActionForm.get("perfilImovel"));
Integer numeroReparcelamentoConsecutivos = new Integer( (String)efetuarParcelamentoDebitosActionForm.get("numeroReparcelamentoConsecutivos"));
String resolucaoDiretoria = (String)efetuarParcelamentoDebitosActionForm.get("resolucaoDiretoria");
String inicioIntervaloParcelamento = (String)efetuarParcelamentoDebitosActionForm.get("inicioIntervaloParcelamento");
BigDecimal valorDebitoTotalAtualizado = Util.formatarMoedaRealparaBigDecimal((String) efetuarParcelamentoDebitosActionForm.get("valorDebitoTotalAtualizado"));
String valorDebitoACobrarParcelamentoImovel =( (String)efetuarParcelamentoDebitosActionForm.get("valorDebitoACobrarParcelamentoImovel"));
BigDecimal valorDebitoACobrarParcelamentoImovelBigDecimal = new BigDecimal("0.00");
String fimIntervaloParcelamento = (String)efetuarParcelamentoDebitosActionForm.get("fimIntervaloParcelamento");
Integer fimIntervaloParcelamentoFormatado =
fimIntervaloParcelamento !=null && !fimIntervaloParcelamento.equalsIgnoreCase("")
? Util.formatarMesAnoComBarraParaAnoMes(fimIntervaloParcelamento): null;
Integer inicioIntervaloParcelamentoFormatado =
inicioIntervaloParcelamento !=null && !inicioIntervaloParcelamento.equalsIgnoreCase("")
? Util.formatarMesAnoComBarraParaAnoMes(inicioIntervaloParcelamento): null;
//Util.formatarMesAnoComBarraParaAnoMes(inicioIntervaloParcelamento);
ParcelamentoPerfil parcelamentoPerfil = (ParcelamentoPerfil)sessao.getAttribute("parcelamentoPerfil");
Integer indicadorGuiasPagamento = new Integer((String) (efetuarParcelamentoDebitosActionForm.get("indicadorGuiasPagamento")));
Integer indicadorDebitosACobrar = new Integer((String) (efetuarParcelamentoDebitosActionForm.get("indicadorDebitosACobrar")));
Integer indicadorCreditoARealizar = new Integer((String) (efetuarParcelamentoDebitosActionForm.get("indicadorCreditoARealizar")));
Integer indicadorAcrescimosImpotualidade = new Integer((String) efetuarParcelamentoDebitosActionForm.get("indicadorAcrescimosImpotualidade"));
Integer indicadorContasRevisao = new Integer((String) efetuarParcelamentoDebitosActionForm.get("indicadorContasRevisao"));
Integer indicadorDividaAtiva = new Integer((String) efetuarParcelamentoDebitosActionForm.get("indicadorDividaAtiva"));
IndicadoresParcelamentoHelper indicadoresParcelamentoHelper = new IndicadoresParcelamentoHelper();
indicadoresParcelamentoHelper.setIndicadorContasRevisao(indicadorContasRevisao);
indicadoresParcelamentoHelper.setIndicadorDebitosACobrar(indicadorDebitosACobrar);
indicadoresParcelamentoHelper.setIndicadorCreditoARealizar(indicadorCreditoARealizar);
indicadoresParcelamentoHelper.setIndicadorGuiasPagamento(indicadorGuiasPagamento);
indicadoresParcelamentoHelper.setIndicadorAcrescimosImpotualidade(indicadorAcrescimosImpotualidade);
indicadoresParcelamentoHelper.setIndicadorDividaAtiva(indicadorDividaAtiva);
if (valorDebitoACobrarParcelamentoImovel != null){
valorDebitoACobrarParcelamentoImovelBigDecimal = Util.formatarMoedaRealparaBigDecimal(valorDebitoACobrarParcelamentoImovel);
}
// Valor de Entrada
//*********************************************************
// Por: Iavn Sergio
// 01/06/2010
// CRC4062
//*********************************************************
if (efetuarParcelamentoDebitosActionForm.get("valorEntradaInformado").equals("")) {
throw new ActionServletException("atencao.campo_selecionado.obrigatorio", "o Valor da Entrada");
}
//*********************************************************
BigDecimal valorEntradaInformado = Util.formatarMoedaRealparaBigDecimal(
(String) efetuarParcelamentoDebitosActionForm.get("valorEntradaInformado")).setScale(2);
BigDecimal valorEntradaInformadoAntes = new BigDecimal("0.00");
if( efetuarParcelamentoDebitosActionForm.get("valorEntradaInformadoAntes") != null
&& !efetuarParcelamentoDebitosActionForm.get("valorEntradaInformadoAntes").equals("")){
valorEntradaInformadoAntes = Util.formatarMoedaRealparaBigDecimal(
(String) efetuarParcelamentoDebitosActionForm.get("valorEntradaInformadoAntes")).setScale(2);
}
// Verifica se o bot�o calcular foi acionado quando o valor de entrada for alterado
if( !valorEntradaInformadoAntes.equals(valorEntradaInformado) ){
throw new ActionServletException("atencao.valor.entrada.alterado.necessario.calcular");
}
// Armazena a Cole��o de Op��es de Parcelamento
Collection<OpcoesParcelamentoHelper> colecaoOpcoesParcelamento = (Collection<OpcoesParcelamentoHelper>)
sessao.getAttribute("colecaoOpcoesParcelamento");
Short numeroPrestacoesSelecionada = new Short("0");
// BigDecimal valorPrestacaoSelecionada = new BigDecimal("0.00");
// Verifica se alguma op��o de parcelamento foi marcada
if( colecaoOpcoesParcelamento != null && ! colecaoOpcoesParcelamento.isEmpty() ){
Iterator opcoesParcelamentoValores = colecaoOpcoesParcelamento.iterator();
boolean opcaoMarcada = false;
while(opcoesParcelamentoValores.hasNext()) {
OpcoesParcelamentoHelper opcoesParcelamentoHelper =
(OpcoesParcelamentoHelper) opcoesParcelamentoValores.next();
if(efetuarParcelamentoDebitosActionForm.get("indicadorQuantidadeParcelas") != null ){
if( ((String)efetuarParcelamentoDebitosActionForm.get("indicadorQuantidadeParcelas"))
.equals(opcoesParcelamentoHelper.getQuantidadePrestacao().toString()) ){
opcaoMarcada = true;
opcoesParcelamentoHelper.setIndicadorQuantidadeParcelas(new Short(
opcoesParcelamentoHelper.getQuantidadePrestacao().toString()));
numeroPrestacoesSelecionada = opcoesParcelamentoHelper.getQuantidadePrestacao();
// valorPrestacaoSelecionada = opcoesParcelamentoHelper.getValorPrestacao();
}
}
}
if( ! opcaoMarcada ){
if( httpServletRequest.getParameter("destino")== null ){
throw new ActionServletException("atencao.pelo.menos.uma.opcao.parcelamento.marcada");
}else if (httpServletRequest.getParameter("destino").equals("4") ){
throw new ActionServletException("atencao.pelo.menos.uma.opcao.parcelamento.marcada");
}
}
}
//verificar valor da entrada m�nima permitida
verificarValorEntradaMinimaPermitida( numeroPrestacoesSelecionada,
valorEntradaInformado, valorDebitoTotalAtualizado, parcelamentoPerfil);
BigDecimal valorTotalMultas = new BigDecimal("0.00");
BigDecimal valorTotalJurosMora = new BigDecimal("0.00");
BigDecimal valorTotalAtualizacoesMonetarias = new BigDecimal("0.00");
BigDecimal valorEntradaMinima = new BigDecimal("0.00");
// Faz os c�lculos quando a entrada for modificada
String calculaOpcaoParcelamento = httpServletRequest.getParameter("calculaOpcaoParcelamento");
// 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 (efetuarParcelamentoDebitosActionForm.get("indicadorRestabelecimento") != null
&& !efetuarParcelamentoDebitosActionForm.get("indicadorRestabelecimento").equals("")) {
indicadorRestabelecimento = new Integer(String.valueOf(efetuarParcelamentoDebitosActionForm.get("indicadorRestabelecimento")));
}
Collection<ContaValoresHelper> colecaoContaValoresNegociacao = null;
if (sessao.getAttribute("colecaoContaValores") != null) {
colecaoContaValoresNegociacao = (Collection<ContaValoresHelper>) sessao.getAttribute("colecaoContaValores");
} else if (sessao.getAttribute("colecaoContaValoresImovel") != null){
colecaoContaValoresNegociacao = (Collection<ContaValoresHelper>) sessao.getAttribute("colecaoContaValoresImovel");
}
// Guia de Pagamento
Collection<GuiaPagamento> colecaoGuiaPagamento = (Collection<GuiaPagamento>) sessao.getAttribute("colecaoGuiaPagamentoValores");
if ( calculaOpcaoParcelamento != null && calculaOpcaoParcelamento.equals("1") ){
// Verifica se a entrada informada � menor que a m�nima caso venha da aba 2
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
BigDecimal valorCreditoARealizar = Util.formatarMoedaRealparaBigDecimal((String) efetuarParcelamentoDebitosActionForm.get("valorCreditoARealizar"));
//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);
// [SB0002] - Obter Op��es de Parcelamento
/*opcoesParcelamento = fachada.obterOpcoesDeParcelamento(
new Integer(resolucaoDiretoria), new Integer(codigoImovel), valorEntradaInformado,
situacaoAguaId, situacaoEsgotoId, perfilImovel, inicioIntervaloParcelamento,
indicadorRestabelecimento, colecaoContaValoresNegociacao, valorDebitoTotalAtualizado,
valorTotalMultas, valorTotalJurosMora, valorTotalAtualizacoesMonetarias,
numeroReparcelamentoConsecutivos, colecaoGuiaPagamento,usuario,
valorDebitoACobrarParcelamentoImovelBigDecimal, inicioIntervaloParcelamentoFormatado,
fimIntervaloParcelamentoFormatado, indicadoresParcelamentoHelper);*/
valorEntradaMinima = opcoesParcelamento.getValorEntradaMinima();
colecaoOpcoesParcelamento = opcoesParcelamento.getOpcoesParcelamento();
//Verificar permiss�o especial
boolean temPermissaoValMinimoEntrada = fachada.verificarPermissaoValMinimoEntrada(usuario);
if (valorEntradaInformado.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 = valorEntradaInformado;
}
sessao.setAttribute("opcoesParcelamento", opcoesParcelamento);
// Limpa os EP da Cole��o de Contas
Iterator contaValores = colecaoContaValoresNegociacao.iterator();
while(contaValores.hasNext()) {
ContaValoresHelper contaValoresHelper = (ContaValoresHelper) contaValores.next();
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);
}
}
}
// Verifica se a entrada informada � menor que a m�nima caso venha da aba 2
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());
}
}
}
}
}
if (valorEntradaInformado.compareTo(valorEntradaMinima.setScale(2,BigDecimal.ROUND_HALF_UP)) == -1) {
throw new ActionServletException("atencao.valor.entrada.deve.ser.maior.igual.minima", null, Util.formatarMoedaReal(valorEntradaMinima));
}else{
valorEntradaMinima = valorEntradaInformado;
}
sessao.setAttribute("colecaoOpcoesParcelamento", colecaoOpcoesParcelamento);
return retorno;
}
//Vivianne Sousa 10/07/2008
public void verificarValorEntradaMinimaPermitida(Short numeroPrestacoesSelecionada,
BigDecimal valorEntrada, BigDecimal valorDebitoTotalAtualizado,
ParcelamentoPerfil parcelamentoPerfil){
//caso o indicador de entrada m�nima seja SIM
if (parcelamentoPerfil.getIndicadorEntradaMinima() != null &&
parcelamentoPerfil.getIndicadorEntradaMinima().equals(ConstantesSistema.SIM) &&
numeroPrestacoesSelecionada != null &&
numeroPrestacoesSelecionada.intValue() != 0){
BigDecimal valorPrestacao = Util.dividirArredondando(
valorDebitoTotalAtualizado, new BigDecimal(numeroPrestacoesSelecionada));
valorPrestacao = valorPrestacao.setScale(Parcelamento.CASAS_DECIMAIS,Parcelamento.TIPO_ARREDONDAMENTO);
//o sistema verificar� se a entrada informada est� menor
//que o valor da presta��o calculada da op��o de qtde de parcelas selecionada
if(valorPrestacao.compareTo(valorEntrada) == 1){
throw new ActionServletException("atencao.valor.entrada.menor.possivel");
}
}
}
}