@using RazorLight @inherits TemplatePage<Elwig.Documents.DeliveryConfirmation> @model Elwig.Documents.DeliveryConfirmation @{ Layout = "BusinessDocument"; } <link rel="stylesheet" href="file:///@Raw(Model.DataPath)\resources\style-deliveryconfirmation.css"/> <main> <h1>@Model.Title</h1> <table class="delivery-confirmation"> <colgroup> <col style="width: 25mm;"/> <col style="width: 5mm;"/> <col style="width: 20mm;"/> <col style="width: 21mm;"/> <col style="width: 19mm;"/> <col style="width: 10mm;"/> <col style="width: 10mm;"/> <col style="width: 15mm;"/> <col style="width: 12mm;"/> <col style="width: 14mm;"/> <col style="width: 14mm;"/> </colgroup> <thead> <tr> <th rowspan="2" style="text-align: left;">Lieferschein-Nr.</th> <th rowspan="2">Pos.</th> <th rowspan="2" style="text-align: left;">Sorte</th> <th rowspan="2" style="text-align: left;">Attribut(e)</th> <th rowspan="2" style="text-align: left;">Qualitätsstufe</th> <th colspan="2">Gradation</th> <th colspan="2">Flächenbindung</th> <th>Gewicht</th> <th>Davon<br/>abzuwerten</th> </tr> <tr> <th>[°Oe]</th> <th>[°KMW]</th> <th colspan="2">[kg]</th> <th>[kg]</th> <th>[kg]</th> </tr> </thead> <tbody> @{ var lastSortId = ""; } @foreach (var p in Model.Deliveries) { var bins = p.Bins.Where(b => b.Value > 0).OrderByDescending(b => b.BinNr).ToArray(); var rowsBins = bins.Length; var mods = p.Modifiers.Select(m => m.Name).ToArray(); var rowsMod = mods.Length + 1; var rows = Math.Max(rowsBins, rowsMod); var first = true; @for (int i = 0; i < rows; i++) { <tr class="@(first ? "first" : "") @(p.SortId != lastSortId && lastSortId != "" ? "new": "") @(rows > i + 1 ? "trailing" : "")"> @if (first) { <td rowspan="@rows">@p.Delivery.LsNr</td> <td rowspan="@rows">@p.DPNr</td> <td class="small">@p.Variant.Name</td> <td class="small">@p.AttributesString</td> <td class="small">@p.Quality.Name</td> <td rowspan="@rows" class="grad">@($"{p.Oe:N0}")</td> <td rowspan="@rows" class="grad">@($"{p.Kmw:N1}")</td> } @if (i > 0 && i <= mods.Length) { <td colspan="3" class="mod">@(mods[i - 1])</td> } else if (i > 0) { <td colspan="3"></td> } @if (i < bins.Length) { var bin = bins[i]; <td class="geb">@(bin.Discr == "_" ? "ungeb." : $"geb. {p.SortId}{bin.Discr}"):</td> <td class="weight">@($"{bin.Value:N0}")</td> } else { <td colspan="2"></td> } @if (i == bins.Length - 1) { <td class="weight">@($"{p.Weight:N0}")</td> } else { <td></td> } @if (first) { <td rowspan="@rows" class="weight"></td> first = false; } </tr> lastSortId = p.SortId; } } <tr class="sum"> <td colspan="8">Gesamt:</td> <td colspan="2" class="weight">@($"{Model.Deliveries.Sum(p => p.Weight):N0}")</td> <td></td> </tr> </tbody> </table> <table class="delivery-confirmation-stats"> <colgroup> <col style="width: 45mm;"/> <col style="width: 17mm;"/> <col style="width: 17mm;"/> <col style="width: 17mm;"/> <col style="width: 19mm;"/> <col style="width: 16mm;"/> <col style="width: 17mm;"/> <col style="width: 17mm;"/> </colgroup> <thead> <tr> <th><b>Lese @Model.Year</b> per @($"{Model.Date:dd.MM.yyyy}") [kg]</th> <th>Lieferpflicht</th> <th>Lieferrecht</th> <th>Unterliefert</th> <th>Noch lieferbar</th> <th>Überliefert</th> <th>Zugeteilt</th> <th>Geliefert</th> </tr> </thead> <tbody> @{ string FormatRow(int mode, int obligation, int right, int sum, int? payment = null) { var isGa = mode == 0; payment ??= sum; return $"<td>{(mode == 1 ? "" : obligation == 0 ? "-" : $"{obligation:N0}")}</td>" + $"<td>{(mode == 1 ? "" : right == 0 ? "-" : $"{right:N0}")}</td>" + $"<td>{(mode == 1 ? "" : payment < obligation ? $"<b>{obligation - payment:N0}\x3c/b>" : "-")}</td>" + $"<td>{(mode == 1 ? "" : payment >= obligation && sum <= right ? $"{right - sum:N0}" : "-")}</td>" + $"<td>{(mode == 1 ? "" : obligation == 0 && right == 0 ? "-" : (sum > right ? ((isGa ? "<b>" : "") + $"{sum - right:N0}" + (isGa ? "</b>" : "")) : "-"))}</td>" + $"<td>{(mode != 2 ? "" : obligation == 0 && right == 0 ? "-" : $"{payment:N0}")}</td>" + $"<td>{sum:N0}</td>"; } var mBins = Model.MemberBins.Where(b => b.Value.Item2 > 0 || b.Value.Item3 > 0 || b.Value.Item4 > 0).ToList(); var fbVars = mBins.Where(b => b.Value.Item2 > 0 || b.Value.Item3 > 0).Select(b => b.Key.Replace("_", "")).Order().ToArray(); var fbs = mBins.Where(b => fbVars.Contains(b.Key)).OrderBy(b => b.Value.Item1); var rem = mBins.Where(b => !fbVars.Contains(b.Key)).OrderBy(b => b.Value.Item1); } <tr> <th>Gesamtlieferung lt. gez. GA</th> @Raw(FormatRow(0, Model.Member.DeliveryObligation, Model.Member.DeliveryRight, Model.Member.Deliveries.Where(d => d.Year == Model.Year).Sum(d => d.Weight))) </tr> @if (rem.Any()) { <tr class="subheading"><th colspan="8">Sortenaufteilung:</th></tr> } @foreach (var (id, (name, right, obligation, sum, payment)) in rem) { <tr> <th>@name</th> @Raw(FormatRow(1, obligation, right, sum, payment)) </tr> } @if (fbs.Any()){ <tr class="subheading"><th colspan="8">Flächenbindungen:</th></tr> } @foreach (var (id, (name, right, obligation, sum, payment)) in fbs) { <tr> <th>@name</th> @Raw(FormatRow(2, obligation, right, sum, payment)) </tr> } </tbody> </table> <div class="text" style="margin-top: 2em;"> @if (Model.Text != null) { <p class="comment" style="white-space: pre-wrap; break-inside: avoid;">@Model.Text</p> } </div> </main>