internal void CancelarNotaFiscal(NFCeModel notaFiscal)
 {
     if (notaFiscal.Status.Equals("Enviada"))
     {
         EnviarCancelamentoNotaFiscal(notaFiscal);
     }
     else
     {
         InutilizarNotaFiscal(notaFiscal);
     }
 }
예제 #2
0
        private void LoadedCmd_Execute(string modelo)
        {
            NotaFiscal = new NFCeModel();

            if (modelo != null && modelo.Equals("55"))
            {
                _modelo = Modelo.Modelo55;
                NotaFiscal.IsImpressaoBobina = false;
            }
            else
            {
                _modelo = Modelo.Modelo65;
            }

            NotaFiscal.DestinatarioSelecionado = new DestinatarioModel();
            Pagamento = new PagamentoVO();
            Pagamento.FormaPagamento = "Dinheiro";

            var config = _configuracaoService.GetConfiguracao();

            NotaFiscal.Serie      = config.IsProducao ? config.SerieNFCe : config.SerieNFCeHom;
            NotaFiscal.Numero     = config.IsProducao ? config.ProximoNumNFCe : config.ProximoNumNFCeHom;
            NotaFiscal.ModeloNota = "NFC-e";

            NotaFiscal.DataEmissao       = DateTime.Now;
            NotaFiscal.HoraEmissao       = DateTime.Now;
            NotaFiscal.DataSaida         = DateTime.Now;
            NotaFiscal.HoraSaida         = DateTime.Now;
            NotaFiscal.IndicadorPresenca = PresencaComprador.Presencial;
            NotaFiscal.Finalidade        = "Normal";

            var produtos = _produtoService.GetProdutosByNaturezaOperacao("Venda");

            foreach (var produto in produtos)
            {
                ProdutosCombo.Add(produto);
            }

            var destinatarios = _destinatarioService.GetAll();

            foreach (var destDB in destinatarios)
            {
                Destinatarios.Add((DestinatarioModel)destDB);
            }
        }
        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();
        }
        internal async void VisualizarNotaFiscal(NFCeModel notaFiscal)
        {
            NotaFiscal            = notaFiscal; //falta preencher pagamentos
            NotaFiscal.Pagamentos = new ObservableCollection <PagamentoVO>();
            NotaFiscal.DestinatarioSelecionado = new DestinatarioModel();
            string xml = await GetNotaXmlAsync();

            var notaFiscalBO = _notaFiscalRepository.GetNotaFiscalFromNfeProcXml(xml);

            _notaFiscalBO = notaFiscalBO;

            //Preenche pagamentos
            if (notaFiscalBO.Pagamentos != null)
            {
                foreach (var pagamento in notaFiscalBO.Pagamentos)
                {
                    var pagamentoVO = new PagamentoVO();
                    pagamentoVO.FormaPagamento = pagamento.FormaPagamentoTexto;
                    pagamentoVO.ValorTotal     = pagamento.Valor.ToString("N2", new CultureInfo("pt-BR"));

                    NotaFiscal.Pagamentos.Add(pagamentoVO);
                }
            }
            else
            {
                NotaFiscal.Pagamentos.Add(new PagamentoVO()
                {
                    FormaPagamento = "N/A"
                });
            }

            //Preenche documento destinatário
            if (notaFiscalBO.Destinatario != null)
            {
                DocumentoDestinatario     = notaFiscalBO.Destinatario.Documento;
                IsDestinatarioEstrangeiro = notaFiscalBO.Destinatario.TipoDestinatario == TipoDestinatario.Estrangeiro;
            }

            NotaFiscal.Finalidade       = notaFiscalBO.Identificacao.FinalidadeConsumidor == FinalidadeConsumidor.ConsumidorFinal ? "Consumidor Final" : "Normal";
            NotaFiscal.NaturezaOperacao = notaFiscalBO.Identificacao.NaturezaOperacao;
            NotaFiscal.Serie            = notaFiscalBO.Identificacao.Serie.ToString("D3");

            //Preenche produtos
            NotaFiscal.Produtos = new ObservableCollection <ProdutoVO>();

            foreach (var produto in notaFiscalBO.Produtos)
            {
                var produtoVO = new ProdutoVO();
                produtoVO.QtdeProduto   = produto.QtdeUnidadeComercial;
                produtoVO.Descricao     = produto.Descricao;
                produtoVO.ValorUnitario = produto.ValorUnidadeComercial;
                produtoVO.Descontos     = produto.ValorDesconto;
                produtoVO.TotalLiquido  = produto.ValorTotal;

                NotaFiscal.Produtos.Add(produtoVO);
            }

            var app        = Application.Current;
            var mainWindow = app.MainWindow;
            var window     = new VisualizarNotaEnviadaWindow()
            {
                Owner = mainWindow
            };

            window.ShowDialog();
        }
        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 void NotaCanceladaVM_NotaInutilizadaEventHandler(NFCeModel notaInutilizada)
        {
            var notaMemento = NotasFiscais.First(n => n.Chave == notaInutilizada.Chave);

            NotasFiscais.Remove(notaMemento);
        }