Renamed the Logger.Debug method to Logger.LogDebug for improved clarity and consistency. Updated all usages in PDFBurner, ReportCreator, FinalizeDocumentJob, TempFiles, and Logging.cs. No changes to logging logic or other log levels.
108 lines
3.1 KiB
C#
108 lines
3.1 KiB
C#
using System.Data;
|
|
using System.IO;
|
|
using DigitalData.Modules.Base;
|
|
using DigitalData.Modules.Logging;
|
|
using EnvelopeGenerator.Domain.Constants;
|
|
using EnvelopeGenerator.Domain.Entities;
|
|
using EnvelopeGenerator.ServiceHost.Exceptions;
|
|
using EnvelopeGenerator.ServiceHost.Jobs;
|
|
|
|
namespace EnvelopeGenerator.ServiceHost.Jobs.FinalizeDocument;
|
|
|
|
public class ReportCreator : BaseClass
|
|
{
|
|
private Envelope? _envelope;
|
|
private readonly ReportModel _reportModel;
|
|
|
|
public ReportCreator(LogConfig logConfig, State state) : base(logConfig)
|
|
{
|
|
_reportModel = new ReportModel(state);
|
|
}
|
|
|
|
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 [{0}] items..", items.Count);
|
|
var buffer = DoCreateReport(items);
|
|
Logger.LogDebug("Report created!");
|
|
|
|
return buffer;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger.Error(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();
|
|
}
|
|
|
|
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.Error(ex);
|
|
throw new CreateReportException("Could not read data from database!", ex);
|
|
}
|
|
}
|
|
}
|