From 66be5a3e2cb7b7fa40d84794155c41046f1b3cf4 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Sat, 21 Sep 2024 23:29:10 +0200 Subject: [PATCH] MemberAdminWindow: Cache MembersDeliveries --- Elwig/Services/MemberService.cs | 10 +--------- Elwig/ViewModels/MemberAdminViewModel.cs | 1 + Elwig/Windows/MemberAdminWindow.xaml.cs | 4 ++++ 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/Elwig/Services/MemberService.cs b/Elwig/Services/MemberService.cs index 024d926..c0febb1 100644 --- a/Elwig/Services/MemberService.cs +++ b/Elwig/Services/MemberService.cs @@ -174,17 +174,9 @@ namespace Elwig.Services { vm.StatusAreaCommitmentToolTip = grid; }); - Dictionary deliveries; - using (var ctx = new AppDbContext()) { - deliveries = ctx.Deliveries - .Where(d => d.MgNr == m.MgNr) - .GroupBy(d => d.Year) - .ToDictionary(g => g.Key, g => g.Any()); - } - vm.MemberHasEmail = m.EmailAddresses.Count > 0; vm.MemberCanSendEmail = App.Config.Smtp != null && m.EmailAddresses.Count > 0; - vm.MemberHasDeliveries = Enumerable.Range(0, 9999).Select(i => deliveries.GetValueOrDefault(i, false)).ToList(); + vm.MemberHasDeliveries = Enumerable.Range(0, 9999).Select(i => vm.MembersDeliveries.GetValueOrDefault((m.MgNr, i), false)).ToList(); } public static async Task<(List, IQueryable, List)> GetFilters(this MemberAdminViewModel vm, AppDbContext ctx) { diff --git a/Elwig/ViewModels/MemberAdminViewModel.cs b/Elwig/ViewModels/MemberAdminViewModel.cs index 3423c0c..31651e8 100644 --- a/Elwig/ViewModels/MemberAdminViewModel.cs +++ b/Elwig/ViewModels/MemberAdminViewModel.cs @@ -40,6 +40,7 @@ namespace Elwig.ViewModels { private bool _enableSearchInputs = true; [ObservableProperty] private IEnumerable _memberHasDeliveries = [ .. Enumerable.Range(0, 9999).Select(i => false) ]; + public Dictionary<(int, int), bool> MembersDeliveries = []; [ObservableProperty] private bool _memberListOrderByMgNr; diff --git a/Elwig/Windows/MemberAdminWindow.xaml.cs b/Elwig/Windows/MemberAdminWindow.xaml.cs index 1d054ef..71b226c 100644 --- a/Elwig/Windows/MemberAdminWindow.xaml.cs +++ b/Elwig/Windows/MemberAdminWindow.xaml.cs @@ -187,6 +187,10 @@ namespace Elwig.Windows { ControlUtils.RenewItemsSource(BranchInput, await ctx.Branches.OrderBy(b => b.Name).ToListAsync()); ControlUtils.RenewItemsSource(DefaultKgInput, await ctx.WbKgs.Select(k => k.AtKg).OrderBy(k => k.Name).ToListAsync()); + ViewModel.MembersDeliveries = await ctx.Deliveries + .GroupBy(d => new { d.MgNr, d.Year }) + .ToDictionaryAsync(g => (g.Key.MgNr, g.Key.Year), g => g.Any()); + var seasons = await ctx.Seasons.OrderByDescending(s => s.Year).ToListAsync(); Menu_DeliveryConfirmation.Items.Clear(); foreach (var s in seasons) {