112 lines
5.1 KiB
C#
112 lines
5.1 KiB
C#
using Elwig.Models.Dtos;
|
|
using iText.Kernel.Colors;
|
|
using iText.Kernel.Pdf;
|
|
using iText.Layout.Borders;
|
|
using iText.Layout.Element;
|
|
using iText.Layout.Properties;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace Elwig.Documents {
|
|
public class MemberList : Document {
|
|
|
|
public new static string Name => "Mitgliederliste";
|
|
|
|
public string Filter;
|
|
public List<MemberListRow> Members;
|
|
|
|
public string[] AreaComFilters;
|
|
public bool FilterAreaComs => AreaComFilters.Length > 0;
|
|
|
|
public MemberList(string filter, IEnumerable<MemberListRow> members) :
|
|
base(Name) {
|
|
Filter = filter;
|
|
Members = [.. members];
|
|
AreaComFilters = [..members
|
|
.SelectMany(m => m.AreaCommitmentsFiltered)
|
|
.Select(c => c.VtrgId)
|
|
.Distinct()
|
|
.Order()];
|
|
}
|
|
|
|
public MemberList(string filter, MemberListData 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, 2, 0));
|
|
doc.Add(NewMemberTable(Members));
|
|
}
|
|
|
|
protected Table NewMemberTable(List<MemberListRow> members) {
|
|
var tbl = new Table(AreaComFilters.Length > 1 ? ColsMM(8, 38, 36, 8, 18, 12, 5, 16, 12, 12) : ColsMM(8, 42, 40, 8, 20, 12, 5, 18, 12), true)
|
|
.SetWidth(UnitValue.CreatePercentValue(100)).SetFixedLayout()
|
|
.SetBorderCollapse(BorderCollapsePropertyValue.COLLAPSE);
|
|
|
|
var headerSpan = FilterAreaComs ? 3 : 2;
|
|
tbl.AddHeaderCell(NewTh("Nr.", rowspan: headerSpan))
|
|
.AddHeaderCell(NewTh("Name", rowspan: headerSpan, left: true))
|
|
.AddHeaderCell(NewTh("Adresse", rowspan: headerSpan, left: true))
|
|
.AddHeaderCell(NewTh("PLZ", rowspan: headerSpan))
|
|
.AddHeaderCell(NewTh("Ort", rowspan: headerSpan, left: true))
|
|
.AddHeaderCell(NewTh("Betr.-Nr.", rowspan: headerSpan))
|
|
.AddHeaderCell(NewTh("GA", rowspan: headerSpan).SetPaddingLeft(0).SetPaddingRight(0))
|
|
.AddHeaderCell(NewTh("Stamm-KG", rowspan: headerSpan, left: true))
|
|
.AddHeaderCell(NewTh("Geb. Fl.", colspan: FilterAreaComs ? AreaComFilters.Length : 1));
|
|
if (FilterAreaComs) {
|
|
foreach (var vtrgId in AreaComFilters) {
|
|
tbl.AddHeaderCell(NewTh(vtrgId));
|
|
}
|
|
}
|
|
for (int i = 0; i < (FilterAreaComs ? AreaComFilters.Length : 1); i++) {
|
|
tbl.AddHeaderCell(NewTh("[m²]"));
|
|
}
|
|
|
|
string? lastBranch = members.Select(m => m.Branch).Distinct().Count() == 1 ? null : "";
|
|
foreach (var m in members) {
|
|
if (lastBranch != null && m.Branch != lastBranch) {
|
|
tbl.AddCell(NewCell(colspan: 8 + Math.Max(AreaComFilters.Length, 1)).SetHeightMM(5).SetKeepWithNext(true));
|
|
tbl.AddCell(NewCell(new KernedParagraph(m.Branch ?? "", 16).SetFont(BF), colspan: 8 + Math.Max(AreaComFilters.Length, 1))
|
|
.SetPaddingsMM(1, 2, 1, 2)
|
|
.SetBorder(new SolidBorder(BorderThickness))
|
|
.SetBackgroundColor(new DeviceRgb(0xe0, 0xe0, 0xe0)));
|
|
lastBranch = m.Branch;
|
|
}
|
|
|
|
tbl.AddCell(NewTd($"{m.MgNr}", 8, rowspan: m.BillingName != null ? 2 : 1, right: true).SetVerticalAlignment(VerticalAlignment.TOP))
|
|
.AddCell(NewTd($"{m.AdminName1} {m.Name2}", 8))
|
|
.AddCell(NewTd(m.Address, 8))
|
|
.AddCell(NewTd($"{m.Plz}", 8))
|
|
.AddCell(NewTd(m.Locality, 6))
|
|
.AddCell(NewTd(m.LfbisNr ?? "", 8))
|
|
.AddCell(NewTd($"{m.BusinessShares:N0}", 8, right: true).SetPaddingLeft(0).SetPaddingRight(0))
|
|
.AddCell(NewTd(m.DefaultKg ?? "", 6));
|
|
if (AreaComFilters.Length > 0) {
|
|
foreach (var v in AreaComFilters) {
|
|
tbl.AddCell(NewTd($"{m.AreaCommitmentsFiltered.FirstOrDefault(c => c.VtrgId == v).Area:N0}", 8, right: true));
|
|
}
|
|
} else {
|
|
tbl.AddCell(NewTd($"{m.AreaCommitment:N0}", 8, right: true));
|
|
}
|
|
|
|
if (m.BillingName != null) {
|
|
tbl.AddCell(NewTd(m.BillingName, 8))
|
|
.AddCell(NewTd(m.BillingAddress ?? "", 8))
|
|
.AddCell(NewTd($"{m.BillingPlz}", 8))
|
|
.AddCell(NewTd(m.BillingLocality ?? "", 6))
|
|
.AddCell(NewTd(colspan: 3 + Math.Max(AreaComFilters.Length, 1)));
|
|
}
|
|
}
|
|
|
|
return tbl;
|
|
}
|
|
}
|
|
}
|