public static GerenciadorSaidaPedido GetInstance() { if (gSaidaPedido == null) { gSaidaPedido = new GerenciadorSaidaPedido(); } return(gSaidaPedido); }
public void ExcluirDocumentoFiscal(long codPedido) { try { String arquivo = Global.PASTA_COMUNICACAO_FRENTE_LOJA + codPedido + ".txt"; DirectoryInfo pastaECF = new DirectoryInfo(Global.PASTA_COMUNICACAO_FRENTE_LOJA); if (pastaECF.Exists) { FileInfo cupomFiscal = new FileInfo(arquivo); if (cupomFiscal.Exists) { cupomFiscal.Delete(); GerenciadorSaidaPedido.GetInstance().RemoverPorPedido(codPedido); } } } catch (Exception) { throw new NegocioException("Não é possível editar essa Pré-Venda. É provável que o Cupom Fiscal esteja sendo impresso."); } }
public Boolean AtualizarPedidosComDocumentosFiscais(string nomeServidor) { Boolean atualizou = false; DirectoryInfo PastaRetorno = new DirectoryInfo(Global.PASTA_COMUNICACAO_FRENTE_LOJA_RETORNO); string nomeComputador = System.Windows.Forms.SystemInformation.ComputerName; if (nomeComputador.Equals(nomeServidor) && PastaRetorno.Exists) { // Busca automaticamente todos os arquivos em todos os subdiretórios FileInfo[] Files = PastaRetorno.GetFiles("*", SearchOption.TopDirectoryOnly); if (Files.Length == 0) { atualizou = true; } else { foreach (FileInfo file in Files) { try { bool sucesso = false; String numeroCF = null; String linha = null; StreamReader reader = new StreamReader(file.FullName); // sucesso = true quando cupum fiscal foi impresso if ((linha = reader.ReadLine()) != null) { sucesso = linha.Equals("OK"); if (sucesso && ((linha = reader.ReadLine()) != null)) { numeroCF = linha; } } reader.Close(); // quando cupom fiscal impresso com sucesso atualiza saidas long codPedido = Convert.ToInt64(file.Name.Replace(".TXT", "")); List <SaidaPedido> _listaSaidaPedido = GerenciadorSaidaPedido.GetInstance().ObterPorPedido(codPedido); if (sucesso) { foreach (SaidaPedido saidaPedido in _listaSaidaPedido) { GerenciadorSaida.GetInstance(null).AtualizarTipoPedidoGeradoPorSaida(Saida.TIPO_VENDA, numeroCF, saidaPedido.TotalAVista, saidaPedido.CodSaida); RemoverSolicitacaoDocumento(saidaPedido.CodSaida); atualizou = true; } } else { foreach (SaidaPedido saidaPedido in _listaSaidaPedido) { bool temPagamentoCrediario = GerenciadorSaidaPagamento.GetInstance(null).ObterPorSaidaFormaPagamento(saidaPedido.CodSaida, FormaPagamento.CREDIARIO).ToList().Count > 0; if (!temPagamentoCrediario) { Saida saida = GerenciadorSaida.GetInstance(null).Obter(saidaPedido.CodSaida); if ((saida != null) && (saida.TipoSaida != Saida.TIPO_VENDA)) { saida.TipoSaida = Saida.TIPO_PRE_VENDA; GerenciadorSaida.GetInstance(null).PrepararEdicaoSaida(saida); } } } } GerenciadorSaidaPedido.GetInstance().RemoverPorPedido(codPedido); } catch (Exception) { // Se houver algum impossibilidade de trasnformar o pedido em pré-venda // não tem problema. Pode acontecer quando cliente quita a conta gerada // mas há algum problema na impressora para imprimir o cupom fiscal // Nesses casos é só fazer a reimpressão do cupom. } finally { DirectoryInfo PastaBackup = new DirectoryInfo(Global.PASTA_COMUNICACAO_FRENTE_LOJA_BACKUP); if (PastaBackup.Exists) { file.CopyTo(Global.PASTA_COMUNICACAO_FRENTE_LOJA_BACKUP + file.Name, true); } if (file.Exists) { file.Delete(); } } } } } return(atualizou); }
/// <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(); //} }