package gcom.gui.cobranca.contratoparcelamento;
import gcom.cadastro.cliente.ClienteRelacaoTipo;
import gcom.cadastro.cliente.FiltroClienteRelacaoTipo;
import gcom.cobranca.CobrancaForma;
import gcom.cobranca.DocumentoTipo;
import gcom.cobranca.FiltroCobrancaForma;
import gcom.cobranca.contratoparcelamento.ComparatorParcela;
import gcom.cobranca.contratoparcelamento.ComparatorPrestacaoContratoParcelamento;
import gcom.cobranca.contratoparcelamento.ContratoParcelamento;
import gcom.cobranca.contratoparcelamento.ContratoParcelamentoCliente;
import gcom.cobranca.contratoparcelamento.ContratoParcelamentoItem;
import gcom.cobranca.contratoparcelamento.ContratoParcelamentoRD;
import gcom.cobranca.contratoparcelamento.FiltroContratoParcelamentoCliente;
import gcom.cobranca.contratoparcelamento.FiltroContratoParcelamentoItem;
import gcom.cobranca.contratoparcelamento.FiltroContratoParcelamentoRD;
import gcom.cobranca.contratoparcelamento.FiltroPrestacaoContratoParcelamento;
import gcom.cobranca.contratoparcelamento.FiltroPrestacaoItemContratoParcelamento;
import gcom.cobranca.contratoparcelamento.FiltroQuantidadePrestacoes;
import gcom.cobranca.contratoparcelamento.FiltroTipoRelacao;
import gcom.cobranca.contratoparcelamento.PrestacaoContratoParcelamento;
import gcom.cobranca.contratoparcelamento.PrestacaoItemContratoParcelamento;
import gcom.cobranca.contratoparcelamento.QuantidadePrestacoes;
import gcom.cobranca.contratoparcelamento.TipoRelacao;
import gcom.fachada.Fachada;
import gcom.gui.GcomAction;
import gcom.util.Util;
import gcom.util.filtro.ComparacaoTexto;
import gcom.util.filtro.ParametroSimples;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* Action que define o pr�-processamento da p�gina de Manter Contrato Parcelamento por Cliente
*
* @author Paulo Diniz
* @created 16/05/2011
*/
public class ManterContratoParcelamentoClienteAction extends GcomAction {
/**
* Este caso de uso permite a inclus�o de um contrato parcelamento por cliente
*
* [UC11343 Manter Contrato de Parcelamento por Cliente
*
*
* @author Paulo Diniz
* @date 04/04/2011
*
* @param actionMapping
* @param actionForm
* @param httpServletRequest
* @param httpServletResponse
* @return
*/
//Obt�m a inst�ncia da fachada
Fachada fachada = Fachada.getInstancia();
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
//Seta o retorno
ActionForward retorno = actionMapping.findForward("exibirManter");
String idClienteContrato = httpServletRequest.getParameter("idClienteContrato");
HttpSession sessao = httpServletRequest.getSession(false);
Collection collTipoRelacao = (Collection) sessao.getAttribute("collTipoRelacao");
if(collTipoRelacao == null){
FiltroTipoRelacao filtroTipoRelacao = new FiltroTipoRelacao();
filtroTipoRelacao.adicionarParametro(new ParametroSimples(FiltroTipoRelacao.INDICADOR_USO, 1));
collTipoRelacao = fachada.pesquisar(filtroTipoRelacao, TipoRelacao.class.getName());
}
sessao.setAttribute("collTipoRelacao", collTipoRelacao);
Collection collRelacaoCliente = (Collection) sessao.getAttribute("collRelacaoCliente");
if(collRelacaoCliente == null){
FiltroClienteRelacaoTipo filtroClienteRelacTipo = new FiltroClienteRelacaoTipo("descricao");
filtroClienteRelacTipo.adicionarParametro(new ParametroSimples(FiltroClienteRelacaoTipo.INDICADOR_USO, 1));
collRelacaoCliente = fachada.pesquisar(filtroClienteRelacTipo, ClienteRelacaoTipo.class.getName());
}
sessao.setAttribute("collRelacaoCliente", collRelacaoCliente);
if(sessao.getAttribute("collResolucoesDiretoria") == null){
FiltroContratoParcelamentoRD filtro = new FiltroContratoParcelamentoRD(FiltroContratoParcelamentoRD.NUMERO);
Collection<ContratoParcelamentoRD> resolucoesDiretoria = fachada.pesquisar(filtro, ContratoParcelamentoRD.class.getName());
sessao.setAttribute("collResolucoesDiretoria", resolucoesDiretoria);
}
if(sessao.getAttribute("collFormaPgto") == null){
FiltroCobrancaForma filtroCobranca = new FiltroCobrancaForma();
filtroCobranca.adicionarParametro(new ParametroSimples(FiltroCobrancaForma.IC_USO_CONTRATO_PARCEL_CLIENTE, "1"));
Collection coll = fachada.pesquisar(filtroCobranca, CobrancaForma.class.getName());
sessao.setAttribute("collFormaPgto", coll);
}
FiltroContratoParcelamentoCliente filtroContrato = new FiltroContratoParcelamentoCliente();
filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato");
filtroContrato.adicionarCaminhoParaCarregamentoEntidade("cliente");
filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato.contratoAnterior");
filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato.parcelamentoSituacao");
filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato.usuarioResponsavel");
filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato.relacaoAnterior");
filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato.relacaoCliente");
filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato.resolucaoDiretoria");
filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato.cobrancaForma");
filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato.motivoDesfazer");
filtroContrato.adicionarCaminhoParaCarregamentoEntidade("contrato.qtdPrestacoesDaRDEscolhida");
filtroContrato.adicionarParametro(new ParametroSimples(FiltroContratoParcelamentoCliente.ID, idClienteContrato));
Collection collClienteContrato = fachada.pesquisar(filtroContrato, ContratoParcelamentoCliente.class.getName());
ContratoParcelamentoCliente contratoClienteManter = (ContratoParcelamentoCliente) collClienteContrato.iterator().next();
ContratoParcelamento contratoManter = (ContratoParcelamento) contratoClienteManter.getContrato();
////////////////////////////////////////////////////////////// CARREGAR VALORES
if(contratoClienteManter.getIndicadorClienteSuperior().intValue() == 2){
sessao.setAttribute("clienteContrato", contratoClienteManter.getCliente());
sessao.setAttribute("contratoClienteManter", contratoClienteManter);
sessao.setAttribute("tipoConsulta", "cliente");
}else{
sessao.setAttribute("clienteContrato", contratoClienteManter.getCliente());
sessao.setAttribute("contratoClienteManter", contratoClienteManter);
sessao.setAttribute("tipoConsulta", "clienteSuperior");
}
if(contratoManter.getResolucaoDiretoria() != null){
FiltroQuantidadePrestacoes filtroQtdPrestacoes = new FiltroQuantidadePrestacoes(FiltroQuantidadePrestacoes.QTD_FATURAS_PARCELADAS);
filtroQtdPrestacoes.adicionarParametro(new ComparacaoTexto(
FiltroQuantidadePrestacoes.CONTRATO_PARCELAMENTO_RD_NUMERO, contratoManter.getResolucaoDiretoria().getNumero().toUpperCase()));
List<QuantidadePrestacoes> parcelas = new ArrayList<QuantidadePrestacoes>(fachada.pesquisar(filtroQtdPrestacoes,QuantidadePrestacoes.class.getName()));
Collections.sort(parcelas, new ComparatorParcela());
sessao.setAttribute("parcelas", parcelas);
if(parcelas == null || parcelas.size() <= 0){
sessao.removeAttribute("parcelas");
}
}
sessao.setAttribute("contratoManter", contratoManter);
sessao.setAttribute("clienteContrato", contratoClienteManter.getCliente());
boolean desabilitaAtualizar = fachada.verificaContratoParcelComPagamentoFeito(contratoManter.getId());
sessao.setAttribute("desabilitaAtualizar", desabilitaAtualizar);
FiltroPrestacaoContratoParcelamento filtroPrestacao = new FiltroPrestacaoContratoParcelamento();
filtroPrestacao.adicionarParametro(new ParametroSimples(FiltroPrestacaoContratoParcelamento.CONTRATO_PARCELAMENTO_ID, contratoManter.getId()));
List<PrestacaoContratoParcelamento> collParcelas = new ArrayList<PrestacaoContratoParcelamento>
(fachada.pesquisar(filtroPrestacao, PrestacaoContratoParcelamento.class.getName()));
List<PrestacaoContratoParcelamento> collParcelasPagas = new ArrayList<PrestacaoContratoParcelamento>();
for (PrestacaoContratoParcelamento prestacao : collParcelas) {
if(fachada.verificaPrestacaoPaga(prestacao.getId())){
prestacao.setPrestacaoPaga(true);
collParcelasPagas.add(prestacao);
}else{
prestacao.setPrestacaoPaga(false);
}
FiltroPrestacaoItemContratoParcelamento filtroPrestItem = new FiltroPrestacaoItemContratoParcelamento();
filtroPrestItem.adicionarParametro(new ParametroSimples(FiltroPrestacaoItemContratoParcelamento.PRESTACAO_ID, prestacao.getId().intValue()));
Collection<PrestacaoItemContratoParcelamento> itensPagos = fachada.pesquisar(filtroPrestItem, PrestacaoItemContratoParcelamento.class.getName());
if(itensPagos != null && itensPagos.size() != 0){
prestacao.setItensPagos(itensPagos.size());
}else{
prestacao.setItensPagos(0);
}
}
Collections.sort(collParcelas, new ComparatorPrestacaoContratoParcelamento());
sessao.setAttribute("collParcelas", collParcelas);
sessao.setAttribute("collParcelasPagas", collParcelasPagas);
FiltroContratoParcelamentoItem filtroItem = new FiltroContratoParcelamentoItem();
filtroItem.adicionarCaminhoParaCarregamentoEntidade(FiltroContratoParcelamentoItem.CONTA_GERAL);
filtroItem.adicionarCaminhoParaCarregamentoEntidade(FiltroContratoParcelamentoItem.DOCUMENTO_TIPO);
filtroItem.adicionarCaminhoParaCarregamentoEntidade(FiltroContratoParcelamentoItem.CONTA_GERAL_CONTA);
filtroItem.adicionarCaminhoParaCarregamentoEntidade(FiltroContratoParcelamentoItem.CONTA_GERAL_CONTA_DEBITO_CREDITO_SITUACAO_ATUAL);
filtroItem.adicionarParametro(new ParametroSimples(FiltroContratoParcelamentoItem.CONTRATO_ID, contratoManter.getId()));
filtroItem.adicionarParametro(new ParametroSimples(FiltroContratoParcelamentoItem.DOCUMENTO_TIPO, DocumentoTipo.CONTA));
Collection<ContratoParcelamentoItem> colecaoContaItens = fachada.pesquisar(filtroItem, ContratoParcelamentoItem.class.getName());
BigDecimal valorConta = new BigDecimal("0.00");
BigDecimal valorAcrescimo = new BigDecimal("0.00");
BigDecimal valorAcrescimoTotal = new BigDecimal("0.00");
BigDecimal valorAgua = new BigDecimal("0.00");
BigDecimal valorEsgoto = new BigDecimal("0.00");
BigDecimal valorDebito = new BigDecimal("0.00");
BigDecimal valorCredito = new BigDecimal("0.00");
BigDecimal valorImposto = new BigDecimal("0.00");
BigDecimal valorDebitoACobrar = new BigDecimal("0.00");
BigDecimal valorTotalDebito = new BigDecimal("0.00");
for (ContratoParcelamentoItem contratoParcelamentoItem : colecaoContaItens) {
valorAcrescimo = BigDecimal.ZERO;
if (contratoParcelamentoItem.getContaGeral().getConta() != null
&& contratoParcelamentoItem.getContaGeral().getConta().getId() != null) {
valorConta = valorConta.add(contratoParcelamentoItem.getContaGeral().getConta().getValorTotal());
valorAcrescimo = valorAcrescimo.add(contratoParcelamentoItem.getValarAcrescImpont());
valorAgua = valorAgua.add(contratoParcelamentoItem.getContaGeral().getConta().getValorAgua());
valorEsgoto = valorEsgoto.add(contratoParcelamentoItem.getContaGeral().getConta().getValorEsgoto());
valorDebito = valorDebito.add(contratoParcelamentoItem.getContaGeral().getConta().getDebitos());
valorCredito = valorCredito.add(contratoParcelamentoItem.getContaGeral().getConta().getValorCreditos());
if(contratoParcelamentoItem.getContaGeral().getConta().getValorImposto() != null){
valorImposto = valorImposto.add(contratoParcelamentoItem.getContaGeral().getConta().getValorImposto());
}
} else if (contratoParcelamentoItem.getContaGeral().getContaHistorico() != null
&& contratoParcelamentoItem.getContaGeral().getContaHistorico().getId() != null) {
valorConta = valorConta.add(contratoParcelamentoItem.getContaGeral().getContaHistorico().getValorTotal());
valorAgua = valorAgua.add(contratoParcelamentoItem.getContaGeral().getContaHistorico().getValorAgua());
valorEsgoto = valorEsgoto.add(contratoParcelamentoItem.getContaGeral().getContaHistorico().getValorEsgoto());
valorDebito = valorDebito.add(contratoParcelamentoItem.getContaGeral().getContaHistorico().getValorDebitos());
valorCredito = valorCredito.add(contratoParcelamentoItem.getContaGeral().getContaHistorico().getValorCreditos());
if(contratoParcelamentoItem.getContaGeral().getContaHistorico().getValorImposto() != null){
valorImposto = valorImposto.add(contratoParcelamentoItem.getContaGeral().getContaHistorico().getValorImposto());
}
}
valorAcrescimoTotal = valorAcrescimoTotal.add(valorAcrescimo);
contratoParcelamentoItem.setValorJurosMora(valorAcrescimo);
contratoParcelamentoItem.setValorAtualizacaoMonetaria(BigDecimal.ZERO);
contratoParcelamentoItem.setValorMulta(BigDecimal.ZERO);
}
valorTotalDebito = valorTotalDebito.add(valorConta);
FiltroContratoParcelamentoItem filtroItemDebitoACobrar = new FiltroContratoParcelamentoItem();
filtroItemDebitoACobrar.adicionarCaminhoParaCarregamentoEntidade(
FiltroContratoParcelamentoItem.DEBITO_A_COBRAR_GERAL);
filtroItemDebitoACobrar.adicionarCaminhoParaCarregamentoEntidade(
FiltroContratoParcelamentoItem.DEBITO_A_COBRAR_GERAL_DEBITO);
filtroItemDebitoACobrar.adicionarCaminhoParaCarregamentoEntidade(
FiltroContratoParcelamentoItem.DEBITO_A_COBRAR_GERAL_DEBITO_IMOVEL);
filtroItemDebitoACobrar.adicionarCaminhoParaCarregamentoEntidade(
FiltroContratoParcelamentoItem.DEBITO_A_COBRAR_GERAL_DEBITO_TIPO);
filtroItemDebitoACobrar.adicionarParametro(new ParametroSimples(
FiltroContratoParcelamentoItem.CONTRATO_ID, contratoManter.getId()));
filtroItemDebitoACobrar.adicionarParametro(new ParametroSimples(
FiltroContratoParcelamentoItem.DOCUMENTO_TIPO, DocumentoTipo.DEBITO_A_COBRAR));
Collection<ContratoParcelamentoItem> colecaoItensDebitoACobrar =
fachada.pesquisar(filtroItemDebitoACobrar, ContratoParcelamentoItem.class.getName());
for (ContratoParcelamentoItem contratoParcelamentoItem : colecaoItensDebitoACobrar) {
valorDebitoACobrar = valorDebitoACobrar.add(contratoParcelamentoItem.getDebitoACobrarGeral().getDebitoACobrar().getValorTotal());
}
valorTotalDebito = valorTotalDebito.add(valorDebitoACobrar);
sessao.setAttribute("colecaoContaItens", colecaoContaItens);
sessao.setAttribute("colecaoItensDebitoACobrar", colecaoItensDebitoACobrar);
sessao.setAttribute("valorAgua", Util.formatarMoedaReal(valorAgua));
sessao.setAttribute("valorEsgoto", Util.formatarMoedaReal(valorEsgoto));
sessao.setAttribute("valorDebito", Util.formatarMoedaReal(valorDebito));
sessao.setAttribute("valorCredito", Util.formatarMoedaReal(valorCredito));
sessao.setAttribute("valorConta", Util.formatarMoedaReal(valorConta));
sessao.setAttribute("valorAcrescimo", Util.formatarMoedaReal(valorAcrescimoTotal));
sessao.setAttribute("valorImposto", Util.formatarMoedaReal(valorImposto));
sessao.setAttribute("valorContaAcrescimo", Util.formatarMoedaReal(valorConta.add(valorAcrescimoTotal)));
// [SB0002] ? Apresentar Dados do D�bito Parcelado
// 1.8.1. Total do D�bito
// [SB0003] ? Apresentar Dados das Condi��es do Parcelamento
// 1.3.1. Valor
sessao.setAttribute("valorTotalDebito", Util.formatarMoedaReal(valorTotalDebito));
// [SB0002] ? Apresentar Dados do D�bito Parcelado
// 1.8.2. Total do D�bito Atualizado
// [SB0003] ? Apresentar Dados das Condi��es do Parcelamento
// 1.3.3. D�bito com Acr�scimo
sessao.setAttribute("valorTotalDebitoAtualizado", Util.formatarMoedaReal(valorTotalDebito.add(valorAcrescimoTotal)));
// [SB0003] ? Apresentar Dados das Condi��es do Parcelamento
// 1.2.3. D�bito com Acr�scimos
sessao.setAttribute("valorDebitoACobrar", valorDebitoACobrar);
// 1.3.2. Acr�scimos por Impontualidade
sessao.setAttribute("valorTotalAcrescimo", valorAcrescimoTotal);
//////////////////////////////////////////////////////////////CARREGAR VALORES
return retorno;
}
}