public async void AtivarModoOnline() { var configuração = _configuracaoRepository.GetConfiguracao(); var dataHoraContingencia = configuração.DataHoraEntradaContingencia; var primeiraNotaContingencia = _notaFiscalRepository.GetPrimeiraNotaEmitidaEmContingencia(dataHoraContingencia, DateTime.Now); NotaFiscalEntity notaParaCancelar = null; if (primeiraNotaContingencia != null) { var numero = int.Parse(primeiraNotaContingencia.Numero) - 1; notaParaCancelar = _notaFiscalRepository.GetNota(numero.ToString(), primeiraNotaContingencia.Serie, primeiraNotaContingencia.Modelo); } var mensagensErro = await _emiteNotaFiscalContingenciaService.TransmitirNotasFiscalEmContingencia(); if (mensagensErro != null) { _emiteNotaFiscalContingenciaService.InutilizarCancelarNotasPendentesContingencia(notaParaCancelar, _notaFiscalRepository); NotasTransmitidasEvent(mensagensErro); } configuração.IsContingencia = false; _configuracaoRepository.Salvar(configuração); }
public int SalvarNotaFiscalPendente(NotaFiscal notaFiscal, string xml, Ambiente ambiente) { var notaFiscalEntity = new NotaFiscalEntity { UfDestinatario = notaFiscal.Destinatario?.Endereco != null ? notaFiscal.Destinatario.Endereco.UF : notaFiscal.Emitente.Endereco.UF, Destinatario = notaFiscal.Destinatario == null ? "CONSUMIDOR NÃO IDENTIFICADO" : notaFiscal.Destinatario.NomeRazao, DocumentoDestinatario = notaFiscal.Destinatario?.Documento, Status = (int)notaFiscal.Identificacao.Status, Chave = notaFiscal.Identificacao.Chave, DataEmissao = notaFiscal.Identificacao.DataHoraEmissao, Modelo = notaFiscal.Identificacao.Modelo == Modelo.Modelo55 ? "55" : "65", Serie = notaFiscal.Identificacao.Serie.ToString(), TipoEmissao = notaFiscal.Identificacao.TipoEmissao.ToString(), ValorDesconto = notaFiscal.TotalNFe.IcmsTotal.ValorTotalDesconto, ValorDespesas = notaFiscal.TotalNFe.IcmsTotal.ValorDespesasAcessorias, ValorFrete = notaFiscal.TotalNFe.IcmsTotal.ValorTotalFrete, ValorICMS = notaFiscal.TotalNFe.IcmsTotal.ValorTotalIcms, ValorProdutos = notaFiscal.ValorTotalProdutos, ValorSeguro = notaFiscal.TotalNFe.IcmsTotal.ValorTotalSeguro, ValorTotal = notaFiscal.TotalNFe.IcmsTotal.ValorTotalNFe, Ambiente = ambiente == Ambiente.Homologacao ? 2 : 1, Numero = notaFiscal.Identificacao.Numero, IsProducao = ambiente == Ambiente.Producao }; return(Salvar(notaFiscalEntity, xml)); }
public virtual int Salvar(NotaFiscalEntity notaFiscalEntity, string xml) { try { if (notaFiscalEntity.Status != (int)Status.CANCELADA) { notaFiscalEntity.XmlPath = XmlFileHelper.SaveXmlFile(notaFiscalEntity, xml); } return(Salvar(notaFiscalEntity)); } catch (Exception e) { log.Error(e); try { XmlFileHelper.DeleteXmlFile(notaFiscalEntity); throw; } catch (Exception ex) { log.Error(ex); throw new Exception("Não foi possível remover o xml de nota fiscal: " + e.Message); } } }
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); } }
public async void EnviarEmailDestinatario(string email, string xmlPath, NotaFiscalEntity notaFiscal) { var xml = await notaFiscal.LoadXmlAsync(); var notaFiscalCore = _notaFiscalRepository.GetNotaFiscalFromNfeProcXml(xml); var pdfPath = GeradorPDF.ObterPdfEnvioNotaFiscalEmail(notaFiscalCore); await EnviarEmailDestinatario(email, xmlPath, pdfPath); }
public void UpdateNotaFiscal(Guid id, NotaFiscalEntity notaFiscalEntity) { if (notaFiscalEntity == null) { NotificarValidacoesErro(notaFiscalEntity.ValidationResult); } _notaFiscalRepository.Update(id, notaFiscalEntity); Commit(); }
private void NotaFiscalVM_NotaCanceladaEventHandler(NotaFiscalEntity nota) { var notaCancelada = NotasFiscais.FirstOrDefault(n => n.Chave == nota.Chave); var index = NotasFiscais.IndexOf(notaCancelada); var notaMemento = new NotaFiscalMemento(nota.Numero, nota.Modelo == "NFC-e" ? Modelo.Modelo65 : Modelo.Modelo55, nota.DataEmissao, nota.DataAutorizacao, nota.Destinatario, nota.UfDestinatario, nota.ValorTotal.ToString("N2", new CultureInfo("pt-BR")), (Status)nota.Status, nota.Chave); NotasFiscais[index] = notaMemento; }
public void TestMethod_NumeroNf() { var notaFiscal = new NotaFiscalEntity { CnpjDestinatarioNf = "00909909090", DataNf = DateTime.Now, ValorTotal = -100 }; var result = notaFiscal.IsValid(); Assert.AreEqual(true, result, "o número da nota fiscal tem que se informado"); }
public void TestMethod_ValorTotal() { var notaFiscal = new NotaFiscalEntity { CnpjDestinatarioNf = "00909909090", DataNf = DateTime.Now, NumeroNf = 1, ValorTotal = -100 }; var result = notaFiscal.IsValid(); Assert.AreEqual(true, result, "O Valor tem que ser maior que zero"); }
public Task <NotaFiscalEntity> InsertNotaFiscal(NotaFiscalEntity notaFiscalEntity) { if (!notaFiscalEntity.IsValid()) { NotificarValidacoesErro(notaFiscalEntity.ValidationResult); return(null); } var notaFiscal = _notaFiscalRepository.Add(notaFiscalEntity); Commit(); return(notaFiscal); }
public int Salvar(NotaFiscalEntity notafiscal) { if (notafiscal.Id == 0) { _notasFiscais.Add(notafiscal); notafiscal.Id = _notasFiscais.Count(); } else { var notaFiscal = _notasFiscais.First(n => n.Id == notafiscal.Id); _notasFiscais.Remove(notaFiscal); _notasFiscais.Add(notaFiscal); } return(notafiscal.Id); }
public int Salvar(NotaFiscalEntity notafiscal) { using (var context = new NFeContext()) { if (notafiscal.Id == 0) { context.Entry(notafiscal).State = EntityState.Added; } else { context.Entry(notafiscal).State = EntityState.Modified; } context.SaveChanges(); return(notafiscal.Id); } }
private NotaFiscalEntity CorrigirNotaDuplicada(NotaFiscal notaFiscal, string qrCode, string nFeNamespaceName, X509Certificate2 certificado, TNFe nfe, int idNotaCopiaSeguranca) { var retornoConsulta = _nfeConsulta.ConsultarNotaFiscal(notaFiscal.Identificacao.Chave, notaFiscal.Emitente.Endereco.CodigoUF, certificado, notaFiscal.Identificacao.Ambiente, notaFiscal.Identificacao.Modelo); var protSerialized = XmlUtil.Serialize(retornoConsulta.Protocolo, nFeNamespaceName); var protDeserialized = (TProtNFe)XmlUtil.Deserialize <TProtNFe>(protSerialized); NotaFiscalEntity 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); }
public int SalvarNotaFiscalPendente(NotaFiscal notaFiscal, string v, Ambiente ambiente) { var NotaFiscalEntity = new NotaFiscalEntity(); if (notaFiscal.Destinatario != null && notaFiscal.Destinatario.Endereco != null) { NotaFiscalEntity.UfDestinatario = notaFiscal.Destinatario.Endereco.UF; } else { NotaFiscalEntity.UfDestinatario = notaFiscal.Emitente.Endereco.UF; } NotaFiscalEntity.Destinatario = notaFiscal.Destinatario == null ? "CONSUMIDOR NÃO IDENTIFICADO" : notaFiscal.Destinatario.NomeRazao; NotaFiscalEntity.DocumentoDestinatario = notaFiscal.Destinatario == null ? null : notaFiscal.Destinatario.Documento; NotaFiscalEntity.Status = (int)notaFiscal.Identificacao.Status; NotaFiscalEntity.Chave = notaFiscal.Identificacao.Chave; NotaFiscalEntity.DataEmissao = notaFiscal.Identificacao.DataHoraEmissao; NotaFiscalEntity.Modelo = notaFiscal.Identificacao.Modelo == Modelo.Modelo55 ? "55" : "65"; NotaFiscalEntity.Serie = notaFiscal.Identificacao.Serie.ToString(); NotaFiscalEntity.TipoEmissao = notaFiscal.Identificacao.TipoEmissao.ToString(); NotaFiscalEntity.ValorDesconto = notaFiscal.TotalNFe.IcmsTotal.ValorTotalDesconto; NotaFiscalEntity.ValorDespesas = notaFiscal.TotalNFe.IcmsTotal.ValorDespesasAcessorias; NotaFiscalEntity.ValorFrete = notaFiscal.TotalNFe.IcmsTotal.ValorTotalFrete; NotaFiscalEntity.ValorICMS = notaFiscal.TotalNFe.IcmsTotal.ValorTotalIcms; NotaFiscalEntity.ValorProdutos = notaFiscal.ValorTotalProdutos; NotaFiscalEntity.ValorSeguro = notaFiscal.TotalNFe.IcmsTotal.ValorTotalSeguro; NotaFiscalEntity.ValorTotal = notaFiscal.TotalNFe.IcmsTotal.ValorTotalNFe; NotaFiscalEntity.Ambiente = ambiente == Ambiente.Homologacao ? 2 : 1; NotaFiscalEntity.Numero = notaFiscal.Identificacao.Numero; NotaFiscalEntity.IsProducao = ambiente == Ambiente.Producao; return(Salvar(NotaFiscalEntity)); }
private static void AtribuirValoresApósEnvioComSucesso(NotaFiscal notaFiscal, string qrCode, NotaFiscalEntity notaFiscalEntity) { notaFiscal.QrCodeUrl = qrCode; notaFiscal.Identificacao.Status = Status.ENVIADA; notaFiscal.DhAutorizacao = notaFiscalEntity.DataAutorizacao.ToString("dd/MM/yyyy HH:mm:ss"); notaFiscal.DataHoraAutorização = notaFiscalEntity.DataAutorizacao; notaFiscal.ProtocoloAutorizacao = notaFiscalEntity.Protocolo; }
public int EnviarNotaFiscal(NotaFiscal notaFiscal, string cscId, string csc) { if (notaFiscal.Identificacao.Ambiente == Ambiente.Homologacao) { notaFiscal.Produtos[0].Descricao = "NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL"; } X509Certificate2 certificado; var certificadoEntity = _certificadoRepository.GetCertificado(); if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho)) { certificado = _certificateManager.GetCertificateByPath(certificadoEntity.Caminho, RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha)); } else { certificado = _certificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false); } if (!IsNotaFiscalValida(notaFiscal, cscId, csc, certificado)) { throw new ArgumentException("Nota fiscal inválida."); } try { var qrCode = ""; TNFe nfe = null; var newNodeXml = string.Empty; var idNotaCopiaSeguranca = 0; NotaFiscalEntity notaFiscalEntity = null; var refUri = "#NFe" + notaFiscal.Identificacao.Chave; var digVal = ""; var nFeNamespaceName = "http://www.portalfiscal.inf.br/nfe"; var xml = Regex.Replace(XmlUtil.GerarXmlLoteNFe(notaFiscal, nFeNamespaceName), "<motDesICMS>1</motDesICMS>", string.Empty); XmlNode node = AssinaturaDigital.AssinarLoteComUmaNota(xml, refUri, certificado, ref digVal); try { var codigoUf = (CodigoUfIbge)Enum.Parse(typeof(CodigoUfIbge), notaFiscal.Emitente.Endereco.UF); newNodeXml = PreencherQrCode(notaFiscal, cscId, csc, ref qrCode, digVal, node); var document = new XmlDocument(); document.LoadXml(newNodeXml); node = document.DocumentElement; var lote = (TEnviNFe)XmlUtil.Deserialize <TEnviNFe>(node.OuterXml); nfe = lote.NFe[0]; var configuração = _configuracaoRepository.GetConfiguracao(); if (configuração.IsContingencia) { return(_emiteNotaFiscalContingenciaService.EmitirNotaContingencia(notaFiscal, cscId, csc)); } NFeAutorizacao4Soap client = CriarClientWS(notaFiscal, certificado, codigoUf); idNotaCopiaSeguranca = SalvarNotaFiscalPréEnvio(notaFiscal, qrCode, nfe); TProtNFe protocolo = RetornarProtocoloParaLoteSomenteComUmaNotaFiscal(node, client); if (protocolo.infProt.cStat.Equals("100")) { notaFiscalEntity = _notaFiscalRepository.GetNotaFiscalById(idNotaCopiaSeguranca, false); notaFiscalEntity.Status = (int)Status.ENVIADA; notaFiscalEntity.DataAutorizacao = DateTime.ParseExact(protocolo.infProt.dhRecbto, "yyyy-MM-ddTHH:mm:sszzz", CultureInfo.InvariantCulture); notaFiscalEntity.Protocolo = protocolo.infProt.nProt; var xmlNFeProc = XmlUtil.GerarNfeProcXml(nfe, qrCode, protocolo); _notaFiscalRepository.Salvar(notaFiscalEntity, xmlNFeProc); } else { if (protocolo.infProt.xMotivo.Contains("Duplicidade")) { notaFiscalEntity = CorrigirNotaDuplicada(notaFiscal, qrCode, nFeNamespaceName, certificado, nfe, idNotaCopiaSeguranca); } else { //Nota continua com status pendente nesse caso XmlUtil.SalvarXmlNFeComErro(notaFiscal, node); var mensagem = string.Concat( "O xml informado é inválido de acordo com o validar da SEFAZ. Nota Fiscal não enviada!", "\n", protocolo.infProt.xMotivo); throw new ArgumentException(mensagem); } } AtribuirValoresApósEnvioComSucesso(notaFiscal, qrCode, notaFiscalEntity); return(idNotaCopiaSeguranca); } catch (Exception e) { log.Error(e); if (e is WebException || e.InnerException is WebException) { throw new Exception("Serviço indisponível ou sem conexão com a internet.", e.InnerException); } try { notaFiscalEntity = VerificarSeNotaFoiEnviada(notaFiscal, qrCode, nfe, idNotaCopiaSeguranca, notaFiscalEntity, nFeNamespaceName, certificado); } catch (Exception retornoConsultaException) { log.Error(retornoConsultaException); XmlUtil.SalvarXmlNFeComErro(notaFiscal, node); throw; } AtribuirValoresApósEnvioComSucesso(notaFiscal, qrCode, notaFiscalEntity); return(idNotaCopiaSeguranca); } } catch (Exception e) { log.Error(e); //Necessário para não tentar enviar a mesma nota como contingência. _configuracaoService.SalvarPróximoNúmeroSérie(notaFiscal.Identificacao.Modelo, notaFiscal.Identificacao.Ambiente); if (notaFiscal.Identificacao.Modelo == Modelo.Modelo55) { throw; } var message = e.InnerException != null ? e.InnerException.Message : e.Message; NotaEmitidaEmContingenciaEvent(message, notaFiscal.Identificacao.DataHoraEmissao); return(_emiteNotaFiscalContingenciaService.EmitirNotaContingencia(notaFiscal, cscId, csc)); } finally { _configuracaoService.SalvarPróximoNúmeroSérie(notaFiscal.Identificacao.Modelo, notaFiscal.Identificacao.Ambiente); } }
/** <exception cref="Exception"/> * <summary>Responsável pelo envio da Nota Fiscal para a SEFAZ.</summary> */ internal async Task <int> EnviarNotaFiscalAsync(NotaFiscal notaFiscal, string cscId, string csc) { string qrCode = ""; TNFe nfe = null; string newNodeXml = string.Empty; int idNotaCopiaSeguranca = 0; NotaFiscalEntity notaFiscalEntity = null; string refUri = "#NFe" + notaFiscal.Identificacao.Chave; string digVal = ""; string nFeNamespaceName = "http://www.portalfiscal.inf.br/nfe"; X509Certificate2 certificado; var certificadoEntity = new CertificadoRepository(new NFeContext()).GetCertificado(); certificado = EscolherCertificado(certificadoEntity); var xml = Regex.Replace(XmlUtil.GerarXmlLoteNFe(notaFiscal, nFeNamespaceName), "<motDesICMS>1</motDesICMS>", string.Empty); XmlNode node = AssinaturaDigital.AssinarLoteComUmaNota(xml, refUri, certificado, ref digVal); try { var codigoUF = (CodigoUfIbge)Enum.Parse(typeof(CodigoUfIbge), notaFiscal.Emitente.Endereco.UF); if (notaFiscal.Identificacao.Modelo == Modelo.Modelo65) { //NFC-e tem QrCode obrigatório qrCode = QrCodeUtil.GerarQrCodeNFe(notaFiscal.Identificacao.Chave, notaFiscal.Destinatario, digVal, notaFiscal.Identificacao.Ambiente, notaFiscal.Identificacao.DataHoraEmissao, notaFiscal.TotalNFe.IcmsTotal.ValorTotalNFe.ToString("F", CultureInfo.InvariantCulture), notaFiscal.TotalNFe.IcmsTotal.ValorTotalIcms.ToString("F", CultureInfo.InvariantCulture), cscId, csc, notaFiscal.Identificacao.TipoEmissao); newNodeXml = node.InnerXml.Replace("<qrCode />", "<qrCode>" + qrCode + "</qrCode>"); } else { newNodeXml = node.InnerXml; } var document = new XmlDocument(); document.LoadXml(newNodeXml); node = document.DocumentElement; TEnviNFe lote = (TEnviNFe)XmlUtil.Deserialize <TEnviNFe>(node.OuterXml); nfe = lote.NFe[0]; var servico = ServiceFactory.GetService(notaFiscal.Identificacao.Modelo, notaFiscal.Identificacao.Ambiente, Factory.Servico.AUTORIZACAO, codigoUF, certificado); var client = (NFeAutorizacao4.NFeAutorizacao4SoapClient)servico.SoapClient; //salvar nota PreEnvio aqui notaFiscal.Identificacao.Status = NFe.Repository.Status.PENDENTE; var notaFiscalService = new NotaFiscalService(); idNotaCopiaSeguranca = await notaFiscalService.SalvarNotaFiscalPendenteAsync(notaFiscal, XmlUtil.GerarNfeProcXml(nfe, qrCode), notaFiscal.Identificacao.Ambiente); XmlNode result = client.nfeAutorizacaoLote(node); TRetEnviNFe retorno = (TRetEnviNFe)XmlUtil.Deserialize <TRetEnviNFe>(result.OuterXml); XmlSchemas.NfeAutorizacao.Retorno.TProtNFe protocolo = (XmlSchemas.NfeAutorizacao.Retorno.TProtNFe)retorno.Item; //existem dois valores possíveis de retorno (esse aqui só vale para lote com 1 nota) if (protocolo.infProt.cStat.Equals("100")) { notaFiscalEntity = await notaFiscalService.GetNotaFiscalByIdAsync(idNotaCopiaSeguranca, false); notaFiscalEntity.Status = (int)Status.ENVIADA; notaFiscalEntity.DataAutorizacao = DateTime.ParseExact(protocolo.infProt.dhRecbto, "yyyy-MM-ddTHH:mm:sszzz", CultureInfo.InvariantCulture); notaFiscalEntity.Protocolo = protocolo.infProt.nProt; string xmlNFeProc = XmlUtil.GerarNfeProcXml(nfe, qrCode, protocolo); await notaFiscalService.SalvarAsync(notaFiscalEntity, xmlNFeProc); } else { if (protocolo.infProt.xMotivo.Contains("Duplicidade")) { notaFiscalEntity = await CorrigirNotaDuplicada(notaFiscal, qrCode, nFeNamespaceName, certificado, nfe, idNotaCopiaSeguranca, notaFiscalEntity); } else { //Nota continua com status pendente nesse caso XmlUtil.SalvarXmlNFeComErro(notaFiscal, node); string mensagem = string.Concat("O xml informado é inválido de acordo com o validar da SEFAZ. Nota Fiscal não enviada!", "\n", protocolo.infProt.xMotivo); throw new ArgumentException(mensagem); } } notaFiscal.QrCodeUrl = qrCode; notaFiscal.Identificacao.Status = Status.ENVIADA; notaFiscal.DhAutorizacao = notaFiscalEntity.DataAutorizacao.ToString("dd/MM/yyyy HH:mm:ss"); notaFiscal.DataHoraAutorização = notaFiscalEntity.DataAutorizacao; notaFiscal.ProtocoloAutorizacao = notaFiscalEntity.Protocolo; return(idNotaCopiaSeguranca); } catch (Exception e) { var codigoUF = notaFiscal.Identificacao.UF; var ambiente = notaFiscal.Identificacao.Ambiente; if (e.InnerException is WebException) { throw new Exception("Serviço indisponível ou sem conexão com a internet.", e.InnerException); } try { notaFiscalEntity = await VerificarSeNotaFoiEnviada(notaFiscal, cscId, csc, qrCode, nfe, idNotaCopiaSeguranca, notaFiscalEntity, nFeNamespaceName, certificado); } catch (Exception retornoConsultaException) { EscreverLogErro(e); EscreverLogErro(retornoConsultaException); XmlUtil.SalvarXmlNFeComErro(notaFiscal, node); throw retornoConsultaException; } notaFiscal.QrCodeUrl = qrCode; notaFiscal.Identificacao.Status = Status.ENVIADA; notaFiscal.DhAutorizacao = notaFiscalEntity.DataAutorizacao.ToString("dd/MM/yyyy HH:mm:ss"); notaFiscal.DataHoraAutorização = notaFiscalEntity.DataAutorizacao; notaFiscal.ProtocoloAutorizacao = notaFiscalEntity.Protocolo; return(idNotaCopiaSeguranca); } }
private static async Task <NotaFiscalEntity> CorrigirNotaDuplicada(NotaFiscal notaFiscal, string qrCode, string nFeNamespaceName, X509Certificate2 certificado, TNFe nfe, int idNotaCopiaSeguranca, NotaFiscalEntity notaFiscalEntity) { var retornoConsulta = NFeConsulta.ConsultarNotaFiscal(notaFiscal.Identificacao.Chave, notaFiscal.Emitente.Endereco.CodigoUF, certificado, notaFiscal.Identificacao.Ambiente, notaFiscal.Identificacao.Modelo); var protSerialized = XmlUtil.Serialize(retornoConsulta.Protocolo, nFeNamespaceName); var protDeserialized = (XmlSchemas.NfeAutorizacao.Retorno.TProtNFe)XmlUtil.Deserialize <XmlSchemas.NfeAutorizacao.Retorno.TProtNFe>(protSerialized); var notaFiscalService = new NotaFiscalService(); notaFiscalEntity = await notaFiscalService.GetNotaFiscalByIdAsync(idNotaCopiaSeguranca, false); notaFiscalEntity.Status = (int)Status.ENVIADA; notaFiscalEntity.DataAutorizacao = retornoConsulta.DhAutorizacao; notaFiscalEntity.Protocolo = retornoConsulta.Protocolo.infProt.nProt; string xmlNFeProc = XmlUtil.GerarNfeProcXml(nfe, qrCode, protDeserialized); await notaFiscalService.SalvarAsync(notaFiscalEntity, xmlNFeProc); return(notaFiscalEntity); }
public int Salvar(NotaFiscalEntity notaFiscalEntity, string p) { return(Salvar(notaFiscalEntity)); }
private async Task ImportarXmlNotasFiscais(string path) { var regex = new Regex(@"[0-9]{44}-nf[c|e][e]?"); var files = Directory.EnumerateFiles(path, "*.xml").Where(f => regex.IsMatch(f)); await Task.Run(() => { foreach (var file in files) { try { var xml = File.ReadAllText(file); var notaFiscal = _notaFiscalRepository.GetNotaFiscalFromNfeProcXml(xml); var notaFiscalDb = _notaFiscalRepository.GetNotaFiscalByChave(notaFiscal.Identificacao.Chave); if (notaFiscalDb != null) { return; } var notaFiscalEntity = new NotaFiscalEntity(); if (notaFiscal.Destinatario != null && notaFiscal.Destinatario.Endereco != null) { notaFiscalEntity.UfDestinatario = notaFiscal.Destinatario.Endereco.UF; } else { notaFiscalEntity.UfDestinatario = notaFiscal.Emitente.Endereco.UF; } notaFiscalEntity.Destinatario = notaFiscal.Destinatario == null ? "CONSUMIDOR NÃO IDENTIFICADO" : notaFiscal.Destinatario.NomeRazao; notaFiscalEntity.DocumentoDestinatario = notaFiscal.Destinatario == null ? null : notaFiscal.Destinatario.Documento; notaFiscalEntity.Status = (int)notaFiscal.Identificacao.Status; notaFiscalEntity.Chave = notaFiscal.Identificacao.Chave; notaFiscalEntity.DataEmissao = notaFiscal.Identificacao.DataHoraEmissao; notaFiscalEntity.Modelo = notaFiscal.Identificacao.Modelo == Modelo.Modelo55 ? "55" : "65"; notaFiscalEntity.Serie = notaFiscal.Identificacao.Serie.ToString(); notaFiscalEntity.TipoEmissao = notaFiscal.Identificacao.TipoEmissao.ToString(); notaFiscalEntity.ValorDesconto = notaFiscal.TotalNFe.IcmsTotal.ValorTotalDesconto; notaFiscalEntity.ValorDespesas = notaFiscal.TotalNFe.IcmsTotal.ValorDespesasAcessorias; notaFiscalEntity.ValorFrete = notaFiscal.TotalNFe.IcmsTotal.ValorTotalFrete; notaFiscalEntity.ValorICMS = notaFiscal.TotalNFe.IcmsTotal.ValorTotalIcms; notaFiscalEntity.ValorProdutos = notaFiscal.ValorTotalProdutos; notaFiscalEntity.ValorSeguro = notaFiscal.TotalNFe.IcmsTotal.ValorTotalSeguro; notaFiscalEntity.ValorTotal = notaFiscal.TotalNFe.IcmsTotal.ValorTotalNFe; notaFiscalEntity.Ambiente = notaFiscal.Identificacao.Ambiente == Ambiente.Homologacao ? 2 : 1; notaFiscalEntity.Numero = notaFiscal.Identificacao.Numero; notaFiscalEntity.IsProducao = notaFiscal.Identificacao.Ambiente == Ambiente.Producao; notaFiscalEntity.DataAutorizacao = DateTime.ParseExact(notaFiscal.DhAutorizacao, "yyyy-MM-ddTHH:mm:sszzz", CultureInfo.InvariantCulture); notaFiscalEntity.Protocolo = notaFiscal.ProtocoloAutorizacao; notaFiscalEntity.XmlPath = GetFullPath(file); _notaFiscalRepository.Salvar(notaFiscalEntity, xml); } catch (Exception e) { log.Error(e); } } }); }