diff --git a/Elwig/Helpers/Utils.cs b/Elwig/Helpers/Utils.cs index b73c085..b2517f0 100644 --- a/Elwig/Helpers/Utils.cs +++ b/Elwig/Helpers/Utils.cs @@ -246,5 +246,50 @@ namespace Elwig.Helpers { } return i; } + + public static object? GetItemFromSource(IEnumerable source, Func getId, object? id) { + if (source == null) + return null; + var items = source.Cast(); + var item = items.Where(i => getId(i)?.Equals(id) ?? false).FirstOrDefault(); + if (item == null && items.Any(i => i is NullItem)) + return items.Where(i => i is NullItem).First(); + return item; + } + + public static object? GetItemFromSource(IEnumerable source, object? item, Func getId) { + return GetItemFromSource(source, getId, getId(item)); + } + + public static void SelectComboBoxItem(ComboBox cb, Func getId, object? id) { + cb.SelectedItem = GetItemFromSource(cb.ItemsSource, getId, id); + } + + public static void SelectComboBoxItem(ComboBox cb, object? item, Func getId) { + SelectComboBoxItem(cb, getId, getId(item)); + } + + public static IEnumerable GetItemsFromSource(IEnumerable source, Func getId, IEnumerable id) { + if (source == null) + return Array.Empty(); + return source.Cast().Where(i => getId(i)?.Equals(id) ?? false); + } + + public static IEnumerable GetItemsFromSource(IEnumerable source, IEnumerable? items, Func getId) { + if (items == null) + return Array.Empty(); + return GetItemsFromSource(source, getId, items.Select(i => getId(i))); + } + + public static void SelectCheckComboBoxItems(Xceed.Wpf.Toolkit.CheckComboBox ccb, Func getId, IEnumerable? ids) { + ccb.SelectedItems.Clear(); + if (ids == null) return; + foreach (var id in ids) + ccb.SelectedItems.Add(Utils.GetItemFromSource(ccb.SelectedItems, getId, id)); + } + + public static void SelectCheckComboBoxItems(Xceed.Wpf.Toolkit.CheckComboBox ccb, IEnumerable? items, Func getId) { + SelectCheckComboBoxItems(ccb, getId, GetItemsFromSource(ccb.ItemsSource, items, getId)); + } } } diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml.cs b/Elwig/Windows/DeliveryAdminWindow.xaml.cs index d3353ab..4ab0a9f 100644 --- a/Elwig/Windows/DeliveryAdminWindow.xaml.cs +++ b/Elwig/Windows/DeliveryAdminWindow.xaml.cs @@ -128,7 +128,7 @@ namespace Elwig.Windows { var y = (d?.Year ?? Utils.CurrentLastSeason); Utils.RenewItemsSource(MemberInput, await Context.Members.OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToListAsync(), i => (i as Member)?.MgNr); Utils.RenewItemsSource(BranchInput, await Context.Branches.OrderBy(b => b.Name).ToListAsync(), i => (i as Branch)?.ZwstId); - BranchInput.SelectedItem = BranchInput.ItemsSource.Cast().First(b => b.ZwstId == App.ZwstId); + Utils.SelectComboBoxItem(BranchInput, i => (i as Branch)?.ZwstId, App.ZwstId); Utils.RenewItemsSource(WineVarietyInput, await Context.WineVarieties.OrderBy(v => v.Name).ToListAsync(), i => (i as WineVar)?.SortId); Utils.RenewItemsSource(AttributesInput, await Context.WineAttributes.OrderBy(a => a.Name).ToListAsync(), i => (i as WineAttr)?.AttrId); Utils.RenewItemsSource(WineQualityLevelInput, await Context.WineQualityLevels.ToListAsync(), i => (i as WineQualLevel)?.QualId); @@ -180,17 +180,16 @@ namespace Elwig.Windows { var p = DeliveryPartList.SelectedItem as DeliveryPart; SortIdInput.Text = p?.SortId ?? ""; - AttributesInput.SelectedItems.Clear(); - foreach (var a in p?.Attributes ?? Array.Empty()) - AttributesInput.SelectedItems.Add(AttributesInput.ItemsSource.Cast().Where(i => i.AttrId == a.AttrId).First()); - GradationKmwInput.Text = p?.Kmw.ToString() ?? ""; - WineQualityLevelInput.SelectedItem = p?.Quality ?? null; + Utils.SelectCheckComboBoxItems(AttributesInput, p?.Attributes, i => (i as WineAttr)?.AttrId); + GradationKmwInput.Text = (p != null) ? $"{p.Kmw:N1}" : ""; + Utils.SelectComboBoxItem(WineQualityLevelInput, q => (q as WineQualLevel)?.QualId, p?.QualId); + Utils.SelectComboBoxItem(WineKgInput, k => (k as AT_Kg)?.KgNr, p?.KgNr); + Utils.SelectComboBoxItem(WineRdInput, r => (r as WbRd)?.RdNr, p?.RdNr); + Utils.SelectComboBoxItem(WineOriginInput, r => (r as WineOrigin)?.HkId, p?.HkId); WeightInput.Text = p?.Weight.ToString() ?? ""; ManualWeighingInput.IsChecked = p?.ManualWeighing ?? false; GerebeltGewogenInput.IsChecked = p?.IsGerebelt ?? false; - ModifiersInput.SelectedItems.Clear(); - foreach (var m in p?.Modifiers ?? Array.Empty()) - ModifiersInput.SelectedItems.Add(ModifiersInput.ItemsSource.Cast().Where(i => i.ModId == m.ModId).First()); + Utils.SelectCheckComboBoxItems(ModifiersInput, p?.Modifiers, i => (i as Modifier)?.ModId); PartCommentInput.Text = p?.Comment ?? ""; TemperatureInput.Text = p?.Temperature?.ToString() ?? ""; AcidInput.Text = p?.Acid?.ToString() ?? "";