using System.Reflection; using FastReport; using FastReport.Export.PdfSimple; namespace Drab.Logic.Services; internal class OrderPdfGenerator(ILogger logger) : IOrderPdfGenerator { public Task GenerateOrder(DokDto order) { logger.LogInformation("Generate pdf document: {OrderNo}", 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.LogError(e, "Error on generating order document: {OrderNo}", order.NrDok); return Task.FromResult(string.Empty); } } }