Compare commits
9 Commits
898cece0d3
...
v0.2.0
| Author | SHA1 | Date | |
|---|---|---|---|
| b2a78907cf | |||
| 7bcf532b26 | |||
| 595f9a049c | |||
| 80ed90941d | |||
| 77cee53f2d | |||
| 1a673f4b3a | |||
| 5ad8c88319 | |||
| 30aaa64f59 | |||
| 352bf840c3 |
@@ -26,7 +26,7 @@ namespace Elwig.Dialogs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateButtons() {
|
private void UpdateButtons() {
|
||||||
ConfirmButton.IsEnabled = WeightInput.Text.Length > 0 && ReasonInput.Text.Trim().Length > 0;
|
ConfirmButton.IsEnabled = WeightInput.Text.Length > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void WeightInput_TextChanged(object sender, TextChangedEventArgs evt) {
|
private void WeightInput_TextChanged(object sender, TextChangedEventArgs evt) {
|
||||||
|
|||||||
@@ -5,8 +5,9 @@ namespace Elwig.Documents {
|
|||||||
|
|
||||||
public Member Member;
|
public Member Member;
|
||||||
public bool IncludeSender = false;
|
public bool IncludeSender = false;
|
||||||
public string Aside { get; set; }
|
public bool UseBillingAddress = false;
|
||||||
public string? Location { get; set; }
|
public string Aside;
|
||||||
|
public string? Location;
|
||||||
|
|
||||||
public BusinessDocument(string title, Member m, bool includeSender = false) : base(title) {
|
public BusinessDocument(string title, Member m, bool includeSender = false) : base(title) {
|
||||||
Member = m;
|
Member = m;
|
||||||
@@ -24,10 +25,11 @@ namespace Elwig.Documents {
|
|||||||
public string Address {
|
public string Address {
|
||||||
get {
|
get {
|
||||||
var b = Member.BillingAddress;
|
var b = Member.BillingAddress;
|
||||||
var plz = (b == null) ? Member.PostalDest.AtPlz : b.PostalDest.AtPlz;
|
if (b != null && UseBillingAddress) {
|
||||||
if (b != null) {
|
var plz = b.PostalDest.AtPlz;
|
||||||
return $"{b.Name}\n{Member.AdministrativeName}\n{b.Address}\n{plz.Plz} {plz.Dest}\nÖsterreich";
|
return $"{b.Name}\n{Member.AdministrativeName}\n{b.Address}\n{plz.Plz} {plz.Dest}\nÖsterreich";
|
||||||
} else {
|
} else {
|
||||||
|
var plz = Member.PostalDest.AtPlz;
|
||||||
return $"{Member.AdministrativeName}\n{Member.Address}\n{plz.Plz} {plz.Dest}\nÖsterreich";
|
return $"{Member.AdministrativeName}\n{Member.Address}\n{plz.Plz} {plz.Dest}\nÖsterreich";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
86
Elwig/Documents/CreditNote.cshtml
Normal file
86
Elwig/Documents/CreditNote.cshtml
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
@using RazorLight
|
||||||
|
@inherits TemplatePage<Elwig.Documents.CreditNote>
|
||||||
|
@model Elwig.Documents.CreditNote
|
||||||
|
@{ Layout = "BusinessDocument"; }
|
||||||
|
<link rel="stylesheet" href="file:///@Raw(Model.DataPath)\resources\style-creditnote.css"/>
|
||||||
|
@{
|
||||||
|
var bucketNum = Model.BucketNames.Length;
|
||||||
|
}
|
||||||
|
<main>
|
||||||
|
<div class="date">@Model.Location, am @($"{Model.Date:dd.MM.yyyy}")</div>
|
||||||
|
<h1>@Model.Title</h1>
|
||||||
|
<table class="credit">
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 24mm;"/>
|
||||||
|
<col style="width: 6mm;"/>
|
||||||
|
<col style="width: 31mm;"/>
|
||||||
|
<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;"/>
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th rowspan="3" style="text-align: left;">Lieferschein-Nr.</th>
|
||||||
|
<th rowspan="3">Pos.</th>
|
||||||
|
<th rowspan="3" style="text-align: left;">Sorte</th>
|
||||||
|
<th rowspan="3" style="text-align: left;">Attribut(e)</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">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>[@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">@string.Join(" / ", part.PartAttributes.Select(a => a.AttrId))</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>
|
||||||
|
@Raw(FormatRow(pmt?.Buckets?.ElementAtOrDefault(0), pmt?.Prices?.ElementAtOrDefault(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" : "")">
|
||||||
|
@Raw(FormatRow(pmt?.Buckets?.ElementAtOrDefault(i), pmt?.Prices?.ElementAtOrDefault(i)))
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
last = part.SortId;
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</main>
|
||||||
39
Elwig/Documents/CreditNote.cshtml.cs
Normal file
39
Elwig/Documents/CreditNote.cshtml.cs
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
using Elwig.Helpers;
|
||||||
|
using Elwig.Models;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace Elwig.Documents {
|
||||||
|
public class CreditNote : BusinessDocument {
|
||||||
|
|
||||||
|
public Credit Credit;
|
||||||
|
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) {
|
||||||
|
UseBillingAddress = true;
|
||||||
|
Credit = c;
|
||||||
|
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>" +
|
||||||
|
$"</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 = c.Payment.Variant.BucketNames;
|
||||||
|
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, LENGTH(attributes) DESC, attributes, kmw DESC, date, time, dpnr
|
||||||
|
""").ToList();
|
||||||
|
}
|
||||||
|
}}
|
||||||
@@ -10,6 +10,7 @@ namespace Elwig.Documents {
|
|||||||
public IEnumerable<(string, string, int, int, int)> MemberBuckets;
|
public IEnumerable<(string, string, int, int, int)> MemberBuckets;
|
||||||
|
|
||||||
public DeliveryNote(Delivery d, AppDbContext ctx) : base($"Traubenübernahmeschein Nr. {d.LsNr}", d.Member) {
|
public DeliveryNote(Delivery d, AppDbContext ctx) : base($"Traubenübernahmeschein Nr. {d.LsNr}", d.Member) {
|
||||||
|
UseBillingAddress = true;
|
||||||
Delivery = d;
|
Delivery = d;
|
||||||
Aside = Aside.Replace("</table>", "") +
|
Aside = Aside.Replace("</table>", "") +
|
||||||
$"<thead><tr><th colspan='2'>Lieferung</th></tr></thead><tbody>" +
|
$"<thead><tr><th colspan='2'>Lieferung</th></tr></thead><tbody>" +
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ namespace Elwig.Documents {
|
|||||||
name = "BusinessLetter";
|
name = "BusinessLetter";
|
||||||
} else if (this is DeliveryNote) {
|
} else if (this is DeliveryNote) {
|
||||||
name = "DeliveryNote";
|
name = "DeliveryNote";
|
||||||
|
} else if (this is CreditNote) {
|
||||||
|
name = "CreditNote";
|
||||||
} else {
|
} else {
|
||||||
throw new InvalidOperationException("Invalid document object");
|
throw new InvalidOperationException("Invalid document object");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ namespace Elwig.Documents {
|
|||||||
await e.CompileTemplateAsync("BusinessDocument");
|
await e.CompileTemplateAsync("BusinessDocument");
|
||||||
await e.CompileTemplateAsync("BusinessLetter");
|
await e.CompileTemplateAsync("BusinessLetter");
|
||||||
await e.CompileTemplateAsync("DeliveryNote");
|
await e.CompileTemplateAsync("DeliveryNote");
|
||||||
|
await e.CompileTemplateAsync("CreditNote");
|
||||||
|
|
||||||
Engine = e;
|
Engine = e;
|
||||||
evtHandler();
|
evtHandler();
|
||||||
|
|||||||
64
Elwig/Documents/style-creditnote.css
Normal file
64
Elwig/Documents/style-creditnote.css
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
|
||||||
|
table.credit {
|
||||||
|
font-size: 10pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.credit th,
|
||||||
|
table.credit td {
|
||||||
|
padding: 0 0.25mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.credit thead {
|
||||||
|
font-size: 8pt
|
||||||
|
}
|
||||||
|
|
||||||
|
table.credit thead th {
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: italic;
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.credit td {
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.credit .oe,
|
||||||
|
table.credit .kmw {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.credit .dpnr {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.credit .amount,
|
||||||
|
table.credit .weight {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.credit .rel,
|
||||||
|
table.credit .abs {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.credit .amount.sum {
|
||||||
|
vertical-align: bottom;
|
||||||
|
padding-bottom: 1mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.credit tbody tr:not(.first):not(.last) {
|
||||||
|
break-before: avoid;
|
||||||
|
break-after: avoid;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.credit tbody tr.first td {
|
||||||
|
padding-top: 1mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.credit tbody tr.last td {
|
||||||
|
padding-bottom: 1mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.credit tbody tr.new {
|
||||||
|
border-top: 0.5pt solid black;
|
||||||
|
}
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
<UseWPF>true</UseWPF>
|
<UseWPF>true</UseWPF>
|
||||||
<PreserveCompilationContext>true</PreserveCompilationContext>
|
<PreserveCompilationContext>true</PreserveCompilationContext>
|
||||||
<ApplicationIcon>elwig.ico</ApplicationIcon>
|
<ApplicationIcon>elwig.ico</ApplicationIcon>
|
||||||
<Version>0.1.0</Version>
|
<Version>0.2.0</Version>
|
||||||
<SatelliteResourceLanguages>de-AT</SatelliteResourceLanguages>
|
<SatelliteResourceLanguages>de-AT</SatelliteResourceLanguages>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ namespace Elwig.Helpers {
|
|||||||
public DbSet<DeliveryPartModifier> DeliveryPartModifiers { get; private set; }
|
public DbSet<DeliveryPartModifier> DeliveryPartModifiers { get; private set; }
|
||||||
public DbSet<PaymentVar> PaymentVariants { get; private set; }
|
public DbSet<PaymentVar> PaymentVariants { get; private set; }
|
||||||
public DbSet<PaymentMember> MemberPayments { get; private set; }
|
public DbSet<PaymentMember> MemberPayments { get; private set; }
|
||||||
|
public DbSet<Credit> Credits { get; private set; }
|
||||||
|
|
||||||
private readonly StreamWriter? LogFile = null;
|
private readonly StreamWriter? LogFile = null;
|
||||||
public static DateTime LastWriteTime => File.GetLastWriteTime(App.Config.DatabaseFile);
|
public static DateTime LastWriteTime => File.GetLastWriteTime(App.Config.DatabaseFile);
|
||||||
|
|||||||
@@ -21,12 +21,9 @@ namespace Elwig.Helpers.Billing {
|
|||||||
public static IEnumerable<Transaction> FromPaymentVariant(PaymentVar variant) {
|
public static IEnumerable<Transaction> FromPaymentVariant(PaymentVar variant) {
|
||||||
var last = variant.Season.PaymentVariants.Where(v => v.TransferDate != null).OrderBy(v => v.TransferDate).LastOrDefault();
|
var last = variant.Season.PaymentVariants.Where(v => v.TransferDate != null).OrderBy(v => v.TransferDate).LastOrDefault();
|
||||||
var dict = last?.MemberPayments.ToDictionary(m => m.MgNr, m => m.Amount) ?? new();
|
var dict = last?.MemberPayments.ToDictionary(m => m.MgNr, m => m.Amount) ?? new();
|
||||||
return variant.MemberPayments
|
return variant.Credits
|
||||||
.OrderBy(m => m.MgNr)
|
.OrderBy(c => c.MgNr)
|
||||||
.Select(m => {
|
.Select(c => new Transaction(c.Member, c.Amount, variant.Season.CurrencyCode, c.TgNr))
|
||||||
var amt = Math.Round(dict.GetValueOrDefault(m.MgNr, 0), 2);
|
|
||||||
return new Transaction(m.Member, m.Amount - amt, m.Variant.Season.CurrencyCode, m.TgNr ?? 0);
|
|
||||||
})
|
|
||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
104
Elwig/Models/Credit.cs
Normal file
104
Elwig/Models/Credit.cs
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
using Elwig.Helpers;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using System;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
|
namespace Elwig.Models {
|
||||||
|
[Table("credit"), PrimaryKey("Year", "TgNr"), Index("Year", "AvNr", "MgNr", IsUnique = true)]
|
||||||
|
public class Credit {
|
||||||
|
[Column("year")]
|
||||||
|
public int Year { get; set; }
|
||||||
|
|
||||||
|
[Column("tgnr")]
|
||||||
|
public int TgNr { get; set; }
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public string TgId => $"{Year}/{TgNr:000}";
|
||||||
|
|
||||||
|
[Column("mgnr")]
|
||||||
|
public int MgNr { get; set; }
|
||||||
|
|
||||||
|
[Column("avnr")]
|
||||||
|
public int AvNr { get; set; }
|
||||||
|
|
||||||
|
[Column("net_amount")]
|
||||||
|
public long NetAmountValue { get; set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal NetAmount {
|
||||||
|
get => Utils.DecFromDb(NetAmountValue, 2);
|
||||||
|
set => NetAmountValue = Utils.DecToDb(value, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("prev_net_amount")]
|
||||||
|
public long? PrevNetAmountValue { get; set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal? PrevNetAmount {
|
||||||
|
get => PrevNetAmountValue != null ? Utils.DecFromDb(PrevNetAmountValue.Value, 2) : null;
|
||||||
|
set => PrevNetAmountValue = value != null ? Utils.DecToDb(value.Value, 2) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("vat")]
|
||||||
|
public double VatValue { get; set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal Vat {
|
||||||
|
get => (decimal)VatValue;
|
||||||
|
set => VatValue = (double)value;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("vat_amount")]
|
||||||
|
public long VatAmountValue { get; private set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal VatAmount {
|
||||||
|
get => Utils.DecFromDb(VatAmountValue, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("gross_amount")]
|
||||||
|
public long GrossAmountValue { get; private set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal GrossAmount {
|
||||||
|
get => Utils.DecFromDb(GrossAmountValue, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("modifiers")]
|
||||||
|
public long? ModifiersValue { get; set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal? Modifiers {
|
||||||
|
get => ModifiersValue != null ? Utils.DecFromDb(ModifiersValue.Value, 2) : null;
|
||||||
|
set => ModifiersValue = value != null ? Utils.DecToDb(value.Value, 2) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("prev_modifiers")]
|
||||||
|
public long? PrevModifiersValue { get; set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal? PrevModifiers {
|
||||||
|
get => PrevModifiersValue != null ? Utils.DecFromDb(PrevModifiersValue.Value, 2) : null;
|
||||||
|
set => PrevModifiersValue = value != null ? Utils.DecToDb(value.Value, 2) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("amount")]
|
||||||
|
public long AmountValue { get; private set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal Amount {
|
||||||
|
get => Utils.DecFromDb(AmountValue, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("ctime")]
|
||||||
|
public long CTime { get; private set; }
|
||||||
|
[NotMapped]
|
||||||
|
public DateTime CreatedTimestamp => DateTimeOffset.FromUnixTimeSeconds(CTime).LocalDateTime;
|
||||||
|
|
||||||
|
[Column("mtime")]
|
||||||
|
public long MTime { get; private set; }
|
||||||
|
[NotMapped]
|
||||||
|
public DateTime ModifiedTimestamp => DateTimeOffset.FromUnixTimeSeconds(CTime).LocalDateTime;
|
||||||
|
|
||||||
|
[ForeignKey("Year, AvNr, MgNr")]
|
||||||
|
public virtual PaymentMember Payment { get; private set; }
|
||||||
|
|
||||||
|
[ForeignKey("Year, AvNr")]
|
||||||
|
public virtual PaymentVar Variant { get; private set; }
|
||||||
|
|
||||||
|
[ForeignKey("MgNr")]
|
||||||
|
public virtual Member Member { get; private set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -30,15 +30,10 @@ namespace Elwig.Models {
|
|||||||
|
|
||||||
[Column("kmw")]
|
[Column("kmw")]
|
||||||
public double Kmw { get; set; }
|
public double Kmw { get; set; }
|
||||||
|
|
||||||
[NotMapped]
|
[NotMapped]
|
||||||
public double Oe {
|
public double Oe {
|
||||||
get {
|
get => Utils.KmwToOe(Kmw);
|
||||||
return Utils.KmwToOe(Kmw);
|
set => Kmw = Utils.OeToKmw(value);
|
||||||
}
|
|
||||||
set {
|
|
||||||
Kmw = Utils.OeToKmw(value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Column("qualid")]
|
[Column("qualid")]
|
||||||
@@ -107,6 +102,10 @@ namespace Elwig.Models {
|
|||||||
[NotMapped]
|
[NotMapped]
|
||||||
public IEnumerable<Modifier> Modifiers => PartModifiers.Select(m => m.Modifier).OrderBy(m => m.Ordering);
|
public IEnumerable<Modifier> Modifiers => PartModifiers.Select(m => m.Modifier).OrderBy(m => m.Ordering);
|
||||||
|
|
||||||
|
[InverseProperty("DeliveryPart")]
|
||||||
|
public virtual PaymentDeliveryPart? Payment { get; private set; }
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
public string OriginString => Origin.OriginString + "\n" + (Kg?.Gl != null ? $" / {Kg.Gl.Name}" : "") + (Kg != null ? $" / {Kg.AtKg.Gem.Name} / KG {Kg.AtKg.Name}" : "") + (Rd != null ? $" / Ried {Rd.Name}" : "");
|
public string OriginString => Origin.OriginString + "\n" + (Kg?.Gl != null ? $" / {Kg.Gl.Name}" : "") + (Kg != null ? $" / {Kg.AtKg.Gem.Name} / KG {Kg.AtKg.Name}" : "") + (Rd != null ? $" / Ried {Rd.Name}" : "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
158
Elwig/Models/PaymentDeliveryPart.cs
Normal file
158
Elwig/Models/PaymentDeliveryPart.cs
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace Elwig.Models {
|
||||||
|
[Table("payment_delivery_part"), PrimaryKey("Year", "DId", "DPNr", "AvNr")]
|
||||||
|
public class PaymentDeliveryPart {
|
||||||
|
[Column("year")]
|
||||||
|
public int Year { get; set; }
|
||||||
|
|
||||||
|
[Column("did")]
|
||||||
|
public int DId { get; set; }
|
||||||
|
|
||||||
|
[Column("dpnr")]
|
||||||
|
public int DPNr { get; set; }
|
||||||
|
|
||||||
|
[Column("avnr")]
|
||||||
|
public int AvNr { get; set; }
|
||||||
|
|
||||||
|
[Column("mod_abs")]
|
||||||
|
public long ModAbsValue { get; set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal ModAbs {
|
||||||
|
get => Variant.Season.DecFromDb(ModAbsValue);
|
||||||
|
set => ModAbsValue = Variant.Season.DecToDb(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("mod_rel")]
|
||||||
|
public double ModRelValue { get; set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal ModRel {
|
||||||
|
get => (decimal)ModRelValue;
|
||||||
|
set => ModRelValue = (double)value;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("bucket_1")]
|
||||||
|
public int? Bucket1 { get; set; }
|
||||||
|
|
||||||
|
[Column("bucket_2")]
|
||||||
|
public int? Bucket2 { get; set; }
|
||||||
|
|
||||||
|
[Column("bucket_3")]
|
||||||
|
public int? Bucket3 { get; set; }
|
||||||
|
|
||||||
|
[Column("bucket_4")]
|
||||||
|
public int? Bucket4 { get; set; }
|
||||||
|
|
||||||
|
[Column("bucket_5")]
|
||||||
|
public int? Bucket5 { get; set; }
|
||||||
|
|
||||||
|
[Column("bucket_6")]
|
||||||
|
public int? Bucket6 { get; set; }
|
||||||
|
|
||||||
|
[Column("bucket_7")]
|
||||||
|
public int? Bucket7 { get; set; }
|
||||||
|
|
||||||
|
[Column("bucket_8")]
|
||||||
|
public int? Bucket8 { get; set; }
|
||||||
|
|
||||||
|
[Column("bucket_9")]
|
||||||
|
public int? Bucket9 { get; set; }
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public int[] Buckets => (new int?[] { Bucket1, Bucket2, Bucket3, Bucket4, Bucket5, Bucket6, Bucket7, Bucket8, Bucket9 })
|
||||||
|
.Where(b => b != null).Select(b => b.Value).ToArray();
|
||||||
|
|
||||||
|
[Column("price_1")]
|
||||||
|
public long? Price1Value { get; set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal? Price1 {
|
||||||
|
get => Price1Value != null ? Variant.Season.DecFromDb(Price1Value.Value) : null;
|
||||||
|
set => Price1Value = value != null ? Variant.Season.DecToDb(value.Value) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("price_2")]
|
||||||
|
public long? Price2Value { get; set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal? Price2 {
|
||||||
|
get => Price2Value != null ? Variant.Season.DecFromDb(Price2Value.Value) : null;
|
||||||
|
set => Price2Value = value != null ? Variant.Season.DecToDb(value.Value) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("price_3")]
|
||||||
|
public long? Price3Value { get; set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal? Price3 {
|
||||||
|
get => Price3Value != null ? Variant.Season.DecFromDb(Price3Value.Value) : null;
|
||||||
|
set => Price3Value = value != null ? Variant.Season.DecToDb(value.Value) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("price_4")]
|
||||||
|
public long? Price4Value { get; set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal? Price4 {
|
||||||
|
get => Price4Value != null ? Variant.Season.DecFromDb(Price4Value.Value) : null;
|
||||||
|
set => Price4Value = value != null ? Variant.Season.DecToDb(value.Value) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("price_5")]
|
||||||
|
public long? Price5Value { get; set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal? Price5 {
|
||||||
|
get => Price5Value != null ? Variant.Season.DecFromDb(Price5Value.Value) : null;
|
||||||
|
set => Price5Value = value != null ? Variant.Season.DecToDb(value.Value) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("price_6")]
|
||||||
|
public long? Price6Value { get; set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal? Price6 {
|
||||||
|
get => Price6Value != null ? Variant.Season.DecFromDb(Price6Value.Value) : null;
|
||||||
|
set => Price6Value = value != null ? Variant.Season.DecToDb(value.Value) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("price_7")]
|
||||||
|
public long? Price7Value { get; set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal? Price7 {
|
||||||
|
get => Price7Value != null ? Variant.Season.DecFromDb(Price7Value.Value) : null;
|
||||||
|
set => Price7Value = value != null ? Variant.Season.DecToDb(value.Value) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("price_8")]
|
||||||
|
public long? Price8Value { get; set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal? Price8 {
|
||||||
|
get => Price8Value != null ? Variant.Season.DecFromDb(Price8Value.Value) : null;
|
||||||
|
set => Price8Value = value != null ? Variant.Season.DecToDb(value.Value) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("price_9")]
|
||||||
|
public long? Price9Value { get; set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal? Price9 {
|
||||||
|
get => Price9Value != null ? Variant.Season.DecFromDb(Price9Value.Value) : null;
|
||||||
|
set => Price9Value = value != null ? Variant.Season.DecToDb(value.Value) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Column("amount")]
|
||||||
|
public long? AmountValue { get; set; }
|
||||||
|
[NotMapped]
|
||||||
|
public decimal? Amount {
|
||||||
|
get => AmountValue != null ? Variant.Season.DecFromDb(AmountValue.Value) : null;
|
||||||
|
set => AmountValue = value != null ? Variant.Season.DecToDb(value.Value) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public decimal[] Prices => (new decimal?[] { Price1, Price2, Price3, Price4, Price5, Price6, Price7, Price8, Price9 })
|
||||||
|
.Where(p => p != null).Select(p => p.Value).ToArray();
|
||||||
|
|
||||||
|
[ForeignKey("Year, AvNr")]
|
||||||
|
public virtual PaymentVar Variant { get; private set; }
|
||||||
|
|
||||||
|
[ForeignKey("Year, DId, DPNr")]
|
||||||
|
public virtual DeliveryPart DeliveryPart { get; private set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
namespace Elwig.Models {
|
namespace Elwig.Models {
|
||||||
[Table("payment_member"), PrimaryKey("Year", "AvNr", "MgNr"), Index("Year", "TgNr", IsUnique = true)]
|
[Table("payment_member"), PrimaryKey("Year", "AvNr", "MgNr")]
|
||||||
public class PaymentMember {
|
public class PaymentMember {
|
||||||
[Column("year")]
|
[Column("year")]
|
||||||
public int Year { get; set; }
|
public int Year { get; set; }
|
||||||
@@ -16,9 +16,6 @@ namespace Elwig.Models {
|
|||||||
[Column("amount")]
|
[Column("amount")]
|
||||||
public long AmountValue { get; set; }
|
public long AmountValue { get; set; }
|
||||||
|
|
||||||
[Column("tgnr")]
|
|
||||||
public int? TgNr { get; set; }
|
|
||||||
|
|
||||||
[NotMapped]
|
[NotMapped]
|
||||||
public decimal Amount {
|
public decimal Amount {
|
||||||
get => Variant.Season.DecFromDb(AmountValue);
|
get => Variant.Season.DecFromDb(AmountValue);
|
||||||
@@ -30,5 +27,8 @@ namespace Elwig.Models {
|
|||||||
|
|
||||||
[ForeignKey("MgNr")]
|
[ForeignKey("MgNr")]
|
||||||
public virtual Member Member { get; private set; }
|
public virtual Member Member { get; private set; }
|
||||||
|
|
||||||
|
[InverseProperty("Payment")]
|
||||||
|
public virtual Credit? Credit { get; private set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace Elwig.Models {
|
namespace Elwig.Models {
|
||||||
[Table("payment_variant"), PrimaryKey("Year", "AvNr")]
|
[Table("payment_variant"), PrimaryKey("Year", "AvNr")]
|
||||||
@@ -66,6 +67,10 @@ namespace Elwig.Models {
|
|||||||
[Column("bucket_9_name")]
|
[Column("bucket_9_name")]
|
||||||
public string? Bucket9Name { get; set; }
|
public string? Bucket9Name { get; set; }
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public string[] BucketNames => (new string?[] { Bucket1Name, Bucket2Name, Bucket3Name, Bucket4Name, Bucket5Name, Bucket6Name, Bucket7Name, Bucket8Name, Bucket9Name })
|
||||||
|
.Where(n => n != null).Select(n => n ?? "").ToArray();
|
||||||
|
|
||||||
[Column("comment")]
|
[Column("comment")]
|
||||||
public string? Comment { get; set; }
|
public string? Comment { get; set; }
|
||||||
|
|
||||||
@@ -77,5 +82,8 @@ namespace Elwig.Models {
|
|||||||
|
|
||||||
[InverseProperty("Variant")]
|
[InverseProperty("Variant")]
|
||||||
public virtual ISet<PaymentMember> MemberPayments { get; private set; }
|
public virtual ISet<PaymentMember> MemberPayments { get; private set; }
|
||||||
|
|
||||||
|
[InverseProperty("Variant")]
|
||||||
|
public virtual ISet<Credit> Credits { get; private set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,6 +82,14 @@ namespace Elwig.Windows {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void OnClosing(object? sender, CancelEventArgs evt) {
|
private void OnClosing(object? sender, CancelEventArgs evt) {
|
||||||
|
if ((IsCreating || IsEditing) && HasChanged) {
|
||||||
|
var r = System.Windows.MessageBox.Show("Soll das Fenster wirklich geschlossen werden?", "Schlie<69>en best<73>tigen",
|
||||||
|
MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No);
|
||||||
|
if (r != MessageBoxResult.Yes) {
|
||||||
|
evt.Cancel = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
IsClosing = true;
|
IsClosing = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -293,12 +301,20 @@ namespace Elwig.Windows {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected bool HasChanged =>
|
protected bool HasChanged =>
|
||||||
!IsValid ||
|
IsEditing && (
|
||||||
TextBoxInputs.Any(InputHasChanged) ||
|
!IsValid ||
|
||||||
ComboBoxInputs.Any(InputHasChanged) ||
|
TextBoxInputs.Any(InputHasChanged) ||
|
||||||
CheckComboBoxInputs.Any(InputHasChanged) ||
|
ComboBoxInputs.Any(InputHasChanged) ||
|
||||||
CheckBoxInputs.Any(InputHasChanged) ||
|
CheckComboBoxInputs.Any(InputHasChanged) ||
|
||||||
RadioButtonInputs.Any(InputHasChanged);
|
CheckBoxInputs.Any(InputHasChanged) ||
|
||||||
|
RadioButtonInputs.Any(InputHasChanged)
|
||||||
|
) || IsCreating && (
|
||||||
|
TextBoxInputs.Any(i => InputIsNotDefault(i) || (!i.IsReadOnly && i.Text != "")) ||
|
||||||
|
ComboBoxInputs.Any(i => InputIsNotDefault(i) || (i.IsEnabled && i.SelectedItem != null)) ||
|
||||||
|
CheckComboBoxInputs.Any(i => InputIsNotDefault(i) || i.SelectedItem != null) ||
|
||||||
|
CheckBoxInputs.Any(InputIsNotDefault) ||
|
||||||
|
RadioButtonInputs.Any(InputIsNotDefault)
|
||||||
|
);
|
||||||
|
|
||||||
protected void UpdatePlz(TextBox plzInput, ComboBox ortInput) {
|
protected void UpdatePlz(TextBox plzInput, ComboBox ortInput) {
|
||||||
var plzInputValid = GetInputValid(plzInput);
|
var plzInputValid = GetInputValid(plzInput);
|
||||||
|
|||||||
@@ -179,8 +179,8 @@ namespace Elwig.Windows {
|
|||||||
bool ch = HasChanged, v = IsValid;
|
bool ch = HasChanged, v = IsValid;
|
||||||
ResetButton.IsEnabled = ch;
|
ResetButton.IsEnabled = ch;
|
||||||
SaveButton.IsEnabled = v && ch;
|
SaveButton.IsEnabled = v && ch;
|
||||||
FinishButton.IsEnabled = v || !ch;
|
FinishButton.IsEnabled = v && ch;
|
||||||
NewDeliveryPartButton.IsEnabled = v;
|
NewDeliveryPartButton.IsEnabled = v && ch;
|
||||||
CancelCreatingButton.IsEnabled = DeliveryList.SelectedItem == null || DeliveryPartList.SelectedItem == null;
|
CancelCreatingButton.IsEnabled = DeliveryList.SelectedItem == null || DeliveryPartList.SelectedItem == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -331,7 +331,7 @@ namespace Elwig.Windows {
|
|||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
ControlUtils.RenewItemsSource(DeliveryList, deliveries, d => ((d as Delivery)?.Year, (d as Delivery)?.DId), DeliveryList_SelectionChanged, ControlUtils.RenewSourceDefault.IfOnly, !updateSort);
|
ControlUtils.RenewItemsSource(DeliveryList, deliveries, d => ((d as Delivery)?.Year, (d as Delivery)?.DId), DeliveryList_SelectionChanged, IsCreating ? ControlUtils.RenewSourceDefault.None : ControlUtils.RenewSourceDefault.IfOnly, !updateSort);
|
||||||
|
|
||||||
var members = deliveries.Select(d => d.Member).DistinctBy(m => m.MgNr).ToList();
|
var members = deliveries.Select(d => d.Member).DistinctBy(m => m.MgNr).ToList();
|
||||||
StatusMembers.Text = $"Mitglieder: {members.Count}" + (members.Count > 0 && members.Count <= 4 ? $" ({string.Join(", ", members.Select(m => m.AdministrativeName))})" : "");
|
StatusMembers.Text = $"Mitglieder: {members.Count}" + (members.Count > 0 && members.Count <= 4 ? $" ({string.Join(", ", members.Select(m => m.AdministrativeName))})" : "");
|
||||||
@@ -423,10 +423,11 @@ namespace Elwig.Windows {
|
|||||||
Menu_Export_Bki.Items.Add(i);
|
Menu_Export_Bki.Items.Add(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME on "only one" delivery, RenewContext doees not work
|
||||||
await RefreshDeliveryList();
|
await RefreshDeliveryList();
|
||||||
var d = DeliveryList.SelectedItem as Delivery;
|
var d = DeliveryList.SelectedItem as Delivery;
|
||||||
var y = d?.Year ?? Utils.CurrentLastSeason;
|
var y = d?.Year ?? Utils.CurrentLastSeason;
|
||||||
ControlUtils.RenewItemsSource(MemberInput, await Context.Members.Where(m => m.IsActive || !IsReceipt).OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToListAsync(), i => (i as Member)?.MgNr);
|
ControlUtils.RenewItemsSource(MemberInput, await Context.Members.Where(m => m.IsActive || !IsCreating).OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToListAsync(), i => (i as Member)?.MgNr);
|
||||||
ControlUtils.RenewItemsSource(BranchInput, await Context.Branches.OrderBy(b => b.Name).ToListAsync(), i => (i as Branch)?.ZwstId);
|
ControlUtils.RenewItemsSource(BranchInput, await Context.Branches.OrderBy(b => b.Name).ToListAsync(), i => (i as Branch)?.ZwstId);
|
||||||
ControlUtils.RenewItemsSource(WineVarietyInput, await Context.WineVarieties.OrderBy(v => v.Name).ToListAsync(), i => (i as WineVar)?.SortId);
|
ControlUtils.RenewItemsSource(WineVarietyInput, await Context.WineVarieties.OrderBy(v => v.Name).ToListAsync(), i => (i as WineVar)?.SortId);
|
||||||
ControlUtils.RenewItemsSource(AttributesInput, await Context.WineAttributes.Where(a => IsCreating || a.IsActive).OrderBy(a => a.Name).ToListAsync(), i => (i as WineAttr)?.AttrId);
|
ControlUtils.RenewItemsSource(AttributesInput, await Context.WineAttributes.Where(a => IsCreating || a.IsActive).OrderBy(a => a.Name).ToListAsync(), i => (i as WineAttr)?.AttrId);
|
||||||
@@ -729,7 +730,7 @@ namespace Elwig.Windows {
|
|||||||
MemberInput.SelectedItem = valid ? Context.Members.Find(int.Parse(MgNrInput.Text)) : null;
|
MemberInput.SelectedItem = valid ? Context.Members.Find(int.Parse(MgNrInput.Text)) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MemberInput_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
|
private void MemberInput_SelectionChanged(object? sender, SelectionChangedEventArgs? evt) {
|
||||||
var m = MemberInput.SelectedItem as Member;
|
var m = MemberInput.SelectedItem as Member;
|
||||||
if (m != null) MgNrInput.Text = m.MgNr.ToString();
|
if (m != null) MgNrInput.Text = m.MgNr.ToString();
|
||||||
MemberAddressField.Text = m?.FullAddress;
|
MemberAddressField.Text = m?.FullAddress;
|
||||||
@@ -753,6 +754,7 @@ namespace Elwig.Windows {
|
|||||||
NewDeliveryPartButton.Cursor = null;
|
NewDeliveryPartButton.Cursor = null;
|
||||||
DeliveryList.SelectedItem = p?.Delivery;
|
DeliveryList.SelectedItem = p?.Delivery;
|
||||||
DeliveryPartList.SelectedItem = null;
|
DeliveryPartList.SelectedItem = null;
|
||||||
|
RefreshInputs();
|
||||||
InitialInputs();
|
InitialInputs();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -768,16 +770,23 @@ namespace Elwig.Windows {
|
|||||||
Mouse.OverrideCursor = Cursors.Wait;
|
Mouse.OverrideCursor = Cursors.Wait;
|
||||||
using var doc = new DeliveryNote(p.Delivery, Context);
|
using var doc = new DeliveryNote(p.Delivery, Context);
|
||||||
await doc.Generate();
|
await doc.Generate();
|
||||||
Mouse.OverrideCursor = Cursors.Wait;
|
Mouse.OverrideCursor = null;
|
||||||
doc.Show();
|
doc.Show();
|
||||||
//await doc.Print(2);
|
//await doc.Print(2);
|
||||||
}
|
}
|
||||||
FinishButton.Cursor = null;
|
FinishButton.Cursor = null;
|
||||||
DeliveryList.SelectedItem = null;
|
DeliveryList.SelectedItem = null;
|
||||||
|
RefreshInputs();
|
||||||
InitInputs();
|
InitInputs();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void CancelCreatingButton_Click(object sender, RoutedEventArgs evt) {
|
private async void CancelCreatingButton_Click(object sender, RoutedEventArgs evt) {
|
||||||
|
if (IsCreating && HasChanged) {
|
||||||
|
var r = MessageBox.Show("Soll der Vorgang wirklich abgebrochen werden?", "Abbrechen bestätigen",
|
||||||
|
MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No);
|
||||||
|
if (r != MessageBoxResult.Yes) return;
|
||||||
|
}
|
||||||
|
|
||||||
ControlUtils.RenewItemsSource(AttributesInput, await Context.WineAttributes.OrderBy(a => a.Name).ToListAsync(), i => (i as WineAttr)?.AttrId);
|
ControlUtils.RenewItemsSource(AttributesInput, await Context.WineAttributes.OrderBy(a => a.Name).ToListAsync(), i => (i as WineAttr)?.AttrId);
|
||||||
ControlUtils.RenewItemsSource(MemberInput, await Context.Members.Where(m => m.IsActive || !IsReceipt).OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToListAsync(), i => (i as Member)?.MgNr);
|
ControlUtils.RenewItemsSource(MemberInput, await Context.Members.Where(m => m.IsActive || !IsReceipt).OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToListAsync(), i => (i as Member)?.MgNr);
|
||||||
if (DeliveryList.SelectedItem is not Delivery d) {
|
if (DeliveryList.SelectedItem is not Delivery d) {
|
||||||
@@ -1093,8 +1102,8 @@ namespace Elwig.Windows {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void ShowFinishNewPartDeliveryCancelButtons() {
|
private void ShowFinishNewPartDeliveryCancelButtons() {
|
||||||
FinishButton.IsEnabled = IsCreating && IsValid;
|
FinishButton.IsEnabled = false;
|
||||||
NewDeliveryPartButton.IsEnabled = IsCreating && IsValid;
|
NewDeliveryPartButton.IsEnabled = false;
|
||||||
CancelCreatingButton.IsEnabled = true;
|
CancelCreatingButton.IsEnabled = true;
|
||||||
FinishButton.Visibility = Visibility.Visible;
|
FinishButton.Visibility = Visibility.Visible;
|
||||||
NewDeliveryPartButton.Visibility = Visibility.Visible;
|
NewDeliveryPartButton.Visibility = Visibility.Visible;
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
<MenuItem Header="Über"/>
|
<MenuItem Header="Über"/>
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
</Menu>
|
</Menu>
|
||||||
<Grid Height="100" VerticalAlignment="Top" Margin="0,25,0,0">
|
<Grid Height="100" VerticalAlignment="Top" Margin="25,25,0,0">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="100"/>
|
<ColumnDefinition Width="100"/>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
@@ -40,24 +40,18 @@
|
|||||||
|
|
||||||
<Button x:Name="MemberAdminButton" Content="Mitglieder" Click="MemberAdminButton_Click"
|
<Button x:Name="MemberAdminButton" Content="Mitglieder" Click="MemberAdminButton_Click"
|
||||||
Margin="50,160,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
Margin="50,160,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
||||||
<Button x:Name="MemberListButton" Content="Mitgliederliste" Click="MemberListButton_Click"
|
|
||||||
Margin="50,200,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
|
||||||
<Button x:Name="ReceiptButton" Content="Übernahme" Click="ReceiptButton_Click"
|
<Button x:Name="ReceiptButton" Content="Übernahme" Click="ReceiptButton_Click"
|
||||||
Margin="50,240,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
Margin="50,200,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
||||||
<Button x:Name="DeliveryAdminButton" Content="Lieferungen" Click="DeliveryAdminButton_Click"
|
<Button x:Name="DeliveryAdminButton" Content="Lieferungen" Click="DeliveryAdminButton_Click"
|
||||||
|
Margin="50,240,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
||||||
|
<Button x:Name="PaymentWindowButton" Content="Auszahlung" Click="PaymentWindowButton_Click"
|
||||||
Margin="50,280,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
Margin="50,280,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
||||||
<Button x:Name="DeliveryListButton" Content="Lieferungungen" Click="DeliveryListButton_Click" IsEnabled="False"
|
<Button x:Name="BaseDataButton" Content="Stammdaten" Click="BaseDataButton_Click"
|
||||||
Margin="50,320,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
Margin="50,320,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
||||||
|
|
||||||
<Button x:Name="BaseDataButton" Content="Stammdaten" Click="BaseDataButton_Click"
|
|
||||||
Margin="260,160,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
|
||||||
<Button x:Name="PdfButton" Content="PDF Erzeugen" Click="PdfButton_Click" Tag="Print"
|
|
||||||
Margin="260,200,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
|
||||||
<Button x:Name="TestWindowButton" Content="Test Fenster" Click="TestWindowButton_Click"
|
<Button x:Name="TestWindowButton" Content="Test Fenster" Click="TestWindowButton_Click"
|
||||||
Margin="260,240,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
|
||||||
<Button x:Name="QueryWindowButton" Content="Datenbankabfragen" Click="QueryWindowButton_Click"
|
|
||||||
Margin="260,280,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
Margin="260,280,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
||||||
<Button x:Name="PaymentWindowButton" Content="Auszahlung" Click="PaymentWindowButton_Click"
|
<Button x:Name="QueryWindowButton" Content="Datenbankabfragen" Click="QueryWindowButton_Click"
|
||||||
Margin="260,320,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
Margin="260,320,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Window>
|
</Window>
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
using System.Linq;
|
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Input;
|
|
||||||
using Elwig.Documents;
|
|
||||||
using Elwig.Helpers;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
|
|
||||||
namespace Elwig.Windows {
|
namespace Elwig.Windows {
|
||||||
public partial class MainWindow : Window {
|
public partial class MainWindow : Window {
|
||||||
@@ -12,9 +7,7 @@ namespace Elwig.Windows {
|
|||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Window_Loaded(object sender, RoutedEventArgs evt) {
|
private void Window_Loaded(object sender, RoutedEventArgs evt) { }
|
||||||
PdfButton.IsEnabled = App.IsPrintingReady;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MemberAdminButton_Click(object sender, RoutedEventArgs evt) {
|
private void MemberAdminButton_Click(object sender, RoutedEventArgs evt) {
|
||||||
var w = new MemberAdminWindow();
|
var w = new MemberAdminWindow();
|
||||||
@@ -40,15 +33,6 @@ namespace Elwig.Windows {
|
|||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void PdfButton_Click(object sender, RoutedEventArgs evt) {
|
|
||||||
Mouse.OverrideCursor = Cursors.Wait;
|
|
||||||
using var ctx = new AppDbContext();
|
|
||||||
using var doc = new DeliveryNote(await ctx.Deliveries.OrderBy(d => d.Parts.Count).ThenBy(d => d.Year).ThenBy(d => d.DId).LastAsync(), ctx);
|
|
||||||
await doc.Generate();
|
|
||||||
doc.Show();
|
|
||||||
Mouse.OverrideCursor = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void TestWindowButton_Click(object sender, RoutedEventArgs evt) {
|
private void TestWindowButton_Click(object sender, RoutedEventArgs evt) {
|
||||||
var w = new TestWindow();
|
var w = new TestWindow();
|
||||||
w.Show();
|
w.Show();
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:local="clr-namespace:Elwig.Windows"
|
xmlns:local="clr-namespace:Elwig.Windows"
|
||||||
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
|
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
|
||||||
Title="Test Fenster - Elwig" MinHeight="400" MinWidth="325" Height="450" Width="800" ResizeMode="CanResize">
|
Title="Test Fenster - Elwig" MinHeight="400" MinWidth="325" Height="450" Width="800" ResizeMode="CanResize" Loaded="Window_Loaded">
|
||||||
<Grid>
|
<Grid>
|
||||||
<xctk:CheckComboBox x:Name="MyComboBox" HorizontalAlignment="Left" Margin="216,186,0,0" VerticalAlignment="Top" Delimiter=", "
|
<xctk:CheckComboBox x:Name="MyComboBox" HorizontalAlignment="Left" Margin="216,186,0,0" VerticalAlignment="Top" Delimiter=", "
|
||||||
SelectedValue="{Binding SelectedValue}"
|
SelectedValue="{Binding SelectedValue}"
|
||||||
@@ -18,5 +18,10 @@
|
|||||||
<TextBlock x:Name="Output" Height="20" Width="200" Margin="470,329,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"/>
|
<TextBlock x:Name="Output" Height="20" Width="200" Margin="470,329,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"/>
|
||||||
<Button x:Name="ChartButton" Content="Chart" Click="ChartButton_Click"
|
<Button x:Name="ChartButton" Content="Chart" Click="ChartButton_Click"
|
||||||
Margin="50,240,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
Margin="50,240,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
||||||
|
|
||||||
|
<Button x:Name="PdfDeliveryButton" Content="Lieferschein Erzeugen" Click="PdfDeliveryButton_Click" Tag="Print"
|
||||||
|
Margin="260,190,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
||||||
|
<Button x:Name="PdfCreditButton" Content="Gutschrift Erzeugen" Click="PdfCreditButton_Click" Tag="Print"
|
||||||
|
Margin="260,160,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Window>
|
</Window>
|
||||||
|
|||||||
@@ -1,16 +1,26 @@
|
|||||||
|
using Elwig.Documents;
|
||||||
|
using Elwig.Helpers;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
|
using System.Windows.Input;
|
||||||
using Xceed.Wpf.Toolkit.Primitives;
|
using Xceed.Wpf.Toolkit.Primitives;
|
||||||
|
|
||||||
namespace Elwig.Windows {
|
namespace Elwig.Windows {
|
||||||
public partial class TestWindow : Window {
|
public partial class TestWindow : Window {
|
||||||
|
|
||||||
public TestWindow() {
|
public TestWindow() {
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
MyComboBox.ItemsSource = new string[] { "Klasse A" , "Klasse B", "Klasse C", "Klasse D", "Klasse E", "Klasse F" };
|
MyComboBox.ItemsSource = new string[] { "Klasse A" , "Klasse B", "Klasse C", "Klasse D", "Klasse E", "Klasse F" };
|
||||||
MyListBox.ItemsSource = new string[] { "Test 1", "Test 2", "Test 3", "Test 4" };
|
MyListBox.ItemsSource = new string[] { "Test 1", "Test 2", "Test 3", "Test 4" };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void Window_Loaded(object sender, RoutedEventArgs evt) {
|
||||||
|
PdfDeliveryButton.IsEnabled = App.IsPrintingReady;
|
||||||
|
PdfCreditButton.IsEnabled = App.IsPrintingReady;
|
||||||
|
}
|
||||||
|
|
||||||
private void OnItemSelectionChanged(object sender, ItemSelectionChangedEventArgs e) {
|
private void OnItemSelectionChanged(object sender, ItemSelectionChangedEventArgs e) {
|
||||||
MyText.Text = string.Join(", ", MyComboBox.SelectedItems.Cast<string>());
|
MyText.Text = string.Join(", ", MyComboBox.SelectedItems.Cast<string>());
|
||||||
}
|
}
|
||||||
@@ -39,5 +49,23 @@ namespace Elwig.Windows {
|
|||||||
var w = new ChartWindow();
|
var w = new ChartWindow();
|
||||||
w.Show();
|
w.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async void PdfDeliveryButton_Click(object sender, RoutedEventArgs evt) {
|
||||||
|
Mouse.OverrideCursor = Cursors.Wait;
|
||||||
|
using var ctx = new AppDbContext();
|
||||||
|
using var doc = new DeliveryNote(await ctx.Deliveries.OrderBy(d => d.Parts.Count).ThenBy(d => d.Year).ThenBy(d => d.DId).LastAsync(), ctx);
|
||||||
|
await doc.Generate();
|
||||||
|
doc.Show();
|
||||||
|
Mouse.OverrideCursor = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void PdfCreditButton_Click(object sender, RoutedEventArgs evt) {
|
||||||
|
Mouse.OverrideCursor = Cursors.Wait;
|
||||||
|
using var ctx = new AppDbContext();
|
||||||
|
using var doc = new CreditNote(await ctx.Credits.FirstAsync(), ctx);
|
||||||
|
await doc.Generate();
|
||||||
|
doc.Show();
|
||||||
|
Mouse.OverrideCursor = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
|
||||||
<Fragment>
|
|
||||||
<ComponentGroup Id="DocumentTemplateComponents" Directory="ConfigFolderResources">
|
|
||||||
<Component>
|
|
||||||
<File Source="$(TargetDir)\paged.polyfill.js" />
|
|
||||||
</Component>
|
|
||||||
<Component>
|
|
||||||
<File Source="$(var.ElwigProjectDir)\Documents\style.css" />
|
|
||||||
</Component>
|
|
||||||
</ComponentGroup>
|
|
||||||
</Fragment>
|
|
||||||
</Wix>
|
|
||||||
@@ -23,10 +23,10 @@
|
|||||||
-->
|
-->
|
||||||
<xsl:key
|
<xsl:key
|
||||||
name="FileToRemove"
|
name="FileToRemove"
|
||||||
match="wix:Component[ substring( wix:File/@Source, string-length( wix:File/@Source ) - 6 ) != '.cshtml' ]"
|
match="wix:Component[ substring( wix:File/@Source, string-length( wix:File/@Source ) - 2 ) = '.cs' ]"
|
||||||
use="@Id"
|
use="@Id"
|
||||||
/>
|
/>
|
||||||
<!-- Get the last 4 characters of a string using `substring( s, len(s) - 3 )`, it uses -3 and not -4 because XSLT uses 1-based indexes, not 0-based indexes. -->
|
<!-- Get the last 3 characters of a string using `substring( s, len(s) - 2 )`, it uses -2 and not -3 because XSLT uses 1-based indexes, not 0-based indexes. -->
|
||||||
|
|
||||||
<!-- By default, copy all elements and nodes into the output... -->
|
<!-- By default, copy all elements and nodes into the output... -->
|
||||||
<xsl:template match="@*|node()">
|
<xsl:template match="@*|node()">
|
||||||
@@ -25,14 +25,13 @@
|
|||||||
</Task>
|
</Task>
|
||||||
</UsingTask>
|
</UsingTask>
|
||||||
<Target Name="CustomBeforeBuild" BeforeTargets="BeforeBuild">
|
<Target Name="CustomBeforeBuild" BeforeTargets="BeforeBuild">
|
||||||
<Exec Command="curl -s -L "https://unpkg.com/pagedjs/dist/paged.polyfill.js" -o "$(TargetDir)paged.polyfill.js"" />
|
|
||||||
<Exec Command="curl -s "http://www.columbia.edu/~em36/PDFtoPrinter.exe" -z "$(TargetDir)PDFtoPrinter.exe" -o "$(TargetDir)PDFtoPrinter.exe"" />
|
<Exec Command="curl -s "http://www.columbia.edu/~em36/PDFtoPrinter.exe" -z "$(TargetDir)PDFtoPrinter.exe" -o "$(TargetDir)PDFtoPrinter.exe"" />
|
||||||
<Exec Command="dotnet publish "$(SolutionDir)Elwig\Elwig.csproj" "/p:PublishProfile=$(SolutionDir)\Elwig\Properties\PublishProfiles\FolderProfile.pubxml"" />
|
<Exec Command="dotnet publish "$(SolutionDir)Elwig\Elwig.csproj" "/p:PublishProfile=$(SolutionDir)\Elwig\Properties\PublishProfiles\FolderProfile.pubxml"" />
|
||||||
<GetFileVersion AssemblyPath="..\Elwig\bin\Publish\Elwig.exe">
|
<GetFileVersion AssemblyPath="..\Elwig\bin\Publish\Elwig.exe">
|
||||||
<Output TaskParameter="Version" PropertyName="ElwigFileVersion" />
|
<Output TaskParameter="Version" PropertyName="ElwigFileVersion" />
|
||||||
</GetFileVersion>
|
</GetFileVersion>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<DefineConstants>ProductVersion=$(ElwigFileVersion);BuildPath=..\Elwig\bin\Publish;DocumentTemplatesPath=..\Elwig\Documents;ElwigProjectDir=..\Elwig</DefineConstants>
|
<DefineConstants>ProductVersion=$(ElwigFileVersion);BuildPath=..\Elwig\bin\Publish;DocumentPath=..\Elwig\Documents;ElwigProjectDir=..\Elwig</DefineConstants>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Target>
|
</Target>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -50,13 +49,13 @@
|
|||||||
<ComponentGroupName>DocumentTemplates</ComponentGroupName>
|
<ComponentGroupName>DocumentTemplates</ComponentGroupName>
|
||||||
<DirectoryRefId>ConfigFolderResources</DirectoryRefId>
|
<DirectoryRefId>ConfigFolderResources</DirectoryRefId>
|
||||||
<SuppressRootDirectory>true</SuppressRootDirectory>
|
<SuppressRootDirectory>true</SuppressRootDirectory>
|
||||||
<PreprocessorVariable>DocumentTemplatesPath</PreprocessorVariable>
|
<PreprocessorVariable>DocumentPath</PreprocessorVariable>
|
||||||
<Transforms>DocumentTemplatesTransform.xslt</Transforms>
|
<Transforms>DocumentTransform.xslt</Transforms>
|
||||||
</HarvestDirectory>
|
</HarvestDirectory>
|
||||||
<BindPath BindName="DocumentTemplateBindPath" Include="../Elwig/Documents" />
|
<BindPath BindName="DocumentTemplateBindPath" Include="../Elwig/Documents" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="DocumentTemplatesTransform.xslt" />
|
<None Include="DocumentTransform.xslt" />
|
||||||
<None Include="BuildFilesTransform.xslt" />
|
<None Include="BuildFilesTransform.xslt" />
|
||||||
<None Include="Files\config.ini" />
|
<None Include="Files\config.ini" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
<ComponentGroupRef Id="MainComponents"/>
|
<ComponentGroupRef Id="MainComponents"/>
|
||||||
<ComponentGroupRef Id="BuildFiles"/>
|
<ComponentGroupRef Id="BuildFiles"/>
|
||||||
<ComponentGroupRef Id="DocumentTemplates"/>
|
<ComponentGroupRef Id="DocumentTemplates"/>
|
||||||
<ComponentGroupRef Id="DocumentTemplateComponents"/>
|
|
||||||
</Feature>
|
</Feature>
|
||||||
</Package>
|
</Package>
|
||||||
</Wix>
|
</Wix>
|
||||||
|
|||||||
Reference in New Issue
Block a user