예제 #1
0
        /// <summary>
        /// Construtor da classe reponsável pela impressão do DANFE da NFe em Fast Reports
        /// </summary>
        /// <param name="proc">Objeto do tipo nfeProc</param>
        /// <param name="configuracaoDanfeNfe">Objeto do tipo configuracaoDanfeNfe contendo as definições de impressão</param>
        public DanfeFrNfe(nfeProc proc, ConfiguracaoDanfeNfe configuracaoDanfeNfe)
        {
            #region Define as varíaveis que serão usadas no relatório (dúvidas a respeito do fast reports consulte a documentação em https://www.fast-report.com/pt/product/fast-report-net/documentation/)

            Relatorio = new Report();
            Relatorio.RegisterData(new[] { proc }, "NFe", 20);
            Relatorio.GetDataSource("NFe").Enabled = true;
            Relatorio.Load(new MemoryStream(Properties.Resources.NFe));
            ((PictureObject)Relatorio.FindObject("poEmitLogo")).Image = configuracaoDanfeNfe.ObterLogo();

            #endregion
        }
예제 #2
0
        public void ServicosNFe_WhenNfeNFeAutorizacao4_ReturnsxMotivoSuccess()
        {
            var servico = CreateInstance4();
            var nfeProc = CreateObject();

            var nfe = nfeProc.NFe;

            var list = new List <NFe.Classes.NFe>();

            list.Add(nfeProc.NFe);

            nfe.infNFe.ide.mod           = DFe.Classes.Flags.ModeloDocumento.NFCe;
            nfe.infNFe.ide.tpImp         = NFeClasses.Informacoes.Identificacao.Tipos.TipoImpressao.tiNFCe;
            nfe.infNFe.ide.indPres       = NFeClasses.Informacoes.Identificacao.Tipos.PresencaComprador.pcPresencial;
            nfe.infNFe.dest              = null;
            nfe.infNFe.det[0].prod.xProd = "NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL";

            nfe.Signature = null;
            SetValuesForMoriMo(nfe);

            nfe.infNFe.ide.dhEmi    = DateTimeOffset.UtcNow;
            nfe.infNFe.ide.dhSaiEnt = null;

            CriarChaveDeAcesso(nfe);
            var a = new X509Certificate2(@"certificatePath", "certificatePassword", X509KeyStorageFlags.Exportable);

            var signature = Assinador.ObterAssinaturac <NFe.Classes.NFe>(nfe, nfe.infNFe.Id, a);

            nfe.Signature = signature;

            nfe.infNFeSupl = new NFeClasses.infNFeSupl
            {
                urlChave = nfe.infNFe.Id,
                qrCode   = ExtinfNFeSupl.ObterUrlQrCode(new NFeClasses.infNFeSupl(), nfe, VersaoQrCode.QrCodeVersao1, "security-id", "security-Code")
            };


            var issuedNfe = Assinador.SerializeToString(nfe);

            File.WriteAllText($@"D:\works\nfce\test123.xml", issuedNfe);

            var procNfe = new NFe.Classes.nfeProc
            {
                NFe = nfe
            };

            var result = servico.NFeAutorizacao(1, IndicadorSincronizacao.Sincrono, list);

            Assert.IsTrue("Lote recebido com sucesso" == result.Retorno.xMotivo.ToString());
        }
예제 #3
0
        /// <summary>
        /// Construtor da classe reponsável pela impressão do DANFE da NFCe em Fast Reports
        /// </summary>
        /// <param name="proc">Objeto do tipo nfeProc</param>
        /// <param name="configuracaoDanfeNfce">Objeto do tipo ConfiguracaoDanfeNfce contendo as definições de impressão</param>
        public DanfeFrNfce(nfeProc proc, ConfiguracaoDanfeNfce configuracaoDanfeNfce)
        {
            #region Define as varíaveis que serão usadas no relatório (dúvidas a respeito do fast reports consulte a documentação em https://www.fast-report.com/pt/product/fast-report-net/documentation/)

            _relatorio = new Report();
            _relatorio.RegisterData(new[] { proc }, "NFCe", 20);
            _relatorio.GetDataSource("NFCe").Enabled = true;
            _relatorio.Load(new MemoryStream(Properties.Resources.NFCe));
            _relatorio.SetParameterValue("NfceDetalheVendaNormal", configuracaoDanfeNfce.DetalheVendaNormal);
            _relatorio.SetParameterValue("NfceDetalheVendaContigencia", configuracaoDanfeNfce.DetalheVendaContigencia);
            ((PictureObject) _relatorio.FindObject("poEmitLogo")).Image = configuracaoDanfeNfce.ObterLogo();
            ((TextObject)_relatorio.FindObject("txtUrl")).Text = EnderecadorDanfeNfce.ObterUrl(proc.NFe.infNFe.ide.tpAmb, proc.NFe.infNFe.ide.cUF, TipoUrlDanfeNfce.UrlConsulta);
            ((BarcodeObject)_relatorio.FindObject("bcoQrCode")).Text = EnderecadorDanfeNfce.ObterUrlQrCode(proc, configuracaoDanfeNfce);

            //Segundo o Manual de Padrões Padrões Técnicos do DANFE - NFC - e e QR Code, versão 3.2, página 9, nos casos de emissão em contigência deve ser impresso uma segunda cópia como via do estabelecimento
            _relatorio.PrintSettings.Copies = proc.NFe.infNFe.ide.tpEmis == TipoEmissao.teNormal ? 1 : 2;

            #endregion
        }
예제 #4
0
        /// <summary>
        /// Construtor da classe reponsável pela impressão do DANFE da NFCe em Fast Reports
        /// </summary>
        /// <param name="proc">Objeto do tipo nfeProc</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(nfeProc proc, ConfiguracaoDanfeNfce configuracaoDanfeNfce, string cIdToken, string csc)
        {
            #region Define as varíaveis que serão usadas no relatório (dúvidas a respeito do fast reports consulte a documentação em https://www.fast-report.com/pt/product/fast-report-net/documentation/)

            Relatorio = new Report();
            Relatorio.RegisterData(new[] { proc }, "NFCe", 20);
            Relatorio.GetDataSource("NFCe").Enabled = true;
            Relatorio.Load(new MemoryStream(Properties.Resources.NFCe));
            Relatorio.SetParameterValue("NfceDetalheVendaNormal", configuracaoDanfeNfce.DetalheVendaNormal);
            Relatorio.SetParameterValue("NfceDetalheVendaContigencia", configuracaoDanfeNfce.DetalheVendaContigencia);
            Relatorio.SetParameterValue("NfceImprimeDescontoItem", configuracaoDanfeNfce.ImprimeDescontoItem);
            Relatorio.SetParameterValue("NfceModoImpressao", configuracaoDanfeNfce.ModoImpressao);
            ((ReportPage) Relatorio.FindObject("PgNfce")).LeftMargin = configuracaoDanfeNfce.MargemEsquerda;
            ((ReportPage)Relatorio.FindObject("PgNfce")).RightMargin = configuracaoDanfeNfce.MargemDireita;
            ((PictureObject) Relatorio.FindObject("poEmitLogo")).Image = configuracaoDanfeNfce.ObterLogo();
            ((TextObject)Relatorio.FindObject("txtUrl")).Text = proc.NFe.infNFeSupl.ObterUrl(proc.NFe.infNFe.ide.tpAmb, proc.NFe.infNFe.ide.cUF, TipoUrlConsultaPublica.UrlConsulta);
            ((BarcodeObject)Relatorio.FindObject("bcoQrCode")).Text = proc.NFe.infNFeSupl  == null ? proc.NFe.infNFeSupl.ObterUrlQrCode(proc.NFe, cIdToken, csc) : proc.NFe.infNFeSupl.qrCode;

            //Segundo o Manual de Padrões Padrões Técnicos do DANFE - NFC - e e QR Code, versão 3.2, página 9, nos casos de emissão em contigência deve ser impresso uma segunda cópia como via do estabelecimento
            Relatorio.PrintSettings.Copies = (proc.NFe.infNFe.ide.tpEmis == TipoEmissao.teNormal | (proc.protNFe != null && proc.protNFe.infProt != null && NfeSituacao.Autorizada(proc.protNFe.infProt.cStat))
                /*Se a NFe for autorizada, mesmo que seja em contingência, imprime somente uma via*/ ) ? 1 : 2;

            #endregion
        }
예제 #5
0
 /// <summary>
 ///     Carrega um arquivo XML para um objeto da classe nfeProc
 /// </summary>
 /// <param name="nfeProc"></param>
 /// <param name="arquivoXml">arquivo XML</param>
 /// <returns>Retorna um nfeProc carregada com os dados do XML</returns>
 public static nfeProc CarregarDeArquivoXml(nfeProc nfeProc, string arquivoXml)
 {
     var s = FuncoesXml.ObterNodeDeArquivoXml(typeof (nfeProc).Name, arquivoXml);
     return FuncoesXml.XmlStringParaClasse<nfeProc>(s);
 }
        /// <summary>
        ///     Obtém a URL para uso no QR-Code
        /// </summary>
        /// <param name="proc"></param>
        /// <param name="configuracaoDanfeNfce"></param>
        /// <returns></returns>
        public static string ObterUrlQrCode(nfeProc proc, ConfiguracaoDanfeNfce configuracaoDanfeNfce)
        {
            //Passo 1: Converter o valor da Data e Hora de Emissão da NFC-e (dhEmi) para HEXA;
            var dhEmi = StringParaHex(proc.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
            var digVal = StringParaHex(proc.NFe.infNFe.ide.tpEmis == TipoEmissao.teNormal ? proc.protNFe.infProt.digVal : proc.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 (proc.NFe.infNFe.dest != null)
                cDest = "&cDest=" + proc.NFe.infNFe.dest.CPF + proc.NFe.infNFe.dest.CNPJ + proc.NFe.infNFe.dest.idEstrangeiro;

            //Passo 3: Substituir os valores (“dhEmi” e “digVal”) nos parâmetros;
            var dadosBase = "chNFe=" + proc.NFe.infNFe.Id.Substring(3) + "&nVersao=100&tpAmb=" + ((int) proc.NFe.infNFe.ide.tpAmb) + cDest + "&dhEmi=" + dhEmi + "&vNF=" +
                            proc.NFe.infNFe.total.ICMSTot.vNF.ToString("0.00").Replace(',', '.') + "&vICMS=" + proc.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 = ObterHashSha1(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(proc.NFe.infNFe.ide.tpAmb, proc.NFe.infNFe.ide.cUF, TipoUrlDanfeNfce.UrlQrCode) + "?" + dadosBase + "&cHashQRCode=" + sha1ComCsc;
        }
        private void BtnNfeDanfeA4_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 proc = new nfeProc().CarregarDeArquivoXml(arquivoXml);
                if (proc.NFe.infNFe.ide.mod != ModeloDocumento.NFe)
                    throw new Exception("O XML informado não é um NFe!");

                #endregion

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

                var danfe = new DanfeFrNfe(proc, new ConfiguracaoDanfeNfe(_configuracoes.ConfiguracaoDanfeNfce.Logomarca));
                //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);
            }
        }