Files
EnvelopeGenerator/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocument/ReportCreator.cs
TekH 4caf8cd192 Refactor to use EnvelopeDto in report generation
Updated ReportCreator and ReportItem to accept EnvelopeDto
instead of Envelope, promoting better separation of concerns
and improved data handling via DTOs.
2026-04-01 15:32:09 +02:00

30 lines
1.1 KiB
C#

using DevExpress.Xpo;
using DigitalData.Core.Abstraction.Application.Repository;
using EnvelopeGenerator.Application.Common.Dto;
using EnvelopeGenerator.Domain.Entities;
using EnvelopeGenerator.ServiceHost.Exceptions;
namespace EnvelopeGenerator.ServiceHost.Jobs.FinalizeDocument;
public class ReportCreator(IRepository<EnvelopeReport> reportRepo)
{
public async Task<byte[]> CreateReportAsync(EnvelopeDto envelope, CancellationToken cancel = default)
{
var reports = await reportRepo.Where(r => r.EnvelopeId == envelope.Id).ToListAsync(cancel);
if (reports.Count == 0)
throw new CreateReportException("Could not prepare report data! No report data found!");
var items = reports
.Select(r => new ReportItem(r, envelope))
.OrderByDescending(r => r.ItemDate)
.ToList();
var source = new ReportSource { Items = items };
var report = new rptEnvelopeHistory { DataSource = source, DataMember = "Items" };
report.CreateDocument();
using var stream = new MemoryStream();
report.ExportToPdf(stream);
return stream.ToArray();
}
}