95 lines
4.8 KiB
C#
95 lines
4.8 KiB
C#
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<DeliveryJournalRow> Deliveries;
|
|
|
|
public DeliveryJournal(string filter, IEnumerable<DeliveryJournalRow> 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<DeliveryJournalRow> 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;
|
|
}
|
|
}
|
|
}
|