diff --git a/Elwig/Helpers/Billing/Billing.cs b/Elwig/Helpers/Billing/Billing.cs index 506ccb9..c99bb61 100644 --- a/Elwig/Helpers/Billing/Billing.cs +++ b/Elwig/Helpers/Billing/Billing.cs @@ -1,5 +1,6 @@ using Elwig.Models.Entities; using Microsoft.Data.Sqlite; +using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; @@ -9,7 +10,6 @@ namespace Elwig.Helpers.Billing { public class Billing { protected readonly int Year; - protected readonly AppDbContext Context; protected readonly Season Season; protected readonly Dictionary Attributes; protected readonly Dictionary Modifiers; @@ -17,11 +17,11 @@ namespace Elwig.Helpers.Billing { public Billing(int year) { Year = year; - Context = new AppDbContext(); - Season = Context.Seasons.Find(Year)!; - Attributes = Context.WineAttributes.ToDictionary(a => a.AttrId, a => a.Name); - Modifiers = Context.Modifiers.Where(m => m.Year == Year).ToDictionary(m => m.ModId, m => (m.Abs, m.Rel)); - AreaComTypes = Context.AreaCommitmentTypes.ToDictionary(v => v.VtrgId, v => (v.SortId, v.AttrId, v.Discriminator, v.MinKgPerHa, v.PenaltyAmount)); + using var ctx = new AppDbContext(); + Season = ctx.Seasons.Find(Year)!; + Attributes = ctx.WineAttributes.ToDictionary(a => a.AttrId, a => a.Name); + Modifiers = ctx.Modifiers.Where(m => m.Year == Year).Include(m => m.Season).ToDictionary(m => m.ModId, m => (m.Abs, m.Rel)); + AreaComTypes = ctx.AreaCommitmentTypes.ToDictionary(v => v.VtrgId, v => (v.SortId, v.AttrId, v.Discriminator, v.MinKgPerHa, v.PenaltyAmount)); } public async Task FinishSeason() { @@ -51,14 +51,15 @@ namespace Elwig.Helpers.Billing { bool? avoidUnderDeliveries = null, SqliteConnection? cnx = null ) { + using var ctx = new AppDbContext(); var honorGebunden = honorGebundenField ?? Season.Billing_HonorGebunden; var allowAttrsIntoLower = allowAttributesIntoLower ?? Season.Billing_AllowAttrsIntoLower; var avoidUnderDlvrs = avoidUnderDeliveries ?? Season.Billing_AvoidUnderDeliveries; - var attrVals = Context.WineAttributes.ToDictionary(a => a.AttrId, a => (a.IsStrict, a.FillLower)); + var attrVals = ctx.WineAttributes.ToDictionary(a => a.AttrId, a => (a.IsStrict, a.FillLower)); var attrForced = attrVals.Where(a => a.Value.IsStrict && a.Value.FillLower == 0).Select(a => a.Key).ToArray(); var ownCnx = cnx == null; cnx ??= await AppDbContext.ConnectAsync(); - await Context.GetMemberAreaCommitmentBuckets(Year, 0, cnx); + await ctx.GetMemberAreaCommitmentBuckets(Year, 0, cnx); var inserts = new List<(int, int, int, string, int)>(); var deliveries = new List<(int, int, int, string, int, double, string, string?, string[], bool?)>(); @@ -87,7 +88,7 @@ namespace Elwig.Helpers.Billing { Dictionary used = []; foreach (var (mgnr, did, dpnr, sortid, weight, kmw, qualid, attrid, modifiers, gebunden) in deliveries) { if (lastMgNr != mgnr) { - rightsAndObligations = await Context.GetMemberAreaCommitmentBuckets(Year, mgnr); + rightsAndObligations = await ctx.GetMemberAreaCommitmentBuckets(Year, mgnr); used = []; } if ((honorGebunden && gebunden == false) || diff --git a/Elwig/Helpers/Billing/BillingVariant.cs b/Elwig/Helpers/Billing/BillingVariant.cs index 07b2206..783b8f6 100644 --- a/Elwig/Helpers/Billing/BillingVariant.cs +++ b/Elwig/Helpers/Billing/BillingVariant.cs @@ -1,5 +1,6 @@ using Elwig.Models.Entities; using Microsoft.Data.Sqlite; +using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; @@ -14,8 +15,9 @@ 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.GetVaributes(Context, Year, onlyDelivered: false)); + using var ctx = new AppDbContext(); + PaymentVariant = ctx.PaymentVariants.Include(v => v.Season).Where(v => v.Year == Year && v.AvNr == AvNr).Single() ?? throw new ArgumentException("PaymentVar not found"); + Data = PaymentBillingData.FromJson(PaymentVariant.Data, Utils.GetVaributes(ctx, Year, onlyDelivered: false)); } public async Task Calculate(bool? honorGebunden = null, bool? allowAttrsIntoLower = null, bool? avoidUnderDeliveries = null) {