@ -36,7 +36,7 @@ namespace Elwig.Documents {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static string GetColGroup(IEnumerable<double> cols) {
|
private static string GetColGroup(IEnumerable<double> cols) {
|
||||||
return "<colgroup>\n" + string.Join("\n", cols.Select(g => $"<col style=\"width: {g}mm;\"/>")) + "\n</colgroup>\n";
|
return "<colgroup>\n" + string.Join("\n", cols.Select(g => $"<col style=\"width: {g.ToString().Replace(',', '.')}mm;\"/>")) + "\n</colgroup>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string PrintSortenaufteilung(Dictionary<string, MemberBucket> buckets) {
|
public static string PrintSortenaufteilung(Dictionary<string, MemberBucket> buckets) {
|
||||||
@ -80,9 +80,19 @@ namespace Elwig.Documents {
|
|||||||
return "<table class=\"sortenaufteilung small number cohere\">" + tbl + "</table>";
|
return "<table class=\"sortenaufteilung small number cohere\">" + tbl + "</table>";
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string FormatRow(int obligation, int right, int delivery, int? payment = null, bool isGa = false, bool showPayment = false) {
|
private static string FormatRow(
|
||||||
|
int obligation, int right, int delivery, int? payment = null, int? area = null,
|
||||||
|
bool isGa = false, bool showPayment = false, bool showArea = false
|
||||||
|
) {
|
||||||
payment ??= delivery;
|
payment ??= delivery;
|
||||||
var baseline = showPayment ? payment : delivery;
|
var baseline = showPayment ? payment : delivery;
|
||||||
|
|
||||||
|
if (showArea) {
|
||||||
|
return $"<td>{(area == null ? "" : $"{area:N0}")}</td>" +
|
||||||
|
$"<td>{obligation:N0}</td>" +
|
||||||
|
$"<td>{right:N0}</td>";
|
||||||
|
}
|
||||||
|
|
||||||
return $"<td>{(obligation == 0 ? "-" : $"{obligation:N0}")}</td>" +
|
return $"<td>{(obligation == 0 ? "-" : $"{obligation:N0}")}</td>" +
|
||||||
$"<td>{(right == 0 ? "-" : $"{right:N0}")}</td>" +
|
$"<td>{(right == 0 ? "-" : $"{right:N0}")}</td>" +
|
||||||
$"<td>{(baseline < obligation ? $"<b>{obligation - baseline:N0}</b>" : "-")}</td>" +
|
$"<td>{(baseline < obligation ? $"<b>{obligation - baseline:N0}</b>" : "-")}</td>" +
|
||||||
@ -92,29 +102,41 @@ namespace Elwig.Documents {
|
|||||||
$"<td>{delivery:N0}</td>";
|
$"<td>{delivery:N0}</td>";
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string FormatRow(MemberBucket bucket, bool isGa = false, bool showPayment = false) {
|
private static string FormatRow(MemberBucket bucket, bool isGa = false, bool showPayment = false, bool showArea = false) {
|
||||||
return FormatRow(bucket.Obligation, bucket.Right, bucket.Delivery, bucket.Payment, isGa, showPayment);
|
return FormatRow(bucket.Obligation, bucket.Right, bucket.Delivery, bucket.Payment, bucket.Area, isGa, showPayment, showArea);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string PrintBucketTable(Season season, Dictionary<string, MemberBucket> buckets, bool includePayment = false, bool isTiny = false, IEnumerable<string>? filter = null) {
|
public string PrintBucketTable(
|
||||||
string tbl = GetColGroup(includePayment ? [45, 17, 17, 17, 19, 16, 17, 17] : [45, 20, 20, 20, 20, 20, 20]);
|
Season season, Dictionary<string, MemberBucket> buckets,
|
||||||
|
bool includeDelivery = true, bool includePayment = false,
|
||||||
|
bool isTiny = false, IEnumerable<string>? filter = null
|
||||||
|
) {
|
||||||
|
includePayment = includePayment && includeDelivery;
|
||||||
|
string tbl = GetColGroup(!includeDelivery ? [105, 20, 20, 20] : includePayment ? [45, 17, 17, 17, 19, 16, 17, 17] : [45, 20, 20, 20, 20, 20, 20]);
|
||||||
tbl += $"""
|
tbl += $"""
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th><b>Lese {season.Year}</b> per {Date:dd.MM.yyyy} [kg]</th>
|
<th{(!includeDelivery ? " rowspan=\"2\"" : "")}>
|
||||||
|
<b>{(includeDelivery ? "Lese " + season.Year : "Zusammengefasste Flächenbindungen")}</b>
|
||||||
|
per {Date:dd.MM.yyyy} {(includeDelivery ? "[kg]" : "")}
|
||||||
|
</th>
|
||||||
|
{(!includeDelivery ? "<th>Fläche</th>" : "")}
|
||||||
<th>Lieferpflicht</th>
|
<th>Lieferpflicht</th>
|
||||||
<th>Lieferrecht</th>
|
<th>Lieferrecht</th>
|
||||||
<th>Unterliefert</th>
|
{(includeDelivery ? "<th>Unterliefert</th>" : "")}
|
||||||
<th>Noch lieferbar</th>
|
{(includeDelivery ? "<th>Noch lieferbar</th>" : "")}
|
||||||
<th>Überliefert</th>
|
{(includeDelivery ? "<th>Geliefert</th>" : "")}
|
||||||
{(includePayment ? "<th>Zugeteilt</th>" : "")}
|
{(includePayment ? "<th>Zugeteilt</th>" : "")}
|
||||||
<th>Geliefert</th>
|
{(includeDelivery ? "<th>Geliefert</th>" : "")}
|
||||||
</tr>
|
</tr>
|
||||||
|
{(!includeDelivery ? "<tr><th class=\"unit\">[m²]</th><th class=\"unit\">[kg]</th><th class=\"unit\">[kg]</th></tr>" : "")}
|
||||||
</thead>
|
</thead>
|
||||||
""";
|
""";
|
||||||
|
|
||||||
var mBuckets = buckets
|
var mBuckets = buckets
|
||||||
.Where(b => (b.Value.Right > 0 || b.Value.Obligation > 0 || b.Value.Delivery > 0) && (filter == null || filter.Contains(b.Key[..2])))
|
.Where(b => ((!includeDelivery && b.Value.Area > 0) ||
|
||||||
|
(includeDelivery && (b.Value.Right > 0 || b.Value.Obligation > 0 || b.Value.Delivery > 0))) &&
|
||||||
|
(filter == null || filter.Contains(b.Key[..2])))
|
||||||
.ToList();
|
.ToList();
|
||||||
var fbVars = mBuckets
|
var fbVars = mBuckets
|
||||||
.Where(b => b.Value.Right > 0 || b.Value.Obligation > 0)
|
.Where(b => b.Value.Right > 0 || b.Value.Obligation > 0)
|
||||||
@ -136,20 +158,20 @@ namespace Elwig.Documents {
|
|||||||
Member.BusinessShares * season.MinKgPerBusinessShare,
|
Member.BusinessShares * season.MinKgPerBusinessShare,
|
||||||
Member.BusinessShares * season.MaxKgPerBusinessShare,
|
Member.BusinessShares * season.MaxKgPerBusinessShare,
|
||||||
Member.Deliveries.Where(d => d.Year == season.Year).Sum(d => d.Weight),
|
Member.Deliveries.Where(d => d.Year == season.Year).Sum(d => d.Weight),
|
||||||
isGa: true, showPayment: includePayment
|
isGa: true, showPayment: includePayment, showArea: !includeDelivery
|
||||||
)}</tr>";
|
)}</tr>";
|
||||||
if (fbs.Any()) {
|
if (fbs.Any()) {
|
||||||
tbl += $"<tr class=\"subheading{(filter == null ? " border" : "")}\"><th colspan=\"{(includePayment ? 8 : 7)}\">" +
|
tbl += $"<tr class=\"subheading{(filter == null ? " border" : "")}\"><th colspan=\"{(includePayment ? 8 : 7)}\">" +
|
||||||
$"Flächenbindungen{(vtr.Any() ? " (inkl. Verträge)" : "")}:</th></tr>";
|
$"Flächenbindungen{(vtr.Any() ? " (inkl. Verträge)" : "")}:</th></tr>";
|
||||||
foreach (var (id, b) in fbs) {
|
foreach (var (id, b) in fbs) {
|
||||||
tbl += $"<tr><th>{b.Name}</th>{FormatRow(b, showPayment: includePayment)}</tr>";
|
tbl += $"<tr><th>{b.Name}</th>{FormatRow(b, showPayment: includePayment, showArea: !includeDelivery)}</tr>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (vtr.Any()) {
|
if (vtr.Any()) {
|
||||||
tbl += $"<tr class=\"subheading{(filter == null ? " border" : "")}\"><th colspan=\"{(includePayment ? 8 : 7)}\">" +
|
tbl += $"<tr class=\"subheading{(filter == null ? " border" : "")}\"><th colspan=\"{(includePayment ? 8 : 7)}\">" +
|
||||||
"Verträge:</th></tr>";
|
"Verträge:</th></tr>";
|
||||||
foreach (var (id, b) in vtr) {
|
foreach (var (id, b) in vtr) {
|
||||||
tbl += $"<tr><th>{b.Name}</th>{FormatRow(b, showPayment: includePayment)}</tr>";
|
tbl += $"<tr><th>{b.Name}</th>{FormatRow(b, showPayment: includePayment, showArea: !includeDelivery)}</tr>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tbl += "\n</tbody>\n";
|
tbl += "\n</tbody>\n";
|
||||||
|
@ -95,7 +95,10 @@ main > *:first-child {
|
|||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
main h1, .main-wrapper p {
|
main h1,
|
||||||
|
main h2,
|
||||||
|
main h3,
|
||||||
|
.main-wrapper p {
|
||||||
font-size: 12pt;
|
font-size: 12pt;
|
||||||
margin: 1em 0;
|
margin: 1em 0;
|
||||||
text-align: justify;
|
text-align: justify;
|
||||||
|
@ -10,6 +10,10 @@ main table.tiny {
|
|||||||
margin-bottom: 5mm;
|
margin-bottom: 5mm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
main table.border {
|
||||||
|
border: 0.5pt solid black;
|
||||||
|
}
|
||||||
|
|
||||||
main table tr {
|
main table tr {
|
||||||
break-inside: avoid;
|
break-inside: avoid;
|
||||||
}
|
}
|
||||||
@ -47,9 +51,12 @@ main table th {
|
|||||||
main table tbody {
|
main table tbody {
|
||||||
}
|
}
|
||||||
|
|
||||||
main table tbody .small {
|
main table .small {
|
||||||
font-size: 8pt;
|
font-size: 8pt;
|
||||||
}
|
}
|
||||||
|
main table .large {
|
||||||
|
font-size: 12pt;
|
||||||
|
}
|
||||||
|
|
||||||
main table.number td,
|
main table.number td,
|
||||||
main table.number th {
|
main table.number th {
|
||||||
@ -76,16 +83,32 @@ main table.cohere {
|
|||||||
break-inside: avoid;
|
break-inside: avoid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
main table tr.subheading th,
|
||||||
|
main table tr.subheading td {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
main table tr.subheading th {
|
main table tr.subheading th {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
font-weight: bold;
|
|
||||||
font-size: 10pt;
|
font-size: 10pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
main table.small tr.subheading th,
|
main table.small tr.subheading th,
|
||||||
main table.tiny tr.subheading th {
|
main table.small tr.subheading td,
|
||||||
|
main table.tiny tr.subheading th,
|
||||||
|
main table.tiny tr.subheading td {
|
||||||
font-size: 8pt;
|
font-size: 8pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
main table tr.sectionheading th {
|
||||||
|
padding-top: 1mm;
|
||||||
|
padding-bottom: 1mm;
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 10pt;
|
||||||
|
border-top: 0.5pt solid black;
|
||||||
|
}
|
||||||
|
|
||||||
main table.number thead tr:first-child th:first-child {
|
main table.number thead tr:first-child th:first-child {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
@ -107,7 +130,14 @@ main table th.unit {
|
|||||||
font-size: 8pt;
|
font-size: 8pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
main table.number th.unit {
|
||||||
|
padding-right: 2mm;
|
||||||
|
}
|
||||||
|
|
||||||
main table th.narrow {
|
main table th.narrow {
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
padding-right: 0;
|
padding-right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
main table .lborder {border-left: 0.5pt solid black;}
|
||||||
|
main table .rborder {border-right: 0.5pt solid black;}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
@using RazorLight
|
@using RazorLight
|
||||||
|
@using Elwig.Helpers
|
||||||
@inherits TemplatePage<Elwig.Documents.MemberDataSheet>
|
@inherits TemplatePage<Elwig.Documents.MemberDataSheet>
|
||||||
@model Elwig.Documents.MemberDataSheet
|
@model Elwig.Documents.MemberDataSheet
|
||||||
@{
|
@{
|
||||||
@ -7,166 +8,128 @@
|
|||||||
<link rel="stylesheet" href="file:///@Raw(Model.DataPath)\resources\MemberDataSheet.css" />
|
<link rel="stylesheet" href="file:///@Raw(Model.DataPath)\resources\MemberDataSheet.css" />
|
||||||
<main>
|
<main>
|
||||||
<h1>@Model.Title</h1>
|
<h1>@Model.Title</h1>
|
||||||
<table class="member">
|
<table class="member border">
|
||||||
<thead>
|
<colgroup>
|
||||||
<tr><th colspan="4">Persönliche Daten</th></tr>
|
<col style="width: 30mm;"/>
|
||||||
</thead>
|
<col style="width: 51.5mm;"/>
|
||||||
|
<col style="width: 30mm;"/>
|
||||||
|
<col style="width: 20mm"/>
|
||||||
|
<col style="width: 31.5mm;"/>
|
||||||
|
</colgroup>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
<tr class="sectionheading"><th colspan="5">Persönliche Daten</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Mitglieds-Nr.</th>
|
<th class="small">Titel</th>
|
||||||
<td>@Model.Member.MgNr</td>
|
<th class="small">Vorname</th>
|
||||||
<th>Vorgänger MgNr.</th>
|
<th colspan="2" class="small">Nachname</th>
|
||||||
<td>@Model.Member.PredecessorMgNr</td>
|
<th class="small">Titel</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Titel (vorangestellt)</th>
|
<td class="large">@Model.Member.Prefix</td>
|
||||||
<td>@Model.Member.Prefix</td>
|
<td class="large">@Model.Member.GivenName @Model.Member.MiddleName</td>
|
||||||
<th>Titel (nachgestellt)</th>
|
<td colspan="2" class="large">@Model.Member.FamilyName</td>
|
||||||
<td>@Model.Member.Suffix</td>
|
<td class="large">@Model.Member.Suffix</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Vorname</th>
|
<th>Mitglieds-Nr.:</th>
|
||||||
<td>@Model.Member.GivenName</td>
|
<td class="large">@Model.Member.MgNr</td>
|
||||||
<th>Nachname</th>
|
<th>Geburtsjahr/-tag:</th>
|
||||||
<td>@Model.Member.FamilyName</td>
|
<td colspan="2" class="large">@(string.Join('.', Model.Member.Birthday?.Split('-')?.Reverse() ?? Array.Empty<string>()))</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Weitere Vornamen</th>
|
<th>Adresse:</th>
|
||||||
<td colspan="3">@Model.Member.MiddleName</td>
|
<td colspan="4">@Model.Member.Address</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Geburtsjahr/-tag</th>
|
<th>PLZ/Ort:</th>
|
||||||
<td colspan="3">@(string.Join('.', Model.Member.Birthday?.Split('-')?.Reverse()??Array.Empty<string>()))</td>
|
<td colspan="4">@Model.Member.PostalDest.AtPlz?.Plz @Model.Member.PostalDest.AtPlz?.Dest (@Model.Member.PostalDest.AtPlz?.Ort.Name)</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
<tr class="sectionheading"><th colspan="5">Rechnungsadresse (optional)</th></tr>
|
||||||
|
<tr>
|
||||||
|
<th>Name:</th>
|
||||||
|
<td colspan="4">@Model.Member.BillingAddress?.Name</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Adresse:</th>
|
||||||
|
<td colspan="4">@Model.Member.BillingAddress?.Address</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>PLZ/Ort:</th>
|
||||||
|
<td colspan="4">@Model.Member.BillingAddress?.PostalDest.AtPlz?.Plz @Model.Member.BillingAddress?.PostalDest.AtPlz?.Dest @((Model.Member.BillingAddress != null && Model.Member.BillingAddress.PostalDest.AtPlz != null) ? "(" + Model.Member.BillingAddress?.PostalDest.AtPlz?.Ort.Name + ")" : "")</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="sectionheading">
|
||||||
|
<th colspan="2">Kontaktdaten</th>
|
||||||
|
<th colspan="3" class="lborder">Bankverbindung</th>
|
||||||
|
</tr>
|
||||||
|
@{
|
||||||
|
List<string?[]> subTbl1 = new();
|
||||||
|
subTbl1.AddRange(Model.Member.EmailAddresses.Select(a => new[] { "E-Mail-Adresse", a.Address }));
|
||||||
|
subTbl1.AddRange(Model.Member.TelephoneNumbers.Select(n => new[] { Utils.PhoneNrTypeToString(n.Type), n.Number }));
|
||||||
|
|
||||||
<thead>
|
List<string?[]> subTbl2 = new();
|
||||||
<tr><th colspan="4">Anschrift</th></tr>
|
subTbl2.Add(new[] { "IBAN", Model.Member.Iban != null ? Elwig.Helpers.Utils.FormatIban(Model.Member.Iban) : null });
|
||||||
</thead>
|
subTbl2.Add(new[] { "BIC", Model.Member.Bic });
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<th>Adresse</th>
|
|
||||||
<td colspan="3">@Model.Member.Address</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>PLZ/Ort</th>
|
|
||||||
<td colspan="3">@Model.Member.PostalDest.AtPlz?.Plz @Model.Member.PostalDest.AtPlz?.Dest (@Model.Member.PostalDest.AtPlz?.Ort.Name)</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
|
|
||||||
<thead>
|
|
||||||
<tr><th colspan="4">Rechnungsadresse</th></tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<th>Name</th>
|
|
||||||
<td colspan="3">@Model.Member.BillingAddress?.Name</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>Adresse</th>
|
|
||||||
<td colspan="3">@Model.Member.BillingAddress?.Address</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>PLZ/Ort</th>
|
|
||||||
<td colspan="3">@Model.Member.BillingAddress?.PostalDest.AtPlz?.Plz @Model.Member.BillingAddress?.PostalDest.AtPlz?.Dest @((Model.Member.BillingAddress != null && Model.Member.BillingAddress.PostalDest.AtPlz != null) ? "(" + Model.Member.BillingAddress?.PostalDest.AtPlz?.Ort.Name + ")" : "")</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
|
|
||||||
<thead>
|
|
||||||
<tr><th colspan="4">Kontaktdaten</th></tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
@foreach (var e in Model.Member.EmailAddresses) {
|
|
||||||
var emailNumber = Model.Member.EmailAddresses.Count > 1 ? 1 : 0;
|
|
||||||
<tr>
|
|
||||||
<th>E-Mail-Adresse @(emailNumber != 0 ? $"({emailNumber})" : "")</th>
|
|
||||||
<td colspan="3">@e.Address</td>
|
|
||||||
</tr>
|
|
||||||
emailNumber++;
|
|
||||||
}
|
}
|
||||||
@foreach (var k in Model.Member.TelephoneNumbers) {
|
@for (int i = 0; i < Math.Max(subTbl1.Count, subTbl2.Count); i++) {
|
||||||
<tr>
|
<tr>
|
||||||
@if (k.Type.Equals("landline")) {
|
<th>@(i < subTbl1.Count ? subTbl1[i][0] + ":" : "")</th>
|
||||||
<th>Tel.-Nr. (Festnetz)</th>
|
<td>@(i < subTbl1.Count ? subTbl1[i][1] : "")</td>
|
||||||
} else if (k.Type.Equals("mobile")) {
|
<th class="lborder">@(i < subTbl2.Count ? subTbl2[i][0] + ":" : "")</th>
|
||||||
<th>Tel.-Nr. (mobil)</th>
|
<td colspan="2">@(i < subTbl2.Count ? subTbl2[i][1] : "")</td>
|
||||||
} else if (k.Type.Equals("fax")) {
|
|
||||||
<th>Fax-Nr.</th>
|
|
||||||
}
|
|
||||||
<td colspan="3">@k.Number</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
}
|
}
|
||||||
</tbody>
|
<tr class="sectionheading"><th colspan="5">Betrieb</th></tr>
|
||||||
|
|
||||||
<thead>
|
|
||||||
<tr><th colspan="4">Bankverbindung</th></tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>IBAN</th>
|
<th>Betriebs-Nr.:</th>
|
||||||
<td colspan="3">@(Model.Member.Iban != null ? Elwig.Helpers.Utils.FormatIban(Model.Member.Iban) : "")</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>BIC</th>
|
|
||||||
<td colspan="3">@Model.Member.Bic</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
|
|
||||||
<thead>
|
|
||||||
<tr><th colspan="4">Betrieb</th></tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<th>UID</th>
|
|
||||||
<td>@Model.Member.UstIdNr</td>
|
|
||||||
<th>Betriebs-Nr.</th>
|
|
||||||
<td>@Model.Member.LfbisNr</td>
|
<td>@Model.Member.LfbisNr</td>
|
||||||
|
<th>UID:</th>
|
||||||
|
<td colspan="2">@Model.Member.UstIdNr</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Buchführend</th>
|
<th>Stammgemeinde:</th>
|
||||||
<td>@(Model.Member.IsBuchführend ? "Ja" : "Nein")</td>
|
|
||||||
<th>Bio</th>
|
|
||||||
<td>@(Model.Member.IsOrganic ? "Ja" : "Nein")</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
|
|
||||||
<thead>
|
|
||||||
<tr><th colspan="4">Genossenschaft</th></tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<th>Eintritt</th>
|
|
||||||
<td>@Model.Member.EntryDate</td>
|
|
||||||
<th>Austritt</th>
|
|
||||||
<td>@Model.Member.ExitDate</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>Aktiv</th>
|
|
||||||
<td>@(Model.Member.IsActive ? "Ja" : "Nein")</td>
|
|
||||||
<th>Geschäftsanteile</th>
|
|
||||||
<td>@Model.Member.BusinessShares</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>Volllierferant</th>
|
|
||||||
<td>@(Model.Member.IsVollLieferant ? "Ja" : "Nein")</td>
|
|
||||||
<th>Funktionär</th>
|
|
||||||
<td>@(Model.Member.IsFunktionär ? "Ja" : "Nein")</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th>Stamm-Zweigstelle</th>
|
|
||||||
<td>@Model.Member.Branch?.Name</td>
|
|
||||||
<th>Stammgemeinde</th>
|
|
||||||
<td>@Model.Member.DefaultKg?.Name</td>
|
<td>@Model.Member.DefaultKg?.Name</td>
|
||||||
|
<th>Buchführend:</th>
|
||||||
|
<td colspan="2">@(Model.Member.IsBuchführend ? "Ja" : "Nein")</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Kontakt via Post</th>
|
<th colspan="2" class="small">(Katastralgemeinde mit dem größten Anteil an Weinbauflächen)</th>
|
||||||
<td>@(Model.Member.ContactViaPost ? "Ja" : "Nein")</td>
|
<th>Bio:</th>
|
||||||
<th>Kontakt via E-Mail</th>
|
<td colspan="2">@(Model.Member.IsOrganic ? "Ja" : "Nein")</t>
|
||||||
<td>@(Model.Member.ContactViaEmail ? "Ja" : "Nein")</td>
|
</tr>
|
||||||
|
<tr class="sectionheading"><th colspan="5">Genossenschaft</th></tr>
|
||||||
|
<tr>
|
||||||
|
<th>Status:</th>
|
||||||
|
<td>
|
||||||
|
@(Model.Member.IsActive ? "Aktiv" : "Nicht aktiv")
|
||||||
|
<span class="small">
|
||||||
|
(@(Model.Member.ExitDate != null ?
|
||||||
|
$"{Model.Member.EntryDate:dd.MM.yyyy}–{Model.Member.ExitDate:dd.MM.yyyy}" :
|
||||||
|
$"seit {Model.Member.EntryDate:dd.MM.yyyy}"))
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
<th>Geschäftsanteile:</th>
|
||||||
|
<td colspan="2">@Model.Member.BusinessShares</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Stamm-Zweigstelle:</th>
|
||||||
|
<td>@Model.Member.Branch?.Name</td>
|
||||||
|
<th>Volllierferant:</th>
|
||||||
|
<td colspan="2">@(Model.Member.IsVollLieferant ? "Ja" : "Nein")</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>Zusendungen via...</th>
|
||||||
|
<td>
|
||||||
|
<i>Post:</i> @(Model.Member.ContactViaPost ? "Ja" : "Nein") –
|
||||||
|
<i>E-Mail:</i> @(Model.Member.ContactViaEmail ? "Ja" : "Nein")
|
||||||
|
</td>
|
||||||
|
<th>Funktionär:</th>
|
||||||
|
<td colspan="2">@(Model.Member.IsFunktionär ? "Ja" : "Nein")</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
@Raw(Model.PrintBucketTable(Model.Season, Model.MemberBuckets, includeDelivery: false))
|
||||||
|
|
||||||
@{
|
@{
|
||||||
var areaComs = Model.Member.ActiveAreaCommitments.GroupBy(a => a.AreaComType).Select(group => new {
|
var areaComs = Model.Member.ActiveAreaCommitments.GroupBy(a => a.AreaComType).Select(group => new {
|
||||||
AreaComType = group.Key,
|
AreaComType = group.Key,
|
||||||
@ -177,15 +140,15 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@if (areaComs.Count != 0) {
|
@if (areaComs.Count != 0) {
|
||||||
<h1>Flächenbindungen</h1>
|
<h2>Flächenbindungen</h2>
|
||||||
<table class="area-commitements">
|
<table class="area-commitements">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 40mm;" />
|
<col style="width: 40mm;"/>
|
||||||
<col style="width: 30mm;" />
|
<col style="width: 30mm;"/>
|
||||||
<col style="width: 35mm;" />
|
<col style="width: 35mm;"/>
|
||||||
<col style="width: 15mm;" />
|
<col style="width: 15mm;"/>
|
||||||
<col style="width: 25mm;" />
|
<col style="width: 25mm;"/>
|
||||||
<col style="width: 20mm;" />
|
<col style="width: 20mm;"/>
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
@ -201,124 +164,32 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|
||||||
@foreach (var contractType in areaComs) {
|
@foreach (var contractType in areaComs) {
|
||||||
<tr class="contract-type @(contractType.AreaComType.DisplayName != lastContract && lastContract != "" ? "new" : "")">
|
<tr class="subheading @(contractType.AreaComType.DisplayName != lastContract && lastContract != "" ? "new" : "")">
|
||||||
<th colspan="3" style="text-align: left">
|
<th colspan="3">
|
||||||
@($"{contractType.AreaComType.WineVar.Name} {(contractType.AreaComType.WineAttr != null ? "(" + contractType.AreaComType.WineAttr + ")" : "")}")
|
@($"{contractType.AreaComType.WineVar.Name} {(contractType.AreaComType.WineAttr != null ? "(" + contractType.AreaComType.WineAttr + ")" : "")}")
|
||||||
</th>
|
</th>
|
||||||
<th style="text-align: right">@($"{contractType.Size:N0}")</th>
|
<td class="number">@($"{contractType.Size:N0}")</td>
|
||||||
<th colspan="2"></th>
|
<td colspan="2"></td>
|
||||||
</tr>
|
</tr>
|
||||||
@foreach (var areaCom in contractType.AreaComs) {
|
@foreach (var areaCom in contractType.AreaComs) {
|
||||||
<tr class="area-commitment">
|
<tr class="area-commitment">
|
||||||
<td>@areaCom.Kg.AtKg.Name <span style="font-size: 8pt;">(@areaCom.Kg.AtKg.KgNr)</span></td>
|
<td>@areaCom.Kg.AtKg.Name <span style="font-size: 8pt;">(@areaCom.Kg.AtKg.KgNr)</span></td>
|
||||||
<td>@areaCom.Rd?.Name</td>
|
<td>@areaCom.Rd?.Name</td>
|
||||||
<td>@areaCom.GstNr.Replace(",", ", ")</td>
|
<td class="text">@areaCom.GstNr.Replace(",", ", ").Replace("-", "–")</td>
|
||||||
<td style="text-align: right;">@($"{areaCom.Area:N0}")</td>
|
<td class="number">@($"{areaCom.Area:N0}")</td>
|
||||||
<td style="text-align: center;">@areaCom.WineCult.Name</td>
|
<td class="center">@areaCom.WineCult.Name</td>
|
||||||
<td style="text-align: center;">Ab @areaCom.YearFrom</td>
|
<td class="center">@(areaCom.YearTo == null ? $"ab {areaCom.YearFrom}" : $"{areaCom.YearFrom}–{areaCom.YearTo}")</td>
|
||||||
</tr>
|
</tr>
|
||||||
lastContract = contractType.AreaComType.DisplayName;
|
lastContract = contractType.AreaComType.DisplayName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
<tr class="sum">
|
||||||
<tr class="new">
|
<td colspan="3">Gesamt:</td>
|
||||||
<th colspan="3" style="text-align: left">Gesamt</th>
|
<td class="number">@($"{Model.Member.ActiveAreaCommitments.Select(a => a.Area).Sum():N0}")</td>
|
||||||
<th style="text-align: right">@($"{Model.Member.ActiveAreaCommitments.Select(a => a.Area).Sum():N0}")</th>
|
<td colspan="2"></td>
|
||||||
<th colspan="2"></th>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<table class="delivery-confirmation-stats">
|
|
||||||
<colgroup>
|
|
||||||
<col style="width: 102mm;" />
|
|
||||||
<col style="width: 21mm;" />
|
|
||||||
<col style="width: 21mm;" />
|
|
||||||
<col style="width: 21mm;" />
|
|
||||||
</colgroup>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th rowspan="2"></th>
|
|
||||||
<th style="text-align: center;">Fläche</th>
|
|
||||||
<th style="text-align: center;">Lieferpflicht</th>
|
|
||||||
<th style="text-align: center;">Lieferrecht</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th style="text-align: center;">[m²]</th>
|
|
||||||
<th style="text-align: center;">[kg]</th>
|
|
||||||
<th style="text-align: center;">[kg]</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
@{
|
|
||||||
string FormatRow(int mode, int area, int obligation, int right) {
|
|
||||||
return $"<td>{(mode == 0 || mode == 1 ? "" : area == 0 ? "-" : $"{area:N0}")}</td>" +
|
|
||||||
$"<td>{(mode == 1 ? "" : obligation == 0 ? "-" : $"{obligation:N0}")}</td>" +
|
|
||||||
$"<td>{(mode == 1 ? "" : right == 0 ? "-" : $"{right:N0}")}</td>";
|
|
||||||
}
|
|
||||||
var mBuckets = Model.MemberBuckets.Where(b => b.Value.Right > 0 || b.Value.Obligation > 0 || b.Value.Delivery > 0).ToList();
|
|
||||||
var fbVars = mBuckets.Where(b => b.Value.Right > 0 || b.Value.Obligation > 0).Select(b => b.Key.Replace("_", "")).Order().ToArray();
|
|
||||||
var fbs = mBuckets.Where(b => fbVars.Contains(b.Key) && b.Key.Length == 2).OrderBy(b => b.Value.Name);
|
|
||||||
var vtr = mBuckets.Where(b => fbVars.Contains(b.Key) && b.Key.Length > 2).OrderBy(b => b.Value.Name);
|
|
||||||
}
|
|
||||||
<tr>
|
|
||||||
<th>Laut gezeichneten GA</th>
|
|
||||||
@Raw(FormatRow(
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
Model.Member.BusinessShares * Model.Season.MinKgPerBusinessShare,
|
|
||||||
Model.Member.BusinessShares * Model.Season.MaxKgPerBusinessShare
|
|
||||||
))
|
|
||||||
</tr>
|
|
||||||
@if (fbs.Any()) {
|
|
||||||
<tr class="subheading"><th colspan="8">Flächenbindungen:</th></tr>
|
|
||||||
}
|
|
||||||
@foreach (var (id, b) in fbs) {
|
|
||||||
<tr>
|
|
||||||
<th>@b.Name</th>
|
|
||||||
@Raw(FormatRow(2, b.Area, b.Obligation, b.Right))
|
|
||||||
</tr>
|
|
||||||
}
|
|
||||||
@if (vtr.Any()) {
|
|
||||||
<tr class="subheading"><th colspan="8">Verträge:</th></tr>
|
|
||||||
}
|
|
||||||
@foreach (var (id, b) in vtr) {
|
|
||||||
<tr>
|
|
||||||
<th>@b.Name</th>
|
|
||||||
@Raw(FormatRow(2, b.Area, b.Obligation, b.Right))
|
|
||||||
</tr>
|
|
||||||
}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
} else {
|
|
||||||
<table class="delivery-confirmation-stats" style="margin-top: 5mm;">
|
|
||||||
<colgroup>
|
|
||||||
<col style="width: 123mm;" />
|
|
||||||
<col style="width: 21mm;" />
|
|
||||||
<col style="width: 21mm;" />
|
|
||||||
</colgroup>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th rowspan="2"></th>
|
|
||||||
<th style="text-align: center;">Lieferpflicht</th>
|
|
||||||
<th style="text-align: center;">Lieferrecht</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th style="text-align: center;">[kg]</th>
|
|
||||||
<th style="text-align: center;">[kg]</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<th>Laut gezeichneten GA</th>
|
|
||||||
<td>@($"{Model.Member.BusinessShares * Model.Season.MinKgPerBusinessShare:N0}")</td>
|
|
||||||
<td>@($"{Model.Member.BusinessShares * Model.Season.MaxKgPerBusinessShare:N0}")</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
}
|
}
|
||||||
|
|
||||||
</main>
|
</main>
|
@ -1,82 +1,20 @@
|
|||||||
table.member {
|
|
||||||
border: 0.5pt solid black;
|
h2 {
|
||||||
|
/*break-before: page;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
table.member, table.area-commitements {
|
table.area-commitements {
|
||||||
font-size: 10pt;
|
margin-top: 0;
|
||||||
}
|
|
||||||
|
|
||||||
table.member tbody th {
|
|
||||||
font-weight: normal;
|
|
||||||
font-style: italic;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
table.member thead,
|
|
||||||
table.member tbody {
|
|
||||||
border: 0.5pt solid black;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
table.area-commitements td {
|
table.area-commitements td {
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.area-commitements thead tr th {
|
|
||||||
font-weight: normal;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.area-commitements tbody tr.contract-type {
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.area-commitements tbody td {
|
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.area-commitements tr.new th {
|
table.area-commitements td.text {
|
||||||
border-top: 0.5pt solid black;
|
white-space: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.delivery-confirmation-stats {
|
table.area-commitements tr.sum {
|
||||||
font-size: 10pt;
|
font-size: 12pt;
|
||||||
break-inside: avoid;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
table.delivery-confirmation-stats th,
|
|
||||||
table.delivery-confirmation-stats td {
|
|
||||||
padding: 0.125mm 0;
|
|
||||||
overflow: hidden;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.delivery-confirmation-stats tr.subheading th {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.delivery-confirmation-stats thead th {
|
|
||||||
font-weight: normal;
|
|
||||||
font-style: italic;
|
|
||||||
text-align: right;
|
|
||||||
font-size: 10pt;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.delivery-confirmation-stats thead th:first-child {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.delivery-confirmation-stats td {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.delivery-confirmation-stats tbody th {
|
|
||||||
font-weight: normal;
|
|
||||||
font-style: italic;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.delivery-confirmation-stats tr.subheading th {
|
|
||||||
font-weight: bold;
|
|
||||||
border-top: 0.5pt solid black;
|
|
||||||
}
|
|
Reference in New Issue
Block a user