using Elwig.Models.Dtos; using iText.Kernel.Pdf; using iText.Layout.Element; using iText.Layout.Properties; using System.Collections.Generic; using System.Linq; namespace Elwig.Documents { public class DeliveryJournal : Document { public new static string Name => "Lieferjournal"; public string Filter; public List Deliveries; public DeliveryJournal(string filter, IEnumerable deliveries) : base($"{Name} {filter}") { Filter = filter; Deliveries = [.. deliveries]; } public DeliveryJournal(string filter, DeliveryJournalData data) : this(filter, data.Rows) { } protected override void RenderBody(iText.Layout.Document doc, PdfDocument pdf) { base.RenderBody(doc, pdf); doc.Add(new KernedParagraph(Name, 24) .SetTextAlignment(TextAlignment.CENTER).SetFont(BF) .SetMarginsMM(0, 0, 2, 0)); doc.Add(new KernedParagraph(Filter, 14) .SetTextAlignment(TextAlignment.CENTER).SetFont(BF) .SetMarginsMM(0, 0, 5, 0)); doc.Add(NewJournalTable(Deliveries)); } protected Table NewJournalTable(List deliveries) { var tbl = new Table(ColsMM(25, 6, 15, 8, 11, 38, 28, 10, 10, 14), true) .SetWidth(UnitValue.CreatePercentValue(100)).SetFixedLayout() .SetBorderCollapse(BorderCollapsePropertyValue.COLLAPSE); tbl.AddHeaderCell(NewTh("Lieferschein-Nr.", rowspan: 2, left: true)) .AddHeaderCell(NewTh("Pos.", rowspan: 2).SetPaddingRight(0)) .AddHeaderCell(NewTh("Datum", rowspan: 2)) .AddHeaderCell(NewTh("Zeit", rowspan: 2)) .AddHeaderCell(NewTh("MgNr.", rowspan: 2)) .AddHeaderCell(NewTh("Mitglied", rowspan: 2, left: true)) .AddHeaderCell(NewTh("Sorte", rowspan: 2, left: true)) .AddHeaderCell(NewTh("Gradation", colspan: 2)) .AddHeaderCell(NewTh("Menge")) .AddHeaderCell(NewTh("[°Oe]")) .AddHeaderCell(NewTh("[°KMW]").SetPaddingLeft(0).SetPaddingRight(0)) .AddHeaderCell(NewTh("[kg]")); foreach (var p in deliveries) { tbl.AddCell(NewTd(p.LsNr)) .AddCell(NewTd($"{p.Pos:N0}", center: true).SetPaddingLeft(0).SetPaddingRight(0)) .AddCell(NewTd($"{p.Date:dd.MM.yyyy}", 8, center: true)) .AddCell(NewTd($"{p.Time:HH:mm}", 8, center: true).SetPadding(0)) .AddCell(NewTd($"{p.MgNr}", right: true)) .AddCell(NewTd(p.AdministrativeName, 8)) .AddCell(NewTd(p.Variety, 8)) .AddCell(NewTd($"{p.Oe:N0}", center: true)) .AddCell(NewTd($"{p.Kmw:N1}", center: true).SetPaddingLeft(0).SetPaddingRight(0)) .AddCell(NewTd($"{p.Weight:N0}", right: true)); } var branches = deliveries.Select(d => d.DeliveryBranch).Distinct().Order().ToArray(); if (branches.Length > 1) { foreach (var b in branches) { var border = branches[0] == b; var branchDeliveries = deliveries.Where(d => d.DeliveryBranch == b).ToList(); var branchKmw = Helpers.Utils.AggregateDeliveryPartsKmw(branchDeliveries); var branchOe = Helpers.Utils.KmwToOe(branchKmw); tbl.AddCell(NewTd($"{b}:", colspan: 2, bold: true, borderTop: border)) .AddCell(NewTd($"(Teil-)Lieferungen: {branchDeliveries.DistinctBy(p => p.LsNr).Count():N0} ({branchDeliveries.Count:N0})", colspan: 5, bold: true, borderTop: border)) .AddCell(NewTd($"{branchOe:N0}", center: true, bold: true, borderTop: border)) .AddCell(NewTd($"{branchOe:N1}", center: true, bold: true, borderTop: border)) .AddCell(NewTd($"{branchDeliveries.Sum(p => p.Weight):N0}", right: true, bold: true, borderTop: border)); } } var kmw = Helpers.Utils.AggregateDeliveryPartsKmw(deliveries); var oe = Helpers.Utils.KmwToOe(kmw); tbl.AddCell(NewTd("Gesamt:", colspan: 2, bold: true, borderTop: true)) .AddCell(NewTd($"(Teil-)Lieferungen: {deliveries.DistinctBy(p => p.LsNr).Count():N0} ({deliveries.Count:N0})", colspan: 5, bold: true, borderTop: true)) .AddCell(NewTd($"{oe:N0}", center: true, bold: true, borderTop: true)) .AddCell(NewTd($"{kmw:N1}", center: true, bold: true, borderTop: true)) .AddCell(NewTd($"{deliveries.Sum(p => p.Weight):N0}", right: true, bold: true, borderTop: true)); return tbl; } } }