/// <summary>
 ///     Cria uma instância da Classe responsável pelos serviços relacionados à NFe
 /// </summary>
 /// <param name="cFgServico"></param>
 public ServicosNFe(ConfiguracaoServico cFgServico)
 {
     _cFgServico = cFgServico;
     _certificado = string.IsNullOrEmpty(_cFgServico.Certificado.Arquivo)
         ? CertificadoDigital.ObterDoRepositorio(_cFgServico.Certificado.Serial, _cFgServico.Certificado.Senha)
         : CertificadoDigital.ObterDeArquivo(_cFgServico.Certificado.Arquivo, _cFgServico.Certificado.Senha);
     _path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
 }
Example #2
0
 /// <summary>
 ///     Limpa a instancia atual caso exista
 /// </summary>
 public static void LimparIntancia()
 {
     _instancia = null;
 }
Example #3
0
 /// <summary>
 ///     Cria uma instância da Classe responsável pelos serviços relacionados à NFe
 /// </summary>
 /// <param name="cFgServico"></param>
 public ServicosNFe(ConfiguracaoServico cFgServico)
 {
     _cFgServico = cFgServico;
     _certificado = CertificadoDigital.BuscaCertificado(_cFgServico.SerialCertificado);
     _path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
 }
        /// <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();
        }
 /// <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;
 }
        /// <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();
        }
 /// <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;
 }