using Drab.Logic.Dtos; using Drab.Logic.Interfaces; using FastReport; using FastReport.Export.PdfSimple; using NLog; using System; using System.IO; using System.Reflection; using System.Threading.Tasks; namespace Drab.Logic.Services; internal class OrderPdfGenerator : IOrderPdfGenerator { private readonly ILogger _logger; public OrderPdfGenerator() { _logger = LogManager.GetCurrentClassLogger(); } public Task GenerateOrder(DokDto order) { _logger.Info($"Generate pdf document: {order.NrDok}"); var cleanFilename = order.NrDok.Replace('/', '-'); var orderFilename = $"Zam_{cleanFilename}_{order.Data:yyyy-MM-dd}_{order.Sklep}_{order.DokId}.pdf"; var templatePath = Path.Combine(Constants.ReportsTemplatesPath, "Order.frx"); var outputFile = Path.Combine(Constants.ReportsOutputPath, orderFilename); var version = Assembly.GetEntryAssembly().GetCustomAttribute().InformationalVersion; var generatedAt = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss}"; var data = new[] { order }; try { var report = new Report(); report.Load(templatePath); report.SetParameterValue("generatedAt", generatedAt); report.SetParameterValue("version", version); report.RegisterData(data, "Order"); report.Prepare(); var pdfExport = new PDFSimpleExport(); pdfExport.Export(report, outputFile); return Task.FromResult(orderFilename); } catch (Exception e) { _logger.Error(e, "Error on generating order document: {OrderNo}", order.NrDok); return Task.FromResult(string.Empty); } } }