Add PaymentVariantsWindow
This commit is contained in:
@ -1,40 +1,31 @@
|
||||
using Elwig.Helpers;
|
||||
using Elwig.Models.Dtos;
|
||||
using Elwig.Models.Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace Elwig.Documents {
|
||||
public class CreditNote : BusinessDocument {
|
||||
|
||||
public Credit Credit;
|
||||
public Credit? Credit;
|
||||
public CreditNoteData Data;
|
||||
public string? Text;
|
||||
public string CurrencySymbol;
|
||||
public string[] BucketNames;
|
||||
public int Precision;
|
||||
public IEnumerable<DeliveryPart> Parts;
|
||||
|
||||
public CreditNote(Credit c, AppDbContext ctx) : base($"Traubengutschrift Nr. {c.TgId} – {c.Payment.Variant.Name}", c.Member) {
|
||||
public CreditNote(AppDbContext ctx, PaymentMember p, CreditNoteData data) :
|
||||
base($"Traubengutschrift {(p.Credit != null ? $"Nr. {p.Credit.Year}/{p.Credit.TgNr}" : p.Member.Name)} – {p.Variant.Name}", p.Member) {
|
||||
UseBillingAddress = true;
|
||||
ShowDateAndLocation = true;
|
||||
Credit = c;
|
||||
Data = data;
|
||||
Credit = p.Credit;
|
||||
Aside = Aside.Replace("</table>", "") +
|
||||
$"<thead><tr><th colspan='2'>Gutschrift</th></tr></thead><tbody>" +
|
||||
$"<tr><th>TG-Nr.</th><td>{c.TgId}</td></tr>" +
|
||||
$"<tr><th>Überw. am</th><td>{c.Payment.Variant.TransferDate:dd.MM.yyyy}</td></tr>" +
|
||||
$"<tr><th>Datum/Zeit</th><td>{c.ModifiedTimestamp:dd.MM.yyyy} / {c.ModifiedTimestamp:HH:mm}</td></tr>" +
|
||||
$"<tr><th>TG-Nr.</th><td>{(p.Credit != null ? $"{p.Credit.Year}/{p.Credit.TgNr}" : "-")}</td></tr>" +
|
||||
$"<tr><th>Überw. am</th><td>{p.Variant.TransferDate:dd.MM.yyyy}</td></tr>" +
|
||||
$"<tr><th>Datum/Zeit</th><td>{p.Credit?.ModifiedTimestamp:dd.MM.yyyy} / {p.Credit?.ModifiedTimestamp:HH:mm}</td></tr>" +
|
||||
$"</tbody></table>";
|
||||
Text = App.Client.TextDeliveryNote;
|
||||
DocumentId = $"Tr.-Gutschr. {c.TgId}";
|
||||
CurrencySymbol = c.Payment.Variant.Season.Currency.Symbol ?? c.Payment.Variant.Season.Currency.Code;
|
||||
BucketNames = new string[0]; // FIXME
|
||||
Precision = c.Payment.Variant.Season.Precision;
|
||||
Parts = ctx.DeliveryParts.FromSql($"""
|
||||
SELECT p.*
|
||||
FROM v_delivery v
|
||||
JOIN delivery_part p ON (p.year, p.did, p.dpnr) = (v.year, v.did, v.dpnr)
|
||||
WHERE (v.year, v.mgnr) = ({c.Year}, {c.Member.MgNr})
|
||||
ORDER BY sortid, attribute_prio DESC, COALESCE(attrid, '~'), kmw DESC, date, time, dpnr
|
||||
""").ToList();
|
||||
DocumentId = $"Tr.-Gutschr. " + (p.Credit != null ? $"{p.Credit.Year}/{p.Credit.TgNr}" : p.MgNr);
|
||||
CurrencySymbol = p.Variant.Season.Currency.Symbol ?? p.Variant.Season.Currency.Code;
|
||||
Precision = p.Variant.Season.Precision;
|
||||
}
|
||||
}}
|
||||
|
@ -3,24 +3,22 @@
|
||||
@model Elwig.Documents.CreditNote
|
||||
@{ Layout = "BusinessDocument"; }
|
||||
<link rel="stylesheet" href="file:///@Raw(Model.DataPath)\resources\CreditNote.css"/>
|
||||
@{
|
||||
var bucketNum = Model.BucketNames.Length;
|
||||
}
|
||||
<main>
|
||||
<h1>@Model.Title</h1>
|
||||
<table class="credit">
|
||||
<colgroup>
|
||||
<col style="width: 24mm;"/>
|
||||
<col style="width: 6mm;"/>
|
||||
<col style="width: 31mm;"/>
|
||||
<col style="width: 25mm;"/>
|
||||
<col style="width: 5mm;"/>
|
||||
<col style="width: 20mm;"/>
|
||||
<col style="width: 18mm;"/>
|
||||
<col style="width: 10mm;"/>
|
||||
<col style="width: 10mm;"/>
|
||||
<col style="width: 10mm;"/>
|
||||
<col style="width: 10mm;"/>
|
||||
<col style="width: 15mm;"/>
|
||||
<col style="width: 8mm;"/>
|
||||
<col style="width: 10mm;"/>
|
||||
<col style="width: 12mm;"/>
|
||||
<col style="width: 10mm;"/>
|
||||
<col style="width: 12mm;"/>
|
||||
<col style="width: 15mm;"/>
|
||||
<col style="width: 17mm;"/>
|
||||
<col style="width: 15mm;"/>
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
@ -30,57 +28,62 @@
|
||||
<th rowspan="3" style="text-align: left;">Attribut</th>
|
||||
<th rowspan="2" colspan="2">Gradation</th>
|
||||
<th colspan="2">Zu-/Abschläge</th>
|
||||
<th colspan="2">@Raw(string.Join("<br/>", Model.BucketNames))</th>
|
||||
<th rowspan="2" colspan="2">Flächenbindung</th>
|
||||
<th rowspan="2">Preis</th>
|
||||
<th rowspan="2">Betrag</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Abs.</th>
|
||||
<th>Rel.</th>
|
||||
<th>Gewicht</th>
|
||||
<th>Preis</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>[°Oe]</th>
|
||||
<th>[°KMW]</th>
|
||||
<th>[@Model.CurrencySymbol/kg]</th>
|
||||
<th>[%]</th>
|
||||
<th>[kg]</th>
|
||||
<th colspan="2">[kg]</th>
|
||||
<th>[@Model.CurrencySymbol/kg]</th>
|
||||
<th>[@Model.CurrencySymbol]</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@{
|
||||
string FormatRow(int? weight, decimal? amount) {
|
||||
var w = weight == null || weight == 0 ? "-" : $"{weight:N0}";
|
||||
return $"<td class='weight'>{w}</td><td class='amount'>{amount?.ToString("0." + string.Concat(Enumerable.Repeat('0', Model.Precision)))}</td>";
|
||||
}
|
||||
string? last = null;
|
||||
}
|
||||
@foreach (var part in Model.Parts) {
|
||||
var pmt = part.Payment;
|
||||
var abs = pmt?.ModAbs == null || pmt?.ModAbs == 0 ? "-" : pmt?.ModAbs.ToString("0." + string.Concat(Enumerable.Repeat('0', Model.Precision)));
|
||||
var rel = pmt?.ModRel == null || pmt?.ModRel == 0 ? "-" : $"{pmt?.ModRel * 100:0.00##}";
|
||||
<tr class="first @(bucketNum <= 1 ? "last" : "") @(last != null && last != part.SortId ? "new" : "")">
|
||||
<td rowspan="@bucketNum" class="lsnr">@part.Delivery.LsNr</td>
|
||||
<td rowspan="@bucketNum" class="dpnr">@part.DPNr</td>
|
||||
<td rowspan="@bucketNum" class="variant">@part.Variant.Name</td>
|
||||
<td rowspan="@bucketNum" class="attribute">@part.Attribute?.Name</td>
|
||||
<td rowspan="@bucketNum" class="oe">@($"{part.Oe:N0}")</td>
|
||||
<td rowspan="@bucketNum" class="kmw">@($"{part.Kmw:N1}")</td>
|
||||
<td rowspan="@bucketNum" class="abs">@abs</td>
|
||||
<td rowspan="@bucketNum" class="rel">@rel</td>
|
||||
<!--FIXME price-->
|
||||
@Raw(FormatRow(pmt?.DeliveryPart.Buckets?.ElementAtOrDefault(0)?.Value, 0))
|
||||
<td rowspan="@bucketNum" class="amount sum">@($"{pmt?.Amount:N2}")</td>
|
||||
</tr>
|
||||
@for (int i = 1; i < bucketNum; i++) {
|
||||
<tr class="@(i == bucketNum - 1 ? "last" : "")">
|
||||
<!--FIXME price-->
|
||||
@Raw(FormatRow(pmt?.DeliveryPart.Buckets?.ElementAtOrDefault(i)?.Value, 0))
|
||||
@foreach (var p in Model.Data.Rows) {
|
||||
var rows = Math.Max(p.Buckets.Length, p.Modifiers.Length + 1);
|
||||
var first = true;
|
||||
//var pmt = p.Payment;
|
||||
var abs = 0; // pmt?.ModAbs == null || pmt?.ModAbs == 0 ? "-" : pmt?.ModAbs.ToString("0." + string.Concat(Enumerable.Repeat('0', Model.Precision)));
|
||||
var rel = 0; // pmt?.ModRel == null || pmt?.ModRel == 0 ? "-" : $"{pmt?.ModRel * 100:0.00##}";
|
||||
@for (int i = 0; i < rows; i++) {
|
||||
<tr class="@(first ? "first" : "") @(rows > i + 1 ? "trailing" : "")">
|
||||
@if (first) {
|
||||
<td rowspan="@rows" class="lsnr">@p.LsNr</td>
|
||||
<td rowspan="@rows" class="dpnr">@p.DPNr</td>
|
||||
<td class="variant small">@p.Variant</td>
|
||||
<td class="attribute small">@p.Attribute</td>
|
||||
<td rowspan="@rows" class="oe">@($"{p.Gradation.Oe:N0}")</td>
|
||||
<td rowspan="@rows" class="kmw">@($"{p.Gradation.Kmw:N1}")</td>
|
||||
<td rowspan="@rows" class="abs">@abs</td>
|
||||
<td rowspan="@rows" class="rel">@rel</td>
|
||||
}
|
||||
@if (i > 0 && i <= p.Modifiers.Length) {
|
||||
<td colspan="2" class="mod">@(p.Modifiers[i - 1])</td>
|
||||
} else if (i > 0) {
|
||||
<td colspan="2"></td>
|
||||
}
|
||||
@if (i < p.Buckets.Length) {
|
||||
var bucket = p.Buckets[i];
|
||||
<td class="geb small">@bucket.Name:</td>
|
||||
<td class="weight">@($"{bucket.Value:N0}")</td>
|
||||
<td class="price">@($"{bucket.Price:N4}")</td>
|
||||
} else {
|
||||
<td colspan="3"></td>
|
||||
}
|
||||
@if (first) {
|
||||
<td rowspan="@rows" class="amount">@($"{1000:N2}")</td>
|
||||
first = false;
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
last = part.SortId;
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -62,3 +62,7 @@ table.credit tbody tr.last td {
|
||||
table.credit tbody tr.new {
|
||||
border-top: 0.5pt solid black;
|
||||
}
|
||||
|
||||
table.credit .small {
|
||||
font-size: 8pt;
|
||||
}
|
||||
|
@ -79,8 +79,8 @@
|
||||
first = false;
|
||||
}
|
||||
</tr>
|
||||
lastVariant = p.Variant;
|
||||
}
|
||||
lastVariant = p.Variant;
|
||||
}
|
||||
<tr class="sum">
|
||||
<td colspan="8">Gesamt:</td>
|
||||
|
Reference in New Issue
Block a user