Example #1
0
        /// <summary>
        ///     Inutiliza uma faixa de números
        /// </summary>
        /// <param name="cnpj"></param>
        /// <param name="ano"></param>
        /// <param name="modelo"></param>
        /// <param name="serie"></param>
        /// <param name="numeroInicial"></param>
        /// <param name="numeroFinal"></param>
        /// <param name="justificativa"></param>
        /// <returns>Retorna um objeto da classe RetornoNfeInutilizacao com o retorno do serviço NfeInutilizacao</returns>
        public RetornoNfeInutilizacao NfeInutilizacao(string cnpj, int ano, ModeloDocumento modelo, int serie, int numeroInicial, int numeroFinal, string justificativa)
        {
            var versaoServico = Conversao.VersaoServicoParaString(ServicoNFe.NfeInutilizacao, _cFgServico.VersaoNfeInutilizacao);

            #region Cria o objeto wdsl para consulta

            var ws = CriarServico(ServicoNFe.NfeInutilizacao);

            ws.nfeCabecMsg = new nfeCabecMsg
            {
                cUF         = _cFgServico.cUF,
                versaoDados = versaoServico
            };

            #endregion

            #region Cria o objeto inutNFe

            var pedInutilizacao = new inutNFe
            {
                versao  = versaoServico,
                infInut = new infInutEnv
                {
                    tpAmb  = _cFgServico.tpAmb,
                    cUF    = _cFgServico.cUF,
                    ano    = ano,
                    CNPJ   = cnpj,
                    mod    = modelo,
                    serie  = serie,
                    nNFIni = numeroInicial,
                    nNFFin = numeroFinal,
                    xJust  = justificativa
                }
            };

            var numId = string.Concat((int)pedInutilizacao.infInut.cUF, pedInutilizacao.infInut.ano,
                                      pedInutilizacao.infInut.CNPJ, (int)pedInutilizacao.infInut.mod, pedInutilizacao.infInut.serie.ToString().PadLeft(3, '0'),
                                      pedInutilizacao.infInut.nNFIni.ToString().PadLeft(9, '0'), pedInutilizacao.infInut.nNFFin.ToString().PadLeft(9, '0'));
            pedInutilizacao.infInut.Id = "ID" + numId;

            pedInutilizacao.Assina();

            #endregion

            #region Valida, Envia os dados e obtém a resposta

            var xmlInutilizacao = pedInutilizacao.ObterXmlString();
            Validador.Valida(ServicoNFe.NfeInutilizacao, _cFgServico.VersaoNfeInutilizacao, xmlInutilizacao);
            var dadosInutilizacao = new XmlDocument();
            dadosInutilizacao.LoadXml(xmlInutilizacao);

            SalvarArquivoXml(numId + "-ped-inu.xml", xmlInutilizacao);

            var retorno          = ws.Execute(dadosInutilizacao);
            var retornoXmlString = retorno.OuterXml;
            var retInutNFe       = new retInutNFe().CarregarDeXmlString(retornoXmlString);

            SalvarArquivoXml(numId + "-inu.xml", retornoXmlString);

            return(new RetornoNfeInutilizacao(pedInutilizacao.ObterXmlString(), retInutNFe.ObterXmlString(), retornoXmlString, retInutNFe));

            #endregion
        }
        /// <summary>
        ///     Envia um evento genérico
        /// </summary>
        /// <param name="idlote"></param>
        /// <param name="eventos"></param>
        /// <param name="tipoRecepcaoEvento"></param>
        /// <returns>Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento</returns>
        private RetornoRecepcaoEvento RecepcaoEvento(int idlote, List <evento> eventos, TipoRecepcaoEvento tipoRecepcaoEvento)
        {
            var versaoServico = Auxiliar.VersaoServicoParaString(ServicoNFe.RecepcaoEvento, _cFgServico.VersaoRecepcaoEvento);

            #region Cria o objeto wdsl para consulta

            var ws = CriarServico(ServicoNFe.RecepcaoEvento, tipoRecepcaoEvento);

            ws.nfeCabecMsg = new nfeCabecMsg
            {
                cUF         = _cFgServico.cUF,
                versaoDados = versaoServico
            };

            #endregion

            #region Cria o objeto envEvento

            var pedEvento = new envEvento
            {
                versao = versaoServico,
                idLote = idlote,
                evento = eventos
            };

            foreach (var evento in eventos)
            {
                evento.infEvento.Id = "ID" + evento.infEvento.tpEvento + evento.infEvento.chNFe + evento.infEvento.nSeqEvento.ToString().PadLeft(2, '0');
                evento.Assina();
            }

            #endregion

            #region Valida, Envia os dados e obtém a resposta

            var xmlEvento = pedEvento.ObterXmlString();
            Validador.Valida(ServicoNFe.RecepcaoEvento, tipoRecepcaoEvento, _cFgServico.VersaoRecepcaoEvento, xmlEvento);
            var dadosEvento = new XmlDocument();
            dadosEvento.LoadXml(xmlEvento);

            SalvarArquivoXml(idlote + "-ped-eve.xml", xmlEvento);

            var retorno          = ws.Execute(dadosEvento);
            var retornoXmlString = retorno.OuterXml;
            var retEnvEvento     = new retEnvEvento().CarregarDeXmlString(retornoXmlString);

            SalvarArquivoXml(idlote + "-eve.xml", retornoXmlString);

            #region Obtém um procEventoNFe de cada evento e salva em arquivo

            var listprocEventoNFe = new List <procEventoNFe>();

            foreach (var evento in eventos)
            {
                var eve   = evento;
                var query = (from retevento in retEnvEvento.retEvento
                             where retevento.infEvento.chNFe == eve.infEvento.chNFe && retevento.infEvento.tpEvento == eve.infEvento.tpEvento
                             select retevento).SingleOrDefault();

                var procevento = new procEventoNFe {
                    evento = eve, versao = eve.versao, retEvento = new List <retEvento> {
                        query
                    }
                };
                listprocEventoNFe.Add(procevento);
                if (!_cFgServico.SalvarXmlServicos)
                {
                    continue;
                }
                var proceventoXmlString = procevento.ObterXmlString();
                SalvarArquivoXml(procevento.evento.infEvento.Id.Substring(2) + "-procEventoNFe.xml", proceventoXmlString);
            }

            #endregion

            return(new RetornoRecepcaoEvento(pedEvento.ObterXmlString(), retEnvEvento.ObterXmlString(), retornoXmlString, retEnvEvento, listprocEventoNFe));

            #endregion
        }
Example #3
0
        public static void ValidaSchema(this MDFeEvCancMDFe evCancMDFe)
        {
            var xmlCancelamento = evCancMDFe.XmlString();

            Validador.Valida(xmlCancelamento, "evCancMDFe_v1.00.xsd");
        }
Example #4
0
        private static void ValidarSchemaEventoContainer(EventoContainer container, versao versao)
        {
            if (container.GetType() == typeof(evCancCTe))
            {
                var evCancCTe = (evCancCTe)container;

                var xmlEventoCancelamento = evCancCTe.ObterXmlString();

                switch (versao)
                {
                case versao.ve200:
                    Validador.Valida(xmlEventoCancelamento, "evCancCTe_v2.00.xsd");
                    break;

                case versao.ve300:
                    Validador.Valida(xmlEventoCancelamento, "evCancCTe_v3.00.xsd");
                    break;

                default:
                    throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " +
                                                        "a versão está inválida, somente é permitido " +
                                                        "versão 2.00 é 3.00");
                }
            }

            if (container.GetType() == typeof(evCCeCTe))
            {
                var evCCeCTe = (evCCeCTe)container;

                var xmlEventoCCe = evCCeCTe.ObterXmlString();

                switch (versao)
                {
                case versao.ve200:
                    Validador.Valida(xmlEventoCCe, "evCCeCTe_v2.00.xsd");
                    break;

                case versao.ve300:
                    Validador.Valida(xmlEventoCCe, "evCCeCTe_v3.00.xsd");
                    break;

                default:
                    throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " +
                                                        "a versão está inválida, somente é permitido " +
                                                        "versão 2.00 é 3.00");
                }
            }

            if (container.GetType() == typeof(evPrestDesacordo))
            {
                var evPrestDesacordo = (evPrestDesacordo)container;

                var xmlEventoCCe = evPrestDesacordo.ObterXmlString();

                switch (versao)
                {
                case versao.ve200:
                    Validador.Valida(xmlEventoCCe, "evPrestDesacordo_v2.00.xsd");
                    break;

                case versao.ve300:
                    Validador.Valida(xmlEventoCCe, "evPrestDesacordo_v3.00.xsd");
                    break;

                default:
                    throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " +
                                                        "a versão está inválida, somente é permitido " +
                                                        "versão 2.00 é 3.00");
                }
            }
        }
Example #5
0
 public void Test1()
 {
     Validador.Valida(ServicoNFe.NFeAutorizacao, VersaoServico.ve100, null, false, "C:\\works\\nfe-products-api\\schemas");
 }
Example #6
0
        /// <summary>
        ///     Gera id, cdv, assina e faz alguns ajustes nos dados da classe CTe antes de utilizá-la
        /// </summary>
        /// <param name="cte"></param>
        /// <returns>Retorna um objeto CTe devidamente tradado</returns>
        public static void ValidaSchema(this CteEletronica cte)
        {
            if (cte == null)
            {
                throw new ArgumentNullException("cte");
            }

            var xmlValidacao = cte.ObterXmlString();

            switch (cte.infCte.versao)
            {
            case versao.ve200:
                Validador.Valida(xmlValidacao, "cte_v2.00.xsd");
                break;

            case versao.ve300:
                Validador.Valida(xmlValidacao, "cte_v3.00.xsd");
                break;

            default:
                throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " +
                                                    "a versão está inválida, somente é permitido " +
                                                    "versão 2.00 é 3.00");
            }

            if (cte.infCte.ide.tpCTe != tpCTe.Anulacao && cte.infCte.ide.tpCTe != tpCTe.Complemento)  // Ct-e do Tipo Anulação/Complemento não tem Informações do Modal
            {
                var xmlModal = FuncoesXml.ClasseParaXmlString(cte.infCte.infCTeNorm.infModal);

                switch (cte.infCte.infCTeNorm.infModal.versaoModal)
                {
                case versaoModal.veM200:
                    if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aereo))
                    {
                        Validador.Valida(xmlModal, "cteModalAereo_v2.00.xsd");
                    }

                    if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aquav))
                    {
                        Validador.Valida(xmlModal, "cteModalAquaviario_v2.00.xsd");
                    }

                    if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(duto))
                    {
                        Validador.Valida(xmlModal, "cteModalDutoviario_v2.00.xsd");
                    }

                    if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(ferrov))
                    {
                        Validador.Valida(xmlModal, "cteModalFerroviario_v2.00.xsd");
                    }

                    if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodo))
                    {
                        Validador.Valida(xmlModal, "cteModalRodoviario_v2.00.xsd");
                    }

                    if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(multimodal))
                    {
                        Validador.Valida(xmlModal, "cteMultimodal_v2.00.xsd");
                    }
                    break;

                case versaoModal.veM300:
                    if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aereo))
                    {
                        Validador.Valida(xmlModal, "cteModalAereo_v3.00.xsd");
                    }

                    if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aquav))
                    {
                        Validador.Valida(xmlModal, "cteModalAquaviario_v3.00.xsd");
                    }

                    if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(duto))
                    {
                        Validador.Valida(xmlModal, "cteModalDutoviario_v3.00.xsd");
                    }

                    if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(ferrov))
                    {
                        Validador.Valida(xmlModal, "cteModalFerroviario_v3.00.xsd");
                    }

                    if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodo))
                    {
                        Validador.Valida(xmlModal, "cteModalRodoviario_v3.00.xsd");
                    }

                    if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(multimodal))
                    {
                        Validador.Valida(xmlModal, "cteMultimodal_v3.00.xsd");
                    }

                    if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodoOS))
                    {
                        Validador.Valida(xmlModal, "cteModalRodoviarioOS_v.3.00.xsd");
                    }
                    break;

                default:
                    throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " +
                                                        "a versão está inválida, somente é permitido " +
                                                        "versão 2.00 é 3.00");
                }
            }
        }
Example #7
0
        public static void ValidarSchema(this MDFeCosMDFeNaoEnc consMdFeNaoEnc)
        {
            var xmlValidacao = consMdFeNaoEnc.XmlString();

            Validador.Valida(xmlValidacao, "consMDFeNaoEnc_v1.00.xsd");
        }
Example #8
0
        public static void ValidaSchema(this MDFeEvIncCondutorMDFe evIncCondutorMDFe)
        {
            var xmlIncluirCondutor = evIncCondutorMDFe.XmlString();

            Validador.Valida(xmlIncluirCondutor, "evIncCondutorMDFe_v1.00.xsd");
        }
Example #9
0
        /// <summary>
        ///     Consulta a situação cadastral, com base na UF/Documento
        ///     <para>O documento pode ser: IE, CNPJ ou CPF</para>
        /// </summary>
        /// <param name="uf">Sigla da UF consultada, informar 'SU' para SUFRAMA</param>
        /// <param name="tipoDocumento">Tipo de documento a ser consultado</param>
        /// <param name="documento">Documento a ser consultado</param>
        /// <returns>Retorna um objeto da classe RetornoNfeConsultaCadastro com o retorno do serviço NfeConsultaCadastro</returns>
        public RetornoNfeConsultaCadastro NfeConsultaCadastro(string uf,
                                                              ConsultaCadastroTipoDocumento tipoDocumento, string documento)
        {
            var versaoServico = Conversao.VersaoServicoParaString(ServicoNFe.NfeConsultaCadastro, _cFgServico.VersaoNfeConsultaCadastro);

            #region Cria o objeto wdsl para consulta

            var ws = CriarServico(ServicoNFe.NfeConsultaCadastro);

            ws.nfeCabecMsg = new nfeCabecMsg
            {
                cUF         = _cFgServico.cUF,
                versaoDados = versaoServico
            };

            #endregion

            #region Cria o objeto ConsCad

            var pedConsulta = new ConsCad
            {
                versao  = versaoServico,
                infCons = new infConsEnv {
                    UF = uf
                }
            };

            switch (tipoDocumento)
            {
            case ConsultaCadastroTipoDocumento.Ie:
                pedConsulta.infCons.IE = documento;
                break;

            case ConsultaCadastroTipoDocumento.Cnpj:
                pedConsulta.infCons.CNPJ = documento;
                break;

            case ConsultaCadastroTipoDocumento.Cpf:
                pedConsulta.infCons.CPF = documento;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            #endregion

            #region Valida, Envia os dados e obtém a resposta

            var xmlConsulta = pedConsulta.ObterXmlString();
            Validador.Valida(ServicoNFe.NfeConsultaCadastro, _cFgServico.VersaoNfeConsultaCadastro, xmlConsulta);
            var dadosConsulta = new XmlDocument();
            dadosConsulta.LoadXml(xmlConsulta);

            SalvarArquivoXml(DateTime.Now.ToString("yyyyMMddHHmmss") + "-ped-cad.xml", xmlConsulta);

            var retorno          = ws.Execute(dadosConsulta);
            var retornoXmlString = retorno.OuterXml;
            var retConsulta      = new retConsCad().CarregarDeXmlString(retornoXmlString);

            SalvarArquivoXml(DateTime.Now.ToString("yyyyMMddHHmmss") + "-cad.xml", retornoXmlString);

            return(new RetornoNfeConsultaCadastro(pedConsulta.ObterXmlString(), retConsulta.ObterXmlString(), retornoXmlString, retConsulta));

            #endregion
        }
        public static void ValidaSchema(this MDFeConsReciMDFe consReciMDFe)
        {
            var xmlValidacao = consReciMDFe.XmlString();

            Validador.Valida(xmlValidacao, "consReciMdfe_v1.00.xsd");
        }
Example #11
0
        public static void ValidarSchema(this MDFeConsStatServMDFe consStatServMDFe)
        {
            var xmlValidacao = consStatServMDFe.XmlString();

            Validador.Valida(xmlValidacao, "consStatServMDFe_v1.00.xsd");
        }
        /// <summary>
        ///     Envia uma ou mais NFe
        /// </summary>
        /// <param name="idLote">ID do Lote</param>
        /// <param name="indSinc">Indicador de Sincronização</param>
        /// <param name="nFes">Lista de NFes a serem enviadas</param>
        /// <param name="compactarMensagem">Define se a mensagem será enviada para a SEFAZ compactada</param>
        /// <returns>Retorna um objeto da classe RetornoNFeAutorizacao com com os dados do resultado da transmissão</returns>
        public RetornoNFeAutorizacao NFeAutorizacao(int idLote, IndicadorSincronizacao indSinc, List <Classes.NFe> nFes, bool compactarMensagem = false)
        {
            var versaoServico = ServicoNFe.NFeAutorizacao.VersaoServicoParaString(_cFgServico.VersaoNFeAutorizacao);

            #region Cria o objeto wdsl para consulta

            var ws = CriarServicoAutorizacao(ServicoNFe.NFeAutorizacao);

            ws.nfeCabecMsg = new nfeCabecMsg
            {
                cUF         = _cFgServico.cUF,
                versaoDados = versaoServico
            };

            #endregion

            #region Cria o objeto enviNFe

            var pedEnvio = new enviNFe3(versaoServico, idLote, indSinc, nFes);

            #endregion

            #region Valida, Envia os dados e obtém a resposta

            var xmlEnvio = pedEnvio.ObterXmlString();
            if (_cFgServico.cUF == Estado.PR) //Caso o lote seja enviado para o PR, colocar o namespace nos elementos <NFe> do lote, pois o serviço do PR o exige, conforme https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe/issues/33
            {
                xmlEnvio = xmlEnvio.Replace("<NFe>", "<NFe xmlns=\"http://www.portalfiscal.inf.br/nfe\">");
            }

            Validador.Valida(ServicoNFe.NFeAutorizacao, _cFgServico.VersaoNFeAutorizacao, xmlEnvio);
            var dadosEnvio = new XmlDocument();
            dadosEnvio.LoadXml(xmlEnvio);

            SalvarArquivoXml(idLote + "-env-lot.xml", xmlEnvio);

            XmlNode retorno;

            try
            {
                if (compactarMensagem)
                {
                    var xmlCompactado = Convert.ToBase64String(Compressao.Zip(xmlEnvio));
                    retorno = ws.ExecuteZip(xmlCompactado);
                }
                else
                {
                    retorno = ws.Execute(dadosEnvio);
                }
            }
            catch (Exception ex)
            {
                throw new ExecutionException(ex.Message);
            }

            var retornoXmlString = retorno.OuterXml;
            var retEnvio         = new retEnviNFe().CarregarDeXmlString(retornoXmlString);

            SalvarArquivoXml(idLote + "-rec.xml", retornoXmlString);

            return(new RetornoNFeAutorizacao(pedEnvio.ObterXmlString(), retEnvio.ObterXmlString(), retornoXmlString, retEnvio));

            #endregion
        }