public void TestMethod4() { NotaFiscalDesconto notaFiscal = new NotaFiscalDesconto(); NotaFiscalRepository notaFiscalRepository = new NotaFiscalRepository(); NotaFiscalService NotaFiscalService = new NotaFiscalService(); Pedido pedido = new Pedido(); pedido.EstadoOrigem = "SP"; pedido.EstadoDestino = "RJ"; pedido.NomeCliente = "Carlos Lui"; pedido.ItensDoPedido.Add( new PedidoItem() { Brinde = false, CodigoProduto = "1256", NomeProduto = "Tenis", ValorItemPedido = 200 }); NotaFiscalService.Gravar(pedido); }
public async Task NotaCanceladaXmlExisteTest() { NotaFiscal notaFiscal; ConfiguracaoEntity config; int notaFiscalId = EnviarNotaTesteUnitarioUtils.EnviarNotaFiscal(out notaFiscal, out config); var notaFiscalDb = new NotaFiscalService().GetNotaFiscalByIdAsync(notaFiscalId, false).Result; var emitente = notaFiscal.Emitente; var codigoUFEnum = (CodigoUfIbge)Enum.Parse(typeof(CodigoUfIbge), emitente.Endereco.UF); await new NotaFiscalService().CancelarNotaFiscalAsync(emitente.Endereco.UF, codigoUFEnum, Ambiente.Homologacao, emitente.CNPJ, notaFiscal.Identificacao.Chave, notaFiscalDb.Protocolo, notaFiscal.Identificacao.Modelo, "Teste unitário cancelamento"); var notaTest = new NotaFiscalService().GetNotaFiscalByChave(notaFiscal.Identificacao.Chave, Ambiente.Homologacao); var evento = new EventoService().GetEventoPorNota(notaTest.Id, true); ValidadorXml.ValidarXml(evento.LoadXml(), "procEventoCancNFe_v1.00.xsd"); ValidadorXml.ValidarXml(notaTest.LoadXml(), "procNFe_v4.00.xsd"); Assert.IsTrue(notaTest.Status == (int)NFe.Repository.Status.CANCELADA); Assert.IsTrue(File.Exists(evento.XmlPath)); Assert.IsTrue(File.Exists(notaTest.XmlPath)); }
private void buttonGerarNotaFiscal_Click(object sender, EventArgs e) { try { if (IsValid()) { NotaFiscalService service = new NotaFiscalService(); Pedido pedido = new Pedido(); pedido.EstadoOrigem = txtEstadoOrigem.Text; pedido.EstadoDestino = txtEstadoDestino.Text; pedido.NomeCliente = textBoxNomeCliente.Text; DataTable table = (DataTable)dataGridViewPedidos.DataSource; foreach (DataRow row in table.Rows) { pedido.ItensDoPedido.Add( new PedidoItem() { Brinde = Convert.ToBoolean(row["Brinde"]), CodigoProduto = row["Codigo do produto"].ToString(), NomeProduto = row["Nome do produto"].ToString(), ValorItemPedido = Convert.ToDouble(row["Valor"].ToString()) }); } service.GerarNotaFiscal(pedido); MessageBox.Show("Operação efetuada com sucesso", "Sucesso!", MessageBoxButtons.OK, MessageBoxIcon.Information); Utils.CleanControls(this.Controls); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public void EnviarNotaDestinatarioSemEndTest() { var idDestinatario = DestinatarioService.Salvar(new DestinatarioEntity() { NomeRazao = "Domício de Araújo", Documento = "73598348134", TipoDestinatario = (int)TipoDestinatario.PessoaFisica }); Assert.AreNotEqual(0, idDestinatario); try { NotaFiscal notaFiscal; ConfiguracaoEntity config; var DestinatarioEntity = DestinatarioService.GetDestinatarioByID(idDestinatario); var destinatario = new Destinatario(Ambiente.Homologacao, Modelo.Modelo65, null, null, null, TipoDestinatario.PessoaFisica, nomeRazao: DestinatarioEntity.NomeRazao, documento: DestinatarioEntity.Documento); new NotaFiscalService().AtivarModoOnline(); EnviarNotaTesteUnitarioUtils.EnviarNotaFiscal(out notaFiscal, out config, destinatario); var notaTest = new NotaFiscalService().GetNotaFiscalByChave(notaFiscal.Identificacao.Chave, Ambiente.Homologacao); if (ConsultaStatusServicoService.ExecutarConsultaStatus(config, Modelo.Modelo65)) { Assert.IsTrue(notaTest.Status == (int)NFe.Repository.Status.ENVIADA); } else { Assert.IsTrue(notaTest.Status == (int)NFe.Repository.Status.CONTINGENCIA); } } finally { DestinatarioService.ExcluirDestinatario(idDestinatario); } }
public void GerarNotaFiscal_HavingGeneratedAnInvalidXml_ShouldNotPersistNotaFiscalInDataBase() { // arrange var pedido = A.Dummy <Pedido>(); pedido.ItensDoPedido.Add(A.Dummy <PedidoItem>()); A.CallTo(() => _xmlWriter.Record(A <string> .Ignored, A <NotaFiscal> .Ignored)).Returns(false); A.CallTo(() => _notaFiscalRepository.GetNextIdNotaFiscal()).Returns(A.Dummy <int>()); A.CallTo(() => _notaFiscalRepository.GetLastIdNotaFiscalItem()).Returns(A.Dummy <int>()); // act var notaFiscalService = new NotaFiscalService(_xmlWriter, _notaFiscalRepository); var result = notaFiscalService.GerarNotaFiscal(pedido); // assert A.CallTo(() => _xmlWriter.Record(A <string> .Ignored, A <NotaFiscal> .Ignored)) .MustHaveHappenedOnceExactly(); A.CallTo(() => _notaFiscalRepository.GetNextIdNotaFiscal()) .MustHaveHappenedOnceExactly(); A.CallTo(() => _notaFiscalRepository.GetLastIdNotaFiscalItem()) .MustHaveHappenedOnceExactly(); A.CallTo(() => _notaFiscalRepository.InsertNotaFiscal(A <int> .Ignored, A <int> .Ignored, A <string> .Ignored, A <string> .Ignored, A <string> .Ignored)).MustNotHaveHappened(); A.CallTo(() => _notaFiscalRepository.InsertNotaFiscalItem(A <int> .Ignored, A <string> .Ignored, A <string> .Ignored, A <double> .Ignored, A <double> .Ignored, A <double> .Ignored, A <string> .Ignored, A <string> .Ignored, A <double> .Ignored, A <double> .Ignored, A <double> .Ignored, A <double> .Ignored)).MustNotHaveHappened(); Assert.IsFalse(result.Status); }
public void Cleanup() { notaFiscalService = null; }
public NotaFiscalController(UnitOfWork unitOfWork, NotaFiscalService notaFiscalService) { _unitOfWork = unitOfWork; _notaFiscalService = notaFiscalService; }
private void buttonGerarNotaFiscal_Click(object sender, EventArgs e) { NotaFiscalService service = new NotaFiscalService(); if (txtBoxNomeCliente.Text == "") // verifica nome do cliente em branco { txtBoxNomeCliente.Focus(); MessageBox.Show("Nome de cliente em branco."); return; } else { pedido.clientePedido.nomeCliente = txtBoxNomeCliente.Text; } if (!EstadoFuncs.EstadoValido(cbxEstadoOrigem.Text)) // verifica se estado é válido { cbxEstadoOrigem.Focus(); MessageBox.Show("Estado de Origem não existe ou em branco."); return; } else { pedido.EstadoOrigem.siglaEstado = cbxEstadoOrigem.Text; } if (!EstadoFuncs.EstadoValido(cbxEstadoDestino.Text)) // verifica se estado é válido { cbxEstadoDestino.Focus(); MessageBox.Show("Estado de Destino não existe ou em branco."); return; } else { pedido.EstadoDestino.siglaEstado = cbxEstadoDestino.Text; } DataTable table = (DataTable)dataGridViewPedidos.DataSource; if (table.Rows.Count == 0) // não deixa criar pedido sem itens { MessageBox.Show("Pedido sem Itens."); return; } pedido.ItensDoPedido.Clear(); // limpa os itens de pedido caso seja chamada novamente por causa de erros nos dados dos itens int linhaAtual = 0; foreach (DataRow row in table.Rows) { PedidoItem pedidoItem = new PedidoItem(); if (row["Nome do produto"].ToString() == "") // verifica se nome do produto está em branco { dataGridViewPedidos.CurrentCell = dataGridViewPedidos.Rows[linhaAtual].Cells["Nome do produto"]; MessageBox.Show("Nome do Produto em branco."); return; } else { pedidoItem.NomeProduto = row["Nome do produto"].ToString(); } if (row["Codigo do produto"].ToString() == "") // verifica se código do produto está em branco { dataGridViewPedidos.CurrentCell = dataGridViewPedidos.Rows[linhaAtual].Cells["Codigo do produto"]; MessageBox.Show("Código do Produto em branco."); return; } else { pedidoItem.CodigoProduto = row["Codigo do produto"].ToString(); } if (row["Valor"].ToString() == "") // verifica se valor do produto está em branco { dataGridViewPedidos.CurrentCell = dataGridViewPedidos.Rows[linhaAtual].Cells["Valor"]; MessageBox.Show("Valor em branco."); return; } else { double number; if (Double.TryParse(row["Valor"].ToString(), out number)) { pedidoItem.ValorItemPedido = number; } else { dataGridViewPedidos.CurrentCell = dataGridViewPedidos.Rows[linhaAtual].Cells["Valor"]; MessageBox.Show("Valor do produto é inválido."); return; } } if (row["Brinde"] == DBNull.Value) // proteção contra o DBNull quando não é selecionado nada na coluna BRINDE { pedidoItem.Brinde = false; } else { pedidoItem.Brinde = Convert.ToBoolean(row["Brinde"]); } pedido.ItensDoPedido.Add(pedidoItem); linhaAtual++; // passa para próxima linha } service.GerarNotaFiscal(pedido); if (service.SalvaNotaFiscal()) { MessageBox.Show("NF salva com sucesso"); LimpaCampos(); // item 06 - limpar campos } else { MessageBox.Show("Erro ao Salvar NF"); } }
/** <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 void buttonGerarNotaFiscal_Click(object sender, EventArgs e) { if (textBoxNomeCliente.Text == "" || cboEstadoOrigem.SelectedItem == null || cboEstadoDestino.SelectedItem == null) { MessageBox.Show(this, "Necessário preencher os dados da nota fiscal", buttonGerarNotaFiscal.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } DataTable table = (DataTable)dataGridViewPedidos.DataSource; if (table.Rows.Count == 0) { MessageBox.Show(this, "Nenhum item adicionado", buttonGerarNotaFiscal.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } NotaFiscalService service = new NotaFiscalService(); pedido.EstadoOrigem = (Estado)cboEstadoOrigem.SelectedItem; pedido.EstadoDestino = (Estado)cboEstadoDestino.SelectedItem; pedido.NomeCliente = textBoxNomeCliente.Text; foreach (DataRow row in table.Rows) { if (row.IsNull("Nome do produto") || row.IsNull("Codigo do produto")) { MessageBox.Show(this, "Preencher o nome e o código de todos os itens", buttonGerarNotaFiscal.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (row.IsNull("Brinde")) { row["Brinde"] = false; } if (row.IsNull("Valor")) { MessageBox.Show(this, "Preencher o valor de todos os itens", buttonGerarNotaFiscal.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (row.IsNull("Desconto")) { row["Desconto"] = 0; } pedido.ItensDoPedido.Add( new PedidoItem() { Brinde = Convert.ToBoolean(row["Brinde"]), CodigoProduto = row["Codigo do produto"].ToString(), NomeProduto = row["Nome do produto"].ToString(), ValorItemPedido = Convert.ToDouble(row["Valor"].ToString()), Desconto = Convert.ToDouble(row["Desconto"]) }); } try { service.GerarNotaFiscal(pedido); MessageBox.Show(this, "Operação efetuada com sucesso", buttonGerarNotaFiscal.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); LimpaCampos(); } catch (ServiceException ex) { MessageBox.Show(this, ex.Message, buttonGerarNotaFiscal.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); } }
internal async Task <int> EnviarNotaContingencia(NotaFiscal notaFiscal, string cscId, string csc) { TNFe nfe = null; string qrCode = string.Empty; string newNodeXml = string.Empty; string nFeNamespaceName = "http://www.portalfiscal.inf.br/nfe"; string digVal = string.Empty; int idNotaCopiaSeguranca = 0; var config = ConfiguracaoService.GetConfiguracao(); 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 = new CertificadoRepository(new NFeContext()).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 == Domain.Services.Identificacao.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); var codigoUF = (CodigoUfIbge)Enum.Parse(typeof(CodigoUfIbge), notaFiscal.Emitente.Endereco.UF); 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; TEnviNFe lote = (TEnviNFe)XmlUtil.Deserialize <TEnviNFe>(node.OuterXml); nfe = lote.NFe[0]; //salvar nota PreEnvio aqui notaFiscal.Identificacao.Status = NFe.Repository.Status.CONTINGENCIA; var notaFiscalService = new NotaFiscalService(); idNotaCopiaSeguranca = await notaFiscalService.SalvarNotaFiscalPendenteAsync(notaFiscal, XmlUtil.GerarNfeProcXml(nfe, qrCode), notaFiscal.Identificacao.Ambiente); var notaFiscalEntity = await notaFiscalService.GetNotaFiscalByIdAsync(idNotaCopiaSeguranca, false); notaFiscalEntity.Status = (int)Status.CONTINGENCIA; string nfeProcXml = XmlUtil.GerarNfeProcXml(nfe, qrCode); await notaFiscalService.SalvarAsync(notaFiscalEntity, nfeProcXml); notaFiscal.QrCodeUrl = qrCode; return(idNotaCopiaSeguranca); }
private async Task <List <string> > TransmitirConsultarLoteContingenciaAsync(ConfiguracaoEntity config, List <string> notasNFCe, Modelo modelo) { var retornoTransmissao = TransmitirLoteNotasFiscaisContingencia(notasNFCe, modelo); if (retornoTransmissao.TipoMensagem == TipoMensagem.ErroValidacao) { return(new List <string>() { retornoTransmissao.Mensagem }); } else if (retornoTransmissao.TipoMensagem == TipoMensagem.ServicoIndisponivel) { return(new List <string>() { mensagemErro }); } int tempoEspera = Int32.Parse(retornoTransmissao.RetEnviNFeInfRec.tMed) * 1000; List <string> erros = new List <string>(); Thread.Sleep(tempoEspera); var resultadoConsulta = ConsultarReciboLoteContingencia(retornoTransmissao.RetEnviNFeInfRec.nRec, modelo); if (resultadoConsulta == null) { return(new List <string>() { mensagemErro }); } foreach (var resultado in resultadoConsulta) { var ambiente = config.IsProducao ? Ambiente.Producao : Ambiente.Homologacao; var nota = new NotaFiscalService().GetNotaFiscalByChave(resultado.Chave); if (resultado.CodigoStatus == "100") { nota.DataAutorizacao = DateTime.ParseExact(resultado.DataAutorizacao, "yyyy-MM-ddTHH:mm:sszzz", CultureInfo.InvariantCulture); nota.Protocolo = resultado.Protocolo; nota.Status = (int)NFe.Repository.Status.ENVIADA; string xml = await nota.LoadXmlAsync(); xml = xml.Replace("<protNFe />", resultado.Xml); var notaFiscalService = new NotaFiscalService(); await notaFiscalService.SalvarAsync(nota, xml); } else { if (resultado.Motivo.Contains("Duplicidade")) { X509Certificate2 certificado; var certificadoEntity = new CertificadoRepository(new NFeContext()).GetCertificado(); var emitente = EmissorService.GetEmissor(); if (!string.IsNullOrWhiteSpace(certificadoEntity.Caminho)) { certificado = CertificateManager.GetCertificateByPath(certificadoEntity.Caminho, RijndaelManagedEncryption.DecryptRijndael(certificadoEntity.Senha)); } else { certificado = CertificateManager.GetCertificateBySerialNumber(certificadoEntity.NumeroSerial, false); } var retornoConsulta = NFeConsulta.ConsultarNotaFiscal ( nota.Chave, emitente.Endereco.CodigoUF, certificado, config.IsProducao ? Ambiente.Producao : Ambiente.Homologacao, nota.Modelo.Equals("65") ? Modelo.Modelo65 : Modelo.Modelo55 ); if (retornoConsulta.IsEnviada) { var protSerialized = XmlUtil.Serialize(retornoConsulta.Protocolo, string.Empty) .Replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>", string.Empty) .Replace("TProtNFe", "protNFe"); protSerialized = Regex.Replace(protSerialized, "<infProt (.*?)>", "<infProt>"); nota.DataAutorizacao = retornoConsulta.DhAutorizacao; nota.Protocolo = retornoConsulta.Protocolo.infProt.nProt; nota.Status = (int)NFe.Repository.Status.ENVIADA; string xml = await nota.LoadXmlAsync(); xml = xml.Replace("<protNFe />", protSerialized); var notaFiscalService = new NotaFiscalService(); await notaFiscalService.SalvarAsync(nota, xml); } else { erros.Add(string.Format("Modelo: {0} Nota: {1} Série: {2} \nMotivo: {3}", nota.Modelo, nota.Numero, nota.Serie, resultado.Motivo)); //O que fazer com essas mensagens de erro? } } else { erros.Add(string.Format("Modelo: {0} Nota: {1} Série: {2} \nMotivo: {3}", nota.Modelo, nota.Numero, nota.Serie, resultado.Motivo)); //O que fazer com essas mensagens de erro? } } } return(erros); }
public NotaFiscalServiceTest() { _repositoryMock = new Mock <INotaFiscalRepository>(); _templateServiceMock = new Mock <ITemplateService>(); _notaFiscalService = new NotaFiscalService(_repositoryMock.Object, _templateServiceMock.Object); }