[#23] DeliveryConfirmation: Add Sortenaufteilung table
This commit is contained in:
@ -35,8 +35,49 @@ namespace Elwig.Documents {
|
||||
}
|
||||
}
|
||||
|
||||
public string PrintSortenaufteilung(int year, Dictionary<string, MemberBucket> buckets) {
|
||||
return "";
|
||||
private static string GetColGroup(IEnumerable<double> cols) {
|
||||
return "<colgroup>\n" + string.Join("\n", cols.Select(g => $"<col style=\"width: {g}mm;\"/>")) + "\n</colgroup>\n";
|
||||
}
|
||||
|
||||
public static string PrintSortenaufteilung(Dictionary<string, MemberBucket> buckets) {
|
||||
List<string> attributes = ["_", ""];
|
||||
List<string> names = ["kein Qual.Wein", "ohne Attribut"];
|
||||
List<(string, string)> bucketAttrs = [
|
||||
.. buckets
|
||||
.Where(b => b.Key.Length > 2 && b.Key[2] != '_' && b.Value.DeliveryStrict > 0)
|
||||
.Select(b => (b.Key[2..], b.Value.Name.Split("(")[1][..^1]))
|
||||
.Distinct()
|
||||
.OrderBy(v => v.Item1)
|
||||
];
|
||||
names.AddRange(bucketAttrs.Select(b => b.Item2));
|
||||
names.Add("Gesamt");
|
||||
attributes.AddRange(bucketAttrs.Select(b => b.Item1));
|
||||
|
||||
List<double> cols = [40];
|
||||
cols.AddRange(names.Select(_ => 125.0 / names.Count));
|
||||
string tbl = GetColGroup(cols);
|
||||
tbl += "<thead><tr>" +
|
||||
$"<th><b>Sortenaufteilung</b> [kg]</th>" +
|
||||
string.Join("", names.Select(c => $"<th>{c}</th>")) +
|
||||
"</tr></thead>";
|
||||
|
||||
tbl += string.Join("\n", buckets
|
||||
.GroupBy(b => (b.Key[..2], b.Value.Name.Split("(")[0].Trim()))
|
||||
.Where(g => g.Sum(a => a.Value.DeliveryStrict) > 0)
|
||||
.OrderBy(g => g.Key.Item1)
|
||||
.Select(g => {
|
||||
var dict = g.ToDictionary(a => a.Key[2..], a => a.Value);
|
||||
var vals = attributes.Select(a => dict.TryGetValue(a, out MemberBucket value) ? value.DeliveryStrict : 0).ToList();
|
||||
return $"<tr><th>{g.Key.Item2}</th>" + string.Join("", vals.Select(v => "<td class=\"number\">" + (v == 0 ? "-" : $"{v:N0}") + "</td>")) +
|
||||
$"<td class=\"number\">{dict.Values.Select(v => v.DeliveryStrict).Sum():N0}</td></tr>";
|
||||
})
|
||||
);
|
||||
var totalDict = buckets.GroupBy(b => b.Key[2..]).ToDictionary(g => g.Key, g => g.Sum(a => a.Value.DeliveryStrict));
|
||||
var totals = attributes.Select(a => totalDict.TryGetValue(a, out int value) ? value : 0);
|
||||
tbl += "<tr class=\"sum\"><td></td>" + string.Join("", totals.Select(v => $"<td class=\"number\">{v:N0}</td>")) +
|
||||
$"<td class=\"number\">{totalDict.Values.Sum():N0}</td></tr>";
|
||||
|
||||
return "<table class=\"small number cohere\">" + tbl + "</table>";
|
||||
}
|
||||
|
||||
private static string FormatRow(int obligation, int right, int delivery, int? payment = null, bool isGa = false, bool showPayment = false) {
|
||||
@ -56,8 +97,7 @@ namespace Elwig.Documents {
|
||||
}
|
||||
|
||||
public string PrintBucketTable(Season season, Dictionary<string, MemberBucket> buckets, bool includePayment = false, bool isTiny = false, IEnumerable<string>? filter = null) {
|
||||
int[] colGroups = includePayment ? [45, 17, 17, 17, 19, 16, 17, 17] : [45, 20, 20, 20, 20, 20, 20];
|
||||
string tbl = "<colgroup>\n" + string.Join("\n", colGroups.Select(g => $"<col style=\"width: {g}mm;\"/>")) + "\n</colgroup>\n";
|
||||
string tbl = GetColGroup(includePayment ? [45, 17, 17, 17, 19, 16, 17, 17] : [45, 20, 20, 20, 20, 20, 20]);
|
||||
tbl += $"""
|
||||
<thead>
|
||||
<tr>
|
||||
|
Reference in New Issue
Block a user