public static GerenciadorImposto GetInstance() { if (gImpostos == null) { gImpostos = new GerenciadorImposto(); } return(gImpostos); }
/// <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(); //} }