176 lines
7.6 KiB
Plaintext
176 lines
7.6 KiB
Plaintext
@using RazorLight
|
|
@inherits TemplatePage<Elwig.Documents.DeliveryNote>
|
|
@model Elwig.Documents.DeliveryNote
|
|
@{ Layout = "BusinessDocument"; }
|
|
<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: 1cm;"/>
|
|
<col style="width: 25%;"/>
|
|
<col style="width: 25%;"/>
|
|
<col style="width: 25%;"/>
|
|
<col style="width: 25%;"/>
|
|
<col style="width: 3cm;"/>
|
|
<col style="width: 1.25cm;"/>
|
|
<col style="width: 1.25cm;"/>
|
|
<col style="width: 1.5cm;"/>
|
|
</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: 100%;"/>
|
|
<col style="width: 2cm;"/>
|
|
<col style="width: 2cm;"/>
|
|
<col style="width: 2cm;"/>
|
|
<col style="width: 2cm;"/>
|
|
<col style="width: 2cm;"/>
|
|
<col style="width: 2cm;"/>
|
|
</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>
|
|
}
|
|
@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>
|
|
}
|