public void InutilizarCancelarNotasPendentesContingencia(NotaFiscalEntity notaParaCancelar,
            INotaFiscalRepository notaFiscalRepository)
        {
            if (notaParaCancelar == null || notaParaCancelar.Status == 0)
                return;

            var emitente = _emissorService.GetEmissor();
            var ufEmissor = emitente.Endereco.UF;
            var codigoUf = UfToCodigoUfConversor.GetCodigoUf(ufEmissor);

            var certificado = _certificadoService.GetX509Certificate2();
            var ambiente = (Ambiente)notaParaCancelar.Ambiente - 1;
            var modelo = notaParaCancelar.Modelo.Equals("55") ? Modelo.Modelo55 : Modelo.Modelo65;

            var result =
                _nfeConsulta.ConsultarNotaFiscal(notaParaCancelar.Chave, codigoUf, certificado, ambiente, modelo);
            var codigoUfEnum = (CodigoUfIbge)Enum.Parse(typeof(CodigoUfIbge), emitente.Endereco.UF);

            if (result.IsEnviada)
            {
                _cancelaNotaFiscalService.CancelarNotaFiscal(ufEmissor, codigoUfEnum, ambiente, emitente.CNPJ,
                    notaParaCancelar.Chave, result.Protocolo.infProt.nProt, modelo, "Nota duplicada em contingência");
            }
            else
            {
                var resultadoInutilizacao = _notaInutilizadaService.InutilizarNotaFiscal(ufEmissor, codigoUfEnum,
                    ambiente, emitente.CNPJ, modelo, notaParaCancelar.Serie,
                    notaParaCancelar.Numero, notaParaCancelar.Numero);

                if (resultadoInutilizacao.Status != Sefaz.NfeInutilizacao2.Status.ERRO)
                    _notaFiscalRepository.ExcluirNota(notaParaCancelar.Chave, ambiente);
            }
        }
        private NotaFiscalEntity VerificarSeNotaFoiEnviada(NotaFiscal notaFiscal,
                                                           string qrCode, TNFe nfe, int idNotaCopiaSeguranca, NotaFiscalEntity notaFiscalEntity,
                                                           string nFeNamespaceName, X509Certificate2 certificado)
        {
            var retornoConsulta = _nfeConsulta.ConsultarNotaFiscal(notaFiscal.Identificacao.Chave,
                                                                   notaFiscal.Emitente.Endereco.CodigoUF,
                                                                   certificado, notaFiscal.Identificacao.Ambiente, notaFiscal.Identificacao.Modelo);

            if (!retornoConsulta.IsEnviada)
            {
                return(notaFiscalEntity);
            }

            var protSerialized   = XmlUtil.Serialize(retornoConsulta.Protocolo, nFeNamespaceName);
            var protDeserialized = (TProtNFe)XmlUtil.Deserialize <TProtNFe>(protSerialized);

            notaFiscalEntity                 = _notaFiscalRepository.GetNotaFiscalById(idNotaCopiaSeguranca, false);
            notaFiscalEntity.Status          = (int)Status.ENVIADA;
            notaFiscalEntity.DataAutorizacao = retornoConsulta.DhAutorizacao;

            notaFiscalEntity.Protocolo = retornoConsulta.Protocolo.infProt.nProt;
            var xmlNfeProc = XmlUtil.GerarNfeProcXml(nfe, qrCode, protDeserialized);

            _notaFiscalRepository.Salvar(notaFiscalEntity, xmlNfeProc);

            return(notaFiscalEntity);
        }
        private Task <NotaFiscalEntity> ConsultarNotasAsync(int idNotaFiscalDb, string codigoUf,
                                                            X509Certificate2 certificado, ConfiguracaoEntity config)
        {
            return(Task.Run(async() =>
            {
                var notaFiscalDb = _notaFiscalRepository.GetNotaFiscalById(idNotaFiscalDb, true);
                var document = new XmlDocument();
                var ambiente = config.IsProducao ? Ambiente.Producao : Ambiente.Homologacao;
                var modelo = notaFiscalDb.Modelo.Equals("65") ? Modelo.Modelo65 : Modelo.Modelo55;

                var mensagemRetorno =
                    _nfeConsulta.ConsultarNotaFiscal(notaFiscalDb.Chave, codigoUf, certificado, ambiente, modelo);

                if (!mensagemRetorno.IsEnviada)
                {
                    return null;
                }

                mensagemRetorno.Protocolo.infProt.Id = null;
                var protSerialized = XmlUtil.Serialize(mensagemRetorno.Protocolo, "");

                var doc = XDocument.Parse(protSerialized);
                doc.Descendants().Attributes().Where(a => a.IsNamespaceDeclaration).Remove();

                foreach (var element in doc.Descendants())
                {
                    element.Name = element.Name.LocalName;
                }

                using (var xmlReader = doc.CreateReader())
                {
                    document.Load(xmlReader);
                }

                notaFiscalDb.DataAutorizacao = mensagemRetorno.Protocolo.infProt.dhRecbto;
                notaFiscalDb.Protocolo = mensagemRetorno.Protocolo.infProt.nProt;

                var xml = await notaFiscalDb.LoadXmlAsync();
                xml = xml.Replace("<protNFe />", document.OuterXml.Replace("TProtNFe", "protNFe"));

                notaFiscalDb.Status = (int)Status.ENVIADA;
                _notaFiscalRepository.Salvar(notaFiscalDb, xml);

                return notaFiscalDb;
            }));
        }