/// <summary>
 ///     Validar regra
 /// </summary>
 /// <param name="entity"></param>
 private void ValidarRegra(inutNFe entity)
 {
     if (entity.infInut.ano > 99)
     {
         throw new FalhaValidacaoException("O ano deve possuir apenas 2 digitos");
     }
 }
        /// <summary>
        ///     Validar schema
        /// </summary>
        /// <param name="entity"></param>
        private void ValidarSchema(inutNFe entity)
        {
            if (_emisorEmissorServicoConfig.ValidarSchema)
            {
                return;
            }
            var caminhoSchema = _emisorEmissorServicoConfig.DiretorioSchemaXsd;

            if (!Directory.Exists(caminhoSchema))
            {
                throw new Exception("Diretório de Schemas não encontrado: \n" + caminhoSchema);
            }
            // Define o tipo de validação
            var cfg = new XmlReaderSettings {
                ValidationType = ValidationType.Schema
            };
            //Listar arquivos XSD e inclui-las na validação
            var list = ObterListaNomeSchemas().ToList();

            list.ForEach(n => { cfg.Schemas.Add(null, Path.Combine(caminhoSchema, n)); });
            cfg.ValidationEventHandler += ValidationEventHandler;
            var xml      = Utils.ObterStringXML(entity);
            var reader   = XmlReader.Create(new StringReader(xml), cfg);
            var document = new XmlDocument();

            document.Load(reader);

            //Valida xml
            document.Validate(ValidationEventHandler);
        }
        /// <summary>
        ///     Gerar Id
        /// </summary>
        /// <param name="entity"></param>
        private void GerarId(inutNFe entity)
        {
            var numId = string.Concat((int)entity.infInut.cUF, entity.infInut.ano, entity.infInut.CNPJ, (int)entity.infInut.mod,
                                      entity.infInut.serie.ToString().PadLeft(3, '0'), entity.infInut.nNFIni.ToString().PadLeft(9, '0'),
                                      entity.infInut.nNFFin.ToString().PadLeft(9, '0'));

            entity.infInut.Id = "ID" + numId;
        }
 /// <summary>
 ///     Assinar
 /// </summary>
 /// <param name="entity"></param>
 /// <returns></returns>
 private void Assinar(inutNFe entity)
 {
     try
     {
         var assinatura = AssinaturaDigital.AssinarNFe(entity, entity.infInut.Id, _certificadoDigital);
         entity.Signature = assinatura;
     }
     catch (Exception ex)
     {
         Utils.TraceException(ex);
         throw new FalhaAssinaturaException("Erro ao assinar arquivo Xml", ex);
     }
 }
Exemple #5
0
        /// <summary>
        ///     Assina um objeto inutNFe
        /// </summary>
        /// <param name="inutNFe"></param>
        /// <returns>Retorna um objeto do tipo inutNFe assinado</returns>
        public static inutNFe Assina(this inutNFe inutNFe)
        {
            var inutNFeLocal = inutNFe;

            if (inutNFeLocal.infInut.Id == null)
            {
                throw new Exception("Não é possível assinar um onjeto inutNFe sem sua respectiva Id!");
            }

            var assinatura = Assinador.ObterAssinatura(inutNFeLocal, inutNFeLocal.infInut.Id);

            inutNFeLocal.Signature = assinatura;
            return(inutNFeLocal);
        }
        /// <summary>
        ///     Assina um objeto inutNFe
        /// </summary>
        /// <param name="inutNFe"></param>
        /// <param name="certificadoDigital">Informe o certificado digital, se já possuir esse em cache, evitando novo acesso ao certificado</param>
        /// <returns>Retorna um objeto do tipo inutNFe assinado</returns>
        public static inutNFe Assina(this inutNFe inutNFe, X509Certificate2 certificadoDigital, string signatureMethodSignedXml = "http://www.w3.org/2000/09/xmldsig#rsa-sha1", string digestMethodReference = "http://www.w3.org/2000/09/xmldsig#sha1")
        {
            var inutNFeLocal = inutNFe;

            if (inutNFeLocal.infInut.Id == null)
            {
                throw new Exception("Não é possível assinar um onjeto inutNFe sem sua respectiva Id!");
            }

            var assinatura = Assinador.ObterAssinatura(inutNFeLocal, inutNFeLocal.infInut.Id, certificadoDigital, false, signatureMethodSignedXml, digestMethodReference);

            inutNFeLocal.Signature = assinatura;
            return(inutNFeLocal);
        }
        /// <summary>
        ///     Obter mensagem Soap em formato Xml
        ///     <para>Corpo da mensagem compativel com a especificação SOAP e requisitos Sefaz</para>
        /// </summary>
        /// <param name="urlWsdl">Endereço WSDL do serviço</param>
        /// <param name="entity"></param>
        /// <example></example>
        /// <returns></returns>
        protected virtual string ObterCorpoMensagemSoap(string urlWsdl, inutNFe entity)
        {
            var xmlCorpo      = Utils.ObterStringXML(entity);
            var stringBuilder = new StringBuilder();

            stringBuilder.Append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>");
            stringBuilder.Append(
                "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">");
            stringBuilder.Append("<soap:Body>");
            stringBuilder.Append("<nfeDadosMsg xmlns=\"" + urlWsdl + "\">" + xmlCorpo + "</nfeDadosMsg>");
            stringBuilder.Append("</soap:Body>");
            stringBuilder.Append("</soap:Envelope>");
            var msg = stringBuilder.ToString();

            return(msg);
        }
        /// <summary>
        ///     Obter Dados
        /// </summary>
        /// <returns></returns>
        private inutNFe ObterDados()
        {
            var entity = new inutNFe
            {
                versao  = VersaoServico.Ve400.ObterVersaoServico(),
                infInut = new infInutEnv
                {
                    tpAmb  = _emisorEmissorServicoConfig.Ambiente,
                    cUF    = _emisorEmissorServicoConfig.Estado,
                    ano    = _ano,
                    CNPJ   = _cnpj?.RetirarCaracteresEspeciais(),
                    mod    = _modelo,
                    serie  = _serie,
                    nNFIni = _numeroInicial,
                    nNFFin = _numeroFinal,
                    xJust  = _justificativa
                }
            };

            ValidarRegra(entity);
            return(entity);
        }
        private inutNFe FabricarInutNFe(eTipoAmbiente tpAmb, eUF uf, int ano, string cnpj, eModeloDocumento modelo, int serie, int numeroInicial, int numeroFinal, string justificativa)
        {
            //Zion.Common.Assertions.ZionAssertion.StringHasMinLen(justificativa, 15, "Justificativa deve conter entre 15 e 255 caracteres");
            //Zion.Common.Assertions.ZionAssertion.StringHasMaxLen(justificativa, 255, "Justificativa deve conter entre 15 e 255 caracteres");

            string versaoServico = cfgServico.VersaoInutilizacaoNFe.Descricao();

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

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

            pedInutilizacao.infInut.Id = "ID" + numId;

            pedInutilizacao.Assinar(ObterCertificado.Obter(cfgServico.ConfigCertificado));

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

            #region Cria o objeto wdsl para consulta

            var ws = CriarServico(ServicoNFe.NfeInutilizacao, TipoRecepcaoEvento.Nenhum);

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

            #endregion

            #region Cria o objeto inutNFe

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

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

            pedInutilizacao.Assina();

            #endregion

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

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

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

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

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

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

            #endregion
        }
Exemple #11
0
 /// <summary>
 ///     Converte o objeto inutNFe para uma string no formato XML
 /// </summary>
 /// <param name="pedInutilizacao"></param>
 /// <returns>Retorna uma string no formato XML com os dados do objeto inutNFe</returns>
 public static string ObterXmlString(this inutNFe pedInutilizacao)
 {
     return(FuncoesXml.ClasseParaXmlString(pedInutilizacao));
 }
 /// <summary>
 ///     Coverte uma string XML no formato NFe para um objeto inutNFe
 /// </summary>
 /// <param name="inutNFe"></param>
 /// <param name="xmlString"></param>
 /// <returns>Retorna um objeto do tipo inutNFe</returns>
 public static inutNFe CarregarDeXmlString(this inutNFe inutNFe, string xmlString)
 {
     return(FuncoesXml.XmlStringParaClasse <inutNFe>(xmlString));
 }