feat(FinalizeDocument): aus CommonJobs kopiert, mit einfachen Fehlerbehebungen unter Verwendung von Copilot
- Programmiersprache von VSC zu C# geändert - Framework von .NET Framework zu .NET geändert
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
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.Debug("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.Debug("Creating report with [{0}] items..", items.Count);
|
||||
var buffer = DoCreateReport(items);
|
||||
Logger.Debug("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.Debug("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.Debug("Creating report in memory..");
|
||||
report.CreateDocument();
|
||||
|
||||
Logger.Debug("Exporting report to stream..");
|
||||
using var stream = new MemoryStream();
|
||||
report.ExportToPdf(stream);
|
||||
|
||||
Logger.Debug("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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user