Documents: Replace Razor templates with iText
All checks were successful
Test / Run tests (push) Successful in 2m24s

This commit is contained in:
2026-03-16 15:09:47 +01:00
parent d8c967b2f2
commit 8054a024f4
61 changed files with 2291 additions and 2924 deletions

View File

@@ -1,5 +1,9 @@
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 {
@@ -7,16 +11,98 @@ namespace Elwig.Documents {
public new static string Name => "Abwertungsliste";
public string Filter;
public IEnumerable<DeliveryJournalRow> Deliveries;
public List<DeliveryJournalRow> Deliveries;
public DeliveryDepreciationList(string filter, IEnumerable<DeliveryJournalRow> deliveries) :
base($"{Name} {filter}") {
Filter = filter;
Deliveries = deliveries;
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;
}
}
}