Exemple #1
0
        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);
        }
        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 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);
                    }
                }
            });
        }
        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);
            }
        }