109 lines
5.9 KiB
C#
109 lines
5.9 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 DeliveryDepreciationList : Document {
|
|
|
|
public new static string Name => "Abwertungsliste";
|
|
|
|
public string Filter;
|
|
public List<DeliveryJournalRow> Deliveries;
|
|
|
|
public DeliveryDepreciationList(string filter, IEnumerable<DeliveryJournalRow> deliveries) :
|
|
base($"{Name} {filter}") {
|
|
Filter = filter;
|
|
Deliveries = [.. deliveries];
|
|
}
|
|
|
|
public DeliveryDepreciationList(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, 20, 12, 38, 18, 12, 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("Sorte", rowspan: 2, left: true))
|
|
.AddHeaderCell(NewTh("Attr./Bewirt.", rowspan: 2, colspan: 2, left: true))
|
|
.AddHeaderCell(NewTh("Gradation", colspan: 2))
|
|
.AddHeaderCell(NewTh("Menge"))
|
|
.AddHeaderCell(NewTh("[°Oe]"))
|
|
.AddHeaderCell(NewTh("[°KMW]").SetPaddingLeft(0).SetPaddingRight(0))
|
|
.AddHeaderCell(NewTh("[kg]"));
|
|
|
|
int? lastMember = null;
|
|
foreach (var p in deliveries) {
|
|
if (lastMember != p.MgNr) {
|
|
var border = lastMember != null;
|
|
var memberDeliveries = deliveries.Where(d => d.MgNr == p.MgNr).ToList();
|
|
var memberKmw = Helpers.Utils.AggregateDeliveryPartsKmw(memberDeliveries);
|
|
var memberOe = Helpers.Utils.KmwToOe(memberKmw);
|
|
tbl.AddCell(NewTd($"{p.MgNr}, {p.AdministrativeName}", colspan: 5, borderTop: border)
|
|
.SetFont(BI))
|
|
.AddCell(NewTd("Teil-Lfrg.:", borderTop: border, bold: true))
|
|
.AddCell(NewTd($"{memberDeliveries.Count:N0}", right: true, borderTop: border, bold: true))
|
|
.AddCell(NewTd($"{memberOe:N0}", center: true, borderTop: border, bold: true))
|
|
.AddCell(NewTd($"{memberKmw:N1}", center: true, borderTop: border, bold: true))
|
|
.AddCell(NewTd($"{memberDeliveries.Sum(p => p.Weight):N0}", right: true, borderTop: border, bold: true));
|
|
}
|
|
|
|
tbl.AddCell(NewTd(p.LsNr))
|
|
.AddCell(NewTd($"{p.Pos:N0}", center: true).SetPaddingLeft(0).SetPaddingRight(0))
|
|
.AddCell(NewTd($"{p.Date:dd.MM.yyyy}", center: true))
|
|
.AddCell(NewTd($"{p.Time:HH:mm}", center: true).SetPadding(0))
|
|
.AddCell(NewTd(p.Variety))
|
|
.AddCell(NewTd($"{p.Attribute}{(p.Attribute != null && p.Cultivation != null ? " / " : "")}{p.Cultivation}", colspan: 2))
|
|
.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));
|
|
lastMember = p.MgNr;
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|