using DevExpress.Xpo; using DigitalData.Core.Abstraction.Application.Repository; using EnvelopeGenerator.Domain.Entities; using EnvelopeGenerator.ServiceHost.Exceptions; namespace EnvelopeGenerator.ServiceHost.Jobs.FinalizeDocument; public class ReportCreator(IRepository reportRepo) { public async Task CreateReportAsync(Envelope 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(); } }