@using RazorLight @inherits TemplatePage<Elwig.Documents.DeliveryNote> @model Elwig.Documents.DeliveryNote @{ Layout = "BusinessDocument"; } <link rel="stylesheet" href="file:///@Raw(Model.DataPath)\resources\style-deliverynote.css" /> <main> <div class="date">@Model.Location, am @($"{Model.Date:dd.MM.yyyy}")</div> <h1>@Model.Title</h1> @{ bool displayStats = true; // Model.Delivery.Year == Model.CurrentNextSeason } <script> document.addEventListener("DOMContentLoaded", () => { const hidden = document.getElementsByClassName("hidden")[0]; const table = document.getElementsByClassName("delivery")[0]; const stats = document.getElementById("delivery-stats"); const mm = px2mm(0, hidden.offsetTop + hidden.offsetHeight); const heightTable = px2mm(table.offsetTop, hidden.offsetTop + hidden.offsetHeight); if (mm >= heightA4 - heightFooter) { if (heightTable + 10 >= heightMain) { // force page break in table const tblOff = px2mm(0, table.offsetTop); let last = null; for (const tr of table.getElementsByTagName("tr")) { if (!tr.classList.contains("main")) continue; const mm2 = tblOff + px2mm(0, tr.offsetTop); if (mm2 >= heightA4 - heightFooter) { last.classList.add("page-break"); break; } last = tr; } } else { // force page break const hr = document.createElement("hr"); hr.classList.add("page-break"); table.before(hr); const p = document.createElement("p"); p.innerText = "Siehe nächste Seite." hr.before(p); } } }); </script> <table class="delivery"> <colgroup> <col style="width: 10.00mm;"/> <col style="width: 21.25mm;"/> <col style="width: 21.25mm;"/> <col style="width: 21.25mm;"/> <col style="width: 21.25mm;"/> <col style="width: 30.00mm;"/> <col style="width: 12.50mm;"/> <col style="width: 12.50mm;"/> <col style="width: 15.00mm;"/> </colgroup> <thead> <tr> <th class="main" rowspan="2" style="text-align: center;">Pos.</th> <th class="main" rowspan="2" colspan="2">Sorte</th> <th class="main" rowspan="2" colspan="2">Attribut(e)</th> <th class="main" rowspan="2">Qualitätsstufe</th> <th colspan="2">Gradation</th> <th>Gewicht</th> </tr> <tr> <th style="font-size: 8pt;">[°Oe]</th> <th style="font-size: 8pt;">[°KMW]</th> <th style="font-size: 8pt;">[kg]</th> </tr> </thead> <tbody> @foreach (var part in Model.Delivery.Parts.OrderBy(p => p.DPNr)) { <tr class="main"> <td style="text-align: center;">@part.DPNr</td> <td colspan="2">@part.Variant.Name</td> <td colspan="2">@string.Join(" / ", part.Attributes)</td> <td>@part.Quality.Name</td> <td class="narrow" style="text-align: center;">@($"{part.Oe:N0}")</td> <td class="narrow" style="text-align: center;">@($"{part.Kmw:N1}")</td> <td class="narrow" style="text-align: right;">@($"{part.Weight:N0}")</td> </tr> <tr><td></td><td colspan="5" style="white-space: pre;"><i>Herkunft:</i> @part.OriginString</td></tr> @if (part.Modifiers.Count() > 0) { var first = true; foreach (var mod in part.Modifiers) { <tr class="tight @(first ? "first" : "")"><td></td><td>@Raw(first ? "<i>Zu-/Abschläge:</i>" : "")</td><td colspan="3"><b>@mod.Name</b></td><td style="white-space: pre;">@mod.ValueStr</td></tr> first = false; } } <tr><td></td><td colspan="5"> @Raw(part.ManualWeighing ? "<i>Handwiegung</i>" : $"<i>Waage:</i> {part.ScaleId ?? "?"}, <i>ID:</i> {part.WeighingId ?? "?"}") (@(part.IsGerebelt ? "gerebelt gewogen" : "nicht gerebelt gewogen")) </td></tr> @if (part.Comment != null) { <tr><td></td><td colspan="5"><i>Anmerkung:</i> @part.Comment</td></tr> } @if (part.Temperature != null || part.Acid != null) { <tr><td></td><td colspan="5">@Raw(part.Temperature != null ? $"<i>Temperatur:</i> {part.Temperature:N1} °C" : "")@(part.Temperature != null && part.Acid != null ? ", " : "")@Raw(part.Acid != null ? $"<i>Säure:</i> {part.Acid:N1} g/l" : "")</td></tr> } } @if (Model.Delivery.Parts.Count() > 1) { <tr class="main sum"> <td colspan="6">Gesamt:</td> <td style="text-align: center;">@($"{Model.Delivery.Oe:N0}")</td> <td style="text-align: center;">@($"{Model.Delivery.Kmw:N1}")</td> <td style="text-align: right;">@($"{Model.Delivery.Weight:N0}")</td> </tr> } </tbody> </table> @if (Model.Delivery.Comment != null) { <p class="comment">Amerkung zur Lieferung: @Model.Delivery.Comment</p> } @if (displayStats) { <div id="delivery-stats"> <table class="delivery-stats"> <colgroup> <col style="width: 45mm;"/> <col style="width: 20mm;"/> <col style="width: 20mm;"/> <col style="width: 20mm;"/> <col style="width: 20mm;"/> <col style="width: 20mm;"/> <col style="width: 20mm;"/> </colgroup> <thead> <tr> <th><b>Gesamtlieferung</b> [kg]</th> <th>Lieferpflicht</th> <th>Lieferrecht</th> <th>Unterliefert</th> <th>Noch zu liefern</th> <th>Überliefert</th> <th>Geliefert</th> </tr> </thead> <tbody> @{ string FormatRow(int obligation, int right, int sum) { return $"<td>{obligation:N0}</td>" + $"<td>{right:N0}</td>" + $"<td>{(sum < obligation ? $"{obligation - sum:N0}" : "-")}</td>" + $"<td>{(sum >= obligation && sum <= right ? $"{right - sum:N0}" : "-")}</td>" + $"<td>{(sum > right ? $"{sum - right:N0}" : "-")}</td>" + $"<td>{sum:N0}</td>"; } var sortids = Model.Delivery.Parts.Select(p => p.SortId).ToList(); } <tr> <th>Geschäftsanteile</th> @Raw(FormatRow(Model.Member.DeliveryObligation, Model.Member.DeliveryRight, Model.Member.Deliveries.Where(d => d.Year == Model.Delivery.Year).Sum(d => d.Weight))) </tr> @foreach (var (id, name, right, obligation, sum) in Model.MemberBuckets.OrderBy(b => b.Item1)) { if (right > 0 && obligation > 0) { <tr class="@(sortids.Contains(id[..2]) ? "" : "optional")"> <th>@name</th> @Raw(FormatRow(obligation, right, sum)) </tr> } } </tbody> </table> </div> } </main> @for (int i = 0; i < 2; i++) { <div class="@(i == 0 ? "hidden" : "bottom")"> @if (Model.Text != null) { <p class="comment">@Model.Text</p> } <div class="signatures"> <div>Genossenschaft</div> <div>Mitglied</div> </div> </div> }