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 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 GetReportSource(DataTable dataTable) { Logger.LogDebug("Preparing report data"); return dataTable.Rows .Cast() .Select(ToReportItem) .OrderByDescending(r => r.ItemDate) .ToList(); } private byte[] DoCreateReport(List 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); } } }