예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="cnpjEmitente"></param>
        /// <param name="numeroLote"></param>
        /// <param name="sequenciaEvento"></param>
        /// <param name="chaveAcesso"></param>
        /// <param name="protocolo"></param>
        /// <param name="justificativa"></param>
        /// <returns></returns>
        public RetornoRecepcaoEvento CancelarNFe(string cnpjEmitente, int numeroLote, short sequenciaEvento, string chaveAcesso,
                                                 string protocolo, string justificativa)
        {
            var servicoNFe = new ServicosNFe(ConfiguracaoServico.Instancia);

            return(servicoNFe.RecepcaoEventoCancelamento(numeroLote, sequenciaEvento, protocolo, chaveAcesso, justificativa, cnpjEmitente));
        }
예제 #2
0
        /// <summary>
        ///     Consulta a situação cadastral, com base na UF/Documento
        ///     <para>O documento pode ser: CPF ou CNPJ. O serviço avaliará o tamanho da string passada e determinará se a coonsulta será por CPF ou por CNPJ</para>
        /// </summary>
        /// <param name="uf">Sigla da UF consultada, informar 'SU' para SUFRAMA.</param>
        /// <param name="tipoDocumento">Tipo do documento</param>
        /// <param name="documento">CPF ou CNPJ</param>
        /// <returns>Retorna um objeto da classe RetornoNfeConsultaCadastro com o retorno do serviço NfeConsultaCadastro</returns>
        public RetornoNfeConsultaCadastro ConsultaCadastro(string uf, ConsultaCadastroTipoDocumento tipoDocumento,
                                                           string documento)
        {
            var servicoNFe = new ServicosNFe(ConfiguracaoServico.Instancia);

            return(servicoNFe.NfeConsultaCadastro(uf, tipoDocumento, documento));
        }
예제 #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ano"></param>
        /// <param name="cnpj"></param>
        /// <param name="justificativa"></param>
        /// <param name="numeroInicial"></param>
        /// <param name="numeroFinal"></param>
        /// <param name="serie"></param>
        /// <returns></returns>
        public RetornoNfeInutilizacao InutilizarNumeracao(int ano, string cnpj, string justificativa,
                                                          int numeroInicial, int numeroFinal, int serie)
        {
            var servicoNFe = new ServicosNFe(ConfiguracaoServico.Instancia);

            return(servicoNFe.NfeInutilizacao(cnpj, Convert.ToInt16(ano.ToString().Substring(2, 2)), ConfiguracaoServico.Instancia.ModeloDocumento, Convert.ToInt16(serie), Convert.ToInt32(numeroInicial), Convert.ToInt32(numeroFinal), justificativa));
        }
예제 #4
0
 private static async Task FuncaoStatusServico()
 {
     try
     {
         #region Status do serviço
         using (ServicosNFe servicoNFe = new ServicosNFe(_configuracoes.CfgServico))
         {
             var retornoStatus = servicoNFe.NfeStatusServico();
             OnSucessoSync(retornoStatus);
         }
         #endregion
     }
     catch (ComunicacaoException ex)
     {
         throw ex;
     }
     catch (ValidacaoSchemaException ex)
     {
         throw ex;
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
        /// <summary>
        /// Responsavel por Enviar NFe para Sefaz
        /// </summary>
        /// <param name="cFgServico"></param>
        /// <param name="numLote"></param>
        /// <param name="nfe"></param>
        /// <returns></returns>
        public RetornoNFeAutorizacao EnviarNFe(int numLote, Classes.NFe nfe, ConfiguracaoServico cFgServico)
        {
            //nfe.Assina(cFgServico); //não precisa validar aqui, pois o lote será validado em ServicosNFe.NFeAutorizacao
            var servicoNFe   = new ServicosNFe(cFgServico);
            var retornoEnvio = servicoNFe.NFeAutorizacao(numLote, IndicadorSincronizacao.Assincrono, new List <Classes.NFe> {
                nfe
            }, false /*Envia a mensagem compactada para a SEFAZ*/);

            var recibo = servicoNFe.NFeRetAutorizacao(retornoEnvio.Retorno.infRec.nRec);
            var cStat  = this.VerificarcStat(recibo.RetornoCompletoStr, "protNFe", "infProt");

            if (cStat == "100")
            {
                //Salva NFe+protNFe na tag nfeProc apos autorização da NFe
                this.AdicionarNFeProc(nfe.infNFe.Id.Substring(3), nfe, cFgServico);
            }
            if (nfe.infNFe.ide.mod == ModeloDocumento.NFCe)
            {
                this.SalvarXmlArquivo(nfe.infNFe.Id.Substring(3) + "-nfce", nfe.ObterXmlString(), cFgServico.tpAmb);
            }
            else
            {
                this.SalvarXmlArquivo(nfe.infNFe.Id.Substring(3) + "-nfe", nfe.ObterXmlString(), cFgServico.tpAmb);
            }
            return(retornoEnvio);
        }
예제 #6
0
        private void BtnConsultaChave_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                #region Consulta Situação NFe

                var chave = Funcoes.InpuBox(this, "Consultar NFe pela Chave", "Chave da NFe:");
                if (String.IsNullOrEmpty(chave))
                {
                    throw new Exception("A Chave deve ser informada!");
                }
                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);

                #endregion
            }
            catch (Exception ex)
            {
                if (!String.IsNullOrEmpty(ex.Message))
                {
                    Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK);
                }
            }
        }
예제 #7
0
        private void BtnConsultaXml_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                #region Consulta Situação NFe pelo XML

                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);

                #endregion
            }
            catch (Exception ex)
            {
                if (!String.IsNullOrEmpty(ex.Message))
                {
                    Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK);
                }
            }
        }
        /// <summary>
        /// Responsavel Consultar Status do Serviço da Sefaz
        /// </summary>
        /// <returns></returns>
        public RetornoNfeStatusServico ConsultarStatusServico(ConfiguracaoServico cFgServico)
        {
            var servicoNFe    = new ServicosNFe(cFgServico);
            var retornoStatus = servicoNFe.NfeStatusServico();

            return(retornoStatus);
        }
예제 #9
0
        private void BtnConsultarReciboLote3_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                #region Consulta Recibo de lote

                var recibo = Funcoes.InpuBox(this, "Consultar processamento de lote de NF-e", "Número do recibo:");
                if (String.IsNullOrEmpty(recibo))
                {
                    throw new Exception("O número do recibo deve ser informado!");
                }
                var servicoNFe    = new ServicosNFe(_configuracoes.CfgServico);
                var retornoRecibo = servicoNFe.NFeRetAutorizacao(recibo);

                TrataRetorno(retornoRecibo);

                #endregion
            }
            catch (Exception ex)
            {
                if (!String.IsNullOrEmpty(ex.Message))
                {
                    Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK);
                }
            }
        }
        /// <summary>
        /// Responsavel Inutilizar NFe
        /// </summary>
        /// <param name="cFgServico"></param>
        /// <param name="ano"></param>
        /// <param name="cnpj"></param>
        /// <param name="justificativa"></param>
        /// <param name="numeroInicial"></param>
        /// <param name="numeroFinal"></param>
        /// <param name="serie"></param>
        /// <returns></returns>
        public RetornoNfeInutilizacao InutilizarNumeracao(int ano, string cnpj, string justificativa,
                                                          int numeroInicial, int numeroFinal, int serie, ConfiguracaoServico cFgServico)
        {
            var servicoNFe = new ServicosNFe(cFgServico);

            return(servicoNFe.NfeInutilizacao(cnpj, Convert.ToInt32(ano.ToString().Substring(2, 2)), cFgServico.ModeloDocumento, serie, numeroInicial, numeroFinal, justificativa));
        }
예제 #11
0
        private void BtnCarregaXmlEnvia_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                var lote = Funcoes.InpuBox(this, "Criar e Enviar NFe", "Id do Lote:");
                if (String.IsNullOrEmpty(lote))
                {
                    throw new Exception("A Id do lote deve ser informada!");
                }

                BtnImportarXml_Click(sender, e);
                _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);
            }
            catch (Exception ex)
            {
                if (!String.IsNullOrEmpty(ex.Message))
                {
                    Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK);
                }
            }
        }
예제 #12
0
        private static async Task DownloadXml()
        {
            try
            {
                Console.WriteLine("Informe a chave da NFe para download:");
                string chave = Console.ReadLine();

                Console.WriteLine("Deseja manifestar a NFe? (S/N)");
                bool manifestar = string.Equals(Console.ReadLine().Trim().ToLower(), "s");


                using (var _certificado = CertificadoDigital.ObterCertificado(_configuracoes.CfgServico.Certificado))
                    using (var servicoNFe = new ServicosNFe(_configuracoes.CfgServico, _certificado))
                    {
                        if (manifestar)
                        {
                            try
                            {
                                var retornoManifestacao = servicoNFe.RecepcaoEventoManifestacaoDestinatario(idlote: 1,
                                                                                                            sequenciaEvento: 1,
                                                                                                            chavesNFe: new string[] { chave },
                                                                                                            nFeTipoEventoManifestacaoDestinatario: NFeTipoEvento.TeMdCienciaDaOperacao,
                                                                                                            cpfcnpj: _configuracoes.Emitente.CNPJ,
                                                                                                            justificativa: null);

                                Console.WriteLine($"Retorno da manifestação: {retornoManifestacao.RetornoStr}");
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine($"Manifestação: {ex.Message}");
                            }
                        }

                        var retornoNFeDistDFe = servicoNFe.NfeDistDFeInteresse(ufAutor: _configuracoes.EnderecoEmitente.UF.ToString(), documento: _configuracoes.Emitente.CNPJ, chNFE: chave);
                        if (retornoNFeDistDFe.Retorno.loteDistDFeInt == null)
                        {
                            await Task.Delay(2000); //https://github.com/ZeusAutomacao/DFe.NET/issues/568#issuecomment-339862458

                            retornoNFeDistDFe = servicoNFe.NfeDistDFeInteresse(ufAutor: _configuracoes.EnderecoEmitente.UF.ToString(), documento: _configuracoes.Emitente.CNPJ, chNFE: chave);

                            if (retornoNFeDistDFe.Retorno.loteDistDFeInt == null)
                            {
                                throw new Exception(retornoNFeDistDFe.Retorno.xMotivo);
                            }
                        }

                        if ((retornoNFeDistDFe.Retorno.loteDistDFeInt.Count()) > 0)
                        {
                            var    xmlBytes = retornoNFeDistDFe.Retorno.loteDistDFeInt[0].XmlNfe;
                            string xmlStr   = Compressao.Unzip(xmlBytes);

                            Console.WriteLine($"Xml: {xmlStr}");
                        }
                    }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
예제 #13
0
        private static async Task ManifestarCienciaOperacao()
        {
            try
            {
                Console.WriteLine("Informe a chave da NFe para download:");
                string chave = Console.ReadLine();

                using (var _certificado = CertificadoDigital.ObterCertificado(_configuracoes.CfgServico.Certificado))
                    using (var servicoNFe = new ServicosNFe(_configuracoes.CfgServico, _certificado))
                    {
                        var retornoManifestacao = servicoNFe.RecepcaoEventoManifestacaoDestinatario(idlote: 1,
                                                                                                    sequenciaEvento: 1,
                                                                                                    chavesNFe: new string[] { chave },
                                                                                                    nFeTipoEventoManifestacaoDestinatario: NFeTipoEvento.TeMdCienciaDaOperacao,
                                                                                                    cpfcnpj: _configuracoes.Emitente.CNPJ,
                                                                                                    justificativa: null);

                        Console.WriteLine($"Retorno da manifestação: {retornoManifestacao.RetornoStr}");
                    }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
예제 #14
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="numLote"></param>
        /// <param name="nfe"></param>
        /// <returns></returns>
        public RetornoNFeAutorizacao EnviarNFe(Int32 numLote, Classes.NFe nfe)
        {
            nfe.Assina(); //não precisa validar aqui, pois o lote será validado em ServicosNFe.NFeAutorizacao
            var servicoNFe = new ServicosNFe(ConfiguracaoServico.Instancia);

            return(servicoNFe.NFeAutorizacao(numLote, IndicadorSincronizacao.Assincrono, new List <Classes.NFe> {
                nfe
            }));
        }
예제 #15
0
        private static async Task FuncaoEnviaNfeAssincrono()
        {
            try
            {
                #region Cria e Envia 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!");
                 *
                 * var lote = Funcoes.InpuBox(this, "Criar e Enviar NFe", "Id do Lote:");
                 * if (string.IsNullOrEmpty(lote)) throw new Exception("A Id do lote deve ser informada!");*/

                //parametros
                string numero        = "123";
                string lote          = "321";
                var    versaoServico = _configuracoes.CfgServico.VersaoNFeAutorizacao;
                var    modelo        = _configuracoes.CfgServico.ModeloDocumento;

                //gera o objeto NFe
                var nfe = GetNf(Convert.ToInt32(numero), modelo, versaoServico);
                nfe.Assina();
                //apenas para nfce

                /*if (nfe.infNFe.ide.mod == ModeloDocumento.NFCe)
                 * {
                 *  nfe.infNFeSupl = new infNFeSupl();
                 *  if (versaoServico == VersaoServico.Versao400)
                 *      nfe.infNFeSupl.urlChave = nfe.infNFeSupl.ObterUrlConsulta(nfe, _configuracoes.ConfiguracaoDanfeNfce.VersaoQrCode);
                 *  nfe.infNFeSupl.qrCode = nfe.infNFeSupl.ObterUrlQrCode(nfe, _configuracoes.ConfiguracaoDanfeNfce.VersaoQrCode, configuracaoCsc.CIdToken, configuracaoCsc.Csc);
                 * }*/
                nfe.Valida();

                //envia via req
                ServicosNFe servicoNFe   = new ServicosNFe(_configuracoes.CfgServico);
                var         retornoEnvio = servicoNFe.NFeAutorizacao(Convert.ToInt32(lote), IndicadorSincronizacao.Assincrono, new List <Classes.NFe> {
                    nfe
                }, false /*Envia a mensagem compactada para a SEFAZ*/);

                OnSucessoSync(retornoEnvio);

                #endregion
            }
            catch (ComunicacaoException ex)
            {
                //Faça o tratamento de contingência OffLine aqui.
                throw ex;
            }
            catch (ValidacaoSchemaException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
예제 #16
0
        public override RetornoNFe Emitir()
        {
            var servicoNFe   = new ServicosNFe(null /*_configuracoes.CfgServico*/);
            var retornoEnvio = servicoNFe.NFeAutorizacao(Convert.ToInt32(Identificacao.Serie), IndicadorSincronizacao.Sincrono, null /*new List<Classes.NFe> { _nfe }*/, false);

            //Para consumir o serviço de forma síncrona, use a linha abaixo:
            //var retornoEnvio = servicoNFe.NFeAutorizacao(Convert.ToInt32(lote), IndicadorSincronizacao.Sincrono, new List<Classes.NFe> { _nfe }, true/*Envia a mensagem compactada para a SEFAZ*/);

            return(null);
        }
예제 #17
0
        public void EnviarNfce(NFe.Classes.NFe nfe)
        {
            var servicoNFe = new ServicosNFe(CfgServico);

            var lote = 1;

            servicoNFe.NFeAutorizacao(Convert.ToInt32(lote), IndicadorSincronizacao.Assincrono, new List <NFe.Classes.NFe> {
                nfe
            }, true);
        }
예제 #18
0
        private void BtnCancelarNFe_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                #region Cancelar NFe

                var idlote = Funcoes.InpuBox(this, "Cancelar NFe", "Identificador de controle do Lote de envio:");
                if (String.IsNullOrEmpty(idlote))
                {
                    throw new Exception("A Id do Lote deve ser informada!");
                }

                var sequenciaEvento = Funcoes.InpuBox(this, "Cancelar NFe", "Número sequencial do evento:");
                if (String.IsNullOrEmpty(sequenciaEvento))
                {
                    throw new Exception("O número sequencial deve ser informado!");
                }

                var protocolo = Funcoes.InpuBox(this, "Cancelar NFe", "Protocolo de Autorização da NFe:");
                if (String.IsNullOrEmpty(protocolo))
                {
                    throw new Exception("O protocolo deve ser informado!");
                }

                var chave = Funcoes.InpuBox(this, "Cancelar NFe", "Chave da NFe:");
                if (String.IsNullOrEmpty(chave))
                {
                    throw new Exception("A Chave deve ser informada!");
                }
                if (chave.Length != 44)
                {
                    throw new Exception("Chave deve conter 44 caracteres!");
                }

                var justificativa = Funcoes.InpuBox(this, "Cancelar NFe", "Justificativa");
                if (String.IsNullOrEmpty(justificativa))
                {
                    throw new Exception("A justificativa deve ser informada!");
                }

                var servicoNFe          = new ServicosNFe(_configuracoes.CfgServico);
                var cpfcnpj             = String.IsNullOrEmpty(_configuracoes.Emitente.CNPJ) ? _configuracoes.Emitente.CPF : _configuracoes.Emitente.CNPJ;
                var retornoCancelamento = servicoNFe.RecepcaoEventoCancelamento(Convert.ToInt16(idlote), Convert.ToInt16(sequenciaEvento), protocolo, chave, justificativa, cpfcnpj);
                TrataRetorno(retornoCancelamento);

                #endregion
            }
            catch (Exception ex)
            {
                if (!String.IsNullOrEmpty(ex.Message))
                {
                    Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK);
                }
            }
        }
예제 #19
0
        public void GerarXmlNfe()
        {
            // EXERCICIO: trate os retornos da Sefaz e armazene o status da nota de acordo
            NFeSelected.StatusNota = 4;
            SalvarAtualizarNFe();


            infNFe InfNFe = new infNFe
            {
                versao = Auxiliar.VersaoServicoParaString(_configuracoes.CfgServico.VersaoNFeAutorizacao),
                ide    = GetIdentificacao(),
                emit   = GetEmitente(),
                transp = GetTransporte()
            };

            if (NFeSelected.NfeDestinatario.CpfCnpj != null)
            {
                InfNFe.dest = GetDestinatario();
            }

            for (var i = 0; i < 1; i++)
            {
                InfNFe.det.Add(GetDetalhe(i, InfNFe.emit.CRT));
            }

            InfNFe.total = GetTotal();

            _nfe        = new NFe.Classes.NFe();
            _nfe.infNFe = InfNFe;

            _nfe.Assina();
            string nomeArquivoXml = @"C:\T2Ti\NFe\XML\" + NFeSelected.ChaveAcesso + NFeSelected.DigitoChaveAcesso + ".xml";

            _nfe.SalvarArquivoXml(nomeArquivoXml);
            var servicoNFe   = new ServicosNFe(_configuracoes.CfgServico);
            var retornoEnvio = servicoNFe.NFeAutorizacao(1, IndicadorSincronizacao.Assincrono, new List <NFe.Classes.NFe> {
                _nfe
            });

            // consultar protocolo
            var retornoConsulta = servicoNFe.NfeConsultaProtocolo(NFeSelected.ChaveAcesso + NFeSelected.DigitoChaveAcesso);

            _protocolo = retornoConsulta.Retorno.protNFe.infProt.nProt;

            string mensagem = "";

            foreach (var atributos in Funcoes.LerPropriedades(retornoEnvio.Retorno))
            {
                mensagem += atributos.Key + " = " + atributos.Value + "\r";
            }
            MessageBox.Show(mensagem, "Informação do Sistema", MessageBoxButton.OK, MessageBoxImage.Information);
        }
예제 #20
0
        public void ConsultarStatusServico()
        {
            var servicoNFe    = new ServicosNFe(_configuracoes.CfgServico);
            var retornoStatus = servicoNFe.NfeStatusServico();

            string mensagem = "";

            foreach (var atributos in Funcoes.LerPropriedades(retornoStatus.Retorno))
            {
                mensagem += atributos.Key + " = " + atributos.Value + "\r";
            }
            MessageBox.Show(mensagem, "Informação do Sistema", MessageBoxButton.OK, MessageBoxImage.Information);
        }
예제 #21
0
        // EXERCICIO: Faça as devidas adaptações na CC-e de acordo com sua necessidade
        public void CCe()
        {
            var idlote = Funcoes.InpuBox(null, "Carta de correção", "Identificador de controle do Lote de envio:");

            if (string.IsNullOrEmpty(idlote))
            {
                throw new Exception("A Id do Lote deve ser informada!");
            }

            var sequenciaEvento = Funcoes.InpuBox(null, "Carta de correção", "Número sequencial do evento:");

            if (string.IsNullOrEmpty(sequenciaEvento))
            {
                throw new Exception("O número sequencial deve ser informado!");
            }

            var chave = Funcoes.InpuBox(null, "Carta de correção", "Chave da NFe:");

            if (string.IsNullOrEmpty(chave))
            {
                throw new Exception("A Chave deve ser informada!");
            }
            if (chave.Length != 44)
            {
                throw new Exception("Chave deve conter 44 caracteres!");
            }

            var correcao = Funcoes.InpuBox(null, "Carta de correção", "Correção");

            if (string.IsNullOrEmpty(correcao))
            {
                throw new Exception("A Correção deve ser informada!");
            }

            var servicoNFe = new ServicosNFe(_configuracoes.CfgServico);
            var cpfcnpj    = string.IsNullOrEmpty(_configuracoes.Emitente.CNPJ)
                ? _configuracoes.Emitente.CPF
                : _configuracoes.Emitente.CNPJ;
            var retornoCartaCorrecao = servicoNFe.RecepcaoEventoCartaCorrecao(Convert.ToInt16(idlote),
                                                                              Convert.ToInt16(sequenciaEvento), chave, correcao, cpfcnpj);

            string mensagem = "";

            foreach (var atributos in Funcoes.LerPropriedades(retornoCartaCorrecao.Retorno))
            {
                mensagem += atributos.Key + " = " + atributos.Value + "\r";
            }
            MessageBox.Show(mensagem, "Informação do Sistema", MessageBoxButton.OK, MessageBoxImage.Information);
        }
예제 #22
0
        private static async Task CarregarNSUs()
        {
            try
            {
                Console.WriteLine("Informe o ultimo número de NSU que você tem. Se não tiver, informe 0 (zero):");
                string ultimoNsu = Console.ReadLine();

                Console.WriteLine("Informe a UF do autor");
                string uf = Console.ReadLine();

                do
                {
                    RetornoNfeDistDFeInt retornoNFeDistDFe = null;
                    using (var _certificado = CertificadoDigital.ObterCertificado(_configuracoes.CfgServico.Certificado))
                        using (var servicoNFe = new ServicosNFe(_configuracoes.CfgServico, _certificado))
                            retornoNFeDistDFe = servicoNFe.NfeDistDFeInteresse(ufAutor: _configuracoes.Emitente.enderEmit.UF.ToString(),
                                                                               documento: _configuracoes.Emitente.CNPJ,
                                                                               ultNSU: ultimoNsu.ToString());

                    var lote = retornoNFeDistDFe.Retorno.loteDistDFeInt;
                    if (lote == null || !lote.Any())
                    {
                        break;
                    }

                    Console.WriteLine($"{"NSU".PadRight(44, ' ')} | Xml");

                    foreach (var item in lote)
                    {
                        string linha = string.Empty;

                        string xmlStr = string.Empty;

                        if (item.XmlNfe != null)
                        {
                            xmlStr = Compressao.Unzip(item.XmlNfe);

                            Console.WriteLine($"{item.NSU.ToString().PadRight(44, ' ')} | {xmlStr}");
                        }
                    }

                    await Task.Delay(2000); //https://github.com/ZeusAutomacao/DFe.NET/issues/568#issuecomment-339862458
                } while (true);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
예제 #23
0
        public Document SearchForDocumentDistribution(Company company, string accessKey = "")
        {
            var document = new Document();

            // Normalize CNPJ number
            var companyCnpj = company.Cnpj.Replace(".", "").Replace("/", "").Replace("-", "").Trim();

            #region Essential Validation

            //if (!Validation.ValidaCpfCnpj(companyCnpj))
            //    throw new ArgumentException("CNPJ inválido!", companyCnpj);

            if (string.IsNullOrEmpty(company.Estate.Trim()))
            {
                throw new ArgumentException("UF não informada!", company.Estate);
            }

            if (string.IsNullOrEmpty(company.CertificateSerialNumber.Trim()))
            {
                throw new ArgumentException("Nenhum certificado foi informado no cadastro da empresa!",
                                            company.CertificateSerialNumber);
            }

            if (string.IsNullOrEmpty(company.CertificatePassword.Trim()))
            {
                throw new ArgumentException("A senha do certificado não foi informada no cadastro da empresa!",
                                            company.CertificatePassword);
            }

            #endregion Essential Validation

            var certConfiguration = GetCertificateForConfig(company.CertificateSerialNumber, company.CertificatePassword);

            ConfiguraServico(GetEstateForConfig(company.Estate), ModeloDocumento.NFe,
                             NFe.Classes.Informacoes.Identificacao.Tipos.TipoAmbiente.taProducao, TipoEmissao.teNormal, 10000,
                             SecurityProtocolType.Ssl3, certConfiguration);

            using (var servicoNFe = new ServicosNFe(_configServico))
            {
                // Get response from SEFAZ WS
                var response = servicoNFe.NfeDistDFeInteresse(company.Estate, companyCnpj, chNFE: accessKey);

                document = TurnIntoDFeDocument(response.Retorno.loteDistDFeInt);
            }

            return(document);
        }
예제 #24
0
        private void BtnEnviaEpec_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                /*
                 * Atenção:
                 * O campo dhEmi da nfe a ser vinculada ao EPEC deve ser exatamente igual ao informado m detevento do EPEC, assim como os demais dados, como emitente, destinatário, etc.
                 * Vide a rejeição código 467 no manual do EPEC
                 */

                #region Enviar EPEC

                var idlote = Funcoes.InpuBox(this, "Enviar EPEC", "Identificador de controle do Lote de envio:");
                if (String.IsNullOrEmpty(idlote))
                {
                    throw new Exception("A Id do Lote deve ser informada!");
                }

                var sequenciaEvento = Funcoes.InpuBox(this, "Enviar EPEC", "Número sequencial do evento:");
                if (String.IsNullOrEmpty(sequenciaEvento))
                {
                    throw new Exception("O número sequencial deve ser informado!");
                }

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

                _nfe = GetNf(Convert.ToInt32(numeronota), ModeloDocumento.NFe, _configuracoes.CfgServico.VersaoNFeAutorizacao);

                var servicoNFe  = new ServicosNFe(_configuracoes.CfgServico);
                var retornoEpec = servicoNFe.RecepcaoEventoEPEC(Convert.ToInt16(idlote), Convert.ToInt16(sequenciaEvento), _nfe, "3.10");
                TrataRetorno(retornoEpec);

                #endregion
            }
            catch (Exception ex)
            {
                if (!String.IsNullOrEmpty(ex.Message))
                {
                    Funcoes.Mensagem(ex.Message, "Erro", MessageBoxButton.OK);
                }
            }
        }
예제 #25
0
        public bool ManifestDfe(int idLote, int seqEvent, string accessKey, Company company,
                                int eventCodeManifest = 0, string reason = null)
        {
            TipoEventoManifestacaoDestinatario eventCode;

            switch (eventCodeManifest)
            {
            case 0:
                eventCode = TipoEventoManifestacaoDestinatario.TeMdCienciaDaEmissao;
                break;

            case 1:
                eventCode = TipoEventoManifestacaoDestinatario.TeMdConfirmacaoDaOperacao;
                break;

            case 2:
                eventCode = TipoEventoManifestacaoDestinatario.TeMdDesconhecimentoDaOperacao;
                break;

            case 3:
                eventCode = TipoEventoManifestacaoDestinatario.TeMdOperacaoNaoRealizada;
                break;

            default:
                throw new Exception("Código de Manifestação não identificado!");
            }

            var configCertificado = GetCertificateForConfig(company.CertificateSerialNumber, company.CertificatePassword);

            ConfiguraServico(GetEstateForConfig(company.Estate), ModeloDocumento.NFe,
                             NFe.Classes.Informacoes.Identificacao.Tipos.TipoAmbiente.taProducao, TipoEmissao.teNormal, 10000,
                             SecurityProtocolType.Ssl3, configCertificado);

            using (var servicoNFe = new ServicosNFe(_configServico))
            {
                var retornoNFeDistDFe = servicoNFe.RecepcaoEventoManifestacaoDestinatario(idLote, seqEvent, accessKey,
                                                                                          eventCode, company.Cnpj, reason);

                if (retornoNFeDistDFe.Retorno.cStat == 128)
                {
                    return(true);
                }
            }

            return(false);
        }
        /// <summary>
        /// Responsavel por enviar Carta de Correção para Sefaz
        /// </summary>
        /// <param name="idLote"></param>
        /// <param name="sequenciaEvento"></param>
        /// <param name="chave"></param>
        /// <param name="correcao"></param>
        /// <param name="cpfcnpj"></param>
        /// <param name="cFgServico"></param>
        /// <returns></returns>
        public RetornoRecepcaoEvento CartaCorrecao(int idLote, int sequenciaEvento, string chave, string correcao, string cpfcnpj, ConfiguracaoServico cFgServico)
        {
            var servicoNFe   = new ServicosNFe(cFgServico);
            var retornoEnvio = servicoNFe.RecepcaoEventoCartaCorrecao(idLote, sequenciaEvento, chave, correcao, cpfcnpj);

            foreach (var evento in retornoEnvio.ProcEventosNFe)
            {
                var proceventoXmlString = evento.ObterXmlString();

                if (evento.retEvento.infEvento.cStat == 135)
                {
                    //Salva procEventoNFe
                    this.SalvarXmlArquivo(evento.retEvento.infEvento.chNFe + "-procEventoNFe", proceventoXmlString, cFgServico.tpAmb);
                }
            }

            return(retornoEnvio);
        }
        /// <summary>
        /// Envia EPEC para Sefaz
        /// </summary>
        /// <param name="idlote"></param>
        /// <param name="sequenciaEvento"></param>
        /// <param name="_nfe"></param>
        /// <param name="veraplic"></param>
        /// <param name="cFgServico"></param>
        /// <returns></returns>
        public RetornoRecepcaoEvento EnviarEPEC(int idlote, int sequenciaEvento, Classes.NFe _nfe, string veraplic, ConfiguracaoServico cFgServico)
        {
            var servicoNFe   = new ServicosNFe(cFgServico);
            var retornoEnvio = servicoNFe.RecepcaoEventoEpec(Convert.ToInt32(idlote), Convert.ToInt16(sequenciaEvento), _nfe, veraplic);

            foreach (var evento in retornoEnvio.ProcEventosNFe)
            {
                var proceventoXmlString = evento.ObterXmlString();

                if (evento.retEvento.infEvento.cStat == 135)
                {
                    //Salva procEventoNFe
                    this.SalvarXmlArquivo(evento.retEvento.infEvento.chNFe + "-epec", proceventoXmlString, cFgServico.tpAmb);
                }
            }

            return(retornoEnvio);
        }
        /// <summary>
        /// Responsavel de Cancelar NFe Emitida
        /// </summary>
        /// <param name="cFgServico"></param>
        /// <param name="cnpjEmitente"></param>
        /// <param name="numeroLote"></param>
        /// <param name="sequenciaEvento"></param>
        /// <param name="chaveAcesso"></param>
        /// <param name="protocolo"></param>
        /// <param name="justificativa"></param>
        /// <returns></returns>
        public RetornoRecepcaoEvento CancelarNFe(string cnpjEmitente, int numeroLote, short sequenciaEvento, string chaveAcesso,
                                                 string protocolo, string justificativa, ConfiguracaoServico cFgServico)
        {
            var servicoNFe   = new ServicosNFe(cFgServico);
            var retornoEnvio = servicoNFe.RecepcaoEventoCancelamento(numeroLote, sequenciaEvento, protocolo, chaveAcesso, justificativa, cnpjEmitente);

            foreach (var evento in retornoEnvio.ProcEventosNFe)
            {
                var proceventoXmlString = evento.ObterXmlString();

                if (evento.retEvento.infEvento.cStat == 135 | evento.retEvento.infEvento.cStat == 155)
                {
                    //Salva procEventoNFe
                    this.SalvarXmlArquivo(evento.retEvento.infEvento.chNFe + "-canc", proceventoXmlString, cFgServico.tpAmb);
                }
            }

            return(retornoEnvio);
        }
예제 #29
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);
                }
            }
        }
예제 #30
0
        private void BtnStatusServico_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                #region Status do serviço

                var servicoNFe    = new ServicosNFe(_configuracoes.CfgServico);
                var retornoStatus = servicoNFe.NfeStatusServico();

                TrataRetorno(retornoStatus);

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