DRAB/Drab.Logic/Services/OrderPdfGenerator.cs
2025-07-11 00:18:14 +02:00

51 lines
1.7 KiB
C#

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<string> 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<AssemblyInformationalVersionAttribute>().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);
}
}
}