Moved mapping logic from ReportCreator.ToReportItem to a new constructor in ReportItem, improving encapsulation and simplifying report generation. Updated usings to remove unused and add necessary dependencies.
29 lines
1.1 KiB
C#
29 lines
1.1 KiB
C#
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<EnvelopeReport> reportRepo)
|
|
{
|
|
public async Task<byte[]> 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();
|
|
}
|
|
} |