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 void InutilizarNotaFiscal(NFCeModel notaFiscal) { 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 modeloNota = notaFiscal.Modelo.Contains("NFC-e") ? Modelo.Modelo65 : Modelo.Modelo55; if (modeloNota == Modelo.Modelo55) //NF-e { string proximoNumNFe = ambiente == Ambiente.Homologacao ? config.ProximoNumNFeHom : config.ProximoNumNFe; var numAtual = (int.Parse(proximoNumNFe) - 1).ToString(); //Se o número atual não tiver mudado, significa que ela não foi enviada e pode ser excluída sem inutilizar. if (notaFiscal.Numero == numAtual) { if (ambiente == Ambiente.Homologacao) { config.ProximoNumNFeHom = numAtual; } else { config.ProximoNumNFe = numAtual; } var modelo = notaFiscal.Modelo == "NFC-e" ? "65" : "55"; _notaFiscalRepository.ExcluirNota(notaFiscal.Chave, ambiente); NotaInutilizadaEvent(notaFiscal); _configuracaoService.Salvar(config); } else //caso o número atual seja diferente, é necessário inutilizar { var mensagemRetorno = _notaInutilizadaService.InutilizarNotaFiscal(emitente.Endereco.UF, codigoUF, ambiente, emitente.CNPJ, modeloNota, notaFiscal.Serie, notaFiscal.Numero, notaFiscal.Numero); if (mensagemRetorno.Status != Core.NotasFiscais.Sefaz.NfeInutilizacao2.Status.ERRO) { _notaFiscalRepository.ExcluirNota(notaFiscal.Chave, ambiente); NotaInutilizadaEvent(notaFiscal); _configuracaoService.Salvar(config); } else { MessageBox.Show("Houve um erro ao tentar cancelar a nota. Tente novamente e, se o erro persistir, contate o suporte." + "\n\n" + mensagemRetorno.Mensagem, "Erro!", MessageBoxButton.OK, MessageBoxImage.Information); } } } else //NFC-e { string proximoNumNFCe = ambiente == Ambiente.Homologacao ? config.ProximoNumNFeHom : config.ProximoNumNFe; var numAtual = (int.Parse(proximoNumNFCe) - 1).ToString(); if (notaFiscal.Numero == numAtual) { if (ambiente == Ambiente.Homologacao) { config.ProximoNumNFCeHom = numAtual; } else { config.ProximoNumNFCe = numAtual; } var modelo = notaFiscal.Modelo == "NFC-e" ? "65" : "55"; _notaFiscalRepository.ExcluirNota(notaFiscal.Chave, ambiente); NotaInutilizadaEvent(notaFiscal); _configuracaoService.Salvar(config); } else { var mensagemRetorno = _notaInutilizadaService.InutilizarNotaFiscal(emitente.Endereco.UF, codigoUF, ambiente, emitente.CNPJ, modeloNota, notaFiscal.Serie, notaFiscal.Numero, notaFiscal.Numero); if (mensagemRetorno.Status != Core.NotasFiscais.Sefaz.NfeInutilizacao2.Status.ERRO) { _notaFiscalRepository.ExcluirNota(notaFiscal.Chave, ambiente); NotaInutilizadaEvent(notaFiscal); _configuracaoService.Salvar(config); } else { MessageBox.Show("Houve um erro ao tentar cancelar a nota. Tente novamente e, se o erro persistir, contate o suporte." + "\n\n" + mensagemRetorno.Mensagem, "Erro!", MessageBoxButton.OK, MessageBoxImage.Information); } } } }
private async void EnviarNotaNovamenteCmd_ExecuteAsync(NotaFiscalMemento notaPendenteMemento) { IsBusy = true; BusyContent = "Enviando..."; var config = _configuracaoService.GetConfiguracao(); var modelo = notaPendenteMemento.Tipo == "NFC-e" ? Modelo.Modelo65 : Modelo.Modelo55; //Preencher objeto da NotaFiscal a partir do XML e enviar para a correspondente ViewModel NFe ou NFCe var app = Application.Current; var mainWindow = app.MainWindow; if (!_consultaStatusServicoService.ExecutarConsultaStatus(config, modelo)) { MessageBox.Show(mainWindow, "Serviço continua indisponível. Aguarde o reestabelecimento da conexão e tente novamente.", "Erro de conexão ou serviço indisponível", MessageBoxButton.OK, MessageBoxImage.Information); return; } var ambiente = config.IsProducao ? Ambiente.Producao : Ambiente.Homologacao; var notaFiscalDb = _notaFiscalRepository.GetNotaFiscalByChave(notaPendenteMemento.Chave); var xml = await notaFiscalDb.LoadXmlAsync(); var notaFiscalBo = _notaFiscalRepository.GetNotaFiscalFromNfeProcXml(xml); notaFiscalBo.Identificacao.DataHoraEmissao = DateTime.Now; foreach (var prod in notaFiscalBo.Produtos) { var produtoDb = _produtoService.GetByCodigo(prod.Codigo); prod.Id = produtoDb.Id; } try { var cscId = ambiente == Ambiente.Homologacao ? config.CscIdHom : config.CscId; var csc = ambiente == Ambiente.Homologacao ? config.CscHom : config.Csc; _notaFiscalRepository.ExcluirNota(notaPendenteMemento.Chave, ambiente); _enviaNotaFiscalService.EnviarNotaFiscal(notaFiscalBo, cscId, csc); IsBusy = false; var mbResult = MessageBox.Show(mainWindow, "Nota enviada com sucesso! Deseja imprimi-la?", "Emissão NFe", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No); if (mbResult == MessageBoxResult.Yes) { BusyContent = "Gerando impressão..."; IsBusy = true; await GeradorPDF.GerarPdfNotaFiscal(notaFiscalBo); } IsBusy = false; var notaIndex = NotasFiscais.IndexOf(notaPendenteMemento); Destinatario destinatario; var destinatarioUf = notaFiscalBo.Emitente.Endereco.UF; if (notaFiscalBo.Destinatario != null) { destinatario = notaFiscalBo.Destinatario; destinatarioUf = destinatario.Endereco != null ? destinatario.Endereco.UF : destinatarioUf; } else { destinatario = new Destinatario("CONSUMIDOR NÃO IDENTIFICADO"); } var valorTotalProdutos = notaFiscalBo.ValorTotalProdutos.ToString("N2", new CultureInfo("pt-BR")); var notaMemento = new NotaFiscalMemento(notaFiscalBo.Identificacao.Numero, notaFiscalBo.Identificacao.Modelo, notaFiscalBo.Identificacao.DataHoraEmissao, notaFiscalBo.DataHoraAutorização, destinatario.NomeRazao, destinatarioUf, valorTotalProdutos, notaFiscalBo.Identificacao.Status, notaFiscalBo.Identificacao.Chave); NotasFiscais[notaIndex] = notaMemento; NotaPendenteReenviadaEvent(notaFiscalBo); } catch (Exception e) { log.Error(e); MessageBox.Show(mainWindow, "Ocorreram os seguintes erros ao tentar enviar a nota fiscal:\n\n" + e.InnerException.Message, "Erro", MessageBoxButton.OK, MessageBoxImage.Information); } }