Beispiel #1
0
        public static string VersaoServicoParaString(this ServicoNFe servicoNFe, VersaoServico?versaoServico)
        {
            switch (versaoServico)
            {
            case VersaoServico.ve100:
                switch (servicoNFe)
                {
                case ServicoNFe.NFeDistribuicaoDFe:
                    return("1.01");
                }
                return("1.00");

            case VersaoServico.ve200:
                switch (servicoNFe)
                {
                case ServicoNFe.NfeConsultaProtocolo:
                    return("2.01");
                }
                return("2.00");

            case VersaoServico.ve310:
                return("3.10");

            case VersaoServico.ve400:
                return("4.00");
            }
            return("");
        }
        /// <summary>
        /// Procurar os arquivos XML´s a serem enviados aos web-services ou para ser executado alguma rotina
        /// </summary>
        /// <param name="pTipoArq">Mascara dos arquivos as serem pesquisados. Ex: *.xml   *-nfe.xml</param>
        public override void BuscaXML(object parametroThread)
        {
            ParametroThread param = (ParametroThread)parametroThread;

            ServicoNFe oNfe = new ServicoNFe();

            //Criar XML de controle de fluxo de envios de Notas Fiscais
            FluxoNfe oFluxoNfe = new FluxoNfe();

            try
            {
                oFluxoNfe.CriarXml(true);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ocorreu um erro ao tentar criar o XML para o controle do fuxo do envio dos documentos eletrônicos.\r\n\r\nErro:" + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            while (true)
            {
                this.ProcessaXML(oNfe, param.Servico);

                Thread.Sleep(1000); //Pausa na Thread de 1000 milissegundos ou 1 segundo
            }
        }
Beispiel #3
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);
        }
        /// <summary>
        /// Procurar os arquivos XML´s a serem enviados aos web-services ou para ser executado alguma rotina
        /// </summary>
        /// <param name="pTipoArq">Mascara dos arquivos as serem pesquisados. Ex: *.xml   *-nfe.xml</param>
        public override void BuscaXML(object parametroThread)
        {
            ParametroThread param = (ParametroThread)parametroThread;

            ServicoNFe oNfe = new ServicoNFe();

            //Criar XML de controle de fluxo de envios de Notas Fiscais
            FluxoNfe oFluxoNfe = new FluxoNfe();

            try
            {
                oFluxoNfe.CriarXml(true);
            }
            catch (Exception ex)
            {
                //danasa 27-2-2011
                string exMessage = "Ocorreu um erro ao tentar criar o XML para o controle do fuxo do envio dos documentos eletrônicos.\r\n\r\nErro:" + ex.Message;
                new Auxiliar().GravarArqErroERP(string.Format(InfoApp.NomeArqERRUniNFe, DateTime.Now.ToString("yyyyMMddThhmmss")), exMessage);
                //MessageBox.Show("Ocorreu um erro ao tentar criar o XML para o controle do fuxo do envio dos documentos eletrônicos.\r\n\r\nErro:" + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            while (true)
            {
                this.ProcessaXML(oNfe, param.Servico);

                Thread.Sleep(1000); //Pausa na Thread de 1000 milissegundos ou 1 segundo
            }
        }
Beispiel #5
0
        public static string VersaoServicoParaString(this ServicoNFe servicoNFe, VersaoServico?versaoServico)
        {
            if (versaoServico == VersaoServico.ve100 && servicoNFe == ServicoNFe.NFeDistribuicaoDFe)
            {
                return("1.01");
            }
            else if (versaoServico == VersaoServico.ve100 || servicoNFe == ServicoNFe.RecepcaoEventoManifestacaoDestinatario)
            {
                return("1.00");
            }
            else if (versaoServico == VersaoServico.ve200 && servicoNFe == ServicoNFe.NfeConsultaProtocolo)
            {
                return("2.01");
            }
            else if (versaoServico == VersaoServico.ve200)
            {
                return("2.00");
            }
            else if (versaoServico == VersaoServico.ve310)
            {
                return("3.10");
            }
            else if (versaoServico == VersaoServico.ve400 && servicoNFe == ServicoNFe.RecepcaoEventoCancelmento)
            {
                return("1.00");
            }
            else if (versaoServico == VersaoServico.ve400)
            {
                return("4.00");
            }

            return("");
        }
Beispiel #6
0
 /// <summary>
 /// Obtém uma exceção.
 /// Se o status da <see cref="WebException"/> estiver na lista <see cref="ListaComunicacaoException"/>,
 /// será retornada uma exceção do tipo <see cref="ComunicacaoException"/>,
 /// senão será retornada a própria <see cref="WebException"/> passada no parâmetro
 /// </summary>
 /// <param name="servico"></param>
 /// <param name="webException"></param>
 /// <returns></returns>
 public static Exception ObterException(ServicoNFe servico, WebException webException)
 {
     if (ListaComunicacaoException.Contains(webException.Status))
     {
         return(new ComunicacaoException(servico, webException.Message));
     }
     return(webException);
 }
Beispiel #7
0
 public EstadoUrl(Estado estado, TipoAmbiente tipoAmbiente, ServicoNFe servicoNFe, string url)
     : this()
 {
     this.CodigoEstado = estado;
     this.TipoAmbiente = tipoAmbiente;
     this.TipoServico = servicoNFe;
     this.Url = url;
 }
        public EstadoUrl GetEstadoUrl(Estado estado, TipoAmbiente tpAmbiente, ServicoNFe servicoNFe)
        {
            var url =
                Urls.FirstOrDefault(
                    c => c.CodigoEstado == estado && c.TipoAmbiente == tpAmbiente && c.TipoServico == servicoNFe);

            return url;
        }
Beispiel #9
0
        public static string[] Valida(ServicoNFe servicoNFe, VersaoServico versaoServico, string stringXml, bool loteNfe = true, string pathSchema = null)
        {
            var falhas = new StringBuilder();

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

            var arquivoSchema = Path.Combine(pathSchema, ObterArquivoSchema(servicoNFe, versaoServico, stringXml, loteNfe));

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

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

            schemas.XmlResolver = new XmlUrlResolver();

            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 += delegate(object sender, ValidationEventArgs args)
            {
                falhas.AppendLine($"[{args.Severity}] - {args.Message} {args.Exception?.Message} na linha {args.Exception.LineNumber} posição {args.Exception.LinePosition} em {args.Exception.SourceUri}".ToString());
            };

            // 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
            {
            }
            finally
            {
                validator.Close();
            }

            if (falhas.Length > 0)
            {
                throw new ValidacaoSchemaException($"Ocorreu o seguinte erro durante a validação XML: {Environment.NewLine}{falhas}");
            }

            return(falhas.ToString().Trim().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries));
        }
 public EnderecoServico(ServicoNFe servicoNFe, VersaoServico versaoServico, TipoAmbiente tipoAmbiente, TipoEmissao tipoEmissao, Estado estado, ModeloDocumento modeloDocumento, string url)
 {
     ServicoNFe = servicoNFe;
     VersaoServico = versaoServico;
     TipoAmbiente = tipoAmbiente;
     TipoEmissao = tipoEmissao;
     Estado = estado;
     Url = url;
     ModeloDocumento = modeloDocumento;
 }
Beispiel #11
0
 public EnderecoServico(ServicoNFe servicoNFe, VersaoServico versaoServico, TipoAmbiente tipoAmbiente, TipoEmissao tipoEmissao, Estado estado, ModeloDocumento modeloDocumento, string url)
 {
     ServicoNFe      = servicoNFe;
     VersaoServico   = versaoServico;
     TipoAmbiente    = tipoAmbiente;
     TipoEmissao     = tipoEmissao;
     Estado          = estado;
     Url             = url;
     ModeloDocumento = modeloDocumento;
 }
 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;
 }
Beispiel #13
0
        // criado pois tem estado que o evento de cancelamento sempre será versão 1.00 e a webservice podera ser 2.00 ou 3.00 ou seja
        // na montagem do xml vai ser 1.00 e a versão do webservice vai ser diferente da montagem exemplo: MT
        public static string VersaoServicoParaString(this ServicoNFe servicoNFe, VersaoServico?versaoServico, Estado?estado)
        {
            if (servicoNFe == ServicoNFe.NfeConsultaCadastro && versaoServico != VersaoServico.ve100)
            {
                return("2.00");
            }

            if (servicoNFe == ServicoNFe.RecepcaoEventoCancelmento || servicoNFe == ServicoNFe.RecepcaoEventoCartaCorrecao)
            {
                return("1.00");
            }

            return(VersaoServicoParaString(servicoNFe, versaoServico));
        }
Beispiel #14
0
        public static void Valida(ServicoNFe servicoNFe, 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, 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);
            }
            catch (Exception ex)
            {
                throw new Exception("Ocorreu o seguinte erro durante a validação XML:" + "\n" + ex.Message);
            }
            finally
            {
                validator.Close();
            }
        }
Beispiel #15
0
        public static void Valida(ServicoNFe servicoNFe, VersaoServico versaoServico, string stringXml, bool loteNfe = true, ConfiguracaoServico cfgServico = null)
        {
            var pathSchema = String.Empty;

            if (cfgServico == null || (cfgServico != null && string.IsNullOrWhiteSpace(cfgServico.DiretorioSchemas)))
            {
                pathSchema = ConfiguracaoServico.Instancia.DiretorioSchemas;
            }
            else
            {
                pathSchema = cfgServico.DiretorioSchemas;
            }

            Valida(servicoNFe, versaoServico, stringXml, loteNfe, pathSchema);
        }
        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));
        }
        private INfeServicoAutorizacao CriarServicoAutorizacao(ServicoNFe servico)
        {
            var url = Enderecador.ObterUrlServico(servico, _cFgServico);

            if (servico != ServicoNFe.NFeAutorizacao)
            {
                throw new Exception(
                          string.Format("O serviço {0} não pode ser criado no método {1}!", servico,
                                        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));
        }
 public static string VersaoServicoParaString(ServicoNFe servicoNFe, VersaoServico? versaoServico)
 {
     switch (versaoServico)
     {
         case VersaoServico.ve100:
             return "1.00";
         case VersaoServico.ve200:
             switch (servicoNFe)
             {
                 case ServicoNFe.NfeConsultaProtocolo:
                     return "2.01";
             }
             return "2.00";
         case VersaoServico.ve310:
             return "3.10";
     }
     return "";
 }
Beispiel #19
0
        public static string VersaoServicoParaString(this ServicoNFe servicoNFe, VersaoServico?versaoServico)
        {
            if (servicoNFe == ServicoNFe.NfeConsultaCadastro && versaoServico != VersaoServico.Versao100)
            {
                return("2.00");
            }

            if (servicoNFe == ServicoNFe.RecepcaoEventoCancelmento ||
                servicoNFe == ServicoNFe.RecepcaoEventoCartaCorrecao ||
                servicoNFe == ServicoNFe.RecepcaoEventoManifestacaoDestinatario ||
                servicoNFe == ServicoNFe.RecepcaoEventoEpec)
            {
                return("1.00");
            }

            switch (versaoServico)
            {
            case VersaoServico.Versao100:
                switch (servicoNFe)
                {
                case ServicoNFe.NFeDistribuicaoDFe:
                    return("1.01");
                }
                return("1.00");

            case VersaoServico.Versao200:
                switch (servicoNFe)
                {
                case ServicoNFe.NfeConsultaProtocolo:
                    return("2.01");
                }
                return("2.00");

            case VersaoServico.Versao310:
                return("3.10");

            case VersaoServico.Versao400:
                return("4.00");
            }
            return("");
        }
Beispiel #20
0
        public static string VersaoServicoParaString(this ServicoNFe servicoNFe, VersaoServico?versaoServico)
        {
            switch (versaoServico)
            {
            case VersaoServico.ve100:
                switch (servicoNFe)
                {
                case ServicoNFe.NFeDistribuicaoDFe:
                    return("1.01");
                }
                return("1.00");

            case VersaoServico.ve200:
                switch (servicoNFe)
                {
                case ServicoNFe.NfeConsultaProtocolo:
                    return("2.01");
                }
                return("2.00");

            case VersaoServico.ve310:
                return("3.10");

            case VersaoServico.ve400:
                switch (servicoNFe)
                {
                case ServicoNFe.RecepcaoEventoManifestacaoDestinatario:
                case ServicoNFe.RecepcaoEventoCancelmento:
                case ServicoNFe.RecepcaoEventoCartaCorrecao:
                case ServicoNFe.RecepcaoEventoEpec:
                    return("1.00");
                }
                return("4.00");
            }
            return("");
        }
        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;
        }
 public static object VersaoServicoParaString(ServicoNFe nfceAdministracaoCSC, object versaoNfceAministracaoCSC)
 {
     throw new NotImplementedException();
 }
Beispiel #23
0
 /// <summary>
 /// Houve problemas com a internet, durante o envio dos dados para um webservice da NFe
 /// </summary>
 /// <param name="servico">Serviço que gerou o erro</param>
 /// <param name="message"></param>
 public ComunicacaoException(ServicoNFe servico, string message) : base(string.Format("Sem comunicação com o serviço {0}:\n{1}", servico, message))
 {
 }
        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);
        }
Beispiel #25
0
        public static string ObterUrl(Console.Estado.Estado estado, TipoAmbiente tpAmbiente, ServicoNFe servico)
        {
            var urlSefaz = new EstadoUrlRepository().GetEstadoUrl(estado, tpAmbiente, servico);

            return urlSefaz.Url;
        }
Beispiel #26
0
        internal static string ObterArquivoSchema(ServicoNFe servicoNFe, VersaoServico versaoServico, bool loteNfe = true)
        {
            switch (servicoNFe)
            {
            case ServicoNFe.NfeRecepcao:
                return(loteNfe ? "enviNFe_v2.00.xsd" : "nfe_v2.00.xsd");

            case ServicoNFe.RecepcaoEventoCancelmento:
                return("envEventoCancNFe_v1.00.xsd");

            case ServicoNFe.RecepcaoEventoCartaCorrecao:
                return("envCCe_v1.00.xsd");

            case ServicoNFe.RecepcaoEventoEpec:
                return("envEPEC_v1.00.xsd");

            case ServicoNFe.RecepcaoEventoManifestacaoDestinatario:
                return("envConfRecebto_v1.00.xsd");

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

            case ServicoNFe.NFeDistribuicaoDFe:
                return("distDFeInt_v1.00.xsd");
            }
            return(null);
        }
Beispiel #27
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 string com a mensagem de erro.
 ///     Essa função é acionada quando não é encontrada uma url para os parâmetros informados  na função ObterUrlServico.
 /// </summary>
 /// <param name="servico"></param>
 /// <param name="cfgServico"></param>
 /// <returns></returns>
 private static string Erro(ServicoNFe servico, ConfiguracaoServico cfgServico)
 {
     return "Serviço " + servico + ", versão " + Auxiliar.VersaoServicoParaString(servico, ObterVersaoServico(servico, cfgServico)) + ", não disponível para a UF " + cfgServico.cUF + ", no ambiente de " + Auxiliar.TpAmbParaString(cfgServico.tpAmb) +
            " para emissão tipo " + Auxiliar.TipoEmissaoParaString(cfgServico.tpEmis) + ", documento: " + Auxiliar.ModeloDocumentoParaString(cfgServico.ModeloDocumento) + "!";
 }
 /// <summary>
 ///     Obtém a versão configurada para um determinado serviço.
 ///     A versão configurada para o serviço é armazenada em ConfiguracaoServico
 /// </summary>
 /// <param name="servico"></param>
 /// <param name="cfgServico"></param>
 /// <returns>Retorna um item do enum VersaoServico, com a versão do serviço</returns>
 private static VersaoServico? ObterVersaoServico(ServicoNFe servico, ConfiguracaoServico cfgServico)
 {
     switch (servico)
     {
         case ServicoNFe.RecepcaoEvento:
             return cfgServico.VersaoRecepcaoEvento;
         case ServicoNFe.NfeRecepcao:
             return cfgServico.VersaoNfeRecepcao;
         case ServicoNFe.NfeRetRecepcao:
             return cfgServico.VersaoNfeRetRecepcao;
         case ServicoNFe.NfeConsultaCadastro:
             return cfgServico.VersaoNfeConsultaCadastro;
         case ServicoNFe.NfeInutilizacao:
             return cfgServico.VersaoNfeInutilizacao;
         case ServicoNFe.NfeConsultaProtocolo:
             return cfgServico.VersaoNfeConsultaProtocolo;
         case ServicoNFe.NfeStatusServico:
             return cfgServico.VersaoNfeStatusServico;
         case ServicoNFe.NFeAutorizacao:
             return cfgServico.VersaoNFeAutorizacao;
         case ServicoNFe.NFeRetAutorizacao:
             return cfgServico.VersaoNFeRetAutorizacao;
         case ServicoNFe.NFeDistribuicaoDFe:
             return cfgServico.VersaoNFeDistribuicaoDFe;
         case ServicoNFe.NfeConsultaDest:
             return cfgServico.VersaoNfeConsultaDest;
         case ServicoNFe.NfeDownloadNF:
             return cfgServico.VersaoNfeDownloadNF;
     }
     return null;
 }
        public void DeveUfSvcRsTerServicoDeAutorizacaoParaNFe4(Estado uf, TipoAmbiente tipoAmbiente, ServicoNFe servicoAutorizacao)
        {
            var lista = Enderecador.ObterEnderecoServicosMaisRecentes(VersaoServico.Versao400, uf, tipoAmbiente, ModeloDocumento.NFe, TipoEmissao.teSVCRS);

            Assert.Equal(1, lista.Count(n => n.ServicoNFe == servicoAutorizacao));
        }
        internal static string ObterArquivoSchema(ServicoNFe servicoNFe, TipoRecepcaoEvento tipoRecepcaoEvento, VersaoServico versaoServico, Boolean 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");
            }
            return(null);
        }
        /// <summary>
        ///     Envia um evento genérico
        /// </summary>
        /// <param name="idlote"></param>
        /// <param name="eventos"></param>
        /// <param name="servicoEvento">Tipo de serviço do evento: valores válidos: RecepcaoEventoCancelmento, RecepcaoEventoCartaCorrecao, RecepcaoEventoEpec e RecepcaoEventoManifestacaoDestinatario</param>
        /// <returns>Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento</returns>
        private RetornoRecepcaoEvento RecepcaoEvento(int idlote, List <evento> eventos, ServicoNFe servicoEvento)
        {
            var listaEventos = new List <ServicoNFe>
            {
                ServicoNFe.RecepcaoEventoCartaCorrecao,
                ServicoNFe.RecepcaoEventoCancelmento,
                ServicoNFe.RecepcaoEventoEpec,
                ServicoNFe.RecepcaoEventoManifestacaoDestinatario
            };

            if (
                !listaEventos.Contains(servicoEvento))
            {
                throw new Exception(string.Format("Serviço {0} é inválido para o método {1}!\nServiços válidos: \n • {2}", servicoEvento,
                                                  MethodBase.GetCurrentMethod().Name, string.Join("\n • ", listaEventos.ToArray())));
            }

            var versaoServico = servicoEvento.VersaoServicoParaString(_cFgServico.VersaoRecepcaoEventoCceCancelamento);

            #region Cria o objeto wdsl para consulta

            var ws = CriarServico(servicoEvento);

            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(servicoEvento, _cFgServico.VersaoRecepcaoEventoCceCancelamento, 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
        }
        private INfeServico CriarServico(ServicoNFe servico)
        {
            var url = Enderecador.ObterUrlServico(servico, _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(string.Format("O serviço {0} não pode ser criado no método {1}!", servico,
                        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.RecepcaoEventoCancelmento:
                case ServicoNFe.RecepcaoEventoCartaCorrecao:
                case ServicoNFe.RecepcaoEventoManifestacaoDestinatario:
                    return new RecepcaoEvento(url, _certificado, _cFgServico.TimeOut);
                case ServicoNFe.RecepcaoEventoEpec:
                    return new RecepcaoEPEC(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);

                case ServicoNFe.NFeDistribuicaoDFe:
                    return new NfeDistDFeInteresse(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);
 }
Beispiel #35
0
        internal static string ObterArquivoSchema(ServicoNFe servicoNFe, VersaoServico versaoServico, string stringXml, bool loteNfe = true)
        {
            switch (servicoNFe)
            {
            case ServicoNFe.NfeRecepcao:
                return(loteNfe ? "enviNFe_v2.00.xsd" : "nfe_v2.00.xsd");

            case ServicoNFe.RecepcaoEventoCancelmento:
                var strEvento = FuncoesXml.ObterNodeDeStringXml(nameof(envEvento), stringXml);
                var evento    = FuncoesXml.XmlStringParaClasse <envEvento>(strEvento);
                return(evento.evento.FirstOrDefault()?.infEvento?.tpEvento ==
                       NFeTipoEvento.TeNfeCancelamentoSubstituicao
                        ? "envEventoCancSubst_v1.00.xsd"
                        : "envEventoCancNFe_v1.00.xsd");

            case ServicoNFe.RecepcaoEventoCartaCorrecao:
                return("envCCe_v1.00.xsd");

            case ServicoNFe.RecepcaoEventoEpec:
                return("envEPEC_v1.00.xsd");

            case ServicoNFe.RecepcaoEventoManifestacaoDestinatario:
                return("envConfRecebto_v1.00.xsd");

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

                case VersaoServico.Versao310:
                    return("inutNFe_v3.10.xsd");

                case VersaoServico.Versao400:
                    return("inutNFe_v4.00.xsd");
                }
                break;

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

                case VersaoServico.Versao310:
                    return("consSitNFe_v3.10.xsd");

                case VersaoServico.Versao400:
                    return("consSitNFe_v4.00.xsd");
                }
                break;

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

                case VersaoServico.Versao310:
                    return("consStatServ_v3.10.xsd");

                case VersaoServico.Versao400:
                    return("consStatServ_v4.00.xsd");
                }
                break;

            case ServicoNFe.NFeAutorizacao:

                if (versaoServico != VersaoServico.Versao400)
                {
                    return(loteNfe ? "enviNFe_v3.10.xsd" : "nfe_v3.10.xsd");
                }

                return(loteNfe ? "enviNFe_v4.00.xsd" : "nfe_v4.00.xsd");

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

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

            case ServicoNFe.NFeDistribuicaoDFe:
                return("distDFeInt_v1.01.xsd");    // "distDFeInt_v1.00.xsd";
            }
            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();
        }
 public static object VersaoServicoParaString(ServicoNFe nfceAdministracaoCSC, object versaoNfceAministracaoCSC)
 {
     throw new NotImplementedException();
 }
 private INfeServicoAutorizacao CriarServicoAutorizacao(ServicoNFe servico)
 {
     var url = Enderecador.ObterUrlServico(servico, _cFgServico);
     if (servico != ServicoNFe.NFeAutorizacao)
         throw new Exception(
             string.Format("O serviço {0} não pode ser criado no método {1}!", servico,
                 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);
 }
        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();
            }
        }
Beispiel #40
0
        // criado pois tem estado que o evento de cancelamento sempre será versão 1.00 e a webservice podera ser 2.00 ou 3.00 ou seja
        // na montagem do xml vai ser 1.00 e a versão do webservice vai ser diferente da montagem exemplo: MT
        public static string VersaoServicoParaString(this ServicoNFe servicoNFe, VersaoServico?versaoServico, Estado?estado)
        {
            switch (estado)
            {
            case Estado.AC:
            case Estado.AL:
            case Estado.AP:
            case Estado.AM:
            case Estado.BA:
            case Estado.CE:
            case Estado.DF:
            case Estado.ES:
            case Estado.GO:
            case Estado.MA:
            case Estado.MS:
            case Estado.MG:
            case Estado.PA:
            case Estado.PB:
            case Estado.PR:
            case Estado.PE:
            case Estado.PI:
            case Estado.RJ:
            case Estado.RN:
            case Estado.RS:
            case Estado.RO:
            case Estado.RR:
            case Estado.SC:
            case Estado.SP:
            case Estado.SE:
            case Estado.TO:
            case Estado.AN:
            case Estado.EX:
            case null:
                return(VersaoServicoParaString(servicoNFe, versaoServico));

            case Estado.MT:
                switch (versaoServico)
                {
                case VersaoServico.ve100:
                    switch (servicoNFe)
                    {
                    case ServicoNFe.NFeDistribuicaoDFe:
                        return("1.01");
                    }
                    return("1.00");

                case VersaoServico.ve200:
                    if (servicoNFe == ServicoNFe.RecepcaoEventoCancelmento)
                    {
                        return("1.00");
                    }

                    switch (servicoNFe)
                    {
                    case ServicoNFe.NfeConsultaProtocolo:
                        return("2.01");
                    }
                    return("2.00");

                case VersaoServico.ve310:
                    if (servicoNFe == ServicoNFe.RecepcaoEventoCancelmento)
                    {
                        return("1.00");
                    }
                    return("3.10");
                }
                return("");

            default:
                throw new ArgumentOutOfRangeException("estado", estado, null);
            }
        }
 /// <summary>
 ///     Obtém a versão configurada para um determinado serviço.
 ///     A versão configurada para o serviço é armazenada em ConfiguracaoServico
 /// </summary>
 /// <param name="servico"></param>
 /// <param name="cfgServico"></param>
 /// <returns>Retorna um item do enum VersaoServico, com a versão do serviço</returns>
 private static VersaoServico? ObterVersaoServico(ServicoNFe servico, ConfiguracaoServico cfgServico)
 {
     switch (servico)
     {
         case ServicoNFe.RecepcaoEventoCartaCorrecao:
         case ServicoNFe.RecepcaoEventoCancelmento:
             return cfgServico.VersaoRecepcaoEventoCceCancelamento;
         case ServicoNFe.RecepcaoEventoEpec:
             return cfgServico.VersaoRecepcaoEventoEpec;
         case ServicoNFe.RecepcaoEventoManifestacaoDestinatario:
             return cfgServico.VersaoRecepcaoEventoManifestacaoDestinatario;
         case ServicoNFe.NfeRecepcao:
             return cfgServico.VersaoNfeRecepcao;
         case ServicoNFe.NfeRetRecepcao:
             return cfgServico.VersaoNfeRetRecepcao;
         case ServicoNFe.NfeConsultaCadastro:
             return cfgServico.VersaoNfeConsultaCadastro;
         case ServicoNFe.NfeInutilizacao:
             return cfgServico.VersaoNfeInutilizacao;
         case ServicoNFe.NfeConsultaProtocolo:
             return cfgServico.VersaoNfeConsultaProtocolo;
         case ServicoNFe.NfeStatusServico:
             return cfgServico.VersaoNfeStatusServico;
         case ServicoNFe.NFeAutorizacao:
             return cfgServico.VersaoNFeAutorizacao;
         case ServicoNFe.NFeRetAutorizacao:
             return cfgServico.VersaoNFeRetAutorizacao;
         case ServicoNFe.NFeDistribuicaoDFe:
             return cfgServico.VersaoNFeDistribuicaoDFe;
         case ServicoNFe.NfeConsultaDest:
             return cfgServico.VersaoNfeConsultaDest;
         case ServicoNFe.NfeDownloadNF:
             return cfgServico.VersaoNfeDownloadNF;
         case ServicoNFe.NfceAdministracaoCSC:
             return cfgServico.VersaoNfceAministracaoCSC;
     }
     return null;
 }
        /// <summary>
        ///     Envia um evento genérico
        /// </summary>
        /// <param name="idlote"></param>
        /// <param name="eventos"></param>
        /// <param name="servicoEvento">Tipo de serviço do evento: valores válidos: RecepcaoEventoCancelmento, RecepcaoEventoCartaCorrecao, RecepcaoEventoEpec e RecepcaoEventoManifestacaoDestinatario</param>
        /// <returns>Retorna um objeto da classe RetornoRecepcaoEvento com o retorno do serviço RecepcaoEvento</returns>
        private RetornoRecepcaoEvento RecepcaoEvento(int idlote, List<evento> eventos, ServicoNFe servicoEvento)
        {
            var listaEventos = new List<ServicoNFe>
            {
                ServicoNFe.RecepcaoEventoCartaCorrecao,
                ServicoNFe.RecepcaoEventoCancelmento,
                ServicoNFe.RecepcaoEventoEpec,
                ServicoNFe.RecepcaoEventoManifestacaoDestinatario
            };
            if (
                !listaEventos.Contains(servicoEvento))
                throw new Exception(string.Format("Serviço {0} é inválido para o método {1}!\nServiços válidos: \n • {2}", servicoEvento,
                    MethodBase.GetCurrentMethod().Name, string.Join("\n • ", listaEventos.ToArray())));
            
            var versaoServico = Conversao.VersaoServicoParaString(servicoEvento, _cFgServico.VersaoRecepcaoEventoCceCancelamento);

            #region Cria o objeto wdsl para consulta

            var ws = CriarServico(servicoEvento);

            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(servicoEvento, _cFgServico.VersaoRecepcaoEventoCceCancelamento, 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
        }
        private INfeServico CriarServico(ServicoNFe servico)
        {
            var url = Enderecador.ObterUrlServico(servico, _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(string.Format("O serviço {0} não pode ser criado no método {1}!", servico,
                                                  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.RecepcaoEventoCancelmento:
            case ServicoNFe.RecepcaoEventoCartaCorrecao:
            case ServicoNFe.RecepcaoEventoManifestacaoDestinatario:
                return(new RecepcaoEvento(url, _certificado, _cFgServico.TimeOut));

            case ServicoNFe.RecepcaoEventoEpec:
                return(new RecepcaoEPEC(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));

            case ServicoNFe.NFeDistribuicaoDFe:
                return(new NfeDistDFeInteresse(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="cfgServico"></param>
        /// <returns></returns>
        public static string ObterUrlServico(ServicoNFe servico, ConfiguracaoServico cfgServico)
        {
            var definicao = from d in ListaEnderecos
                where d.Estado == cfgServico.cUF && d.ServicoNFe == servico && d.TipoAmbiente == cfgServico.tpAmb && d.TipoEmissao == cfgServico.tpEmis && 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 = 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);
        }
        public static INfeServico CriaWsdlOutros(
            ServicoNFe servico,
            ConfiguracaoServico cfg,
            X509Certificate2 certificado)
        {
            var url = Enderecador.ObterUrlServico(servico, cfg);

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

                if (cfg.IsSvanNFe4())
                {
                    return(new NfeStatusServico4NFeSVAN(url, certificado, cfg.TimeOut));
                }

                if (cfg.VersaoNfeStatusServico == VersaoServico.ve400)
                {
                    return(new NfeStatusServico4(url, certificado, cfg.TimeOut));
                }

                return(new NfeStatusServico2(url, certificado, cfg.TimeOut));

            case ServicoNFe.NfeConsultaProtocolo:

                if (cfg.IsSvanNFe4())
                {
                    return(new NfeConsulta4SVAN(url, certificado, cfg.TimeOut));
                }

                if (cfg.VersaoNfeConsultaProtocolo == VersaoServico.ve400)
                {
                    return(new NfeConsulta4(url, certificado, cfg.TimeOut));
                }

                if (cfg.cUF == Estado.PR & cfg.VersaoNfeConsultaProtocolo == VersaoServico.ve310)
                {
                    return(new NfeConsulta3(url, certificado, cfg.TimeOut));
                }
                if (cfg.cUF == Estado.BA & cfg.VersaoNfeConsultaProtocolo == VersaoServico.ve310 &
                    cfg.ModeloDocumento == ModeloDocumento.NFe)
                {
                    return(new NfeConsulta(url, certificado, cfg.TimeOut));
                }
                return(new NfeConsulta2(url, certificado, cfg.TimeOut));

            case ServicoNFe.NfeRecepcao:
                return(new NfeRecepcao2(url, certificado, cfg.TimeOut));

            case ServicoNFe.NfeRetRecepcao:
                return(new NfeRetRecepcao2(url, certificado, cfg.TimeOut));

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

            case ServicoNFe.NFeRetAutorizacao:
                if (cfg.IsSvanNFe4())
                {
                    return(new NfeRetAutorizacao4SVAN(url, certificado, cfg.TimeOut));
                }

                if (cfg.VersaoNFeRetAutorizacao == VersaoServico.ve400)
                {
                    return(new NfeRetAutorizacao4(url, certificado, cfg.TimeOut));
                }

                if (cfg.cUF == Estado.PR & cfg.VersaoNFeAutorizacao == VersaoServico.ve310)
                {
                    return(new NfeRetAutorizacao3(url, certificado, cfg.TimeOut));
                }
                return(new NfeRetAutorizacao(url, certificado, cfg.TimeOut));

            case ServicoNFe.NfeInutilizacao:

                if (cfg.IsSvanNFe4())
                {
                    return(new NFeInutilizacao4SVAN(url, certificado, cfg.TimeOut));
                }

                if (cfg.VersaoNfeStatusServico == VersaoServico.ve400)
                {
                    return(new NFeInutilizacao4(url, certificado, cfg.TimeOut));
                }

                if (cfg.cUF == Estado.PR & cfg.VersaoNfeStatusServico == VersaoServico.ve310)
                {
                    return(new NfeInutilizacao3(url, certificado, cfg.TimeOut));
                }
                if (cfg.cUF == Estado.BA & cfg.VersaoNfeStatusServico == VersaoServico.ve310 &
                    cfg.ModeloDocumento == ModeloDocumento.NFe)
                {
                    return(new NfeInutilizacao(url, certificado, cfg.TimeOut));
                }

                return(new NfeInutilizacao2(url, certificado, cfg.TimeOut));

            case ServicoNFe.RecepcaoEventoCancelmento:
            case ServicoNFe.RecepcaoEventoCartaCorrecao:
                if (cfg.IsSvanNFe4())
                {
                    return(new RecepcaoEvento4SVAN(url, certificado, cfg.TimeOut));
                }

                if (cfg.VersaoRecepcaoEventoCceCancelamento == VersaoServico.ve400)
                {
                    return(new RecepcaoEvento4(url, certificado, cfg.TimeOut));
                }

                return(new RecepcaoEvento(url, certificado, cfg.TimeOut));

            case ServicoNFe.RecepcaoEventoManifestacaoDestinatario:
            {
                if (cfg.VersaoRecepcaoEventoManifestacaoDestinatario == VersaoServico.ve400)
                {
                    return(new RecepcaoEvento4AN(url, certificado, cfg.TimeOut));
                }

                return(new RecepcaoEvento(url, certificado, cfg.TimeOut));
            }

            case ServicoNFe.RecepcaoEventoEpec:
                return(new RecepcaoEPEC(url, certificado, cfg.TimeOut));

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


                if (cfg.VersaoNfeConsultaCadastro == VersaoServico.ve400)
                {
                    return(new Wsdl.ConsultaCadastro.DEMAIS_UFs.CadConsultaCadastro4(url, certificado, cfg.TimeOut));
                }

                return(new Wsdl.ConsultaCadastro.DEMAIS_UFs.CadConsultaCadastro2(url, certificado,
                                                                                 cfg.TimeOut));

            case ServicoNFe.NfeDownloadNF:
                return(new NfeDownloadNF(url, certificado, cfg.TimeOut));

            case ServicoNFe.NfceAdministracaoCSC:
                return(new NfceCsc(url, certificado, cfg.TimeOut));

            case ServicoNFe.NFeDistribuicaoDFe:
                return(new NfeDistDFeInteresse(url, certificado, cfg.TimeOut));
            }

            return(null);
        }