public async Task <Core.NotasFiscais.NotaFiscal> EnviarNota(NotaFiscalModel notaFiscalModel, Modelo modelo) { notaFiscalModel.ValidateModel(); if (notaFiscalModel.HasErrors) { throw new ArgumentException("Nota fiscal contém erros de validação não resolvidos."); } if (notaFiscalModel.Pagamentos[0].FormaPagamento != "Sem Pagamento" && notaFiscalModel.Produtos.Sum(c => c.QtdeProduto * c.ValorUnitario) != notaFiscalModel.Pagamentos.Sum(p => p.QtdeParcelas * p.ValorParcela)) { await _dialogService.ShowError("Valor total da nota não corresponde ao valor de pagamento.", "Erro!", "Ok", null); throw new ArgumentException("Valor total da nota não corresponde ao valor de pagamento."); } Core.NotasFiscais.NotaFiscal notaFiscal = null; var config = _configuracaoService.GetConfiguracao(); var ambiente = config.IsProducao ? Ambiente.Producao : Ambiente.Homologacao; await Task.Run(() => { var modeloNota = modelo; const TipoEmissao tipoEmissao = TipoEmissao.Normal; //verificar status do serviço e etc var destinatario = GetDestinatario(notaFiscalModel, ambiente, modelo); var documentoDanfe = destinatario != null ? destinatario.DocumentoDanfe : "CPF"; //Encapsular isso aqui var emitente = _emissorService.GetEmissor(); var codigoUF = (CodigoUfIbge)Enum.Parse(typeof(CodigoUfIbge), emitente.Endereco.UF); var identificacao = GetIdentificacao(notaFiscalModel, codigoUF, DateTime.Now, emitente, modeloNota, Convert.ToInt32(notaFiscalModel.Serie), notaFiscalModel.Numero, tipoEmissao, ambiente, documentoDanfe); var produtos = GetProdutos(notaFiscalModel, config); var pagamentos = GetPagamentos(notaFiscalModel); var totalNFe = GetTotalNFe(notaFiscalModel); var infoAdicional = new InfoAdicional(produtos); var transporte = GetTransporte(notaFiscalModel, modelo); notaFiscal = new Core.NotasFiscais.NotaFiscal(emitente, destinatario, identificacao, transporte, totalNFe, infoAdicional, produtos, pagamentos); var cscId = ambiente == Ambiente.Homologacao ? config.CscIdHom : config.CscId; var csc = ambiente == Ambiente.Homologacao ? config.CscHom : config.Csc; _enviaNotaFiscalService.EnviarNotaFiscal(notaFiscal, cscId, csc); }); NotaEnviadaEvent(notaFiscal); return(notaFiscal); }
public static Task GerarPdfNotaFiscal(Core.NotasFiscais.NotaFiscal notaFiscal) { return(Task.Run(() => { if (notaFiscal == null) { throw new ArgumentNullException(); } if (notaFiscal.Identificacao.Modelo == Modelo.Modelo55) { GerarPDFNfe(notaFiscal); } else { GerarPDFNfce(notaFiscal); } })); }
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(); }
public async Task ImprimirNotaFiscal(Core.NotasFiscais.NotaFiscal notaFiscal) { await GeradorPDF.GerarPdfNotaFiscal(notaFiscal); }
private async void EnviarNotaController_NotaEnviadaEventHandler(Core.NotasFiscais.NotaFiscal notaEnviada) { await PopularListaNotasFiscais(); await AtualizarNotasPendentes(); }
private static void GerarPDFNfce(Core.NotasFiscais.NotaFiscal notaFiscal) { Warning[] warnings; string[] streamIds; string mimeType = string.Empty; string encoding = string.Empty; string extension = string.Empty; Byte[] data; Bitmap qrCodeAsBitmap; string qrCodeUrl = GetQrCodeUrl(notaFiscal.QrCodeUrl); using (QRCodeGenerator qrGenerator = new QRCodeGenerator()) { Url generator = new Url(qrCodeUrl); string payload = generator.ToString(); QRCodeData qrCodeData = qrGenerator.CreateQrCode(payload, QRCodeGenerator.ECCLevel.Q); QRCode qrCode = new QRCode(qrCodeData); qrCodeAsBitmap = qrCode.GetGraphic(10); } using (var memoryStream = new MemoryStream()) { qrCodeAsBitmap.Save(memoryStream, ImageFormat.Bmp); data = memoryStream.ToArray(); } notaFiscal.Identificacao.QrCodeImage = data; SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); using (ReportViewer reportViewer = new ReportViewer()) { reportViewer.LocalReport.ReleaseSandboxAppDomain(); var emitente = notaFiscal.Emitente; var destinatario = notaFiscal.Destinatario ?? new Destinatario("CONSUMIDOR NÃO IDENTIFICADO"); var produtos = notaFiscal.Produtos.Select(produto => { return(new Produto() { Codigo = produto.Codigo, Descricao = produto.Descricao, Quantidade = produto.QtdeUnidadeComercial, ValorUnitario = produto.ValorUnidadeComercial, ValorTotal = produto.ValorTotal }); }).ToList(); var pagamentos = notaFiscal.Pagamentos.Select(pagamento => { return(new Pagamento() { Nome = pagamento.FormaPagamentoTexto, Valor = pagamento.Valor }); }).ToList(); var reportNFCeReadModel = new ReportNFCeReadModel { Chave = notaFiscal.Identificacao.ChaveMasked, Numero = notaFiscal.Identificacao.Numero, Serie = notaFiscal.Identificacao.Serie.ToString(), DataHoraEmissao = notaFiscal.Identificacao.DataHoraEmissao, Protocolo = notaFiscal.ProtocoloAutorizacao, DataHoraAutorizacao = notaFiscal.DhAutorizacao.Replace("-", "/"), InformacaoAdicional = notaFiscal.InfoAdicional.InfoAdicionalComplementar, LinkConsultaChave = notaFiscal.Identificacao.LinkConsultaChave, InformacaoInteresse = notaFiscal.Identificacao.MensagemInteresseContribuinte, QuantidadeTotalProdutos = notaFiscal.QtdTotalProdutos, ValorTotalProdutos = notaFiscal.ValorTotalProdutos, QrCodeImage = data, Emissor = new Model.Emissor() { CNPJ = emitente.CNPJ, Nome = emitente.Nome, Logradouro = emitente.Endereco.Logradouro, Numero = emitente.Endereco.Numero, Bairro = emitente.Endereco.Bairro, Municipio = emitente.Endereco.Municipio, UF = emitente.Endereco.UF, CEP = emitente.Endereco.Cep }, Destinatario = new Model.Destinatario() { Nome = destinatario.NomeRazao, Documento = destinatario.DocumentoDanfe, Logradouro = destinatario.Endereco != null ? destinatario.Endereco.Logradouro : null, Numero = destinatario.Endereco != null ? destinatario.Endereco.Numero : null, Bairro = destinatario.Endereco != null ? destinatario.Endereco.Bairro : null, Municipio = destinatario.Endereco != null ? destinatario.Endereco.Municipio : null, UF = destinatario.Endereco != null ? destinatario.Endereco.UF : null, CEP = destinatario.Endereco != null ? destinatario.Endereco.Cep : null }, Produtos = produtos, Pagamentos = pagamentos }; ReportDataSource dadosDataSource = new ReportDataSource() { Name = "Dados", Value = new List <ReportNFCeReadModel>() { reportNFCeReadModel } }; ReportDataSource produtosDataSource = new ReportDataSource() { Name = "Produtos", Value = reportNFCeReadModel.Produtos }; ReportDataSource pagamentosDataSource = new ReportDataSource() { Name = "Pagamentos", Value = reportNFCeReadModel.Pagamentos }; reportViewer.LocalReport.DataSources.Add(dadosDataSource); reportViewer.LocalReport.DataSources.Add(produtosDataSource); reportViewer.LocalReport.DataSources.Add(pagamentosDataSource); reportViewer.ProcessingMode = ProcessingMode.Local; reportViewer.LocalReport.ReportPath = Path.Combine(Directory.GetCurrentDirectory(), @"Reports\ReportNfce.rdlc"); #if DEBUG byte[] bytes = reportViewer.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings); string pathToPdf = Path.Combine(Path.GetTempPath(), "temppdf_" + notaFiscal.Identificacao.Chave + ".pdf"); File.WriteAllBytes(pathToPdf, bytes); Process.Start(pathToPdf); #else PrintDocument printDoc = new PrintDocument(); printDoc.PrinterSettings.PrinterName = @"EPSON TM-T20 Receipt"; printDoc.PrintPage += PrintPage; printDoc.EndPrint += EndPrint; _PrintingDPI.X = printDoc.DefaultPageSettings.PrinterResolution.X; _PrintingDPI.Y = printDoc.DefaultPageSettings.PrinterResolution.Y; var sb = new StringBuilder(); var xr = XmlWriter.Create(sb); xr.WriteStartElement("DeviceInfo"); xr.WriteElementString("OutputFormat", "EMF"); xr.WriteElementString("PrintDpiX", _PrintingDPI.X.ToString()); xr.WriteElementString("PrintDpiY", _PrintingDPI.Y.ToString()); xr.WriteElementString("PageWidth", "3.14961in"); xr.WriteElementString("MarginLeft", "0.118in"); xr.Close(); _PrintingStreams = new List <Stream>(); reportViewer.LocalReport.Render("Image", sb.ToString(), CreateStream, out warnings); foreach (var s in _PrintingStreams) { s.Position = 0; } printDoc.Print(); #endif } }
private static void GerarPDFNfe(Core.NotasFiscais.NotaFiscal notaFiscal) { Warning[] warnings; string[] streamIds; string mimeType = string.Empty; string encoding = string.Empty; string extension = string.Empty; if (notaFiscal.Identificacao.Ambiente == Ambiente.Homologacao) { notaFiscal.InfoAdicional.InfoAdicionalComplementar = "NF-E EMITIDA EM AMBIENTE DE HOMOLOGAÇÃO - SEM VALOR FISCAL"; } var destinatario = notaFiscal.Destinatario; #region QrCode var barcode = BarcodeDrawFactory.Code128WithChecksum; var barcodeImg = barcode.Draw(notaFiscal.Identificacao.Chave, 36); Byte[] data; using (var memoryStream = new MemoryStream()) { barcodeImg.Save(memoryStream, ImageFormat.Png); data = memoryStream.ToArray(); } #endregion QrCode SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); var produtos = notaFiscal.Produtos.Select(produto => new Model.ReportNFe.Produto() { Codigo = produto.Codigo, Descricao = produto.Descricao, Ncm = produto.Ncm, Cst = produto.CstTexto, Cfop = produto.CfopTexto, UnidadeComercial = produto.UnidadeComercial, Quantidade = produto.QtdeUnidadeComercial, ValorUnitario = produto.ValorUnidadeComercial, ValorDesconto = produto.ValorDesconto, ValorLiquido = produto.ValorTotal }).ToList(); using (var reportViewer = new ReportViewer()) { reportViewer.LocalReport.ReleaseSandboxAppDomain(); var emitente = notaFiscal.Emitente; var calculoImposto = notaFiscal.TotalNFe.IcmsTotal; var transportadora = notaFiscal.Transporte.Transportadora; var veiculo = notaFiscal.Transporte.Veiculo; var reportNfeReadModel = new ReportNFeReadModel() { Chave = notaFiscal.Identificacao.ChaveMasked, Numero = notaFiscal.Identificacao.Numero, Serie = notaFiscal.Identificacao.Serie.ToString(), DataHoraEmissao = notaFiscal.Identificacao.DataHoraEmissao, ProtocoloAutorizacao = notaFiscal.ProtocoloAutorizacao, DataHoraAutorizacao = notaFiscal.DhAutorizacao.Replace("-", "/"), DataSaida = notaFiscal.Identificacao.DataSaida, HoraSaida = notaFiscal.Identificacao.HoraSaida, InformacaoAdicional = notaFiscal.InfoAdicional.InfoAdicionalComplementar, LinkConsultaChave = notaFiscal.Identificacao.LinkConsultaChave, InformacaoInteresse = notaFiscal.Identificacao.MensagemInteresseContribuinte, QuantidadeTotalProdutos = notaFiscal.QtdTotalProdutos, ValorTotalProdutos = notaFiscal.ValorTotalProdutos, NaturezaOperacao = notaFiscal.Identificacao.NaturezaOperacao, TipoOperacao = notaFiscal.Identificacao.TipoOperacaooTexto, BarcodeImage = data, Emissor = new Model.ReportNFe.Emissor() { CNPJ = emitente.CNPJ, InscricaoEstadual = emitente.InscricaoEstadual, NomeRazao = emitente.Nome, NomeFantasia = emitente.NomeFantasia, Logradouro = emitente.Endereco.Logradouro, Numero = emitente.Endereco.Numero, Bairro = emitente.Endereco.Bairro, Municipio = emitente.Endereco.Municipio, UF = emitente.Endereco.UF, CEP = emitente.Endereco.Cep, Telefone = emitente.Telefone }, Destinatario = new Model.ReportNFe.Destinatario() { Nome = destinatario.NomeRazao, Documento = destinatario.Documento, InscricaoEstadual = destinatario.InscricaoEstadual, Logradouro = destinatario.Endereco?.Logradouro, Numero = destinatario.Endereco?.Numero, Bairro = destinatario.Endereco?.Bairro, Municipio = destinatario.Endereco?.Municipio, UF = destinatario.Endereco?.UF, CEP = destinatario.Endereco?.Cep, Telefone = destinatario.Telefone }, Produtos = produtos, CalculoImposto = new CalculoImposto() { BaseCalculo = calculoImposto.BaseCalculo, BaseCalculoST = calculoImposto.BaseCalculoST, ValorDespesasAcessorias = calculoImposto.ValorDespesasAcessorias, ValorTotalAproximado = calculoImposto.ValorTotalAproximadoTributos, ValorTotalCofins = calculoImposto.ValorTotalCofins, ValorTotalDesconto = calculoImposto.ValorTotalDesconto, ValorTotalDesonerado = calculoImposto.ValorTotalDesonerado, ValorTotalFrete = calculoImposto.ValorTotalFrete, ValorTotalII = calculoImposto.ValorTotalII, ValorTotalIcms = calculoImposto.ValorTotalIcms, ValorTotalIpi = calculoImposto.ValorTotalIpi, ValorTotalNFe = calculoImposto.ValorTotalNFe, ValorTotalPis = calculoImposto.ValorTotalPis, ValorTotalProdutos = calculoImposto.ValorTotalProdutos, ValorTotalST = calculoImposto.ValorTotalST, ValorTotalSeguro = calculoImposto.ValorTotalSeguro }, Transportadora = new Transportadora() { InscricaoEstadual = transportadora.InscricaoEstadual, CodigoANT = veiculo.RegistroAntt, CpfCnpj = transportadora.CpfCnpj, EnderecoCompleto = transportadora.EnderecoCompleto, Municipio = transportadora.Municipio, Nome = transportadora.Nome, UF = transportadora.SiglaUF, VeiculoPlaca = veiculo.Placa, VeiculoUF = veiculo.SiglaUF, ModalidadeFrete = "9 - Sem Frete" } }; var dadosDataSource = new ReportDataSource() { Name = "Dados", Value = new List <ReportNFeReadModel>() { reportNfeReadModel } }; var produtosDataSource = new ReportDataSource() { Name = "Produtos", Value = reportNfeReadModel.Produtos }; reportViewer.LocalReport.DataSources.Add(dadosDataSource); reportViewer.LocalReport.DataSources.Add(produtosDataSource); reportViewer.ProcessingMode = ProcessingMode.Local; reportViewer.LocalReport.ReportPath = Path.Combine(Directory.GetCurrentDirectory(), @"Reports\ReportNfe.rdlc"); byte[] bytes = reportViewer.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings); string pathToPdf = Path.Combine(Path.GetTempPath(), "temppdf_" + notaFiscal.Identificacao.Chave + ".pdf"); File.WriteAllBytes(pathToPdf, bytes); Process.Start(pathToPdf); } }
public static string ObterPdfEnvioNotaFiscalEmail(Core.NotasFiscais.NotaFiscal notaFiscal) { Warning[] warnings; string[] streamIds; string mimeType = string.Empty; string encoding = string.Empty; string extension = string.Empty; Byte[] data; Bitmap qrCodeAsBitmap; using (QRCodeGenerator qrGenerator = new QRCodeGenerator()) { Url generator = new Url(notaFiscal.QrCodeUrl); string payload = generator.ToString(); QRCodeData qrCodeData = qrGenerator.CreateQrCode(payload, QRCodeGenerator.ECCLevel.Q); QRCode qrCode = new QRCode(qrCodeData); qrCodeAsBitmap = qrCode.GetGraphic(10); } using (var memoryStream = new MemoryStream()) { qrCodeAsBitmap.Save(memoryStream, ImageFormat.Bmp); data = memoryStream.ToArray(); } notaFiscal.Identificacao.QrCodeImage = data; SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); using (ReportViewer reportViewer = new ReportViewer()) { reportViewer.LocalReport.ReleaseSandboxAppDomain(); var emitente = notaFiscal.Emitente; var destinatario = notaFiscal.Destinatario ?? new Destinatario("CONSUMIDOR NÃO IDENTIFICADO"); var produtos = notaFiscal.Produtos.Select(produto => { return(new Produto() { Codigo = produto.Codigo, Descricao = produto.Descricao, Quantidade = produto.QtdeUnidadeComercial, ValorUnitario = produto.ValorUnidadeComercial, ValorTotal = produto.ValorTotal }); }).ToList(); var pagamentos = notaFiscal.Pagamentos.Select(pagamento => { return(new Pagamento() { Nome = pagamento.FormaPagamentoTexto, Valor = pagamento.Valor }); }).ToList(); var reportNFCeReadModel = new ReportNFCeReadModel { Chave = notaFiscal.Identificacao.ChaveMasked, Numero = notaFiscal.Identificacao.Numero, Serie = notaFiscal.Identificacao.Serie.ToString(), DataHoraEmissao = notaFiscal.Identificacao.DataHoraEmissao, Protocolo = notaFiscal.ProtocoloAutorizacao, DataHoraAutorizacao = notaFiscal.DataHoraAutorização.ToString("dd/MM/yyyy HH:mm:ss").Replace("-", "/"), InformacaoAdicional = notaFiscal.InfoAdicional.InfoAdicionalComplementar, LinkConsultaChave = notaFiscal.Identificacao.LinkConsultaChave, InformacaoInteresse = notaFiscal.Identificacao.MensagemInteresseContribuinte, QuantidadeTotalProdutos = notaFiscal.QtdTotalProdutos, ValorTotalProdutos = notaFiscal.ValorTotalProdutos, QrCodeImage = data, Emissor = new Model.Emissor() { CNPJ = emitente.CNPJ, Nome = emitente.Nome, Logradouro = emitente.Endereco.Logradouro, Numero = emitente.Endereco.Numero, Bairro = emitente.Endereco.Bairro, Municipio = emitente.Endereco.Municipio, UF = emitente.Endereco.UF, CEP = emitente.Endereco.Cep }, Destinatario = new Model.Destinatario() { Nome = destinatario.NomeRazao, Documento = destinatario.DocumentoDanfe, Logradouro = destinatario.Endereco != null ? destinatario.Endereco.Logradouro : null, Numero = destinatario.Endereco != null ? destinatario.Endereco.Numero : null, Bairro = destinatario.Endereco != null ? destinatario.Endereco.Bairro : null, Municipio = destinatario.Endereco != null ? destinatario.Endereco.Municipio : null, UF = destinatario.Endereco != null ? destinatario.Endereco.UF : null, CEP = destinatario.Endereco != null ? destinatario.Endereco.Cep : null }, Produtos = produtos, Pagamentos = pagamentos }; ReportDataSource dadosDataSource = new ReportDataSource() { Name = "Dados", Value = new List <ReportNFCeReadModel>() { reportNFCeReadModel } }; ReportDataSource produtosDataSource = new ReportDataSource() { Name = "Produtos", Value = reportNFCeReadModel.Produtos }; ReportDataSource pagamentosDataSource = new ReportDataSource() { Name = "Pagamentos", Value = reportNFCeReadModel.Pagamentos }; reportViewer.LocalReport.DataSources.Add(dadosDataSource); reportViewer.LocalReport.DataSources.Add(produtosDataSource); reportViewer.LocalReport.DataSources.Add(pagamentosDataSource); reportViewer.ProcessingMode = ProcessingMode.Local; reportViewer.LocalReport.ReportPath = Path.Combine(Directory.GetCurrentDirectory(), @"Reports\ReportNfceEmail.rdlc"); byte[] bytes = reportViewer.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings); string pathToPdf = Path.Combine(Path.GetTempPath(), notaFiscal.Identificacao.Chave + ".pdf"); File.WriteAllBytes(pathToPdf, bytes); return(pathToPdf); } }