예제 #1
0
        /// <summary>
        /// Obtém a URL para uso no QR-Code, versão 2.0 - leiaute 4.00
        /// </summary>
        private static string ObterUrlQrCode2(infNFeSupl infNFeSupl, Classes.NFe nfe, string cIdToken, string csc, VersaoServico versaoServico)
        {
            #region 1ª parte

            var url = ObterUrlQrCode2ComParametro(infNFeSupl, nfe.infNFe.ide.tpAmb, nfe.infNFe.ide.cUF, versaoServico);

            #endregion

            #region 2ª parte

            const string pipe = "|";

            //Chave de Acesso da NFC-e
            var chave = nfe.infNFe.Id.Substring(3);

            //Identificação do Ambiente (1 – Produção, 2 – Homologação)
            var ambiente = (int)nfe.infNFe.ide.tpAmb;

            //Identificador do CSC (Código de Segurança do Contribuinte no Banco de Dados da SEFAZ). Informar sem os zeros não significativos
            var idCsc = Convert.ToInt16(cIdToken);

            string dadosBase;

            if (nfe.infNFe.ide.tpEmis == TipoEmissao.teOffLine)
            {
                var diaEmi    = nfe.infNFe.ide.dhEmi.Day.ToString("D2");
                var valorNfce = nfe.infNFe.total.ICMSTot.vNF.ToString("0.00").Replace(',', '.');
                var digVal    = Conversao.ObterHexDeString(nfe.Signature.SignedInfo.Reference.DigestValue);
                dadosBase = string.Concat(chave, pipe, (int)VersaoQrCode.QrCodeVersao2, pipe, ambiente, pipe, diaEmi, pipe, valorNfce, pipe, digVal, pipe, idCsc);
            }
            else
            {
                dadosBase = string.Concat(chave, pipe, (int)VersaoQrCode.QrCodeVersao2, pipe, ambiente, pipe, idCsc);
            }

            var dadosSha1 = string.Concat(dadosBase, csc);
            var sh1       = Conversao.ObterHexSha1DeString(dadosSha1);

            return(string.Concat(url, dadosBase, pipe, sh1));

            #endregion
        }
예제 #2
0
        private void GeranNfe(VersaoServico versaoServico, ModeloDocumento modelo)
        {
            try
            {
                #region Gerar NFe

                var numero = Funcoes.InpuBox(this, "Criar e Enviar NFe", "Número da Nota:");
                if (String.IsNullOrEmpty(numero))
                {
                    throw new Exception("O Número deve ser informado!");
                }

                _nfe = GetNf(Convert.ToInt32(numero), modelo, versaoServico);
                _nfe.Assina().Valida();

                #endregion

                ExibeNfe();

                var dlg = new SaveFileDialog
                {
                    FileName   = _nfe.infNFe.Id.Substring(3),
                    DefaultExt = ".xml",
                    Filter     = "Arquivo XML (.xml)|*.xml"
                };
                var result = dlg.ShowDialog();
                if (result != true)
                {
                    return;
                }
                var arquivoXml = dlg.FileName;
                _nfe.SalvarArquivoXml(arquivoXml);
            }
            catch (Exception ex)
            {
                if (!String.IsNullOrEmpty(ex.Message))
                {
                    Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK);
                }
            }
        }
예제 #3
0
        public void Prot(string caminho)
        {
            try
            {
                var arquivoXml = caminho;
                var nfe        = new Classes.NFe().CarregarDeArquivoXml(arquivoXml);
                var chave      = nfe.infNFe.Id.Substring(3);

                if (string.IsNullOrEmpty(chave))
                {
                    throw new Exception("A Chave da NFe não foi encontrada no arquivo!");
                }
                if (chave.Length != 44)
                {
                    throw new Exception("Chave deve conter 44 caracteres!");
                }

                var servicoNFe      = new ServicosNFe(_configuracoes.CfgServico);
                var retornoConsulta = servicoNFe.NfeConsultaProtocolo(chave);
                TrataRetorno(retornoConsulta);

                var nfeproc = new nfeProc
                {
                    NFe     = nfe,
                    protNFe = retornoConsulta.Retorno.protNFe,
                    versao  = retornoConsulta.Retorno.versao
                };
                var novoArquivo = _path + "\\Autorizados\\" + @"\" + nfeproc.protNFe.infProt.chNFe +
                                  "-procNfe.xml";
                FuncoesXml.ClasseParaArquivoXml(nfeproc, novoArquivo);
                //Funcoes.Mensagem("Arquivo salvo em " + novoArquivo, "Atenção", MessageBoxButton.OK);
                Impressora.ImprimirDanferE(novoArquivo);
            }
            catch (Exception ex)
            {
                if (!string.IsNullOrEmpty(ex.Message))
                {
                    Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK);
                }
            }
        }
예제 #4
0
        /// <summary>
        ///     Assina um objeto NFe
        /// </summary>
        /// <param name="nfe"></param>
        /// <returns>Retorna um objeto do tipo NFe assinado</returns>
        public static Classes.NFe Assina(this Classes.NFe nfe)
        {
            var nfeLocal = nfe;

            if (nfeLocal == null)
            {
                throw new ArgumentNullException("nfe");
            }

            #region Define cNF

            var tamanhocNf = 9;
            var versao     = (decimal.Parse(nfeLocal.infNFe.versao, CultureInfo.InvariantCulture));
            if (versao >= 2)
            {
                tamanhocNf = 8;
            }
            nfeLocal.infNFe.ide.cNF = Convert.ToInt32(nfeLocal.infNFe.ide.cNF).ToString().PadLeft(tamanhocNf, '0');

            #endregion

            var modeloDocumentoFiscal = nfeLocal.infNFe.ide.mod;
            var tipoEmissao           = (int)nfeLocal.infNFe.ide.tpEmis;
            var codigoNumerico        = int.Parse(nfeLocal.infNFe.ide.cNF);
            var estado           = nfeLocal.infNFe.ide.cUF;
            var dataEHoraEmissao = nfeLocal.infNFe.ide.dhEmi;
            var cnpj             = nfeLocal.infNFe.emit.CNPJ;
            var numeroDocumento  = nfeLocal.infNFe.ide.nNF;
            var serie            = nfeLocal.infNFe.ide.serie;

            var dadosChave = ChaveFiscal.ObterChave(estado, dataEHoraEmissao, cnpj, modeloDocumentoFiscal, serie, numeroDocumento, tipoEmissao, codigoNumerico);

            nfeLocal.infNFe.Id      = "NFe" + dadosChave.Chave;
            nfeLocal.infNFe.ide.cDV = Convert.ToInt16(dadosChave.DigitoVerificador);

            var assinatura = Assinador.ObterAssinatura(nfeLocal, nfeLocal.infNFe.Id);
            nfeLocal.Signature = assinatura;
            return(nfeLocal);
        }
예제 #5
0
        /// <summary>
        ///     Gera id, cdv, assina e faz alguns ajustes nos dados da classe NFe antes de utilizá-la
        /// </summary>
        /// <param name="nfe"></param>
        /// <returns>Retorna um objeto NFe devidamente tradado</returns>
        public static Classes.NFe Valida(this Classes.NFe nfe)
        {
            if (nfe == null)
            {
                throw new ArgumentNullException("nfe");
            }

            var versao = (Decimal.Parse(nfe.infNFe.versao, CultureInfo.InvariantCulture));

            var xmlNfe     = nfe.ObterXmlString();
            var cfgServico = ConfiguracaoServico.Instancia;

            if (versao < 3)
            {
                Validador.Valida(ServicoNFe.NfeRecepcao, cfgServico.VersaoNfeRecepcao, xmlNfe, false);
            }
            if (versao >= 3)
            {
                Validador.Valida(ServicoNFe.NFeAutorizacao, cfgServico.VersaoNFeAutorizacao, xmlNfe, false);
            }

            return(nfe); //Para uso no formato fluent
        }
예제 #6
0
        private void BtnCriareEnviarNfce_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                #region Cria e Envia NFe

                var numero = Funcoes.InpuBox(this, "Criar e Enviar NFCe", "Número da NFCe:");
                if (String.IsNullOrEmpty(numero))
                {
                    throw new Exception("O Número deve ser informado!");
                }

                var lote = Funcoes.InpuBox(this, "Criar e Enviar NFCe", "Id do Lote:");
                if (String.IsNullOrEmpty(lote))
                {
                    throw new Exception("A Id do lote deve ser informada!");
                }

                _nfe = GetNf(Convert.ToInt32(numero), ModeloDocumento.NFCe, _configuracoes.CfgServico.VersaoNFeAutorizacao);
                _nfe.Assina(); //não precisa validar aqui, pois o lote será validado em ServicosNFe.NFeAutorizacao
                var servicoNFe   = new ServicosNFe(_configuracoes.CfgServico);
                var retornoEnvio = servicoNFe.NFeAutorizacao(Convert.ToInt32(lote), IndicadorSincronizacao.Assincrono, new List <Classes.NFe> {
                    _nfe
                });

                TrataRetorno(retornoEnvio);

                #endregion
            }
            catch (Exception ex)
            {
                if (!String.IsNullOrEmpty(ex.Message))
                {
                    Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK);
                }
            }
        }
예제 #7
0
        private void BtnNfceDanfeOff_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                #region Carrega um XML com nfeProc para a variável

                var arquivoXml = Funcoes.BuscarArquivoXml();
                if (string.IsNullOrEmpty(arquivoXml))
                {
                    return;
                }
                var nfe = new Classes.NFe().CarregarDeArquivoXml(arquivoXml);
                if (nfe.infNFe.ide.mod != ModeloDocumento.NFCe)
                {
                    throw new Exception("O XML informado não é um NFCe!");
                }

                #endregion

                #region Abre a visualização do relatório para impressão

                var danfe = new DanfeFrNfce(nfe, _configuracoes.ConfiguracaoDanfeNfce, _configuracoes.CIdToken, _configuracoes.Csc);
                danfe.Visualizar();
                //danfe.Imprimir();
                //danfe.ExibirDesign();
                //danfe.ExportarPdf(@"d:\teste.pdf");

                #endregion
            }
            catch (Exception ex)
            {
                if (!string.IsNullOrEmpty(ex.Message))
                {
                    Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK);
                }
            }
        }
예제 #8
0
        /// <summary>
        ///     Obtém a URL para uso no QR-Code
        /// </summary>
        /// <param name="nfe"></param>
        /// <param name="configuracaoDanfeNfce"></param>
        /// <returns></returns>
        public static string ObterUrlQrCode(Classes.NFe nfe, ConfiguracaoDanfeNfce configuracaoDanfeNfce)
        {
            //Passo 1: Converter o valor da Data e Hora de Emissão da NFC-e (dhEmi) para HEXA;
            var dhEmi = ObterHexDeString(nfe.infNFe.ide.dhEmi);

            //Passo 2: Converter o valor do Digest Value da NFC-e (digVal) para HEXA;
            //Ao se efetuar a assinatura digital da NFCe emitida em contingência off-line, o campo digest value constante da XMl Signature deve obrigatoriamente ser idêntico ao encontrado quando da geração do digest value para a montagem QR Code.
            //Ver página 18 do Manual de Padrões Padrões Técnicos do DANFE - NFC - e e QR Code, versão 3.2
            if (nfe.Signature == null)
            {
                throw new Exception("Não é possível obter a URL do QR-Code de uma NFCe não assinada!");
            }
            var digVal = ObterHexDeString(nfe.Signature.SignedInfo.Reference.DigestValue);

            //Na hipótese do consumidor não se identificar, não existirá o parâmetro cDest no QR Code;
            var cDest = "";

            if (nfe.infNFe.dest != null)
            {
                cDest = "&cDest=" + nfe.infNFe.dest.CPF + nfe.infNFe.dest.CNPJ + nfe.infNFe.dest.idEstrangeiro;
            }

            //Passo 3: Substituir os valores (“dhEmi” e “digVal”) nos parâmetros;
            var dadosBase = "chNFe=" + nfe.infNFe.Id.Substring(3) + "&nVersao=100&tpAmb=" + ((int)nfe.infNFe.ide.tpAmb) + cDest + "&dhEmi=" + dhEmi + "&vNF=" +
                            nfe.infNFe.total.ICMSTot.vNF.ToString("0.00").Replace(',', '.') + "&vICMS=" + nfe.infNFe.total.ICMSTot.vICMS.ToString("0.00").Replace(',', '.') + "&digVal=" + digVal + "&cIdToken=" +
                            configuracaoDanfeNfce.cIdToken;

            //Passo 4: Adicionar, ao final dos parâmetros, o CSC (CSC do contribuinte disponibilizado pela SEFAZ do Estado onde a empresa esta localizada):
            var dadosParaSh1 = dadosBase + configuracaoDanfeNfce.CSC;

            //Passo 5: Aplicar o algoritmo SHA-1 sobre todos os parâmetros concatenados. Asaída do algoritmo SHA-1 deve ser em HEXADECIMAL.
            var sha1ComCsc = ObterHexSha1DeString(dadosParaSh1);

            //Passo 6: Adicione o resultado sem o CSC e gere a imagem do QR Code: 1º parte (endereço da consulta) +2º parte (tabela 3 com indicação SIM na última coluna).
            return(ObterUrl(nfe.infNFe.ide.tpAmb, nfe.infNFe.ide.cUF, TipoUrlDanfeNfce.UrlQrCode) + "?" + dadosBase + "&cHashQRCode=" + sha1ComCsc);
        }
예제 #9
0
        private void BtnAdicionaNfeproc_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                var arquivoXml = Funcoes.BuscarArquivoXml();
                var nfe        = new Classes.NFe().CarregarDeArquivoXml(arquivoXml);
                var chave      = nfe.infNFe.Id.Substring(3);

                if (String.IsNullOrEmpty(chave))
                {
                    throw new Exception("A Chave da NFe não foi encontrada no arquivo!");
                }
                if (chave.Length != 44)
                {
                    throw new Exception("Chave deve conter 44 caracteres!");
                }

                var servicoNFe      = new ServicosNFe(_configuracoes.CfgServico);
                var retornoConsulta = servicoNFe.NfeConsultaProtocolo(chave);
                TrataRetorno(retornoConsulta);

                var nfeproc = new nfeProc {
                    NFe = nfe, protNFe = retornoConsulta.Retorno.protNFe, versao = retornoConsulta.Retorno.versao
                };
                var novoArquivo = Path.GetDirectoryName(arquivoXml) + @"\" + nfeproc.protNFe.infProt.chNFe + "-procNfe.xml";
                FuncoesXml.ClasseParaArquivoXml(nfeproc, novoArquivo);
                Funcoes.Mensagem("Arquivo salvo em " + novoArquivo, "Atenção", MessageBoxButton.OK);
            }
            catch (Exception ex)
            {
                if (!String.IsNullOrEmpty(ex.Message))
                {
                    Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK);
                }
            }
        }
예제 #10
0
        private void CarregaArquivoNfe()
        {
            var arquivoXml = Funcoes.BuscarArquivoXml();

            _nfe = new Classes.NFe().CarregarDeArquivoXml(arquivoXml);
        }
예제 #11
0
        /// <summary>
        ///     Envia um evento do tipo "EPEC"
        /// </summary>
        /// <param name="idlote"></param>
        /// <param name="sequenciaEvento"></param>
        /// <param name="nfe"></param>
        /// <param name="veraplic"></param>
        /// <returns>Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento</returns>
        public RetornoRecepcaoEvento RecepcaoEventoEpec(int idlote, int sequenciaEvento, Classes.NFe nfe, string veraplic)
        {
            var versaoServico = Auxiliar.VersaoServicoParaString(ServicoNFe.RecepcaoEvento, _cFgServico.VersaoRecepcaoEvento);

            if (String.IsNullOrEmpty(nfe.infNFe.Id))
            {
                nfe.Assina().Valida();
            }

            var detevento = new detEvento
            {
                versao      = versaoServico,
                cOrgaoAutor = nfe.infNFe.ide.cUF,
                tpAutor     = TipoAutor.taEmpresaEmitente,
                verAplic    = veraplic,
                dhEmi       = !String.IsNullOrEmpty(nfe.infNFe.ide.dhEmi) ? nfe.infNFe.ide.dhEmi : Convert.ToDateTime(nfe.infNFe.ide.dEmi).ToString("yyyy-MM-ddTHH:mm:sszzz"),
                tpNF        = nfe.infNFe.ide.tpNF,
                IE          = nfe.infNFe.emit.IE,
                dest        = new dest
                {
                    UF    = nfe.infNFe.dest.enderDest.UF,
                    CNPJ  = nfe.infNFe.dest.CNPJ,
                    CPF   = nfe.infNFe.dest.CPF,
                    IE    = nfe.infNFe.dest.IE,
                    vNF   = nfe.infNFe.total.ICMSTot.vNF,
                    vICMS = nfe.infNFe.total.ICMSTot.vICMS,
                    vST   = nfe.infNFe.total.ICMSTot.vST
                }
            };

            var infEvento = new infEventoEnv
            {
                cOrgao     = Estado.AN,
                tpAmb      = nfe.infNFe.ide.tpAmb,
                CNPJ       = nfe.infNFe.emit.CNPJ,
                CPF        = nfe.infNFe.emit.CPF,
                chNFe      = nfe.infNFe.Id.Substring(3),
                dhEvento   = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz"),
                tpEvento   = 110140,
                nSeqEvento = sequenciaEvento,
                verEvento  = versaoServico,
                detEvento  = detevento
            };

            var evento = new evento {
                versao = versaoServico, infEvento = infEvento
            };

            var retorno = RecepcaoEvento(idlote, new List <evento> {
                evento
            }, TipoRecepcaoEvento.Epec);

            return(retorno);
        }
예제 #12
0
 /// <summary>
 /// Construtor da classe responsável pela impressão do DANFE da NFCe em Fast Reports.
 /// Use esse construtor apenas para impressão em contingência, já que neste modo ainda não é possível obter o grupo protNFe
 /// </summary>
 /// <param name="nfe">Objeto do tipo NFe</param>
 /// <param name="configuracaoDanfeNfce">Objeto do tipo ConfiguracaoDanfeNfce contendo as definições de impressão</param>
 /// <param name="cIdToken">Identificador do CSC – Código de Segurança do Contribuinte no Banco de Dados da SEFAZ</param>
 /// <param name="csc">Código de Segurança do Contribuinte(antigo Token)</param>
 public DanfeFrNfce(Classes.NFe nfe, ConfiguracaoDanfeNfce configuracaoDanfeNfce, string cIdToken, string csc) : this(new nfeProc() { NFe = nfe }, configuracaoDanfeNfce, cIdToken, csc)
 {
 }
예제 #13
0
        /// <summary>
        ///     Carrega um arquivo XML para um objeto da classe NFe
        /// </summary>
        /// <param name="nfe"></param>
        /// <param name="arquivoXml">arquivo XML</param>
        /// <returns>Retorna uma NFe carregada com os dados do XML</returns>
        public static Classes.NFe CarregarDeArquivoXml(this Classes.NFe nfe, string arquivoXml)
        {
            var s = FuncoesXml.ObterNodeDeArquivoXml(typeof(Classes.NFe).Name, arquivoXml);

            return(FuncoesXml.XmlStringParaClasse <Classes.NFe>(s));
        }
예제 #14
0
 /// <summary>
 /// Construtor da classe reponsável pela impressão do DANFE da NFe em Fast Reports.
 /// Use esse construtor apenas para impressão em contigência, já que neste modo ainda não é possível obter o grupo protNFe
 /// </summary>
 /// <param name="nfe">Objeto do tipo NFe</param>
 /// <param name="configuracaoDanfeNfe">Objeto do tipo ConfiguracaoDanfeNfe contendo as definições de impressão</param>
 public DanfeFrNfe(Classes.NFe nfe, ConfiguracaoDanfeNfe configuracaoDanfeNfe) : this(new nfeProc() { NFe = nfe }, configuracaoDanfeNfe)
 {
 }
예제 #15
0
파일: DanfeFrNfce.cs 프로젝트: myrp/DFe.NET
 /// <summary>
 /// Construtor da classe responsável pela impressão do DANFE da NFCe em Fast Reports.
 /// Use esse construtor apenas para impressão em contingência, já que neste modo ainda não é possível obter o grupo protNFe
 /// </summary>
 /// <param name="nfe">Objeto do tipo NFe</param>
 /// <param name="configuracaoDanfeNfce">Objeto do tipo ConfiguracaoDanfeNfce contendo as definições de impressão</param>
 /// <param name="cIdToken">Identificador do CSC – Código de Segurança do Contribuinte no Banco de Dados da SEFAZ</param>
 /// <param name="csc">Código de Segurança do Contribuinte(antigo Token)</param>
 /// <param name="textoRodape">Texto para ser impresso no final do documento</param>
 public DanfeFrNfce(Classes.NFe nfe, ConfiguracaoDanfeNfce configuracaoDanfeNfce, string cIdToken, string csc, string textoRodape = "") :
     this(new nfeProc() { NFe = nfe }, configuracaoDanfeNfce, cIdToken, csc, arquivoRelatorio : string.Empty, textoRodape : textoRodape)
 {
 }
예제 #16
0
        private void BtnCriareEnviar3_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                #region Cria e Envia NFe

                var numero = Funcoes.InpuBox("Criar e Enviar NFe", "Número da Nota:");
                if (string.IsNullOrEmpty(numero))
                {
                    throw new Exception("O Número deve ser informado!");
                }

                var lote = Funcoes.InpuBox("Criar e Enviar NFe", "Id do Lote:");
                if (string.IsNullOrEmpty(lote))
                {
                    throw new Exception("A Id do lote deve ser informada!");
                }

                _nfe = GetNf(Convert.ToInt32(numero), _configuracoes.CfgServico.ModeloDocumento,
                             _configuracoes.CfgServico.VersaoNFeAutorizacao);
                _nfe.Assina(); //não precisa validar aqui, pois o lote será validado em ServicosNFe.NFeAutorizacao
                //A URL do QR-Code deve ser gerada em um objeto nfe já assinado, pois na URL vai o DigestValue que é gerado por ocasião da assinatura
                //Descomente a linha abaixo se a SEFAZ de sua UF já habilitou a NT2015.002
                _nfe.infNFeSupl = new infNFeSupl()
                {
                    qrCode = EnderecadorDanfeNfce.ObterUrlQrCode(_nfe, _configuracoes.ConfiguracaoDanfeNfce)
                };                                                                                                                               //Define a URL do QR-Code.
                var servicoNFe   = new ServicosNFe(_configuracoes.CfgServico);
                var retornoEnvio = servicoNFe.NFeAutorizacao(Convert.ToInt32(lote), IndicadorSincronizacao.Assincrono, new List <Classes.NFe> {
                    _nfe
                }, true /*Envia a mensagem compactada para a SEFAZ*/);

                TrataRetorno(retornoEnvio);
                if (retornoEnvio.Retorno.infRec.nRec != string.Empty)
                {
                    try
                    {
                        #region Consulta Recibo de lote


                        servicoNFe = new ServicosNFe(_configuracoes.CfgServico);
                        var retornoRecibo = servicoNFe.NFeRetAutorizacao(retornoEnvio.Retorno.infRec.nRec);

                        TrataRetorno(retornoRecibo);
                        //var dlg = new SaveFileDialog
                        //{
                        //    FileName = _nfe.infNFe.Id.Substring(3),
                        //    DefaultExt = ".xml",
                        //    Filter = "Arquivo XML (.xml)|*.xml"
                        //};
                        //var result = dlg.ShowDialog();
                        //if (result != true) return;
                        //var arquivoXml = dlg.FileName;

                        string ch = _nfe.infNFe.Id.Substring(3);
                        _nfe.SalvarArquivoXml(_path + "\\NFCe\\" + ch + ".xml");
                        Prot(_path + "\\NFCe\\" + ch + ".xml");
                        #endregion
                    }
                    catch (Exception ex)
                    {
                        if (!string.IsNullOrEmpty(ex.Message))
                        {
                            Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK);
                        }
                    }
                }

                #endregion
            }
            catch (Exception ex)
            {
                if (!string.IsNullOrEmpty(ex.Message))
                {
                    Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK);
                }
            }
        }
예제 #17
0
 /// <summary>
 /// Construtor da classe responsável pela impressão do DANFE da NFe em Fast Reports.
 /// Use esse construtor apenas para impressão em contingência, já que neste modo ainda não é possível obter o grupo protNFe
 /// </summary>
 /// <param name="nfe">Objeto do tipo <see cref="Classes.NFe"/></param>
 /// <param name="configuracaoDanfeNfe">Objeto do tipo <see cref="ConfiguracaoDanfeNfe"/> contendo as definições de impressão</param>
 /// <param name="desenvolvedor">Texto do desenvolvedor a ser informado no DANFE</param>
 public DanfeFrNfe(Classes.NFe nfe, ConfiguracaoDanfeNfe configuracaoDanfeNfe, string desenvolvedor) : this(new nfeProc() { NFe = nfe }, configuracaoDanfeNfe, desenvolvedor)
 {
 }
예제 #18
0
 /// <summary>
 ///     Converte o objeto NFe para uma string no formato XML
 /// </summary>
 /// <param name="nfe"></param>
 /// <returns>Retorna uma string no formato XML com os dados da NFe</returns>
 public static string ObterXmlString(this Classes.NFe nfe)
 {
     return(FuncoesXml.ClasseParaXmlString(nfe));
 }
예제 #19
0
        /// <summary>
        ///     Obtém a URL de consulta pela chave
        /// </summary>
        public static string ObterUrlConsulta(this infNFeSupl infNFeSupl, Classes.NFe nfe, VersaoQrCode versaoQrCode)
        {
            var versaoServico = Conversao.StringParaVersaoServico(nfe.infNFe.versao);

            return(ObterUrl(infNFeSupl, nfe.infNFe.ide.tpAmb, nfe.infNFe.ide.cUF, TipoUrlConsultaPublica.UrlConsulta, versaoServico, versaoQrCode));
        }
예제 #20
0
        /// <summary>
        ///     Coverte uma string XML no formato NFe para um objeto NFe
        /// </summary>
        /// <param name="nfe"></param>
        /// <param name="xmlString"></param>
        /// <returns>Retorna um objeto do tipo NFe</returns>
        public static Classes.NFe CarregarDeXmlString(this Classes.NFe nfe, string xmlString)
        {
            var s = FuncoesXml.ObterNodeDeStringXml(typeof(Classes.NFe).Name, xmlString);

            return(FuncoesXml.XmlStringParaClasse <Classes.NFe>(s));
        }
예제 #21
0
 /// <summary>
 ///     Grava os dados do objeto NFe em um arquivo XML
 /// </summary>
 /// <param name="nfe">Objeto NFe</param>
 /// <param name="arquivoXml">Diretório com nome do arquivo a ser gravado</param>
 public static void SalvarArquivoXml(this Classes.NFe nfe, string arquivoXml)
 {
     FuncoesXml.ClasseParaArquivoXml(nfe, arquivoXml);
 }
예제 #22
0
        private void BtnNfceDanfeOff_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                #region Carrega um XML com nfeProc para a variável

                var arquivoXml = Funcoes.BuscarArquivoXml();
                if (string.IsNullOrEmpty(arquivoXml))
                    return;
                var nfe = new Classes.NFe().CarregarDeArquivoXml(arquivoXml);
                if (nfe.infNFe.ide.mod != ModeloDocumento.NFCe)
                    throw new Exception("O XML informado não é um NFCe!");

                #endregion

                #region Abre a visualização do relatório para impressão

                var danfe = new DanfeFrNfce(nfe, _configuracoes.ConfiguracaoDanfeNfce, _configuracoes.CIdToken, _configuracoes.Csc);
                danfe.Visualizar();
                //danfe.Imprimir();
                //danfe.ExibirDesign();
                //danfe.ExportarPdf(@"d:\teste.pdf");

                #endregion

            }
            catch (Exception ex)
            {
                if (!string.IsNullOrEmpty(ex.Message))
                    Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK);
            }
        }