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