package gcom.gui.cobranca.parcelamento;
import gcom.cadastro.cliente.Cliente;
import gcom.cadastro.cliente.FiltroCliente;
import gcom.cadastro.imovel.FiltroImovel;
import gcom.cadastro.imovel.Imovel;
import gcom.cobranca.bean.DebitoCreditoParcelamentoHelper;
import gcom.cobranca.bean.ObterDadosConfirmarCartaoCreditoDebitoHelper;
import gcom.cobranca.parcelamento.FiltroParcelamento;
import gcom.cobranca.parcelamento.Parcelamento;
import gcom.fachada.Fachada;
import gcom.faturamento.credito.CreditoARealizar;
import gcom.faturamento.debito.DebitoACobrar;
import gcom.gui.GcomAction;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
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;
/**
* Esta classe tem por finalidade confirmar o parcelamento para pagamento atrav�s cart�o de cr�dito ou
* cart�o de d�bito
*
* @author Hugo Amorim, Raphael Rossiter
* @date 00/00/0000, 24/07/2006
*/
public class ExibirParcelamentoCartaoCreditoConfirmarAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("exibirParcelamentoCartaoCreditoConfirmarAction");
HttpSession sessao = httpServletRequest.getSession(false);
Fachada fachada = Fachada.getInstancia();
ParcelamentoCartaoConfirmarForm form = (ParcelamentoCartaoConfirmarForm) actionForm;
String idParcelamento = httpServletRequest.getParameter("numeroParcelamento");
String confirmado = httpServletRequest.getParameter("confirmado");
if (confirmado != null && confirmado.trim().equalsIgnoreCase("ok")){
if(form.getIdParcelamento()!=null && !form.getIdParcelamento().equals("")){
idParcelamento = form.getIdParcelamento();
}
}
//LIMPANDO O FORMUL�RIO
String limpar = httpServletRequest.getParameter("limpar");
if(limpar != null && limpar.equalsIgnoreCase("sim")){
this.limpar(form,sessao);
}
//PESQUISAR IM�VEL
String novoImovel = httpServletRequest.getParameter("novoImovel");
if (novoImovel != null && !novoImovel.equals("")){
//CARREGANDO O FORMUL�RIO COM AS INFORMA��ES DO IM�VEL
getImovel(form,httpServletRequest);
if (form.getMatriculaImovel() != null && !form.getMatriculaImovel().equals("")){
//IDENTIFICANDO A MODALIDADE DE CART�O QUE SER� UTILIZADA
Short modalidade = Short.valueOf(form.getModalidadeCartao());
Integer matriculaImovel = Integer.valueOf(form.getMatriculaImovel());
ObterDadosConfirmarCartaoCreditoDebitoHelper dadosConfirmarCartaoCreditoDebito =
fachada.obterDadosConfirmarCartaoCreditoDebito(modalidade, matriculaImovel);
this.limparModalidadeCartaoDebito(form, sessao);
this.limparModalidadeCartaoCredito(form, sessao);
if (dadosConfirmarCartaoCreditoDebito.getModalidade().equals(
ConstantesSistema.MODALIDADE_CARTAO_CREDITO)){
sessao.setAttribute("cartaoCredito","");
sessao.setAttribute("colecaoParcelamentos",
dadosConfirmarCartaoCreditoDebito.getColecaoParcelamentosModalidadeCredito());
}
else{
sessao.setAttribute("cartaoDebito", "");
//CONTA
sessao.setAttribute("colecaoConta", dadosConfirmarCartaoCreditoDebito
.getDebitosImovelModalidadeDebito().getColecaoContasValoresImovel());
//DEBITO_A_COBRAR
sessao.setAttribute("colecaoDebitoACobrar", dadosConfirmarCartaoCreditoDebito
.getDebitosImovelModalidadeDebito().getColecaoDebitoACobrar());
//GUIA_PAGAMENTO
sessao.setAttribute("colecaoGuiaPagamento", dadosConfirmarCartaoCreditoDebito
.getDebitosImovelModalidadeDebito().getColecaoGuiasPagamentoValores());
//PARCELAMENTO
sessao.setAttribute("colecaoDebitoCreditoParcelamento", dadosConfirmarCartaoCreditoDebito
.getDebitosImovelModalidadeDebito().getColecaoDebitoCreditoParcelamentoHelper());
}
}
}
//PESQUISAR CLIENTE - UTILIZADO PELO POPUP
String pesquisaCliente = httpServletRequest.getParameter("pesquisaCliente");
if (pesquisaCliente != null && pesquisaCliente.equalsIgnoreCase("sim")) {
idParcelamento = form.getIdParcelamento();
this.pesquisarCliente(form.getIdCliente() ,form,fachada,httpServletRequest);
}
//PESQUISAR PARCELAMENTO (CART�O DE CR�DITO)
if(idParcelamento!= null && !idParcelamento.equals("")){
FiltroParcelamento filtroParcelamento = new FiltroParcelamento();
filtroParcelamento.adicionarParametro(new ParametroSimples(
FiltroParcelamento.ID, form.getIdParcelamento()));
filtroParcelamento.adicionarCaminhoParaCarregamentoEntidade("parcelamentoSituacao");
Collection<Parcelamento> colecaoParcelamento = fachada.pesquisar(filtroParcelamento,
Parcelamento.class.getName() );
Parcelamento parcelamento = (Parcelamento) Util.retonarObjetoDeColecao(colecaoParcelamento);
/*
* [FS0005 � Alerta Parcelamento Com Parcela Paga]
* [FS0006 � Parcelamento Sem D�bito a Cobrar]
* [FS0007 � Parcelamento Com Pagamento de Cart�o de Cr�dito J� Informado]
*/
int numeroPrestacaoCobradas =
fachada.validarParcelamentoCartaoCredito(parcelamento);
if (confirmado == null || !confirmado.trim().equalsIgnoreCase("ok")){
if(numeroPrestacaoCobradas != 0){
httpServletRequest.setAttribute("caminhoActionConclusao","/gsan/exibirParcelamentoCartaoCreditoConfirmarAction.do");
//[FS0005 � Alerta Parcelamento Com Parcela Paga]
return montarPaginaConfirmacao("atencao.parcelamento_conta_paga",
httpServletRequest,actionMapping, numeroPrestacaoCobradas + "");
}
}
sessao.setAttribute("parcelamento", idParcelamento);
sessao.setAttribute("ParcelamemtoSelecionado",idParcelamento);
form.setNumeroPrestacoes(parcelamento.getNumeroPrestacoes());
form.setValorPrestacao(parcelamento.getValorPrestacao());
//form.setValorTotal(parcelamento.getValorParcelado());
// Alterado por R�mulo Aur�lio CRC 4055 Data: 26/03/2010
// Analista Rosana Carvalho
BigDecimal valorTotalParcelamento = new BigDecimal(0.0);
valorTotalParcelamento = parcelamento.getValorPrestacao().multiply(
new BigDecimal(parcelamento.getNumeroPrestacoes()));
form.setValorTotal(valorTotalParcelamento);
// Fim altera��o CRC 4055
form.setParcelamento(parcelamento.getParcelamento());
form.setIdParcelamento(idParcelamento);
}
if (limpar == null && novoImovel == null){
//ANTECIPA��O DE PARCELAS DE PARCELAMENTO
Map<String, String[]> requestAntecipacaoParcelasMap = httpServletRequest.getParameterMap();
this.obterAntecipacaoParcelasParcelamentosSelecionados(sessao, requestAntecipacaoParcelasMap, fachada);
}
//MARCA��O CHECKBOX
if (form.getConta() != null){
httpServletRequest.setAttribute("idsConta", this.montarString(form.getConta()));
}
if (form.getDebito() != null){
httpServletRequest.setAttribute("idsDebito", this.montarString(form.getDebito()));
}
if (form.getGuiaPagamento() != null){
httpServletRequest.setAttribute("idsGuia", this.montarString(form.getGuiaPagamento()));
}
if (form.getParcelamentoDebito() != null){
httpServletRequest.setAttribute("idsParcelamentoDebito", this.montarString(form.getParcelamentoDebito()));
}
return retorno;
}
private String montarString(String[] selecionadas){
String retorno = "";
for (int i = 0; i < selecionadas.length; i++) {
if (retorno.length() < 1){
retorno = selecionadas[i];
}
else{
retorno = retorno + "," + selecionadas[i];
}
}
return retorno;
}
/**
* Obtendo os dados do im�vel informado
*
* @author Hugo Amorim, Raphael Rossiter
* @date 00/00/0000, 05/01/2010
*
* @param parcelamentoCartaoConfirmarForm
* @param httpServletRequest
*/
private void getImovel(ParcelamentoCartaoConfirmarForm parcelamentoCartaoConfirmarForm,
HttpServletRequest httpServletRequest) {
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
FiltroImovel filtroImovel = new FiltroImovel();
filtroImovel.adicionarParametro(new ParametroSimples(FiltroImovel.ID,
parcelamentoCartaoConfirmarForm.getMatriculaImovel()));
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("localidade");
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("setorComercial");
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("quadra");
Collection colecaoImovel = fachada.pesquisar(filtroImovel, Imovel.class.getName());
if (colecaoImovel != null && !colecaoImovel.isEmpty()) {
Imovel imovel = (Imovel) Util.retonarObjetoDeColecao(colecaoImovel);
//OBTENDO O ENDERE�O DO IM�VEL ABREVIADO
String enderecoFormatado = fachada.pesquisarEnderecoAbreviadoCAER(imovel.getId());
sessao.setAttribute("enderecoFormatado", enderecoFormatado);
sessao.setAttribute("inscricaoImovelEncontrada", "true");
parcelamentoCartaoConfirmarForm.setInscricaoImovel(imovel.getInscricaoFormatada());
parcelamentoCartaoConfirmarForm.setEnderecoImovel(enderecoFormatado);
}
else {
//IM�VEL INEXISTENTE
this.limpar(parcelamentoCartaoConfirmarForm, sessao);
sessao.removeAttribute("inscricaoImovelEncontrada");
parcelamentoCartaoConfirmarForm.setMatriculaImovel("");
parcelamentoCartaoConfirmarForm.setInscricaoImovel("Matr�cula inexistente");
}
}
/**
* Limpando os dados do formul�rio para inicio de uma nova requisi��o
*
* @author Hugo Amorim, Raphael Rossiter
* @date 00/00/0000, 05/01/2010
*
* @param form
* @param sessao
*/
public void limpar(ParcelamentoCartaoConfirmarForm form,HttpSession sessao){
//DADOS GERAIS
form.setModalidadeCartao("");
form.setMatriculaImovel("");
form.setInscricaoImovel("");
form.setEnderecoImovel("");
form.setValorTotal(new BigDecimal(0.0));
sessao.removeAttribute("inscricaoImovelEncontrada");
sessao.removeAttribute("enderecoFormatado");
//DADOS PARA TRANSA��O COM CART�O DE CR�DITO
this.limparModalidadeCartaoCredito(form, sessao);
//DADOS PARA TRANSA��O COM CART�O DE D�BITO
this.limparModalidadeCartaoDebito(form, sessao);
//DADOS DO POPUP PARA CADASTRO DA TRANSA��O
form.setCartaoCredito("-1");
form.setIdCliente("");
form.setNomeCliente("");
form.setAutorizacaoCartao("");
form.setValidadeCartao("");
form.setDocumentoCartao("");
form.setNumeroIdentificacaoTransacao("");
form.setNumeroCartao("");
form.setValorTransacao("");
form.setDataOperadora("");
form.setQtdParcelas("");
}
/**
* Limpando os dados do formul�rio para inicio de uma nova requisi��o
*
* @author Hugo Amorim, Raphael Rossiter
* @date 00/00/0000, 05/01/2010
*
* @param form
* @param sessao
*/
public void limparModalidadeCartaoCredito(ParcelamentoCartaoConfirmarForm form,HttpSession sessao){
form.setValorTotal(new BigDecimal(0.0));
form.setIdParcelamento("");
form.setValorPrestacao(new BigDecimal(0.0));
form.setNumeroPrestacoes(new Short("0"));
form.setParcelamento(null);
sessao.removeAttribute("cartaoCredito");
sessao.removeAttribute("ParcelamemtoSelecionado");
sessao.removeAttribute("parcelamento");
sessao.removeAttribute("colecaoParcelamentos");
sessao.removeAttribute("colecaoTransacao");
}
/**
* Limpando os dados do formul�rio para inicio de uma nova requisi��o
*
* @author Hugo Amorim, Raphael Rossiter
* @date 00/00/0000, 05/01/2010
*
* @param form
* @param sessao
*/
public void limparModalidadeCartaoDebito(ParcelamentoCartaoConfirmarForm form,HttpSession sessao){
form.setValorTotal(new BigDecimal(0.0));
sessao.removeAttribute("cartaoDebito");
sessao.removeAttribute("colecaoConta");
sessao.removeAttribute("colecaoDebitoACobrar");
sessao.removeAttribute("colecaoGuiaPagamento");
sessao.removeAttribute("colecaoDebitoCreditoParcelamento");
sessao.removeAttribute("colecaoTransacao");
form.setConta(new String[0]);
form.setGuiaPagamento(new String[0]);
form.setDebito(new String[0]);
form.setParcelamentoDebito(new String[0]);
}
/**
* Obtendo os dados do cliente
*
* @author Hugo Amorim, Raphael Rossiter
* @date 00/00/0000, 05/01/2010
*
* @param idCliente
* @param filtro
* @param fachada
* @param httpServletRequest
*/
public void pesquisarCliente( String idCliente,
ParcelamentoCartaoConfirmarForm filtro,
Fachada fachada, HttpServletRequest httpServletRequest) {
FiltroCliente filtroCliente = new FiltroCliente();
filtroCliente.adicionarParametro(new ParametroSimples(
FiltroCliente.ID, idCliente));
filtroCliente.adicionarParametro(new ParametroSimples(FiltroCliente.INDICADOR_USO,
ConstantesSistema.INDICADOR_USO_ATIVO));
Collection clienteEncontrado = fachada.pesquisar(filtroCliente,
Cliente.class.getName());
if (clienteEncontrado != null && !clienteEncontrado.isEmpty()) {
filtro.setIdCliente("" + ((Cliente) ((List) clienteEncontrado).get(0)).getId());
filtro.setNomeCliente(((Cliente) ((List) clienteEncontrado).get(0)).getNome());
httpServletRequest.setAttribute("idClienteNaoEncontrado", "true");
httpServletRequest.setAttribute("nomeCampo", "cepFiltro");
}
else {
filtro.setIdCliente("");
httpServletRequest.setAttribute("idClienteNaoEncontrado", "exception");
filtro.setNomeCliente("Cliente inexistente");
httpServletRequest.setAttribute("nomeCampo", "idClienteFiltro");
}
}
/**
* [UC0630] Solicitar Emiss�o do Extrato de D�bitos
*
* @author Raphael Rossiter
* @date 26/04/2010
*
* @param sessao
* @param requestMap
* @param fachada
* @return Object[]
*/
private Object[] obterAntecipacaoParcelasParcelamentosSelecionados(HttpSession sessao,
Map<String, String[]> requestMap, Fachada fachada){
Object[] retorno = null;
//PARCELAMENTOS DISPONIBILIZADOS PARA O USU�RIO SELECIONAR
Collection colecaoDebitoCreditoParcelamentoSessao = (Collection)
sessao.getAttribute("colecaoDebitoCreditoParcelamento");
if (colecaoDebitoCreditoParcelamentoSessao != null &&
!colecaoDebitoCreditoParcelamentoSessao.isEmpty()){
Iterator itColecaoDebitoCreditoParcelamentoSessao = colecaoDebitoCreditoParcelamentoSessao.iterator();
DebitoCreditoParcelamentoHelper debitoCreditoParcelamentoHelper = null;
BigDecimal valorTotalDebito = BigDecimal.ZERO;
BigDecimal valorTotalCredito = BigDecimal.ZERO;
Collection<DebitoCreditoParcelamentoHelper> colecaoAntecipacaoDebitos = new ArrayList();
Collection<DebitoCreditoParcelamentoHelper> colecaoAntecipacaoCreditos = new ArrayList();
while (itColecaoDebitoCreditoParcelamentoSessao.hasNext()){
debitoCreditoParcelamentoHelper = (DebitoCreditoParcelamentoHelper)
itColecaoDebitoCreditoParcelamentoSessao.next();
if (requestMap.get("parc" + debitoCreditoParcelamentoHelper.getParcelamento().getId()) != null) {
//QUANTIDADE DE PARCELAS QUE SER�O ANTECIPADAS
String qtdAntecipacaoParcelas = (requestMap.get("parc" +
debitoCreditoParcelamentoHelper.getParcelamento().getId()))[0];
if(qtdAntecipacaoParcelas != null && !qtdAntecipacaoParcelas.equals("")){
//INICIALIZANDO O OBJETO DE RETORNO
if (retorno == null){
retorno = new Object[4];
}
//QUANTIDADE DE PARCELAS QUE SER�O ANTECIPADAS
debitoCreditoParcelamentoHelper.setQuantidadeAntecipacaoParcelas(
Integer.valueOf(qtdAntecipacaoParcelas));
/*
* SELECIONANDO OS D�BITOS RELACIONADOS AO PARCELAMENTO E CALCULANDO O VALOR QUE SER�
* COLOCADO NO EXTRATO DE ACORDO COM A QUANTIDADE DE PARCELAS QUE FOI INFORMADA PARA
* ANTECIPA��O.
*/
if (debitoCreditoParcelamentoHelper.getColecaoDebitoACobrarParcelamento() != null &&
!debitoCreditoParcelamentoHelper.getColecaoDebitoACobrarParcelamento().isEmpty()){
Collection colecaoDebito = debitoCreditoParcelamentoHelper
.getColecaoDebitoACobrarParcelamento();
Iterator iterDebito = colecaoDebito.iterator();
while (iterDebito.hasNext()) {
DebitoACobrar debitoACobrar = (DebitoACobrar) iterDebito.next();
/*
* [UC0630] Solicitar Emiss�o do Extrato de D�bitos
* [FS0003] � Quantidade de Parcelas Informadas Inv�lida
*/
fachada.verificarQuantidadeParcelasInformada(debitoACobrar,
Short.valueOf(qtdAntecipacaoParcelas));
//CALCULANDO O VALOR QUE SER� ANTECIPADO
valorTotalDebito = valorTotalDebito.add(debitoACobrar
.getValorAntecipacaoParcela(Integer.valueOf(qtdAntecipacaoParcelas)));
}
//D�BITOS A COBRAR QUE FAR�O PARTE DO EXTRATO DE D�BITO
colecaoAntecipacaoDebitos.add(debitoCreditoParcelamentoHelper);
}
/*
* SELECIONANDO OS CR�DITOS RELACIONADOS AO PARCELAMENTO E CALCULANDO O VALOR QUE SER�
* COLOCADO NO EXTRATO DE ACORDO COM A QUANTIDADE DE PARCELAS QUE FOI INFORMADA PARA
* ANTECIPA��O.
*/
if(debitoCreditoParcelamentoHelper.getColecaoCreditoARealizarParcelamento() != null &&
!debitoCreditoParcelamentoHelper.getColecaoCreditoARealizarParcelamento().isEmpty()){
Collection colecaoCredito = debitoCreditoParcelamentoHelper
.getColecaoCreditoARealizarParcelamento();
Iterator iterCredito = colecaoCredito.iterator();
while (iterCredito.hasNext()) {
CreditoARealizar creditoARealizar = (CreditoARealizar) iterCredito.next();
//CALCULANDO O VALOR QUE SER� ANTECIPADO
valorTotalCredito = valorTotalCredito.add(creditoARealizar
.getValorAntecipacaoParcela(Integer.valueOf(qtdAntecipacaoParcelas)));
}
//CR�DITOS A REALIZAR QUE FAR�O PARTE DO EXTRATO DE D�BITO
colecaoAntecipacaoCreditos.add(debitoCreditoParcelamentoHelper);
}
}
else{
//QUANTIDADE DE PARCELAS QUE SER�O ANTECIPADAS
debitoCreditoParcelamentoHelper.setQuantidadeAntecipacaoParcelas(null);
}
}
else{
//QUANTIDADE DE PARCELAS QUE SER�O ANTECIPADAS
debitoCreditoParcelamentoHelper.setQuantidadeAntecipacaoParcelas(null);
}
}
if (retorno != null){
retorno[0] = colecaoAntecipacaoDebitos;
retorno[1] = valorTotalDebito;
retorno[2] = colecaoAntecipacaoCreditos;
retorno[3] = valorTotalCredito;
}
}
return retorno;
}
}