diff --git a/Elwig/Helpers/AppDbContext.cs b/Elwig/Helpers/AppDbContext.cs index 41771c2..28ae656 100644 --- a/Elwig/Helpers/AppDbContext.cs +++ b/Elwig/Helpers/AppDbContext.cs @@ -56,6 +56,7 @@ namespace Elwig.Helpers { public DbSet DeliveryPartModifiers { get; private set; } public DbSet PaymentVariants { get; private set; } public DbSet MemberPayments { get; private set; } + public DbSet PaymentDeliveryParts { get; private set; } public DbSet Credits { get; private set; } public DbSet OverUnderDeliveryRows { get; private set; } diff --git a/Elwig/Windows/PaymentVariantsWindow.xaml.cs b/Elwig/Windows/PaymentVariantsWindow.xaml.cs index ba1d9a8..2723a83 100644 --- a/Elwig/Windows/PaymentVariantsWindow.xaml.cs +++ b/Elwig/Windows/PaymentVariantsWindow.xaml.cs @@ -27,7 +27,9 @@ namespace Elwig.Windows { public PaymentVariantsWindow(int year) { InitializeComponent(); Year = year; - SeasonLocked = Context.Seasons.Find(Year + 1) != null; + using (var ctx = new AppDbContext()) { + SeasonLocked = ctx.Seasons.Find(Year + 1) != null; + } Title = $"Auszahlungsvarianten - Lese {Year} - Elwig"; if (!App.Config.Debug) { DataInput.Visibility = Visibility.Hidden; @@ -35,7 +37,12 @@ namespace Elwig.Windows { } protected override async Task OnRenewContext() { - ControlUtils.RenewItemsSource(PaymentVariantList, await Context.PaymentVariants.Where(v => v.Year == Year).OrderBy(v => v.AvNr).ToListAsync(), v => (v as PaymentVar)?.AvNr); + using var ctx = new AppDbContext(); + ControlUtils.RenewItemsSource(PaymentVariantList, await ctx.PaymentVariants + .Where(v => v.Year == Year) + .OrderBy(v => v.AvNr) + .Include(v => v.Season.Currency) + .ToListAsync(), v => (v as PaymentVar)?.AvNr); Update(); } @@ -151,17 +158,25 @@ namespace Elwig.Windows { private void UpdateSums() { if (PaymentVariantList.SelectedItem is PaymentVar v) { + using var ctx = new AppDbContext(); var sym = v.Season.Currency.Symbol; - ModifierSum.Text = $"{v.DeliveryPartPayments.Sum(p => p.Amount - p.NetAmount):N2} {sym}"; - TotalSum.Text = $"{v.MemberPayments.Sum(p => p.Amount):N2} {sym}"; - if (v.Credits.Count == 0) { + var modSum = ctx.PaymentDeliveryParts + .Where(p => p.Year == v.Year && p.AvNr == v.AvNr) + .Sum(p => p.AmountValue - p.NetAmountValue); + ModifierSum.Text = $"{v.Season.DecFromDb(modSum):N2} {sym}"; + var totalSum = ctx.MemberPayments + .Where(p => p.Year == v.Year && p.AvNr == v.AvNr) + .Sum(p => p.AmountValue); + TotalSum.Text = $"{v.Season.DecFromDb(totalSum):N2} {sym}"; + var credits = ctx.Credits.Where(c => c.Year == v.Year && c.AvNr == v.AvNr); + if (!credits.Any()) { VatSum.Text = $"- {sym}"; DeductionSum.Text = $"- {sym}"; PaymentSum.Text = $"- {sym}"; } else { - VatSum.Text = $"{v.Credits.Sum(c => c.VatAmount):N2} {sym}"; - DeductionSum.Text = $"{-v.Credits.Sum(c => c.Modifiers ?? 0):N2} {sym}"; - PaymentSum.Text = $"{v.Credits.Sum(c => c.Amount):N2} {sym}"; + VatSum.Text = $"{v.Season.DecFromDb(credits.Sum(c => c.VatAmountValue)):N2} {sym}"; + DeductionSum.Text = $"{-v.Season.DecFromDb(credits.Sum(c => c.ModifiersValue ?? 0)):N2} {sym}"; + PaymentSum.Text = $"{v.Season.DecFromDb(credits.Sum(c => c.AmountValue)):N2} {sym}"; } } else { ModifierSum.Text = "-"; @@ -178,17 +193,18 @@ namespace Elwig.Windows { private async void AddButton_Click(object sender, RoutedEventArgs evt) { try { - PaymentVar v = Context.CreateProxy(); + using var ctx = new AppDbContext(); + var v = new PaymentVar { + Year = Year, + AvNr = await ctx.NextAvNr(Year), + Name = "Neue Auszahlungsvariante", + TestVariant = true, + DateString = $"{DateTime.Today:yyyy-MM-dd}", + Data = "{\"mode\": \"elwig\", \"version\": 1, \"payment\": {}, \"curves\": []}", + }; - v.Year = Year; - v.AvNr = await Context.NextAvNr(Year); - v.Name = "Neue Auszahlungsvariante"; - v.TestVariant = true; - v.DateString = $"{DateTime.Today:yyyy-MM-dd}"; - v.Data = "{\"mode\": \"elwig\", \"version\": 1, \"payment\": {}, \"curves\": []}"; - - await Context.AddAsync(v); - await Context.SaveChangesAsync(); + ctx.Add(v); + await ctx.SaveChangesAsync(); await App.HintContextChange(); ControlUtils.SelectListBoxItem(PaymentVariantList, v, v => (v as PaymentVar)?.AvNr); @@ -202,17 +218,18 @@ namespace Elwig.Windows { private async void CopyButton_Click(object sender, RoutedEventArgs evt) { if (PaymentVariantList.SelectedItem is not PaymentVar orig) return; try { - PaymentVar n = Context.CreateProxy(); + using var ctx = new AppDbContext(); + var n = new PaymentVar { + Year = orig.Year, + AvNr = await ctx.NextAvNr(Year), + Name = $"{orig.Name} (Kopie)", + TestVariant = true, + DateString = $"{DateTime.Today:yyyy-MM-dd}", + Data = orig.Data, + }; - n.Year = orig.Year; - n.AvNr = await Context.NextAvNr(Year); - n.Name = $"{orig.Name} (Kopie)"; - n.TestVariant = true; - n.DateString = $"{DateTime.Today:yyyy-MM-dd}"; - n.Data = orig.Data; - - await Context.AddAsync(n); - await Context.SaveChangesAsync(); + ctx.Add(n); + await ctx.SaveChangesAsync(); await App.HintContextChange(); ControlUtils.SelectListBoxItem(PaymentVariantList, n, v => (v as PaymentVar)?.AvNr); @@ -226,8 +243,9 @@ namespace Elwig.Windows { private async void DeleteButton_Click(object sender, RoutedEventArgs evt) { if (PaymentVariantList.SelectedItem is not PaymentVar v || !v.TestVariant) return; try { - Context.Remove(v); - await Context.SaveChangesAsync(); + using var ctx = new AppDbContext(); + ctx.Remove(v); + await ctx.SaveChangesAsync(); await App.HintContextChange(); } catch (Exception exc) { var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message; @@ -261,7 +279,8 @@ namespace Elwig.Windows { private async void MailButton_Click(object sender, RoutedEventArgs evt) { if (PaymentVariantList.SelectedItem is not PaymentVar pv) return; - var vars = await Context.PaymentVariants + using var ctx = new AppDbContext(); + var vars = await ctx.PaymentVariants .Where(v => pv.Year == v.Year) .OrderBy(v => v.AvNr) .Select(v => v.AvNr) @@ -353,7 +372,8 @@ namespace Elwig.Windows { TransactionButton.IsEnabled = false; Mouse.OverrideCursor = Cursors.AppStarting; try { - var tbl = await CreditNoteData.ForPaymentVariant(Context, v.Year, v.AvNr); + using var ctx = new AppDbContext(); + var tbl = await CreditNoteData.ForPaymentVariant(ctx, v.Year, v.AvNr); using var ods = new OdsFile(d.FileName); await ods.AddTable(tbl); } catch (Exception exc) { @@ -380,8 +400,12 @@ namespace Elwig.Windows { d.GrossWeightModifier = modVal < 0 ? modVal / 100.0 : 0; WeightModifierChanged = false; v.Data = JsonSerializer.Serialize(d.Data); - Context.Update(v); - await Context.SaveChangesAsync(); + + using (var ctx = new AppDbContext()) { + ctx.Update(v); + await ctx.SaveChangesAsync(); + } + await App.HintContextChange(); CommentInput_TextChanged(null, null); ConsiderModifiersInput_Changed(null, null);