DeliveryAdminWindow: Improve responsiveness by caching wine quality levels
All checks were successful
Test / Run tests (push) Successful in 1m54s
All checks were successful
Test / Run tests (push) Successful in 1m54s
This commit is contained in:
@@ -248,14 +248,6 @@ namespace Elwig.Helpers {
|
|||||||
return c + 1;
|
return c + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<WineQualLevel> GetWineQualityLevel(double kmw, string? maxQualId = null) {
|
|
||||||
return await WineQualityLevels
|
|
||||||
.Where(q => !q.IsPredicate && (q.MinKmw == null || q.MinKmw <= kmw))
|
|
||||||
.Where(q => maxQualId == null || q.QualId == "WEI" || q.QualId == maxQualId)
|
|
||||||
.OrderBy(q => q.MinKmw)
|
|
||||||
.LastAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void UpdateDeliveryPartModifiers(DeliveryPart part, IEnumerable<Modifier> oldModifiers, IEnumerable<Modifier> newModifiers) {
|
public void UpdateDeliveryPartModifiers(DeliveryPart part, IEnumerable<Modifier> oldModifiers, IEnumerable<Modifier> newModifiers) {
|
||||||
foreach (var m in Modifiers.Where(m => m.Year == part.Year)) {
|
foreach (var m in Modifiers.Where(m => m.Year == part.Year)) {
|
||||||
var mod = new DeliveryPartModifier {
|
var mod = new DeliveryPartModifier {
|
||||||
|
@@ -8,6 +8,7 @@ using Elwig.ViewModels;
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
@@ -34,6 +35,8 @@ namespace Elwig.Windows {
|
|||||||
|
|
||||||
private readonly Button[] WeighingButtons;
|
private readonly Button[] WeighingButtons;
|
||||||
|
|
||||||
|
private List<WineQualLevel> WineQualityLevels = [];
|
||||||
|
|
||||||
public DeliveryAdminWindow(bool receipt = false) {
|
public DeliveryAdminWindow(bool receipt = false) {
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
CommandBindings.Add(new CommandBinding(CtrlF, FocusSearchInput));
|
CommandBindings.Add(new CommandBinding(CtrlF, FocusSearchInput));
|
||||||
@@ -483,7 +486,8 @@ namespace Elwig.Windows {
|
|||||||
var cultList = await ctx.WineCultivations.OrderBy(a => a.Name).Cast<object>().ToListAsync();
|
var cultList = await ctx.WineCultivations.OrderBy(a => a.Name).Cast<object>().ToListAsync();
|
||||||
cultList.Insert(0, new NullItem(""));
|
cultList.Insert(0, new NullItem(""));
|
||||||
ControlUtils.RenewItemsSource(CultivationInput, cultList, null, ControlUtils.RenewSourceDefault.First);
|
ControlUtils.RenewItemsSource(CultivationInput, cultList, null, ControlUtils.RenewSourceDefault.First);
|
||||||
ControlUtils.RenewItemsSource(WineQualityLevelInput, await ctx.WineQualityLevels.ToListAsync());
|
WineQualityLevels = await ctx.WineQualityLevels.ToListAsync();
|
||||||
|
ControlUtils.RenewItemsSource(WineQualityLevelInput, WineQualityLevels);
|
||||||
ControlUtils.RenewItemsSource(ModifiersInput, await ctx.Modifiers
|
ControlUtils.RenewItemsSource(ModifiersInput, await ctx.Modifiers
|
||||||
.Where(m => m.Year == y && (!IsCreating || m.IsActive))
|
.Where(m => m.Year == y && (!IsCreating || m.IsActive))
|
||||||
.OrderBy(m => m.Ordering)
|
.OrderBy(m => m.Ordering)
|
||||||
@@ -1230,23 +1234,30 @@ namespace Elwig.Windows {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private WineQualLevel GetWineQualityLevel(double kmw, string? maxQualId = null) {
|
||||||
|
return WineQualityLevels
|
||||||
|
.Where(q => !q.IsPredicate && (q.MinKmw == null || q.MinKmw <= kmw))
|
||||||
|
.Where(q => maxQualId == null || q.QualId == "WEI" || q.QualId == maxQualId)
|
||||||
|
.OrderBy(q => q.MinKmw)
|
||||||
|
.Last();
|
||||||
|
}
|
||||||
|
|
||||||
private void UpdateWineQualityLevels() {
|
private void UpdateWineQualityLevels() {
|
||||||
using var ctx = new AppDbContext();
|
|
||||||
if (!GetInputValid(GradationKmwInput)) {
|
if (!GetInputValid(GradationKmwInput)) {
|
||||||
UnsetDefaultValue(WineQualityLevelInput);
|
UnsetDefaultValue(WineQualityLevelInput);
|
||||||
ComboBox_SelectionChanged(WineQualityLevelInput, null);
|
ComboBox_SelectionChanged(WineQualityLevelInput, null);
|
||||||
WineQualityLevelInput.ItemsSource = ctx.WineQualityLevels.ToList();
|
WineQualityLevelInput.ItemsSource = WineQualityLevels;
|
||||||
WineQualityLevelInput.SelectedItem = null;
|
WineQualityLevelInput.SelectedItem = null;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var kmw = (double)ViewModel.GradationKmw!;
|
var kmw = (double)ViewModel.GradationKmw!;
|
||||||
var max = ViewModel.WineVar?.MaxQualId;
|
var max = ViewModel.WineVar?.MaxQualId;
|
||||||
var quw = ViewModel.WineVar?.IsQuw ?? true;
|
var quw = ViewModel.WineVar?.IsQuw ?? true;
|
||||||
WineQualityLevelInput.ItemsSource = ctx.WineQualityLevels
|
WineQualityLevelInput.ItemsSource = WineQualityLevels
|
||||||
.Where(q => q.MinKmw == null || q.MinKmw <= kmw)
|
.Where(q => q.MinKmw == null || q.MinKmw <= kmw)
|
||||||
.Where(q => quw || q.QualId == "WEI" || q.QualId == max)
|
.Where(q => quw || q.QualId == "WEI" || q.QualId == max)
|
||||||
.ToList();
|
.ToList();
|
||||||
var qual = ctx.GetWineQualityLevel(kmw, !quw ? max : null).GetAwaiter().GetResult();
|
var qual = GetWineQualityLevel(kmw, !quw ? max : null);
|
||||||
SetDefaultValue(WineQualityLevelInput, qual);
|
SetDefaultValue(WineQualityLevelInput, qual);
|
||||||
if (WineQualityLevelInput.SelectedItem == null || (WineQualityLevelInput.SelectedItem is WineQualLevel selected && !selected.IsPredicate)) {
|
if (WineQualityLevelInput.SelectedItem == null || (WineQualityLevelInput.SelectedItem is WineQualLevel selected && !selected.IsPredicate)) {
|
||||||
ControlUtils.SelectItem(WineQualityLevelInput, qual);
|
ControlUtils.SelectItem(WineQualityLevelInput, qual);
|
||||||
@@ -1386,8 +1397,7 @@ namespace Elwig.Windows {
|
|||||||
AbgewertetInput.IsChecked = false;
|
AbgewertetInput.IsChecked = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
using var ctx = new AppDbContext();
|
var defQual = GetWineQualityLevel(ViewModel.GradationKmw!.Value, !(ViewModel.WineVar?.IsQuw ?? true) ? ViewModel.WineVar?.MaxQualId : null);
|
||||||
var defQual = ctx.GetWineQualityLevel(ViewModel.GradationKmw!.Value, !(ViewModel.WineVar?.IsQuw ?? true) ? ViewModel.WineVar?.MaxQualId : null).GetAwaiter().GetResult();
|
|
||||||
AbgewertetInput.IsChecked = !qual.IsPredicate && defQual != qual;
|
AbgewertetInput.IsChecked = !qual.IsPredicate && defQual != qual;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user