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); }
/// <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(); } } }