public bool ExecutarConsultaStatus(ConfiguracaoEntity config, Modelo modelo) { var ambiente = config.IsProducao ? Ambiente.Producao : Ambiente.Homologacao; var codigoUf = (CodigoUfIbge)Enum.Parse(typeof(CodigoUfIbge), _emissorService.GetEmissor().Endereco.UF); X509Certificate2 certificado = null; var certificadoEntity = _certificadoService.GetCertificado(); if (certificadoEntity == null) { return(false); } if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho)) { certificado = _certificateManager.GetCertificateByPath(certificadoEntity.Caminho, RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha)); } else { certificado = _certificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false); } return(NFeStatusServico.ExecutarConsultaStatus(codigoUf, ambiente, certificado, modelo)); }
private void EnviarCancelamentoNotaFiscal(NFCeModel notaFiscalModel) { X509Certificate2 certificado; var modeloNota = notaFiscalModel.Modelo.Contains("NFC-e") ? Modelo.Modelo65 : Modelo.Modelo55; var config = _configuracaoService.GetConfiguracao(); var emitente = _emissorService.GetEmissor(); var codigoUF = (CodigoUfIbge)Enum.Parse(typeof(CodigoUfIbge), emitente.Endereco.UF); var ambiente = config.IsProducao ? Ambiente.Producao : Ambiente.Homologacao; var certificadoEntity = _certificadoService.GetCertificado(); if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho)) { certificado = _certificateManager.GetCertificateByPath(certificadoEntity.Caminho, RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha)); } else { certificado = _certificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false); } UF = emitente.Endereco.UF; CodigoUF = codigoUF; Cnpj = emitente.CNPJ; Chave = notaFiscalModel.Chave; Protocolo = notaFiscalModel.Protocolo; ModeloNota = modeloNota; Certificado = certificado; Ambiente = ambiente; var app = Application.Current; var mainWindow = app.MainWindow; new CancelarNotaWindow() { Owner = mainWindow }.ShowDialog(); }
public X509Certificate2 GetX509Certificate2() { X509Certificate2 certificado; var certificadoEntity = GetCertificado(); if (certificadoEntity == null) { return(null); } if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho)) { certificado = _certificateManager.GetCertificateByPath(certificadoEntity.Caminho, RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha)); } else { certificado = _certificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false); } return(certificado); }
public int EmitirNotaContingencia(NotaFiscal notaFiscal, string cscId, string csc) { var qrCode = string.Empty; string newNodeXml; const string nFeNamespaceName = "http://www.portalfiscal.inf.br/nfe"; var digVal = string.Empty; var config = _configuracaoService.GetConfiguracao(); notaFiscal.Identificacao.Numero = _configuracaoService.ObterProximoNumeroNotaFiscal(notaFiscal.Identificacao.Modelo); notaFiscal.Identificacao.DataHoraEntradaContigencia = config.DataHoraEntradaContingencia; notaFiscal.Identificacao.JustificativaContigencia = config.JustificativaContingencia; notaFiscal.Identificacao.TipoEmissao = notaFiscal.Identificacao.Modelo == Modelo.Modelo65 ? TipoEmissao.ContigenciaNfce : TipoEmissao.FsDa; notaFiscal.CalcularChave(); 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 (notaFiscal.Identificacao.Ambiente == Ambiente.Homologacao) notaFiscal.Produtos[0].Descricao = "NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL"; var refUri = "#NFe" + notaFiscal.Identificacao.Chave; var xml = Regex.Replace(XmlUtil.GerarXmlLoteNFe(notaFiscal, nFeNamespaceName), "<motDesICMS>1</motDesICMS>", string.Empty); XmlNode node = AssinaturaDigital.AssinarLoteComUmaNota(xml, refUri, certificado, ref digVal); if (notaFiscal.Identificacao.Modelo == Modelo.Modelo65) { 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.Replace("<infNFeSupl><qrCode /></infNFeSupl>", ""); } var document = new XmlDocument(); document.LoadXml(newNodeXml); node = document.DocumentElement; if (node == null) throw new ArgumentException("Xml inválido."); var lote = (TEnviNFe)XmlUtil.Deserialize<TEnviNFe>(node.OuterXml); var nfe = lote.NFe[0]; //salvar nota PreEnvio aqui notaFiscal.Identificacao.Status = Status.CONTINGENCIA; var idNotaCopiaSeguranca = _notaFiscalRepository.SalvarNotaFiscalPendente(notaFiscal, XmlUtil.GerarNfeProcXml(nfe, qrCode), notaFiscal.Identificacao.Ambiente); var notaFiscalEntity = _notaFiscalRepository.GetNotaFiscalById(idNotaCopiaSeguranca, false); notaFiscalEntity.Status = (int)Status.CONTINGENCIA; var nfeProcXml = XmlUtil.GerarNfeProcXml(nfe, qrCode); _notaFiscalRepository.Salvar(notaFiscalEntity, nfeProcXml); notaFiscal.QrCodeUrl = qrCode; return idNotaCopiaSeguranca; }
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); } }