Refactored ReportCreator to use constructor injection for dependencies and removed BaseClass inheritance. Marked legacy methods and fields as [Obsolete] to indicate migration to mediator queries. Improved logging by switching to Logger.LogError and updating string interpolation. Removed unused usings and added MergeEnvelope method (also obsolete). These changes modernize the class and highlight areas for further architectural improvement.
102 lines
3.2 KiB
C#
102 lines
3.2 KiB
C#
using System.Data;
|
|
using EnvelopeGenerator.Domain.Constants;
|
|
using EnvelopeGenerator.Domain.Entities;
|
|
using EnvelopeGenerator.ServiceHost.Exceptions;
|
|
using EnvelopeGenerator.ServiceHost.Extensions;
|
|
|
|
namespace EnvelopeGenerator.ServiceHost.Jobs.FinalizeDocument;
|
|
|
|
[Obsolete("Instead of ReportModel create and use EnvelopeReport mediator queries")]
|
|
public class ReportCreator(ReportModel ReportModel, ILogger<ReportCreator> Logger)
|
|
{
|
|
[Obsolete("Solve the spaghetti...")]
|
|
private Envelope? _envelope;
|
|
|
|
[Obsolete("Instead of ReportModel create and use EnvelopeReport mediator queries and solve this spaghetti...")]
|
|
public byte[] CreateReport(Envelope envelope)
|
|
{
|
|
try
|
|
{
|
|
Logger.LogDebug("Loading report data..");
|
|
var table = ReportModel.List(envelope.Id);
|
|
var items = GetReportSource(table);
|
|
|
|
_envelope = envelope;
|
|
|
|
if (items.Count == 0)
|
|
{
|
|
throw new CreateReportException("No report data found!");
|
|
}
|
|
|
|
Logger.LogDebug("Creating report with [{count}] items..", items.Count);
|
|
var buffer = DoCreateReport(items);
|
|
Logger.LogDebug("Report created!");
|
|
|
|
return buffer;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger.LogError(ex);
|
|
throw new CreateReportException("Could not prepare report data!", ex);
|
|
}
|
|
}
|
|
|
|
private List<ReportItem> GetReportSource(DataTable dataTable)
|
|
{
|
|
Logger.LogDebug("Preparing report data");
|
|
return dataTable.Rows
|
|
.Cast<DataRow>()
|
|
.Select(ToReportItem)
|
|
.OrderByDescending(r => r.ItemDate)
|
|
.ToList();
|
|
}
|
|
|
|
private byte[] DoCreateReport(List<ReportItem> reportItems)
|
|
{
|
|
var items = reportItems.Select(MergeEnvelope).ToList();
|
|
var source = new ReportSource { Items = items };
|
|
var report = new rptEnvelopeHistory { DataSource = source, DataMember = "Items" };
|
|
|
|
Logger.LogDebug("Creating report in memory..");
|
|
report.CreateDocument();
|
|
|
|
Logger.LogDebug("Exporting report to stream..");
|
|
using var stream = new MemoryStream();
|
|
report.ExportToPdf(stream);
|
|
|
|
Logger.LogDebug("Writing report to buffer..");
|
|
return stream.ToArray();
|
|
}
|
|
|
|
[Obsolete("Solve this spaghetti...")]
|
|
private ReportItem MergeEnvelope(ReportItem item)
|
|
{
|
|
if (item.Envelope is null)
|
|
{
|
|
item.Envelope = _envelope;
|
|
}
|
|
|
|
return item;
|
|
}
|
|
|
|
private ReportItem ToReportItem(DataRow row)
|
|
{
|
|
try
|
|
{
|
|
return new ReportItem
|
|
{
|
|
EnvelopeId = row.ItemEx("ENVELOPE_ID", 0),
|
|
EnvelopeTitle = row.ItemEx("HEAD_TITLE", string.Empty),
|
|
EnvelopeSubject = row.ItemEx("HEAD_SUBJECT", string.Empty),
|
|
ItemDate = row.ItemEx("POS_WHEN", DateTime.MinValue),
|
|
ItemStatus = (EnvelopeStatus)row.ItemEx("POS_STATUS", 0),
|
|
ItemUserReference = row.ItemEx("POS_WHO", string.Empty)
|
|
};
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger.LogError(ex);
|
|
throw new CreateReportException("Could not read data from database!", ex);
|
|
}
|
|
}
|
|
} |