- Programmiersprache von VSC zu C# geändert - Framework von .NET Framework zu .NET geändert
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.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);
|
|
}
|
|
}
|
|
}
|