package gcom.gui.cobranca.parcelamento; import gcom.cobranca.bean.ContaValoresHelper; import gcom.cobranca.bean.DebitoCreditoParcelamentoHelper; import gcom.cobranca.bean.ParcelamentoCartaoCreditoHelper; import gcom.cobranca.parcelamento.Parcelamento; import gcom.fachada.Fachada; import gcom.faturamento.GuiaPagamentoGeral; import gcom.faturamento.credito.CreditoARealizar; import gcom.faturamento.debito.DebitoACobrar; import gcom.faturamento.debito.DebitoACobrarGeral; 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.ArrayList; import java.util.Collection; import java.util.Iterator; 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; public class ParcelamentoCartaoCreditoConfirmarAction extends GcomAction { public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { ParcelamentoCartaoConfirmarForm form = (ParcelamentoCartaoConfirmarForm) actionForm; ActionForward retorno = actionMapping.findForward("telaSucesso"); Fachada fachada = Fachada.getInstancia(); HttpSession sessao = httpServletRequest.getSession(false); Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado"); //COLE��O COM AS TRANSA��ES INFORMADAS PARA CADA CART�O (D�BITO OU CR�DITO) Collection colecaoTransacao = (Collection) sessao.getAttribute("colecaoTransacao"); if (form.getModalidadeCartao().equals(ConstantesSistema.MODALIDADE_CARTAO_CREDITO.toString())){ /* * [FS0007] � Somat�rio Inv�lido */ fachada.verificarSomatorio(colecaoTransacao, form.getValorTotal()); String idParcelamentoSelecionado = (String) sessao.getAttribute("parcelamento"); //CONFIRMANDO PARCELAMENTO POR CART�O DE CR�DITO fachada.confirmarCartaoCredito(Integer.valueOf(idParcelamentoSelecionado), colecaoTransacao, usuarioLogado); montarPaginaSucesso(httpServletRequest,"Parcelamento confirmado com sucesso.", "Realizar outra confirma��o de parcelamento", "exibirParcelamentoCartaoCreditoConfirmarAction.do?menu=sim"); } else{ /* * [FS00010] � Somat�rio Inv�lido */ String valorTotal = httpServletRequest.getParameter("valorTotal"); fachada.verificarSomatorio(colecaoTransacao, new BigDecimal(valorTotal)); ParcelamentoCartaoCreditoHelper parcelamentoCartaoCreditoHelper = (ParcelamentoCartaoCreditoHelper) Util.retonarObjetoDeColecao(colecaoTransacao); //CONTA String[] contasSelecionadas = form.getConta(); Collection<ContaValoresHelper> colecaoConta = this.getColacaoConta(contasSelecionadas, sessao); //GUIA DE PAGAMENTO String[] guiasSelecionadas = form.getGuiaPagamento(); Collection<GuiaPagamentoGeral> colecaoGuiaPagamento = this.getColacaoGuiaPagamento(guiasSelecionadas); //DEBITO A COBRAR String[] debitosSelecionados = form.getDebito(); Collection<DebitoACobrarGeral> colecaoDebitoACobrar = this.getColacaoDebitoACobrar(debitosSelecionados); //PARCELAMENTO String[] parcelamentoSelecionados = form.getParcelamentoDebito(); Collection<Parcelamento> colecaoParcelamento = this.getColacaoParcelamento(parcelamentoSelecionados); //ANTECIPA��O DE PARCELAS DE PARCELAMENTO Map<String, String[]> requestAntecipacaoParcelasMap = httpServletRequest.getParameterMap(); Object[] parcelasAntecipacaoParcelamento = this.obterAntecipacaoParcelasParcelamentosSelecionados( sessao, requestAntecipacaoParcelasMap, fachada); Collection<DebitoCreditoParcelamentoHelper> colecaoAntecipacaoDebitosDeParcelamento = null; Collection<DebitoCreditoParcelamentoHelper> colecaoAntecipacaoCreditosDeParcelamento = null; if (parcelasAntecipacaoParcelamento != null){ colecaoAntecipacaoDebitosDeParcelamento = (Collection<DebitoCreditoParcelamentoHelper>) parcelasAntecipacaoParcelamento[0]; colecaoAntecipacaoCreditosDeParcelamento = (Collection<DebitoCreditoParcelamentoHelper>) parcelasAntecipacaoParcelamento[2]; } //CONFIRMANDO PAGAMENTO POR CART�O DE D�BITO fachada.confirmarCartaoDebito(parcelamentoCartaoCreditoHelper, colecaoConta, colecaoGuiaPagamento, colecaoDebitoACobrar, colecaoParcelamento, colecaoAntecipacaoDebitosDeParcelamento, colecaoAntecipacaoCreditosDeParcelamento, usuarioLogado); montarPaginaSucesso(httpServletRequest,"Pagamento efetuado com sucesso", "Realizar outro pagamento por cart�o de d�bito", "exibirParcelamentoCartaoCreditoConfirmarAction.do?menu=sim"); } return retorno; } private Collection<ContaValoresHelper> getColacaoConta(String[] contasSelecionadas, HttpSession sessao){ Collection<ContaValoresHelper> colecaoContaCompleta = (Collection) sessao.getAttribute("colecaoConta"); Collection<ContaValoresHelper> colecaoContaSelecionadas = null; if (contasSelecionadas != null && !contasSelecionadas.equals("")){ colecaoContaSelecionadas = new ArrayList(); String[] arrayContas = contasSelecionadas; for (int i = 0; i < arrayContas.length; i++) { Integer idContaSelecionada = Integer.valueOf(arrayContas[i]); Iterator iteratorContaCompleta = colecaoContaCompleta.iterator(); while (iteratorContaCompleta.hasNext()){ ContaValoresHelper contaValoresHelper = (ContaValoresHelper) iteratorContaCompleta.next(); if (contaValoresHelper.getConta().getId().equals(idContaSelecionada)){ colecaoContaSelecionadas.add(contaValoresHelper); break; } } } } return colecaoContaSelecionadas; } private Collection<GuiaPagamentoGeral> getColacaoGuiaPagamento(String[] guiasSelecionadas){ Collection<GuiaPagamentoGeral> retorno = null; if (guiasSelecionadas != null && !guiasSelecionadas.equals("")){ retorno = new ArrayList(); String[] arrayGuias = guiasSelecionadas; for (int i = 0; i < arrayGuias.length; i++) { GuiaPagamentoGeral guiaPagamentoGeral = new GuiaPagamentoGeral(); guiaPagamentoGeral.setId(Integer.valueOf(arrayGuias[i])); retorno.add(guiaPagamentoGeral); } } return retorno; } private Collection<DebitoACobrarGeral> getColacaoDebitoACobrar(String[] debitosSelecionados){ Collection<DebitoACobrarGeral> retorno = null; if (debitosSelecionados != null && !debitosSelecionados.equals("")){ retorno = new ArrayList(); String[] arrayDebitos = debitosSelecionados; for (int i = 0; i < arrayDebitos.length; i++) { DebitoACobrarGeral debitoACobrarGeral = new DebitoACobrarGeral(); debitoACobrarGeral.setId(Integer.valueOf(arrayDebitos[i])); retorno.add(debitoACobrarGeral); } } return retorno; } private Collection<Parcelamento> getColacaoParcelamento(String[] parcelamentosSelecionados){ Collection<Parcelamento> retorno = null; if (parcelamentosSelecionados != null && !parcelamentosSelecionados.equals("")){ retorno = new ArrayList(); String[] arrayParcelamentos = parcelamentosSelecionados; for (int i = 0; i < arrayParcelamentos.length; i++) { Parcelamento parcelamento = new Parcelamento(); parcelamento.setId(Integer.valueOf(arrayParcelamentos[i])); retorno.add(parcelamento); } } return retorno; } /** * [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); } } } if (retorno != null){ retorno[0] = colecaoAntecipacaoDebitos; retorno[1] = valorTotalDebito; retorno[2] = colecaoAntecipacaoCreditos; retorno[3] = valorTotalCredito; } } return retorno; } }