Ejemplo n.º 1
0
        public void InserirRespostaCartao(Cartao.ResultadoProcessamento resultado)
        {
            List <tb_solicitacao_saida> listaSolicitacaoSaida;

            if (resultado.Aprovado)
            {
                listaSolicitacaoSaida = ObterSolicitacaoSaida(resultado.CodSolicitacao).ToList();
                // Pode passar mais de um cartão de crédito
                if (listaSolicitacaoSaida.Count == 1)
                {
                    tb_solicitacao_saida           solicitacaoSaida = listaSolicitacaoSaida.FirstOrDefault();
                    IEnumerable <Conta>            listaContas      = GerenciadorConta.GetInstance(null).ObterPorSaida(solicitacaoSaida.codSaida);
                    List <Cartao.RespostaAprovada> listaAprovadas   = resultado.ListaRespostaAprovada;
                    foreach (Cartao.RespostaAprovada aprovada in listaAprovadas)
                    {
                        String        tipoCartaoString = Enum.GetName(typeof(Cartao.TipoCartao), aprovada.TipoCartao);
                        CartaoCredito cartao           = GerenciadorCartaoCredito.GetInstance().ObterPorMapeamentoCappta(aprovada.NomeBandeiraCartao).Where(c => c.TipoCartao.Equals(tipoCartaoString)).ElementAtOrDefault(0);
                        Conta         conta            = listaContas.Where(c => c.ValorPagar == (decimal)aprovada.Valor && String.IsNullOrWhiteSpace(c.NumeroDocumento)).FirstOrDefault();
                        GerenciadorSaidaPagamento.GetInstance(null).AtualizarPorAutorizacaoCartao(conta.CodSaida, cartao.CodCartao, aprovada.NumeroControle);

                        conta.CodPessoa       = cartao.CodPessoa;
                        conta.NumeroDocumento = aprovada.NumeroControle;
                        conta.DataVencimento  = DateTime.Now.AddDays(cartao.DiaBase);
                        GerenciadorConta.GetInstance(null).AtualizarDadosCartaoCredito(conta);
                    }
                }
                //else
                //{
                //    foreach (tb_solicitacao_saida solicitacaoSaida in listaSolicitacaoSaida)
                //    {
                //        IEnumerable<Conta> contas = GerenciadorConta.GetInstance(null).ObterPorSaida(solicitacaoSaida.codSaida);

                //    }
                //}
                InserirAutorizacaoCartao(resultado, listaSolicitacaoSaida);
            }

            AtualizarSolicitacaoDocumentoCartao(resultado);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Gera o cupom fiscal a partir das saídas e valores a vista de cada saía
        /// </summary>
        /// <param name="saidaPagamentos"></param>
        private void GerarDocumentoECF(List <tb_solicitacao_saida> listaSolicitacaoSaida, List <tb_solicitacao_pagamento> listaPagamentos)
        {
            try
            {
                List <Saida> saidas = new List <Saida>();
                decimal      totalSolicitacaoSaidas = 0;
                foreach (tb_solicitacao_saida solicitacaoSaida in listaSolicitacaoSaida)
                {
                    Saida saida = GerenciadorSaida.GetInstance(null).Obter(solicitacaoSaida.codSaida);
                    if (!string.IsNullOrEmpty(saida.CupomFiscal))
                    {
                        throw new NegocioException("Cupom Fiscal referente a essa pré-venda já foi impresso.");
                    }
                    saidas.Add(saida);
                    totalSolicitacaoSaidas += solicitacaoSaida.valorTotal;
                }

                if (saidas.Count > 0)
                {
                    DirectoryInfo pastaECF = new DirectoryInfo(Global.PASTA_COMUNICACAO_FRENTE_LOJA);

                    if (pastaECF.Exists)
                    {
                        // nome do arquivo é igual ao primeiro da lista
                        String       nomeArquivo = Global.PASTA_COMUNICACAO_FRENTE_LOJA + saidas[0].CodSaida + ".txt";
                        StreamWriter arquivo     = new StreamWriter(nomeArquivo, false, Encoding.ASCII);

                        // imprime dados do cliente no cupom fiscal
                        if (!saidas[0].CpfCnpj.Trim().Equals(""))
                        {
                            arquivo.WriteLine("<CPF>" + saidas[0].CpfCnpj);
                        }
                        decimal precoTotalProdutosVendidos = 0;

                        // imprime produtos dos cupons fiscais
                        List <SaidaProduto> listaSaidaProdutos = new List <SaidaProduto>();
                        Pessoa cliente = (Pessoa)GerenciadorPessoa.GetInstance().Obter(saidas[0].CodCliente).ElementAt(0);
                        foreach (Saida saida in saidas)
                        {
                            List <SaidaProduto> saidaProdutos = new List <SaidaProduto>();
                            if (cliente.ImprimirCF)
                            {
                                saidaProdutos = GerenciadorSaidaProduto.GetInstance(null).ObterPorSaida(saida.CodSaida);
                            }
                            else
                            {
                                saidaProdutos = GerenciadorSaidaProduto.GetInstance(null).ObterPorSaidaSemCST(saida.CodSaida, Cst.ST_OUTRAS);
                            }

                            decimal totalAVista = listaSolicitacaoSaida.Where(cs => cs.codSaida.Equals(saida.CodSaida)).Sum(cs => cs.valorTotal);
                            if (saidaProdutos.Count > 0)
                            {
                                // associa as saídas ao pedido que foi gerado para emissão do cupom fiscal
                                //GerenciadorSaidaPedido.GetInstance().RemoverPorSaida(saida.CodSaida, saceContext);
                                if (GerenciadorSaidaPedido.GetInstance().ObterPorSaida(saida.CodSaida).Count == 0)
                                {
                                    GerenciadorSaidaPedido.GetInstance().Inserir(new SaidaPedido()
                                    {
                                        CodSaida = saida.CodSaida, CodPedido = saidas[0].CodSaida, TotalAVista = totalAVista
                                    });
                                }
                                else
                                {
                                    GerenciadorSaidaPedido.GetInstance().Atualizar(new SaidaPedido()
                                    {
                                        CodSaida = saida.CodSaida, CodPedido = saidas[0].CodSaida, TotalAVista = totalAVista
                                    });
                                }
                                listaSaidaProdutos.AddRange(saidaProdutos);
                            }
                            else
                            {
                                GerenciadorSaida.GetInstance(null).AtualizarTipoPedidoGeradoPorSaida(Saida.TIPO_VENDA, "", totalAVista, saida.CodSaida);
                            }
                        }

                        int quantidadeProdutosImpressos = ImprimirProdutosCupomFiscal(arquivo, ref precoTotalProdutosVendidos, listaSaidaProdutos);

                        if (quantidadeProdutosImpressos > 0)
                        {
                            // imprime detalhes do cliente
                            if (!saidas[0].CodCliente.Equals(Global.CLIENTE_PADRAO))
                            {
                                arquivo.WriteLine("<NOME> Cliente: " + saidas[0].NomeCliente);
                                arquivo.WriteLine("<CPF> CPF/CNPJ: " + saidas[0].CpfCnpj);
                            }

                            // imprimir imposto na nota
                            decimal valorImposto           = GerenciadorImposto.GetInstance().CalcularValorImpostoProdutos(listaSaidaProdutos).Sum(sp => sp.ValorImposto);
                            decimal valorImpostoPercentual = valorImposto / saidas.Sum(s => s.TotalAVista) * 100;
                            arquivo.WriteLine("<OBS>Val Aprox dos Tributos R$ " + valorImposto.ToString("N2") + " (" + valorImpostoPercentual.ToString("N2") + "%) " + "  Fonte: IBPT");


                            // Buscar pagamentos quando não foram passados por parâmetro
                            //List<SaidaPagamento> saidaPagamentos = (List<SaidaPagamento>)GerenciadorSaidaPagamento.GetInstance(null).ObterPorSaidas(listaSolicitacaoCupomSaida.Select(cs=>cs.codSaida).ToList());

                            // imprime desconto
                            decimal desconto = (precoTotalProdutosVendidos - listaSolicitacaoSaida.Sum(cs => cs.valorTotal));
                            if (desconto >= 0)
                            {
                                arquivo.WriteLine("<DESCONTO>" + desconto.ToString("N2"));
                            }
                            //arquivo.WriteLine("<OBS> Total de Impostos pagos:" + saida.
                            foreach (tb_solicitacao_pagamento pagamento in listaPagamentos)
                            {
                                if (pagamento.codFormaPagamento != FormaPagamento.CARTAO)
                                {
                                    arquivo.Write("<PGTO> 01;DINHEIRO;");
                                    arquivo.Write(pagamento.valor + ";");
                                    arquivo.WriteLine("N;"); //N ou V
                                }
                                else
                                {
                                    CartaoCredito cartaoCredito = GerenciadorCartaoCredito.GetInstance().Obter(pagamento.codCartao).ElementAtOrDefault(0);
                                    arquivo.Write("<PGTO>" + cartaoCredito.Mapeamento + ";");
                                    arquivo.Write(cartaoCredito.Nome + ";");
                                    arquivo.Write(pagamento.valor + ";");
                                    arquivo.WriteLine("V;"); //N ou V vinculado ao TEF
                                }
                            }
                            arquivo.Close();
                        }
                        else
                        {
                            arquivo.Close();
                            ExcluirDocumentoFiscal(saidas[0].CodSaida);
                        }
                    }
                }
                //transaction.Commit();
            }
            catch (Exception e)
            {
                //transaction.Rollback();
                if (e is NegocioException)
                {
                    throw e;
                }
                //TODO: definir mecanismo para lançar exceção de processo background
            }
            //finally
            //{
            //    saceContext.Connection.Close();
            //}
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="resultado"></param>
        public void AtualizarPedidosComAutorizacaoCartao()
        {
            var repAutorizacao = new RepositorioGenerico <tb_autorizacao_cartao>();
            var saceEntities   = (SaceEntities)repAutorizacao.ObterContexto();
            var query          = from autorizacao in saceEntities.tb_autorizacao_cartao
                                 where autorizacao.processado.Equals(false)
                                 select autorizacao;
            List <tb_autorizacao_cartao> listaAutorizacoes = query.ToList();

            if (listaAutorizacoes.Count > 0)
            {
                var repConta                      = new RepositorioGenerico <ContaE>();
                var repSaidaPagamento             = new RepositorioGenerico <SaidaFormaPagamentoE>();
                List <CartaoCredito> listaCartoes = GerenciadorCartaoCredito.GetInstance().ObterTodos().ToList();
                // Varre todas as transações ainda não processadas
                foreach (tb_autorizacao_cartao autorizacaoCartaoE in listaAutorizacoes)
                {
                    if (!autorizacaoCartaoE.processado)
                    {
                        IEnumerable <tb_autorizacao_cartao> listaAprovadas = listaAutorizacoes.Where(aut => aut.statusTransacao.Equals("0") && aut.cupomFiscal.Equals(autorizacaoCartaoE.cupomFiscal));
                        IEnumerable <tb_autorizacao_cartao> listaNegadas   = listaAutorizacoes.Where(aut => !aut.statusTransacao.Equals("0") && aut.cupomFiscal.Equals(autorizacaoCartaoE.cupomFiscal));
                        if (listaAprovadas.Count() > 0)
                        {
                            foreach (tb_autorizacao_cartao autorizacaoAprovada in listaAprovadas)
                            {
                                autorizacaoAprovada.processado = true;
                                List <tb_saida> listaSaidas = null;
                                if (autorizacaoAprovada.tb_saida.Count() == 0)
                                {
                                    var query2 = from saida in saceEntities.tb_saida
                                                 where saida.pedidoGerado.Equals(autorizacaoAprovada.cupomFiscal)
                                                 select saida;
                                    listaSaidas = query2.ToList();
                                    if (listaSaidas.Count == 0)
                                    {
                                        autorizacaoAprovada.processado = false;
                                    }
                                    else
                                    {
                                        foreach (tb_saida saidaE in listaSaidas)
                                        {
                                            autorizacaoAprovada.tb_saida.Add(saidaE);
                                        }
                                    }
                                }
                                repAutorizacao.SaveChanges();


                                foreach (tb_saida saidaE in autorizacaoAprovada.tb_saida)
                                {
                                    String tipoCartaoString = "CREDITO";
                                    if (autorizacaoAprovada.tipoTransacao.Equals(20))
                                    {
                                        tipoCartaoString = "DEBITO";
                                    }
                                    if (autorizacaoAprovada.nomeBandeiraCartao == null)
                                    {
                                        autorizacaoAprovada.nomeBandeiraCartao = "BANESE";
                                    }
                                    CartaoCredito cartao = listaCartoes.Where(c => c.TipoCartao.Equals(tipoCartaoString) && autorizacaoAprovada.nomeBandeiraCartao.Equals(c.MapeamentoCappta)).ElementAtOrDefault(0);
                                    if (cartao == null)
                                    {
                                        // ajustes nos nomes dos cartões recuperados para que possa ser associado a um cartão cadastrado
                                        if (autorizacaoAprovada.nomeBandeiraCartao.ToUpper().Equals("HIPER"))
                                        {
                                            autorizacaoAprovada.nomeBandeiraCartao = "HIPERCARD";
                                        }
                                        else if (autorizacaoAprovada.nomeBandeiraCartao.ToUpper().Equals("BANESE"))
                                        {
                                            autorizacaoAprovada.nomeBandeiraCartao = "BANESECARD";
                                        }
                                        else if (autorizacaoAprovada.nomeBandeiraCartao.ToUpper().Equals("MASTER"))
                                        {
                                            autorizacaoAprovada.nomeBandeiraCartao = "MASTERCARD";
                                        }
                                        if (autorizacaoAprovada.nomeBandeiraCartao.ToUpper().Equals("HIPERCARD") && tipoCartaoString.Equals("DEBITO"))
                                        {
                                            autorizacaoAprovada.nomeBandeiraCartao = "MASTERCARD";
                                        }

                                        cartao = listaCartoes.Where(c => c.TipoCartao.Equals(tipoCartaoString) && autorizacaoAprovada.nomeBandeiraCartao.Equals(c.MapeamentoCappta)).ElementAtOrDefault(0);
                                        // cartões autorizados não cadastro são processados pela mastercard
                                        if (cartao == null)
                                        {
                                            cartao = listaCartoes.Where(c => c.TipoCartao.Equals(tipoCartaoString) && c.MapeamentoCappta.Equals("MASTERCARD")).ElementAtOrDefault(0);
                                        }
                                    }

                                    IEnumerable <SaidaPagamento> listaSaidaPagamento = GerenciadorSaidaPagamento.GetInstance(null).ObterPorSaida(saidaE.codSaida).Where(sp => sp.CodFormaPagamento.Equals(FormaPagamento.CARTAO));
                                    IEnumerable <Conta>          listaConta          = GerenciadorConta.GetInstance(null).ObterPorSaida(saidaE.codSaida).Where(c => c.FormatoConta.Equals(Conta.FORMATO_CONTA_CARTAO));
                                    if ((listaAprovadas.Count() == 1) && (listaSaidaPagamento.Count() == 1) && (listaConta.Count() == autorizacaoAprovada.quantidadeParcelas))
                                    {
                                        AtualizaFormaPagamentoUnica(autorizacaoAprovada, cartao, listaSaidaPagamento.First(), listaConta);
                                    }
                                    else if (listaAprovadas.Count() == 1)
                                    {
                                        // quando existe mais de uma forma de pagamento associada na saida
                                        AtualizaFormaPagamentoMultipla(autorizacaoAprovada, cartao, listaSaidaPagamento, listaConta);
                                    }
                                }
                                autorizacaoAprovada.processado = true;
                            }
                        }
                        else
                        {
                            if (listaNegadas.Count() > 0)
                            {
                                String cupomFiscal = listaNegadas.First().cupomFiscal;
                                IEnumerable <SaidaPesquisa> listaSaidas = GerenciadorSaida.GetInstance(null).ObterPorCupomFiscal(cupomFiscal);
                                // Cupom Fiscal foi emitido com venda em dinheiro
                                if (listaSaidas.Count() > 0)
                                {
                                    foreach (SaidaPesquisa saidaPesquisa in listaSaidas)
                                    {
                                        Saida saida = GerenciadorSaida.GetInstance(null).Obter(saidaPesquisa.CodSaida);
                                        GerenciadorSaidaPagamento.GetInstance(null).RemoverPorSaida(saida);
                                        SaidaPagamento saidaPagamento = new SaidaPagamento();
                                        saidaPagamento.CodCartaoCredito  = Global.CARTAO_LOJA;
                                        saidaPagamento.CodFormaPagamento = FormaPagamento.DINHEIRO;
                                        saidaPagamento.CodSaida          = saida.CodSaida;
                                        saidaPagamento.Data          = saida.DataSaida;
                                        saidaPagamento.Valor         = saida.TotalAVista;
                                        saidaPagamento.CodContaBanco = Global.CAIXA_PADRAO;
                                        saidaPagamento.Parcelas      = 1;
                                        List <SaidaPagamento> listaPagamentos = new List <SaidaPagamento>()
                                        {
                                            saidaPagamento
                                        };
                                        GerenciadorSaida.GetInstance(null).RegistrarPagamentosSaida(listaPagamentos, saida);
                                    }
                                }
                                // Cupom Fiscal não foi emitido
                                else
                                {
                                    foreach (SaidaPesquisa saidaPesquisa in listaSaidas)
                                    {
                                        Saida saida = GerenciadorSaida.GetInstance(null).Obter(saidaPesquisa.CodSaida);
                                        if (!saida.TipoSaida.Equals(Saida.TIPO_ORCAMENTO))
                                        {
                                            GerenciadorSaidaPagamento.GetInstance(null).RemoverPorSaida(saida);
                                            GerenciadorSaida.GetInstance(null).RegistrarEstornoEstoque(saida, null);
                                            saida.TipoSaida             = Saida.TIPO_ORCAMENTO;
                                            saida.CodSituacaoPagamentos = SituacaoPagamentos.ABERTA;
                                            saida.CupomFiscal           = "";
                                            saida.TotalPago             = 0;
                                            GerenciadorSaida.GetInstance(null).Atualizar(saida);
                                        }
                                    }
                                }
                            }
                        }
                        foreach (tb_autorizacao_cartao negada in listaNegadas)
                        {
                            negada.processado = true;
                        }
                    }
                    repAutorizacao.SaveChanges();
                }
            }
        }