ChartWindow: Only display contracts delivered in current season

This commit is contained in:
2024-01-25 12:42:46 +01:00
parent a71c6685f0
commit 0fff698a5d
3 changed files with 11 additions and 15 deletions

View File

@ -15,7 +15,7 @@ namespace Elwig.Helpers.Billing {
public BillingVariant(int year, int avnr) : base(year) { public BillingVariant(int year, int avnr) : base(year) {
AvNr = avnr; AvNr = avnr;
PaymentVariant = Context.PaymentVariants.Find(Year, AvNr) ?? throw new ArgumentException("PaymentVar not found"); PaymentVariant = Context.PaymentVariants.Find(Year, AvNr) ?? throw new ArgumentException("PaymentVar not found");
Data = PaymentBillingData.FromJson(PaymentVariant.Data, Utils.GetAttributeVarieties(Context, Year)); Data = PaymentBillingData.FromJson(PaymentVariant.Data, Utils.GetAttributeVarieties(Context, Year, onlyDelivered: false));
} }
public async Task Calculate() { public async Task Calculate() {

View File

@ -362,25 +362,21 @@ namespace Elwig.Helpers {
return output.OrderByDescending(l => l.Count()); return output.OrderByDescending(l => l.Count());
} }
public static List<string> GetAttributeVarieties(AppDbContext ctx, int year, bool withSlash = false) { public static List<string> GetAttributeVarieties(AppDbContext ctx, int year, bool withSlash = false, bool onlyDelivered = true) {
return ctx.DeliveryParts var varieties = ctx.WineVarieties.Select(v => v.SortId).ToList();
var delivered = ctx.DeliveryParts
.Where(d => d.Year == year) .Where(d => d.Year == year)
.Select(d => $"{d.SortId}{(withSlash ? "/" : "")}{d.AttrId}") .Select(d => $"{d.SortId}{(withSlash ? "/" : "")}{d.AttrId}")
.Distinct() .Distinct()
.ToList()
.Union(ctx.WineVarieties.Select(v => v.SortId))
.ToList(); .ToList();
return [.. (onlyDelivered ? delivered : delivered.Union(varieties)).Order()];
} }
public static List<ContractSelection> GetContractsForYear(AppDbContext ctx, int year) { public static List<ContractSelection> GetContractsForYear(AppDbContext ctx, int year, bool onlyDelivered = true) {
return ctx.DeliveryParts var varieties = ctx.WineVarieties.ToDictionary(v => v.SortId, v => v);
.Where(p => p.Year == year) var attributes = ctx.WineAttributes.ToDictionary(a => a.AttrId, a => a);
.Select(d => new ContractSelection(d.Variant, d.Attribute)) return GetAttributeVarieties(ctx, year, false, onlyDelivered)
.Distinct() .Select(s => new ContractSelection(varieties[s[..2]], s.Length > 2 ? attributes[s[2..]] : null))
.ToList()
.Union(ctx.WineVarieties.Select(v => new ContractSelection(v, null)))
.DistinctBy(c => c.Listing)
.Order()
.ToList(); .ToList();
} }
} }

View File

@ -635,7 +635,7 @@ namespace Elwig.Windows {
private async void SaveButton_Click(object sender, RoutedEventArgs e) { private async void SaveButton_Click(object sender, RoutedEventArgs e) {
var origData = BillingData.FromJson(PaymentVar.Data); var origData = BillingData.FromJson(PaymentVar.Data);
var data = BillingData.FromGraphEntries(GraphEntries, origData, Utils.GetAttributeVarieties(Context, Year, true)); var data = BillingData.FromGraphEntries(GraphEntries, origData, Utils.GetAttributeVarieties(Context, Year, withSlash: true));
EntityEntry<PaymentVar>? tr = null; EntityEntry<PaymentVar>? tr = null;
try { try {