diff --git a/Elwig/Helpers/Billing/BillingVariant.cs b/Elwig/Helpers/Billing/BillingVariant.cs index ef363ca..c1b8506 100644 --- a/Elwig/Helpers/Billing/BillingVariant.cs +++ b/Elwig/Helpers/Billing/BillingVariant.cs @@ -15,7 +15,7 @@ namespace Elwig.Helpers.Billing { public BillingVariant(int year, int avnr) : base(year) { AvNr = avnr; 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() { diff --git a/Elwig/Helpers/Utils.cs b/Elwig/Helpers/Utils.cs index ae733cd..b4107e7 100644 --- a/Elwig/Helpers/Utils.cs +++ b/Elwig/Helpers/Utils.cs @@ -362,25 +362,21 @@ namespace Elwig.Helpers { return output.OrderByDescending(l => l.Count()); } - public static List GetAttributeVarieties(AppDbContext ctx, int year, bool withSlash = false) { - return ctx.DeliveryParts + public static List GetAttributeVarieties(AppDbContext ctx, int year, bool withSlash = false, bool onlyDelivered = true) { + var varieties = ctx.WineVarieties.Select(v => v.SortId).ToList(); + var delivered = ctx.DeliveryParts .Where(d => d.Year == year) .Select(d => $"{d.SortId}{(withSlash ? "/" : "")}{d.AttrId}") .Distinct() - .ToList() - .Union(ctx.WineVarieties.Select(v => v.SortId)) .ToList(); + return [.. (onlyDelivered ? delivered : delivered.Union(varieties)).Order()]; } - public static List GetContractsForYear(AppDbContext ctx, int year) { - return ctx.DeliveryParts - .Where(p => p.Year == year) - .Select(d => new ContractSelection(d.Variant, d.Attribute)) - .Distinct() - .ToList() - .Union(ctx.WineVarieties.Select(v => new ContractSelection(v, null))) - .DistinctBy(c => c.Listing) - .Order() + public static List GetContractsForYear(AppDbContext ctx, int year, bool onlyDelivered = true) { + var varieties = ctx.WineVarieties.ToDictionary(v => v.SortId, v => v); + var attributes = ctx.WineAttributes.ToDictionary(a => a.AttrId, a => a); + return GetAttributeVarieties(ctx, year, false, onlyDelivered) + .Select(s => new ContractSelection(varieties[s[..2]], s.Length > 2 ? attributes[s[2..]] : null)) .ToList(); } } diff --git a/Elwig/Windows/ChartWindow.xaml.cs b/Elwig/Windows/ChartWindow.xaml.cs index 034be2f..88b70a3 100644 --- a/Elwig/Windows/ChartWindow.xaml.cs +++ b/Elwig/Windows/ChartWindow.xaml.cs @@ -635,7 +635,7 @@ namespace Elwig.Windows { private async void SaveButton_Click(object sender, RoutedEventArgs e) { 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? tr = null; try {