public void CriaCupomFiscal() { using (ICupomFiscal cf = new CupomFiscal()) { cf.AbreCupom("", "", "", false); cf.VendeItem("001", "teste", "FF", 12.00M, 10.00M, 0.0M, "UN", "%", "D", -1); cf.SubTotalizaCupom(0.0M, "teste"); cf.EfetuaPagamento("01", 12.00M, "", false); cf.FechaCupom("Obrigado. Volte sempre!"); WriteLine("Cupom impresso com sucesso!"); } }
/// <summary> /// Ao carregar o formulário /// </summary> /// <param name="sender">Objeto que disparou o evento</param> /// <param name="e">Argumento do evento gerado</param> private void Inicial_Load(object sender, EventArgs e) { splash.Show(); splash.SetMessage("Verificando ECF"); if(Settings.ECF.ECFAtual != null) { ICupomFiscal cf = null; #if IsPAF IArquivoAuxiliar aux = null; #endif try { cf = new CupomFiscal(Settings.ECF.ECFAtual.ModeloACBR, Settings.ECF.ECFAtual.Porta); #if IsPAF aux = new ArquivoAuxiliar(); if(!System.IO.File.Exists(aux.ArquivoAuxiliarPath)) { aux.GrandeTotal = cf.GrandeTotal.ToString(); aux.NumeroSerie = cf.NumeroSerie; aux.Gerar(); } aux.Carregar(); #endif } catch { } #if IsPAF if((cf.Estado != EstadoECF.Livre) || !aux.PermiteFaturamento(cf.GrandeTotal)) { //TODO André: Essa parte do código só vai ser executado quando por algum motivo ocorreu a perda //acidentalmente dos dados do //arquivo auxiliar criptografado, onde será reconstituído o valor do Grande Total e Número de Série do Equipamento Emissor de Cupom Fiscal conectado //Requisito XXIV - item 8 try { using(IInformacao info = new Informacao(Settings.ECF.ECFAtual.ModeloACBR, Settings.ECF.ECFAtual.Porta)) { DadosReducaoZClass dadosReducao = info.DadosReducaoZ; if(aux.RecomporTotalizadorGeral(info.CRZ, info.CRO, dadosReducao.ValorVendaBruta, dadosReducao.DataHoraEmissao)) aux.CorrigeDados(cf.GrandeTotal); else { MessageBox.ShowWarning("Não é permitido o faturamento na impressora fiscal, pois os dados do Grande Total ou Número de série, diferem dos que estão no arquivo auxiliar criptografado!"); return; } } } catch { } } #endif splash.SetMessage("Preparando Caixa"); IVendaCF venda = new VendaCF().HasTemp(Settings.ECF.ECFAtual) as IVendaCF; if(venda != null) { if(venda.Status == Enuns.Faturamento.Lancamento.Status.ImpressoCupom) new Pagamento(cf, venda).Confirmacao(); else new Pagamento(cf, venda).CancelarTransacoesPendentes(); try { cf = new CupomFiscal(Settings.ECF.ECFAtual.ModeloACBR, Settings.ECF.ECFAtual.Porta); if(cf.Estado == EstadoECF.Pagamento) { if(cf.TotalPago > 0) { cf.CancelaCupom(); if(cf.Estado == EstadoECF.Livre) venda.Cancelar("Venda cancelada pelo Usuário"); } } else if(cf.Estado == EstadoECF.Venda) { } else if(cf.Estado == EstadoECF.Livre) { venda.Cancelar("Venda cancelada pelo Sistema"); } else if(cf.Estado == EstadoECF.Relatorio) { new OpenPOS.ECF.RelatorioGerencial(Settings.ECF.ECFAtual.ModeloACBR, Settings.ECF.ECFAtual.Porta).FechaRelatorio(Enuns.ECF.TipoOutrosDocumentos.RG, false); } else if(cf.Estado == EstadoECF.NaoInicializada) { throw new Exception(); } } catch { if(MessageBox.AskYesNo("Impressora não responde.\r\tContinuar?", "Erro") == DialogResult.No) Application.Exit(); } } splash.SetMessage("Finalizando Incialização"); } optbCaixa.Visible = optBarVenda.Visible = optbConsulta.Visible = optBarDAV.Visible = optBarOutros.Visible = false; //Configurações na barra de acordo com o terminal, ou seja PDV ou não if(isPDV) { labelOperador.Text = Settings.UsuarioAtual.NomeLogin; labelTerminal.Text = Settings.MachineName; IAbreFechaCaixa abreCx = new AbreCaixa().PermiteAbrir(Settings.MachineName, DateTime.Now); labelStatus.Text = abreCx == null ? Convert.ToString(Enuns.FrenteCaixa.Cadastro.Caixa.Status.Fechado) : Convert.ToString(abreCx.Status); } else { labelOperador.Text = Settings.UsuarioAtual.NomeLogin; labelOperador.Location = new Point(202, 540); labelTerminal.Text = ""; labelStatus.Text = ""; } splash.Close(); }
public void ReducaoZ() { using (ICupomFiscal cf = new CupomFiscal()) { #region Dados do cupom fiscal string cnpj = string.Empty; string nome = string.Empty; string endereco = string.Empty; string codProd = "00001"; string descricaoProd = "Caneta Azul"; string aliquota = "I"; double qtde = 10; double vlrUnit = new Random().NextDouble(); double desc = 0; string un = "UN"; string tipoDesc = "%"; string descAcre = "D"; int codDepto = -1; double valor = qtde * vlrUnit; bool vinculado = false; string obs = "Imprime esse texto no cupom fiscal"; string codFormaPagto = string.Empty; FormaPagamento[] formaPagtos = cf.FormasPagamento; for (int i = 0; i < 1; i++) { codFormaPagto = formaPagtos[i].Indice; } cf.AbreCupom(cnpj, nome, endereco); cf.VendeItem(codProd, descricaoProd, aliquota, (decimal)qtde, (decimal)vlrUnit, (decimal)desc, un, tipoDesc, descAcre, codDepto); cf.SubTotalizaCupom((decimal)desc, obs); cf.EfetuaPagamento(codFormaPagto, (decimal)valor, obs, vinculado); cf.FechaCupom(obs); #endregion //Faz a impressão da Redução Z using (IRelatorioFiscal rf = new RelatorioFiscal()) { //Para imprimir a Redução Z, altere o valor dessa variável para "true" bool imprimeReducao = false; //Data da movimentação DateTime dataMovimentacao = DateTime.Now; if (imprimeReducao) rf.ReducaoZ(dataMovimentacao); } } }
public void TotalizaCupomFiscal() { // Totalizando cupom subtotalizando-o primeiro using (ICupomFiscal cf = new CupomFiscal()) { cf.AbreCupom("", "", "", false); cf.VendeItem("001", "teste", "FF", 12.00M, 10.00M, 0.0M, "UN", "%", "D", -1); cf.SubTotalizaCupom(2.00M, "Obrigado pela preferência!"); cf.EfetuaPagamento("01", 12.00M, "", false); cf.FechaCupom("Obrigado. Volte sempre!"); WriteLine("Cupom totalizado com com sucesso!"); } }
public void CupomVinculado() { using (ICupomFiscal cf = new CupomFiscal()) { #region Dados do cupom fiscal string cnpj = string.Empty; string nome = string.Empty; string endereco = string.Empty; string codProd = "00001"; string descricaoProd = "Caneta Azul"; string aliquota = "I"; double qtde = 10; double vlrUnit = new Random().NextDouble(); double desc = 0; string un = "UN"; string tipoDesc = "%"; string descAcre = "D"; int codDepto = -1; double valor = qtde * vlrUnit; bool vinculado = false; string obs = "Imprime esse texto no cupom fiscal"; string codFormaPagto = string.Empty; FormaPagamento[] formaPagtos = cf.FormasPagamento; for (int i = 0; i < 5; i++) { codFormaPagto = formaPagtos[i].Indice; } cf.AbreCupom(cnpj, nome, endereco); cf.VendeItem(codProd, descricaoProd, aliquota, (decimal)qtde, (decimal)vlrUnit, (decimal)desc, un, tipoDesc, descAcre, codDepto); cf.SubTotalizaCupom((decimal)desc, obs); cf.EfetuaPagamento(codFormaPagto, (decimal)valor, obs, vinculado); cf.FechaCupom(obs); #endregion int COO = cf.COO; using (ICupomVinculado cv = new CupomVinculado()) { #region Dados do cupom vinculado double valorCV = valor; #endregion cv.AbreCupomVinculado(COO, codFormaPagto, (decimal)valorCV); } } }
/// <summary> /// Imprime o item na impressora e na tela /// </summary> /// <param name="item">item do movimento</param> /// <param name="itemNumero">número do item</param> public void ImprimirItem(IItem item, int itemNumero, bool imprimeItemECF = true) { #region buffer if (!fromBuffer) { buffer.Add(new BufferItem { VendeItem = new VendeItemArgs { Item = item, ItemNumero = itemNumero, ImprimeItemECF = imprimeItemECF } }); } #endregion LastIndex = itemNumero - 1; string line = String.Format("{0} {1} {2}", itemNumero.ToString().PadLeft(3, '0'), item.ItemMovimentado.EGUID, item.ItemMovimentado.Descricao); WriteLine(line); string subtotal = (item.Quantidade * item.ValorUnitarioBruto).ToString("N2"); line = String.Format(" {0:N2}{1} X {2:N2} F1", item.Quantidade, "UN", item.ValorUnitarioBruto); line = line.PadRight(MaxLengthLine - subtotal.Length, '_') + subtotal; if ((fromBuffer || Settings.ECF.Concomitante) && imprimeItemECF) { using (ICupomFiscal c = new CupomFiscal(Unimake.Convert.ToEnum<ModeloECF>(Settings.ECF.ECFAtual.ModeloACBR), Settings.ECF.ECFAtual.Porta)) { IVendaCF venda = item.Parent as IVendaCF; if (venda != null) { venda.NumeroSerieECF = c.NumeroSerie; venda.NumeroOrdemECF = Unimake.Convert.ToInt(c.NumeroECF); venda.COO = c.COO; venda.COOFinal = 0; // Todo: o valor do coo final será atualizado posteriormente pela emissão da redução z venda.CRO = c.CRO; venda.CCF = c.CCF; venda.CRZ = c.CRZ; venda.ValorGrandeTotalECF = c.GrandeTotal; } Model.Faturamento.Lancamento.Movimento.Item.VendaCF.IItem i = (Model.Faturamento.Lancamento.Movimento.Item.VendaCF.IItem)item; i.COO = c.COO; i.Ordem = itemNumero; c.VendeItem(item.ItemMovimentado.EGUID, item.ItemMovimentado.Descricao, i.SituacaoTributaria.ToString(), Unimake.Convert.ToDecimal(item.Quantidade), Unimake.Convert.ToDecimal(item.ValorUnitarioBruto), 0.0M, item.Unidade.Descricao, "%", "D", -1); WriteLine(line); //Descontos nos itens dos movimentos vinculados, tais como, DAV, DAV-OS, Pré-Venda, etc. if (item.ValorTotalDesconto > 0 || item.ValorTotalAcrescimo > 0) { decimal vlrDescAcresc = item.ValorTotalDesconto > 0 ? Unimake.Convert.ToDecimal(item.ValorTotalDesconto * item.Quantidade) : Unimake.Convert.ToDecimal(item.ValorTotalAcrescimo * item.Quantidade); string descAcresc = item.ValorTotalDesconto > 0 ? "D" : "A"; int numeroItem = item.Ordem; using (ICupomFiscal cf = new CupomFiscal(Settings.ECF.ECFAtual.ModeloACBR, Settings.ECF.ECFAtual.Porta)) cf.DescontoAcrescimoItemAnterior(vlrDescAcresc, descAcresc, "$", numeroItem); if (descAcresc.Equals("D")) line = "(-) DESCONTO ITEM {0} R${1}{2:N2}"; else line = "(+) ACRÉSCIMO ITEM {0} R${1}{2:N2}"; WriteLine(line, (venda.Itens.Count).ToString("D3"), "".PadLeft((MaxLengthLine - 27 - venda.ValorTotalLiquido.ToString().Length)), vlrDescAcresc); } } } StatusImpressao = BobinaStatusImpressao.ItemImpresso; }
/// <summary> /// Finaliza o cupom na bobina /// </summary> /// <param name="venda">Venda efetuada</param> /// <param name="totalDinheiro">total de dinheiro informado</param> public void FechaCupom(IVendaCF venda, double totalDinheiro) { #region Variáveis locais string ECFRodapePersonalizado = ""; double troco = Math.Round(totalDinheiro - venda.ValorTotalLiquido, 2); double totalVenda = Math.Round(venda.ValorTotalLiquido, 2); totalDinheiro = Math.Round(totalDinheiro, 2); IsErrorFechamentoCupom = false; string modeloecf = string.Empty; string marcaecf = string.Empty; string versaoecf = string.Empty; string numecf = string.Empty; double impostoAprox = 0; double percImpostoAprox = 0; string[] linhasRodape = new string[7]; string tipoMovimento = string.Empty; string codigoMovimento = string.Empty; #endregion ImpressoTroco = false; impostoAprox = venda.ValorTotalImpostoAproximado; percImpostoAprox = venda.PercentualTotalImpostoAproximado; #if IsPAF //TODO André: Comentado as linhas referente ao manejo do arquivo auxiliar. Para o pessoal do suporte poder testar o OpenPOS sem travar. IArquivoAuxiliar arqAux = new ArquivoAuxiliar(); #endif #region Fechamento do Cupom Fiscal using (ICupomFiscal c = new CupomFiscal(Unimake.Convert.ToEnum<ModeloECF>(Settings.ECF.ECFAtual.ModeloACBR), Settings.ECF.ECFAtual.Porta)) { venda.NumeroSerieECF = c.NumeroSerie; venda.NumeroOrdemECF = Unimake.Convert.ToInt(c.NumeroECF); venda.COO = c.COO; venda.COOFinal = 0; // Todo: o valor do coo final será atualizado posteriormente pela emissão da redução z venda.CRO = c.CRO; venda.CCF = c.CCF; venda.CRZ = c.CRZ; venda.ValorGrandeTotalECF = c.GrandeTotal; #if IsPAF //Atualizar o valor do grande total do ECF no arquivo auxiliar arqAux.GrandeTotal = c.GrandeTotal.ToString(); arqAux.NumeroSerie = c.NumeroSerie.ToString(); arqAux.Gerar(); #endif //Faz a impressão do rodapé do cupom fiscal de maneira personalizada if (Settings.PAF.UsaInformacoesRodapeMD5) { Model.Cadastro.Pessoa.IEndereco endereco = Settings.EmpresaAtual.Enderecos.First(i => i.Principal); c.Rodape.MD5 = OpenPOS.Cryptography.Files.MD5.GetMD5Hash(OpenPOS.Cryptography.Files.MD5.FromExe()); #if IsPAF if (endereco != null) switch (Settings.EmpresaAtual.Enderecos.First(i => i.Principal).Endereco.Estado.UF.Sigla.ToString()) { case "PB": c.Rodape.ParaibaLegal = true; break; case "DF": c.Rodape.NotaLegalDF.Imprimir = true; //Todo Luciano: Quando desenvolvido a parte tributaria informar o valor dos tributos dos itens c.Rodape.NotaLegalDF.ValorICMS = 0.0M; c.Rodape.NotaLegalDF.ValorISS = 0.0M; break; case "MG": c.Rodape.MinasLegal = true; break; case "RJ": c.Rodape.CupomMania = true; break; } #endif //De acordo com o movimento vinculado, sabemos qual é o tipo: Pré-venda, DAV, DAVO-OS if (venda.MovimentosVinculados.FirstOrDefault() != null) { switch (venda.MovimentosVinculados.FirstOrDefault().Tipo) { case Tipo.DAV: tipoMovimento = "DAV"; codigoMovimento = venda.MovimentosVinculados.FirstOrDefault().EGUID.ToString(); break; case Tipo.DAVOS: tipoMovimento = "DAV-OS"; codigoMovimento = venda.MovimentosVinculados.FirstOrDefault().EGUID.ToString(); break; case Tipo.PreVenda: tipoMovimento = "PV"; codigoMovimento = venda.MovimentosVinculados.FirstOrDefault().EGUID.ToString(); break; case Tipo.NotaFiscalManual: tipoMovimento = "NF"; codigoMovimento = venda.MovimentosVinculados.FirstOrDefault().EGUID; break; case Tipo.NotaFiscalEletronica: case Tipo.CupomFiscal: case Tipo.Sangria: case Tipo.Suprimento: case Tipo.Recebimento: case Tipo.LancamentoGeral: case Tipo.ContasPagar: case Tipo.ContasReceber: default: tipoMovimento = string.Empty; break; } } MD5 md = new MD5("Bobina OpenPOS", Unimake.Convert.ToInt(Settings.Setting.PasswordMD5Loop), Unimake.Convert.ToBoolean(Settings.Setting.PasswordMD5UseKey) ? "123" : ""); // Prepara as informações antes de imprimir as linhas linhasRodape = Settings.ECF.PreparaRodapeCupom(venda, md); //Conteúdo que será impresso no rodapé do cupom fiscal do ECF ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha1.Trim()) ? "" : linhasRodape[0].Trim() + "\n"; ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha2.Trim()) ? "" : linhasRodape[1].Trim() + "\n"; ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha3.Trim()) ? "" : linhasRodape[2].Trim() + "\n"; ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha4.Trim()) ? "" : linhasRodape[3].Trim() + "\n"; ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha5.Trim()) ? "" : linhasRodape[4].Trim() + "\n"; ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha6.Trim()) ? "" : linhasRodape[5].Trim() + "\n"; ECFRodapePersonalizado += String.IsNullOrEmpty(Settings.ECF.ConfiguracaoRodape.Linha7.Trim()) ? "" : linhasRodape[6].Trim(); //Conteúdo que será impresso no rodapé do cupom fiscal na Bobina WriteLine("MD-5:{0}", md.Hash); for (int i = 0; i < linhasRodape.Length; i++) { linhasRodape[i] = linhasRodape[i].Trim(); if (!String.IsNullOrEmpty(linhasRodape[i])) WriteLine("{0}", linhasRodape[i]); } Settings.ECF.PopulateECFRodape(); } else WriteLine("Obrigado! Volte Sempre."); modeloecf = c.SubModeloECF.ToString(); marcaecf = c.Modelo.ToString(); versaoecf = c.NumeroVersao; numecf = c.NumeroECF; DrawLine(); WriteLine("{0} {1}", marcaecf, modeloecf); WriteLine("VERSÃO:{0} ECF:{1} LJ:{2}", versaoecf, numecf, venda.Empresa.EGUID); string serieECF = String.Format("FAB:{0}", venda.NumeroSerieECF); WriteLine(serieECF + " BR".PadLeft(25)); if (!Settings.PAF.UsaInformacoesRodapeMD5) ECFRodapePersonalizado = string.Empty; c.FechaCupom(ECFRodapePersonalizado); venda.Status = Status.ImpressoCupom; venda.SaveTemp(); } #endregion #region Impressão das parcelas if (venda.Parcelas.Count > 0) { if (Unimake.Convert.ToBoolean(Settings.Setting.ImprimirViasParcelamento)) { //------------------------------------------------------------------------- // Imprimir a primeira via, esta via é do estabelecimento //------------------------------------------------------------------------- ImprimeParcela(venda, "--- VIA DO ESTABELECIMENTO ---"); //------------------------------------------------------------------------- // Imprimir a segunda via, esta via é do cliente //------------------------------------------------------------------------- ImprimeParcela(venda, "--- VIA DO CLIENTE ---"); } else if (Unimake.Convert.ToBoolean(Settings.Setting.ImprimirViaClienteParcelamento)) { //------------------------------------------------------------------------- // Imprimir a segunda via, esta via é do cliente //------------------------------------------------------------------------- ImprimeParcela(venda, "--- VIA DO CLIENTE ---"); } else if (Unimake.Convert.ToBoolean(Settings.Setting.ImprimirViaEstabelecimentoParcelamento)) { //------------------------------------------------------------------------- // Imprimir a primeira via, esta via é do estabelecimento //------------------------------------------------------------------------- ImprimeParcela(venda, "--- VIA DO ESTABELECIMENTO ---"); } } #endregion StatusImpressao = BobinaStatusImpressao.CupomFechado; buffer.Clear(); }
/// <summary> /// Cancela item na impressora /// </summary> /// <param name="i">Número do item a ser cancelado</param> public void CancelaItem(IItem i, int indice) { if (!fromBuffer) { buffer.Add(new BufferItem { CancelaItem = new CancelaItemArgs { Item = i, Indice = indice } }); } if (fromBuffer || Settings.ECF.Concomitante) { if (!Unimake.Convert.ToBoolean(Settings.Setting.EmissaoConsumidorFinalNFCe)) { using (ICupomFiscal cf = new CupomFiscal(Settings.ECF.ECFAtual.ModeloACBR, Settings.ECF.ECFAtual.Porta)) { cf.CancelaItem(indice); ((Model.Faturamento.Lancamento.Movimento.Item.VendaCF.IItem)i).Status = Enuns.Faturamento.Lancamento.Movimento.Item.Status.Cancelado; i.Cancelar((string)Settings.Setting.MotivoCancelamentoCupomFiscal); } } } string line = String.Format("{0} {1} {2}", i.Ordem.ToString().PadLeft(3, '0'), i.ItemMovimentado.EGUID, i.ItemMovimentado.Descricao + " - Cancelado"); WriteLine(line); string subtotal = (i.Quantidade * i.ValorUnitarioBruto).ToString("N2"); line = String.Format(" {0:N2}{1} X {2:N2} F1", i.Quantidade, "UN", i.ValorUnitarioBruto); line = line.PadRight(MaxLengthLine - subtotal.Length, '_') + subtotal; WriteLine(line); }
/// <summary> /// Simula a impressão de uma abertura de cupom. /// </summary> /// <param name="cpf_cnpj">Número de CPF e CNPJ do cliente</param> /// <param name="abreCupomECF">se true, abre o cupom na ECF</param> /// ´<param name="pessoa">Pessoa relacionada ao cupom, pode ser informado apenas o CPF/CNPJ no parâmetro cpf_cnpj</param> public virtual void AbreVenda(string cpf_cnpj = "", IDadoPessoa pessoa = null, bool abreCupomECF = true) { ICupomFiscal cf = null; #region Buffer if (!fromBuffer) { buffer = new List<BufferItem>(); buffer.Add(new BufferItem { AbreCupom = new AbreCupomArgs { AbreCupomECF = abreCupomECF, CPF_CNPJ = cpf_cnpj, Pessoa = pessoa } }); } #endregion #if IsPAF //TODO André: Comentado as linhas referente ao manejo do arquivo auxiliar. Para o pessoal do suporte poder testar o OpenPOS sem travar. IArquivoAuxiliar arqAux = new ArquivoAuxiliar(); #endif OpenPOS.Model.Cadastro.Endereco.IEndereco endereco = null; endereco = Settings.EmpresaAtual.Enderecos[0].Endereco; string numero = Settings.EmpresaAtual.Enderecos[0].Numero; ICanalComunicacao canalcomunicacao = null; canalcomunicacao = Settings.EmpresaAtual.CanaisComunicacao[0]; string nome = string.Empty; string ccf = string.Empty; string coo = string.Empty; string enderecoPessoa = string.Empty; //Todo: Implementar os dados do cliente no cupom if (pessoa != null) { nome = pessoa.NomeFantasia; enderecoPessoa = pessoa.Cliente.Enderecos.Count == 0 ? "" : pessoa.Cliente.Enderecos.FirstOrDefault().Endereco.Endereco; if (pessoa.Cliente.FisicaJuridica == Enuns.Cadastro.Pessoa.FisicaJuridica.Fisica) cpf_cnpj = Unimake.Format.CPF(cpf_cnpj); else if (pessoa.Cliente.FisicaJuridica == Enuns.Cadastro.Pessoa.FisicaJuridica.Juridica) cpf_cnpj = Unimake.Format.CNPJ(cpf_cnpj); if (String.IsNullOrEmpty(cpf_cnpj)) cpf_cnpj = pessoa.Cliente.GetCPFCNPJ(); } #region impressora if (abreCupomECF) { cf = new CupomFiscal(Unimake.Convert.ToEnum<ModeloECF>(Settings.ECF.ECFAtual.ModeloACBR), Settings.ECF.ECFAtual.Porta); if ((fromBuffer || Settings.ECF.Concomitante) && abreCupomECF) { using (cf) { #if IsPAF arqAux.Carregar(); if (!arqAux.NumeroFabricacaoEquals()) { throw new OpenPOS.Exceptions.Faturamento.Lancamento.Movimento.ArquivoAuxiliarInvalido(); } ////Comparar o valor do grande total do ECF com o valor do grande total do arquivo auxiliar, se estiverem iguais permitir o faturamento de um cupom fiscal. ////É feito o mesmo tratamento para o número de fabricação do ECF if ((cf.Estado != EstadoECF.Livre) || !arqAux.PermiteFaturamento(cf.GrandeTotal)) { //TODO André: Essa parte do código só vai ser executado quando por algum motivo ocorreu a perda //acidentalmente dos dados do //arquivo auxiliar criptografado, onde será reconstituído o valor do Grande Total e Número de Série do Equipamento Emissor de Cupom Fiscal conectado //Requisito XXIV - item 8 using (IInformacao info = new Informacao(Settings.ECF.ECFAtual.ModeloACBR, Settings.ECF.ECFAtual.Porta)) { DadosReducaoZClass dadosReducao = info.DadosReducaoZ; if (arqAux.RecomporTotalizadorGeral(info.CRZ,info.CRO,dadosReducao.ValorVendaBruta,dadosReducao.DataHoraEmissao)) arqAux.CorrigeDados(cf.GrandeTotal); else { MessageBox.ShowWarning("Não é permitido o faturamento na impressora fiscal, pois os dados do Grande Total ou Número de série, diferem dos que estão no arquivo auxiliar criptografado!"); BloquearVenda = true; return; } } } #else if ((cf.Estado != EstadoECF.Livre)) { MessageBox.ShowWarning("Não é permitido o faturamento na impressora!"); return; } #endif cf.AbreCupom(cpf_cnpj, nome, endereco.Logradouro.ToString(), false); BloquearVenda = false; ccf = Unimake.Convert.ToString(cf.CCF); coo = Unimake.Convert.ToString(cf.COO); } } } #endregion #region bobina Clear(); WriteLine("{0} {1}-{2}", Settings.EmpresaAtual.NomeFantasia.ToUpper(), Unimake.Convert.ToString(endereco.Cidade).ToUpper(), endereco.Estado.UF.Sigla.ToUpper()); WriteLine("{0} {1}, {2} FONE:{3} ", Unimake.Convert.ToString(endereco.Endereco).ToUpper(), numero.ToString(), Unimake.Convert.ToString(endereco.Bairro).ToUpper(), (Telefone)canalcomunicacao.IdentificadorCanal.ToString()); WriteLine("CNPJ: {0}", Unimake.Format.CNPJ(Settings.EmpresaAtual.Juridica.CNPJ)); WriteLine("IE: {0}", Settings.EmpresaAtual.Juridica.IE); WriteLine("IM: {0}", Settings.EmpresaAtual.Juridica.IM); DrawLine(); if (abreCupomECF) WriteLine("{0} CCF: {1} COO: {2}", cf.DataHora, ccf.Trim().PadLeft(6, '0'), coo.Trim().PadLeft(6, '0')); WriteLine("CNPJ/CPF consumidor:{0}", cpf_cnpj); WriteLine("NOME: {0}", nome); WriteLine("END: {0}", Unimake.Convert.ToString(enderecoPessoa).ToUpper()); WriteLine(Unimake.Convert.ToBoolean(Settings.Setting.EmissaoConsumidorFinalNFCe) ? " NOTA FISCAL AO CONSUMIDOR ELETRÔNICA" : " CUPOM FISCAL"); DrawLine(); WriteLine("ITEM CÓDIGO DESCRIÇÃO QTD.UN.VL UNIT(R$) ST VL ITEM(R$)"); DrawLine(); StatusImpressao = BobinaStatusImpressao.CupomAberto; #endregion }