Add Gesamtlieferung to DeliveryNote

This commit is contained in:
2023-08-30 14:18:43 +02:00
parent 75e6c1bd5d
commit 9b84452b86
7 changed files with 130 additions and 13 deletions

View File

@ -7,12 +7,15 @@
<h1>@Model.Title</h1>
@{ var forcePageBreak = Model.Delivery.Parts.Count > 2; }
@if (forcePageBreak) {
<script>
document.addEventListener("DOMContentLoaded", () => {
const stats = document.getElementById("delivery-stats");
document.getElementsByClassName("page-break")[0].before(stats);
stats.getElementsByTagName("table")[0].classList.add("expanded");
});
</script>
<p>Siehe nächste Seite.</p>
if (Model.Delivery.Year == Model.CurrentNextSeason) {
<!-- TODO Gesamtlieferung -->
<p>Gesamtlieferung usw.</p>
<p>Flächenbindung-Lieferrecht/-pflicht usw.</p>
}
// JS delivery-stats
<hr class="page-break"/>
}
<table class="delivery">
@ -84,8 +87,56 @@
@if (Model.Delivery.Comment != null) {
<p class="comment">Amerkung zur Lieferung: @Model.Delivery.Comment</p>
}
@if (!forcePageBreak && Model.Delivery.Year == Model.CurrentNextSeason) {
<p>Gesamtlieferung usw.</p>
@if (true || Model.Delivery.Year == Model.CurrentNextSeason) {
<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")">

View File

@ -1,12 +1,15 @@
using Elwig.Helpers;
using Elwig.Models;
using System.Collections.Generic;
namespace Elwig.Documents {
public class DeliveryNote : BusinessDocument {
public Delivery Delivery;
public string? Text;
public IEnumerable<(string, string, int, int, int)> MemberBuckets;
public DeliveryNote(Delivery d) : base($"Traubenübernahmeschein Nr. {d.LsNr}", d.Member) {
public DeliveryNote(Delivery d, AppDbContext ctx) : base($"Traubenübernahmeschein Nr. {d.LsNr}", d.Member) {
Delivery = d;
Aside = Aside.Replace("</table>", "") +
$"<thead><tr><th colspan='2'>Lieferung</th></tr></thead><tbody>" +
@ -16,6 +19,7 @@ namespace Elwig.Documents {
$"</tbody></table>";
Text = App.Client.DeliveryNoteText;
DocumentId = d.LsNr;
MemberBuckets = ctx.GetMemberBuckets(d.Member, d.Year).GetAwaiter().GetResult();
}
}
}

View File

@ -206,7 +206,7 @@ table {
}
table.delivery {
margin-bottom: 1cm;
margin-bottom: 5mm;
}
table.delivery th {
@ -249,6 +249,43 @@ table.delivery tr.sum td {
padding-top: 1mm;
}
table.delivery-stats {
font-size: 8pt;
}
table.delivery-stats:not(.expanded) th,
table.delivery-stats:not(.expanded) td {
padding: 0.125mm 0.5mm;
}
table.delivery-stats:not(.expanded) tr.optional {
display: none;
}
table.delivery-stats thead th {
font-weight: normal;
font-style: italic;
text-align: right;
}
table.delivery-stats thead th:first-child {
text-align: left;
}
table.delivery-stats.expanded tbody {
font-size: 10pt;
}
table.delivery-stats td {
text-align: right;
}
table.delivery-stats tbody th {
font-weight: normal;
font-style: italic;
text-align: left;
}
.hidden {
visibility: hidden;
}