Esempio n. 1
0
        private INfeServico CriarServico(ServicoNFe servico, TipoRecepcaoEvento tipoRecepcaoEvento)
        {
            var url = DefinicaoWsdl.ObterUrl(servico, tipoRecepcaoEvento, _cFgServico);

            switch (servico)
            {
            case ServicoNFe.NfeStatusServico:
                if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310)
                {
                    return(new NfeStatusServico3(url, _certificado, _cFgServico.TimeOut));
                }
                if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310)
                {
                    return(new NfeStatusServico(url, _certificado, _cFgServico.TimeOut));
                }
                return(new NfeStatusServico2(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NfeConsultaProtocolo:
                if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310)
                {
                    return(new NfeConsulta3(url, _certificado, _cFgServico.TimeOut));
                }
                if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310)
                {
                    return(new NfeConsulta(url, _certificado, _cFgServico.TimeOut));
                }
                return(new NfeConsulta2(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NfeRecepcao:
                return(new NfeRecepcao2(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NfeRetRecepcao:
                return(new NfeRetRecepcao2(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NFeAutorizacao:
                return(new NfeAutorizacao(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NFeRetAutorizacao:
                return(new NfeRetAutorizacao(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NfeInutilizacao:
                if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310)
                {
                    return(new NfeInutilizacao3(url, _certificado, _cFgServico.TimeOut));
                }
                if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310)
                {
                    return(new NfeInutilizacao(url, _certificado, _cFgServico.TimeOut));
                }
                return(new NfeInutilizacao2(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.RecepcaoEvento:
                return(new RecepcaoEvento(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NfeConsultaCadastro:
                return(new CadConsultaCadastro2(url, _certificado, _cFgServico.TimeOut));
            }

            return(null);
        }
Esempio n. 2
0
 internal static string ObterArquivoSchema(ServicoNFe servicoNFe, TipoRecepcaoEvento tipoRecepcaoEvento, VersaoServico versaoServico, bool loteNfe = true)
 {
     switch (servicoNFe)
     {
         case ServicoNFe.NfeRecepcao:
             return loteNfe ? "enviNFe_v2.00.xsd" : "nfe_v2.00.xsd";
         case ServicoNFe.RecepcaoEvento:
             switch (tipoRecepcaoEvento)
             {
                 case TipoRecepcaoEvento.Cancelmento:
                     return "envEventoCancNFe_v1.00.xsd";
                 case TipoRecepcaoEvento.CartaCorrecao:
                     return "envCCe_v1.00.xsd";
                 case TipoRecepcaoEvento.Epec:
                     return "envEPEC_v1.00.xsd";
             }
             break;
         case ServicoNFe.NfeInutilizacao:
             switch (versaoServico)
             {
                 case VersaoServico.ve200:
                     return "inutNFe_v2.00.xsd";
                 case VersaoServico.ve310:
                     return "inutNFe_v3.10.xsd";
             }
             break;
         case ServicoNFe.NfeConsultaProtocolo:
             switch (versaoServico)
             {
                 case VersaoServico.ve200:
                     return "consSitNFe_v2.01.xsd";
                 case VersaoServico.ve310:
                     return "consSitNFe_v3.10.xsd";
             }
             break;
         case ServicoNFe.NfeStatusServico:
             switch (versaoServico)
             {
                 case VersaoServico.ve200:
                     return "consStatServ_v2.00.xsd";
                 case VersaoServico.ve310:
                     return "consStatServ_v3.10.xsd";
             }
             break;
         case ServicoNFe.NFeAutorizacao:
             return loteNfe ? "enviNFe_v3.10.xsd" : "nfe_v3.10.xsd";
         case ServicoNFe.NfeConsultaCadastro:
             return "consCad_v2.00.xsd";
         case ServicoNFe.NfeDownloadNF:
             return "downloadNFe_v1.00.xsd";
     }
     return null;
 }
        private INfeServicoAutorizacao CriarServicoAutorizacao(ServicoNFe servico, TipoRecepcaoEvento tipoRecepcaoEvento)
        {
            var url = Enderecador.ObterUrlServico(servico, tipoRecepcaoEvento, _cFgServico);

            if (servico != ServicoNFe.NFeAutorizacao)
            {
                throw new Exception(
                          $"O serviço {servico} não pode ser criado no método {MethodBase.GetCurrentMethod().Name}!");
            }
            if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNFeAutorizacao == VersaoServico.ve310)
            {
                return(new NfeAutorizacao3(url, _certificado, _cFgServico.TimeOut));
            }
            return(new NfeAutorizacao(url, _certificado, _cFgServico.TimeOut));
        }
Esempio n. 4
0
        public static void Valida(ServicoNFe servicoNFe, TipoRecepcaoEvento tipoRecepcaoEvento, VersaoServico versaoServico, string stringXml, bool loteNfe = true)
        {
            var pathSchema = ConfiguracaoServico.Instancia.DiretorioSchemas;

            if (!Directory.Exists(pathSchema))
            {
                throw new Exception("Diretório de Schemas não encontrado: \n" + pathSchema);
            }

            var arquivoSchema = pathSchema + @"\" + ObterArquivoSchema(servicoNFe, tipoRecepcaoEvento, versaoServico, loteNfe);

            // Define o tipo de validação
            var cfg = new XmlReaderSettings {
                ValidationType = ValidationType.Schema
            };

            // Carrega o arquivo de esquema
            var schemas = new XmlSchemaSet();

            cfg.Schemas = schemas;
            // Quando carregar o eschema, especificar o namespace que ele valida
            // e a localização do arquivo
            schemas.Add(null, arquivoSchema);
            // Especifica o tratamento de evento para os erros de validacao
            cfg.ValidationEventHandler += ValidationEventHandler;
            // cria um leitor para validação
            var validator = XmlReader.Create(new StringReader(stringXml), cfg);

            try
            {
                // Faz a leitura de todos os dados XML
                while (validator.Read())
                {
                }
            }
            catch (XmlException err)
            {
                // Um erro ocorre se o documento XML inclui caracteres ilegais
                // ou tags que não estão aninhadas corretamente
                throw new Exception("Ocorreu o seguinte erro durante a validação XML:" + "\n" + err.Message);
            }
            finally
            {
                validator.Close();
            }
        }
Esempio n. 5
0
        /// <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
        }
Esempio n. 6
0
        private INfeServico CriarServico(ServicoNFe servico, TipoRecepcaoEvento tipoRecepcaoEvento)
        {
            var url = DefinicaoWsdl.ObterUrl(servico, tipoRecepcaoEvento, _cFgServico);

            switch (servico)
            {
            case ServicoNFe.NfeStatusServico:
                if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310)
                {
                    return(new NfeStatusServico3(url, _certificado, _cFgServico.TimeOut));
                }
                if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310)
                {
                    return(new NfeStatusServico(url, _certificado, _cFgServico.TimeOut));
                }
                return(new NfeStatusServico2(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NfeConsultaProtocolo:
                if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310)
                {
                    return(new NfeConsulta3(url, _certificado, _cFgServico.TimeOut));
                }
                if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310)
                {
                    return(new NfeConsulta(url, _certificado, _cFgServico.TimeOut));
                }
                return(new NfeConsulta2(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NfeRecepcao:
                return(new NfeRecepcao2(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NfeRetRecepcao:
                return(new NfeRetRecepcao2(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NFeAutorizacao:
                if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNFeAutorizacao == VersaoServico.ve310)
                {
                    return(new NfeAutorizacao3(url, _certificado, _cFgServico.TimeOut));
                }
                return(new NfeAutorizacao(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NFeRetAutorizacao:
                if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNFeAutorizacao == VersaoServico.ve310)
                {
                    return(new NfeRetAutorizacao3(url, _certificado, _cFgServico.TimeOut));
                }
                return(new NfeRetAutorizacao(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NfeInutilizacao:
                if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310)
                {
                    return(new NfeInutilizacao3(url, _certificado, _cFgServico.TimeOut));
                }
                if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310)
                {
                    return(new NfeInutilizacao(url, _certificado, _cFgServico.TimeOut));
                }
                return(new NfeInutilizacao2(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.RecepcaoEvento:
                if (_cFgServico.cUF == Estado.SP & _cFgServico.VersaoRecepcaoEvento == VersaoServico.ve310 &
                    _cFgServico.ModeloDocumento == ModeloDocumento.NFCe & tipoRecepcaoEvento == TipoRecepcaoEvento.Epec)
                {
                    return(new RecepcaoEPEC(url, _certificado, _cFgServico.TimeOut));
                }
                return(new RecepcaoEvento(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NfeConsultaCadastro:
                switch (_cFgServico.cUF)
                {
                case Estado.CE:
                    return(new Wsdl.ConsultaCadastro.CE.CadConsultaCadastro2(url, _certificado, _cFgServico.TimeOut));
                }
                return(new Wsdl.ConsultaCadastro.DEMAIS_UFs.CadConsultaCadastro2(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NfeDownloadNF:
                return(new NfeDownloadNF(url, _certificado, _cFgServico.TimeOut));
            }

            return(null);
        }
Esempio n. 7
0
        /// <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
        }
Esempio n. 8
0
        private INfeServico CriarServico(ServicoNFe servico, TipoRecepcaoEvento tipoRecepcaoEvento)
        {
            var url = DefinicaoWsdl.ObterUrl(servico, tipoRecepcaoEvento, _cFgServico);
            switch (servico)
            {
                case ServicoNFe.NfeStatusServico:
                    if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310)
                    {
                        return new NfeStatusServico3(url, _certificado, _cFgServico.TimeOut);
                    }
                    if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310)
                    {
                        return new NfeStatusServico(url, _certificado, _cFgServico.TimeOut);
                    }
                    return new NfeStatusServico2(url, _certificado, _cFgServico.TimeOut);

                case ServicoNFe.NfeConsultaProtocolo:
                    if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310)
                    {
                        return new NfeConsulta3(url, _certificado, _cFgServico.TimeOut);
                    }
                    if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310)
                    {
                        return new NfeConsulta(url, _certificado, _cFgServico.TimeOut);
                    }
                    return new NfeConsulta2(url, _certificado, _cFgServico.TimeOut);
                
                case ServicoNFe.NfeRecepcao:
                    return new NfeRecepcao2(url, _certificado, _cFgServico.TimeOut);
                
                case ServicoNFe.NfeRetRecepcao:
                    return new NfeRetRecepcao2(url, _certificado, _cFgServico.TimeOut);
                
                case ServicoNFe.NFeAutorizacao:
                    if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNFeAutorizacao == VersaoServico.ve310)
                        return new NfeAutorizacao3(url, _certificado, _cFgServico.TimeOut);
                    return new NfeAutorizacao(url, _certificado, _cFgServico.TimeOut);
                
                case ServicoNFe.NFeRetAutorizacao:
                    if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNFeAutorizacao == VersaoServico.ve310)
                        return new NfeRetAutorizacao3(url, _certificado, _cFgServico.TimeOut);
                    return new NfeRetAutorizacao(url, _certificado, _cFgServico.TimeOut);

                case ServicoNFe.NfeInutilizacao:
                    if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310)
                    {
                        return new NfeInutilizacao3(url, _certificado, _cFgServico.TimeOut);
                    }
                    if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310)
                    {
                        return new NfeInutilizacao(url, _certificado, _cFgServico.TimeOut);
                    }
                    return new NfeInutilizacao2(url, _certificado, _cFgServico.TimeOut);

                case ServicoNFe.RecepcaoEvento:
                    if (_cFgServico.cUF == Estado.SP & _cFgServico.VersaoRecepcaoEvento == VersaoServico.ve310 &
                        _cFgServico.ModeloDocumento == ModeloDocumento.NFCe & tipoRecepcaoEvento == TipoRecepcaoEvento.Epec) 
                        return new RecepcaoEPEC(url, _certificado, _cFgServico.TimeOut);
                    return new RecepcaoEvento(url, _certificado, _cFgServico.TimeOut);
                
                case ServicoNFe.NfeConsultaCadastro:
                    switch (_cFgServico.cUF)
                    {
                        case Estado.CE:
                            return new Wsdl.ConsultaCadastro.CE.CadConsultaCadastro2(url, _certificado, _cFgServico.TimeOut);
                    }
                    return new Wsdl.ConsultaCadastro.DEMAIS_UFs.CadConsultaCadastro2(url, _certificado, _cFgServico.TimeOut);

                case ServicoNFe.NfeDownloadNF:
                    return new NfeDownloadNF(url, _certificado, _cFgServico.TimeOut);                    

            }

            return null;
        }
        /// <summary>
        ///     Obtém uma url a partir de uma lista armazenada em enderecoServico e povoada dinamicamente no create desta classe
        /// </summary>
        /// <param name="servico"></param>
        /// <param name="tipoRecepcaoEvento"></param>
        /// <param name="cfgServico"></param>
        /// <returns></returns>
        public static string ObterUrlServico(ServicoNFe servico, TipoRecepcaoEvento tipoRecepcaoEvento, ConfiguracaoServico cfgServico)
        {
            //Se o serviço for RecepcaoEvento e o tipo de emissão for dpec, a url deve ser a do ambiente nacional para EPEC e da propria sefaz para os demais casos
            var tipoEmissao = servico == ServicoNFe.RecepcaoEvento & cfgServico.tpEmis == TipoEmissao.teEPEC & tipoRecepcaoEvento != TipoRecepcaoEvento.Epec ? TipoEmissao.teNormal : cfgServico.tpEmis;

            var definicao = from d in ListaEnderecos
                where d.Estado == cfgServico.cUF && d.ServicoNFe == servico && d.TipoAmbiente == cfgServico.tpAmb && d.TipoEmissao == tipoEmissao && d.VersaoServico == ObterVersaoServico(servico, cfgServico) && d.ModeloDocumento == cfgServico.ModeloDocumento
                select d.Url;
            var listaRetorno = definicao as IList<string> ?? definicao.ToList();
            var qtdeRetorno = listaRetorno.Count();

            if (qtdeRetorno == 0)
                throw new Exception(Erro(servico, cfgServico));
            if (qtdeRetorno > 1)
                throw new Exception("A função ObterUrlServico obteve mais de um resultado!");
            return listaRetorno.FirstOrDefault();
        }
        private INfeServico CriarServico(ServicoNFe servico, TipoRecepcaoEvento tipoRecepcaoEvento)
        {
            var url = Enderecador.ObterUrlServico(servico, tipoRecepcaoEvento, _cFgServico);

            switch (servico)
            {
            case ServicoNFe.NfeStatusServico:
                if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310)
                {
                    return(new NfeStatusServico3(url, _certificado, _cFgServico.TimeOut));
                }
                if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310 & _cFgServico.ModeloDocumento == ModeloDocumento.NFe)
                {
                    return(new NfeStatusServico(url, _certificado, _cFgServico.TimeOut));
                }
                return(new NfeStatusServico2(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NfeConsultaProtocolo:
                if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310)
                {
                    return(new NfeConsulta3(url, _certificado, _cFgServico.TimeOut));
                }
                if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310 & _cFgServico.ModeloDocumento == ModeloDocumento.NFe)
                {
                    return(new NfeConsulta(url, _certificado, _cFgServico.TimeOut));
                }
                return(new NfeConsulta2(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NfeRecepcao:
                return(new NfeRecepcao2(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NfeRetRecepcao:
                return(new NfeRetRecepcao2(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NFeAutorizacao:
                throw new Exception($"O serviço {servico} não pode ser criado no método {MethodBase.GetCurrentMethod().Name}!");

            case ServicoNFe.NFeRetAutorizacao:
                if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNFeAutorizacao == VersaoServico.ve310)
                {
                    return(new NfeRetAutorizacao3(url, _certificado, _cFgServico.TimeOut));
                }
                return(new NfeRetAutorizacao(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NfeInutilizacao:
                if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310)
                {
                    return(new NfeInutilizacao3(url, _certificado, _cFgServico.TimeOut));
                }
                if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310 & _cFgServico.ModeloDocumento == ModeloDocumento.NFe)
                {
                    return(new NfeInutilizacao(url, _certificado, _cFgServico.TimeOut));
                }
                return(new NfeInutilizacao2(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.RecepcaoEvento:
                if (_cFgServico.cUF == Estado.SP & _cFgServico.VersaoRecepcaoEvento == VersaoServico.ve310 &
                    _cFgServico.ModeloDocumento == ModeloDocumento.NFCe & tipoRecepcaoEvento == TipoRecepcaoEvento.Epec)
                {
                    return(new RecepcaoEPEC(url, _certificado, _cFgServico.TimeOut));
                }
                return(new RecepcaoEvento(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NfeConsultaCadastro:
                switch (_cFgServico.cUF)
                {
                case Estado.CE:
                    return(new Wsdl.ConsultaCadastro.CE.CadConsultaCadastro2(url, _certificado, _cFgServico.TimeOut));
                }
                return(new Wsdl.ConsultaCadastro.DEMAIS_UFs.CadConsultaCadastro2(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NfeDownloadNF:
                return(new NfeDownloadNF(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.NfceAdministracaoCSC:
                return(new NfceCsc(url, _certificado, _cFgServico.TimeOut));
            }

            return(null);
        }
        private INfeServico CriarServico(ServicoNFe servico, TipoRecepcaoEvento tipoRecepcaoEvento)
        {
            var url = Enderecador.ObterUrlServico(servico, tipoRecepcaoEvento, _cFgServico);
            switch (servico)
            {
                case ServicoNFe.NfeStatusServico:
                    if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310)
                    {
                        return new NfeStatusServico3(url, _certificado, _cFgServico.TimeOut);
                    }
                    if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310 & _cFgServico.ModeloDocumento == ModeloDocumento.NFe)
                    {
                        return new NfeStatusServico(url, _certificado, _cFgServico.TimeOut);
                    }
                    return new NfeStatusServico2(url, _certificado, _cFgServico.TimeOut);

                case ServicoNFe.NfeConsultaProtocolo:
                    if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310)
                    {
                        return new NfeConsulta3(url, _certificado, _cFgServico.TimeOut);
                    }
                    if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeConsultaProtocolo == VersaoServico.ve310 & _cFgServico.ModeloDocumento == ModeloDocumento.NFe)
                    {
                        return new NfeConsulta(url, _certificado, _cFgServico.TimeOut);
                    }
                    return new NfeConsulta2(url, _certificado, _cFgServico.TimeOut);
                
                case ServicoNFe.NfeRecepcao:
                    return new NfeRecepcao2(url, _certificado, _cFgServico.TimeOut);
                
                case ServicoNFe.NfeRetRecepcao:
                    return new NfeRetRecepcao2(url, _certificado, _cFgServico.TimeOut);
                
                case ServicoNFe.NFeAutorizacao:
                    throw new Exception($"O serviço {servico} não pode ser criado no método {MethodBase.GetCurrentMethod().Name}!");

                case ServicoNFe.NFeRetAutorizacao:
                    if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNFeAutorizacao == VersaoServico.ve310)
                        return new NfeRetAutorizacao3(url, _certificado, _cFgServico.TimeOut);
                    return new NfeRetAutorizacao(url, _certificado, _cFgServico.TimeOut);

                case ServicoNFe.NfeInutilizacao:
                    if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310)
                    {
                        return new NfeInutilizacao3(url, _certificado, _cFgServico.TimeOut);
                    }
                    if (_cFgServico.cUF == Estado.BA & _cFgServico.VersaoNfeStatusServico == VersaoServico.ve310 & _cFgServico.ModeloDocumento == ModeloDocumento.NFe)
                    {
                        return new NfeInutilizacao(url, _certificado, _cFgServico.TimeOut);
                    }
                    return new NfeInutilizacao2(url, _certificado, _cFgServico.TimeOut);

                case ServicoNFe.RecepcaoEvento:
                    if (_cFgServico.cUF == Estado.SP & _cFgServico.VersaoRecepcaoEvento == VersaoServico.ve310 &
                        _cFgServico.ModeloDocumento == ModeloDocumento.NFCe & tipoRecepcaoEvento == TipoRecepcaoEvento.Epec) 
                        return new RecepcaoEPEC(url, _certificado, _cFgServico.TimeOut);
                    return new RecepcaoEvento(url, _certificado, _cFgServico.TimeOut);
                
                case ServicoNFe.NfeConsultaCadastro:
                    switch (_cFgServico.cUF)
                    {
                        case Estado.CE:
                            return new Wsdl.ConsultaCadastro.CE.CadConsultaCadastro2(url, _certificado, _cFgServico.TimeOut);
                    }
                    return new Wsdl.ConsultaCadastro.DEMAIS_UFs.CadConsultaCadastro2(url, _certificado, _cFgServico.TimeOut);

                case ServicoNFe.NfeDownloadNF:
                    return new NfeDownloadNF(url, _certificado, _cFgServico.TimeOut);

                case ServicoNFe.NfceAdministracaoCSC:
                    return new NfceCsc(url, _certificado, _cFgServico.TimeOut);

            }

            return null;
        }
 private INfeServicoAutorizacao CriarServicoAutorizacao(ServicoNFe servico, TipoRecepcaoEvento tipoRecepcaoEvento)
 {
     var url = Enderecador.ObterUrlServico(servico, tipoRecepcaoEvento, _cFgServico);
     if (servico != ServicoNFe.NFeAutorizacao)
         throw new Exception(
             $"O serviço {servico} não pode ser criado no método {MethodBase.GetCurrentMethod().Name}!");
     if (_cFgServico.cUF == Estado.PR & _cFgServico.VersaoNFeAutorizacao == VersaoServico.ve310)
         return new NfeAutorizacao3(url, _certificado, _cFgServico.TimeOut);
     return new NfeAutorizacao(url, _certificado, _cFgServico.TimeOut);
 }
Esempio n. 13
0
        public static void Valida(ServicoNFe servicoNFe, TipoRecepcaoEvento tipoRecepcaoEvento, VersaoServico versaoServico, string stringXml, bool loteNfe = true)
        {
            var pathSchema = ConfiguracaoServico.Instancia.DiretorioSchemas;

            if (!Directory.Exists(pathSchema))
                throw new Exception("Diretório de Schemas não encontrado: \n" + pathSchema);

            var arquivoSchema = pathSchema + @"\" + ObterArquivoSchema(servicoNFe, tipoRecepcaoEvento, versaoServico, loteNfe);

            // Define o tipo de validação
            var cfg = new XmlReaderSettings {ValidationType = ValidationType.Schema};

            // Carrega o arquivo de esquema
            var schemas = new XmlSchemaSet();
            cfg.Schemas = schemas;
            // Quando carregar o eschema, especificar o namespace que ele valida
            // e a localização do arquivo 
            schemas.Add(null, arquivoSchema);
            // Especifica o tratamento de evento para os erros de validacao
            cfg.ValidationEventHandler += ValidationEventHandler;
            // cria um leitor para validação
            var validator = XmlReader.Create(new StringReader(stringXml), cfg);
            try
            {
                // Faz a leitura de todos os dados XML
                while (validator.Read())
                {
                }
            }
            catch (XmlException err)
            {
                // Um erro ocorre se o documento XML inclui caracteres ilegais
                // ou tags que não estão aninhadas corretamente
                throw new Exception("Ocorreu o seguinte erro durante a validação XML:" + "\n" + err.Message);
            }
            finally
            {
                validator.Close();
            }
        }
Esempio n. 14
0
        internal static string ObterArquivoSchema(ServicoNFe servicoNFe, TipoRecepcaoEvento tipoRecepcaoEvento, VersaoServico versaoServico, bool loteNfe = true)
        {
            switch (servicoNFe)
            {
            case ServicoNFe.NfeRecepcao:
                return(loteNfe ? "enviNFe_v2.00.xsd" : "nfe_v2.00.xsd");

            case ServicoNFe.RecepcaoEvento:
                switch (tipoRecepcaoEvento)
                {
                case TipoRecepcaoEvento.Cancelmento:
                    return("envEventoCancNFe_v1.00.xsd");

                case TipoRecepcaoEvento.CartaCorrecao:
                    return("envCCe_v1.00.xsd");

                case TipoRecepcaoEvento.Epec:
                    return("envEPEC_v1.00.xsd");
                }
                break;

            case ServicoNFe.NfeInutilizacao:
                switch (versaoServico)
                {
                case VersaoServico.ve200:
                    return("inutNFe_v2.00.xsd");

                case VersaoServico.ve310:
                    return("inutNFe_v3.10.xsd");
                }
                break;

            case ServicoNFe.NfeConsultaProtocolo:
                switch (versaoServico)
                {
                case VersaoServico.ve200:
                    return("consSitNFe_v2.01.xsd");

                case VersaoServico.ve310:
                    return("consSitNFe_v3.10.xsd");
                }
                break;

            case ServicoNFe.NfeStatusServico:
                switch (versaoServico)
                {
                case VersaoServico.ve200:
                    return("consStatServ_v2.00.xsd");

                case VersaoServico.ve310:
                    return("consStatServ_v3.10.xsd");
                }
                break;

            case ServicoNFe.NFeAutorizacao:
                return(loteNfe ? "enviNFe_v3.10.xsd" : "nfe_v3.10.xsd");

            case ServicoNFe.NfeConsultaCadastro:
                return("consCad_v2.00.xsd");

            case ServicoNFe.NfeDownloadNF:
                return("downloadNFe_v1.00.xsd");
            }
            return(null);
        }