From 7edd888aa283184669aefee2c8922e9e95016b18 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Tue, 7 Oct 2025 20:41:15 +0200 Subject: [PATCH] DeliveryAncmtAdminWindow: Increase performace by aggregating AnnouncedWeight --- Elwig/Models/Entities/DeliverySchedule.cs | 4 +++- Elwig/Windows/DeliveryAncmtAdminWindow.xaml.cs | 9 +++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Elwig/Models/Entities/DeliverySchedule.cs b/Elwig/Models/Entities/DeliverySchedule.cs index 2fbb51c..63bfdf0 100644 --- a/Elwig/Models/Entities/DeliverySchedule.cs +++ b/Elwig/Models/Entities/DeliverySchedule.cs @@ -42,7 +42,9 @@ namespace Elwig.Models.Entities { [Column("max_weight")] public int? MaxWeight { get; set; } [NotMapped] - public int AnnouncedWeight => Announcements.Sum(a => a.Weight); + public int AnnouncedWeight => AnnouncedWeightOverride ?? Announcements.Sum(a => a.Weight); + [NotMapped] + public int? AnnouncedWeightOverride { get; set; } [NotMapped] public double? Percent => (double)AnnouncedWeight / MaxWeight * 100; diff --git a/Elwig/Windows/DeliveryAncmtAdminWindow.xaml.cs b/Elwig/Windows/DeliveryAncmtAdminWindow.xaml.cs index 1d2fd34..07487db 100644 --- a/Elwig/Windows/DeliveryAncmtAdminWindow.xaml.cs +++ b/Elwig/Windows/DeliveryAncmtAdminWindow.xaml.cs @@ -83,14 +83,19 @@ namespace Elwig.Windows { private async Task RefreshDeliveryScheduleList() { using var ctx = new AppDbContext(); - var deliverySchedules = await ctx.DeliverySchedules + var list = await ctx.DeliverySchedules .Where(s => s.Year == ViewModel.FilterSeason) .Include(s => s.Branch) - .Include(s => s.Announcements) .OrderBy(s => s.DateString) .ThenBy(s => s.Branch.Name) .ThenBy(s => s.Description) + .Select(s => new { + Schedule = s, + AnnouncedWeight = s.Announcements.Sum(a => a.Weight) + }) .ToListAsync(); + list.ForEach(v => v.Schedule.AnnouncedWeightOverride = v.AnnouncedWeight); + var deliverySchedules = list.Select(v => v.Schedule).ToList(); ControlUtils.RenewItemsSource(DeliveryScheduleList, deliverySchedules .Where(s => !ViewModel.FilterOnlyUpcoming || s.DateString.CompareTo(Utils.Today.ToString("yyyy-MM-dd")) >= 0) .ToList(), DeliveryScheduleList_SelectionChanged, ViewModel.FilterFromAllSchedules ? ControlUtils.RenewSourceDefault.None : ControlUtils.RenewSourceDefault.First);