ControlUtils: Cleanup SelectItem() method and use accordingly
This commit is contained in:
		@@ -248,7 +248,7 @@ namespace Elwig {
 | 
			
		||||
        public static BaseDataWindow FocusBaseDataSeason(int year) {
 | 
			
		||||
            var w = FocusBaseData();
 | 
			
		||||
            w.Seasons.Focus();
 | 
			
		||||
            ControlUtils.SelectListBoxItem(w.SeasonList, s => (s as Season)?.Year, year);
 | 
			
		||||
            ControlUtils.SelectItemWithPk(w.SeasonList, year);
 | 
			
		||||
            return w;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,5 @@
 | 
			
		||||
using Elwig.Models.Entities;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
 | 
			
		||||
@@ -45,6 +46,7 @@ namespace Elwig.Helpers.Billing {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [PrimaryKey("Listing")]
 | 
			
		||||
    public class Varibute : IComparable<Varibute> {
 | 
			
		||||
 | 
			
		||||
        public WineVar? Variety { get; }
 | 
			
		||||
 
 | 
			
		||||
@@ -84,13 +84,13 @@ namespace Elwig.Helpers {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void RenewItemsSource(Selector selector, IEnumerable? source, Func<object?, object?> getId, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None) {
 | 
			
		||||
        public static void RenewItemsSource(Selector selector, IEnumerable? source, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None) {
 | 
			
		||||
            if (selector.ItemsSource == source)
 | 
			
		||||
                return;
 | 
			
		||||
            var selectedId = getId(selector.SelectedItem);
 | 
			
		||||
            var selectedId = Utils.GetEntityIdentifier(selector.SelectedItem);
 | 
			
		||||
            object? selItem = null;
 | 
			
		||||
            if (selectedId != null && source != null)
 | 
			
		||||
                selItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i)));
 | 
			
		||||
            if (selectedId != 0 && source != null)
 | 
			
		||||
                selItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(Utils.GetEntityIdentifier(i)));
 | 
			
		||||
            if (source != null && selItem == null) {
 | 
			
		||||
                if ((def == RenewSourceDefault.IfOnly && source.Cast<object>().Count() == 1) || def == RenewSourceDefault.First) {
 | 
			
		||||
                    selItem = source.Cast<object>().First();
 | 
			
		||||
@@ -102,30 +102,30 @@ namespace Elwig.Helpers {
 | 
			
		||||
            selector.SelectedItem = selItem;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void RenewItemsSource(Xceed.Wpf.Toolkit.Primitives.Selector selector, IEnumerable? source, Func<object?, object?> getId, Xceed.Wpf.Toolkit.Primitives.ItemSelectionChangedEventHandler? handler = null) {
 | 
			
		||||
        public static void RenewItemsSource(Xceed.Wpf.Toolkit.Primitives.Selector selector, IEnumerable? source, Xceed.Wpf.Toolkit.Primitives.ItemSelectionChangedEventHandler? handler = null) {
 | 
			
		||||
            if (selector.ItemsSource == source)
 | 
			
		||||
                return;
 | 
			
		||||
            var selectedIds = selector.SelectedItems.Cast<object>().Select(i => getId(i)).ToList();
 | 
			
		||||
            var selectedIds = selector.SelectedItems.Cast<object>().Select(i => Utils.GetEntityIdentifier(i)).ToList();
 | 
			
		||||
            if (handler != null && selectedIds != null) selector.ItemSelectionChanged -= handler;
 | 
			
		||||
            selector.ItemsSource = source;
 | 
			
		||||
            if (source != null) {
 | 
			
		||||
                selector.SelectedItems.Clear();
 | 
			
		||||
                foreach (var i in source.Cast<object>().Where(i => selectedIds.Contains(getId(i))))
 | 
			
		||||
                foreach (var i in source.Cast<object>().Where(i => selectedIds.Contains(Utils.GetEntityIdentifier(i))))
 | 
			
		||||
                    selector.SelectedItems.Add(i);
 | 
			
		||||
            }
 | 
			
		||||
            if (handler != null && selectedIds != null) selector.ItemSelectionChanged += handler;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void RenewItemsSource(DataGrid dataGrid, IEnumerable? source, Func<object?, object?> getId, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None, bool keepSort = true) {
 | 
			
		||||
        public static void RenewItemsSource(DataGrid dataGrid, IEnumerable? source, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None, bool keepSort = true) {
 | 
			
		||||
            if (dataGrid.ItemsSource == source)
 | 
			
		||||
                return;
 | 
			
		||||
            var column = dataGrid.CurrentCell.Column;
 | 
			
		||||
            var sortColumns = dataGrid.Columns.Select(c => c.SortDirection).ToList();
 | 
			
		||||
            var sort = dataGrid.Items.SortDescriptions.ToList();
 | 
			
		||||
            var selectedId = getId(dataGrid.SelectedItem);
 | 
			
		||||
            var selectedId = Utils.GetEntityIdentifier(dataGrid.SelectedItem);
 | 
			
		||||
            object? selItem = null;
 | 
			
		||||
            if (selectedId != null && source != null)
 | 
			
		||||
                selItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i)));
 | 
			
		||||
            if (selectedId != 0 && source != null)
 | 
			
		||||
                selItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(Utils.GetEntityIdentifier(i)));
 | 
			
		||||
            if (source != null && selItem == null) {
 | 
			
		||||
                if ((def == RenewSourceDefault.IfOnly && source.Cast<object>().Count() == 1) || def == RenewSourceDefault.First) {
 | 
			
		||||
                    selItem = source.Cast<object>().First();
 | 
			
		||||
@@ -145,13 +145,13 @@ namespace Elwig.Helpers {
 | 
			
		||||
                dataGrid.CurrentCell = new(dataGrid.SelectedItem, column);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void RenewItemsSource(ListBox listBox, IEnumerable? source, Func<object?, object?> getId, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None) {
 | 
			
		||||
        public static void RenewItemsSource(ListBox listBox, IEnumerable? source, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None) {
 | 
			
		||||
            if (listBox.ItemsSource == source)
 | 
			
		||||
                return;
 | 
			
		||||
            var selectedId = getId(listBox.SelectedItem);
 | 
			
		||||
            var selectedId = Utils.GetEntityIdentifier(listBox.SelectedItem);
 | 
			
		||||
            object? selItem = null;
 | 
			
		||||
            if (selectedId != null && source != null)
 | 
			
		||||
                selItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i)));
 | 
			
		||||
            if (selectedId != 0 && source != null)
 | 
			
		||||
                selItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(Utils.GetEntityIdentifier(i)));
 | 
			
		||||
            if (source != null && selItem == null) {
 | 
			
		||||
                if ((def == RenewSourceDefault.IfOnly && source.Cast<object>().Count() == 1) || def == RenewSourceDefault.First) {
 | 
			
		||||
                    selItem = source.Cast<object>().FirstOrDefault();
 | 
			
		||||
@@ -163,61 +163,65 @@ namespace Elwig.Helpers {
 | 
			
		||||
            listBox.SelectedItem = selItem;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static object? GetItemFromSource(IEnumerable source, Func<object?, object?> getId, object? id) {
 | 
			
		||||
        public static object? GetItemFromSource(IEnumerable source, int? hash) {
 | 
			
		||||
            if (source == null)
 | 
			
		||||
                return null;
 | 
			
		||||
            var items = source.Cast<object>();
 | 
			
		||||
            var item = items.Where(i => getId(i)?.Equals(id) ?? false).FirstOrDefault();
 | 
			
		||||
            var item = items.Where(i => Utils.GetEntityIdentifier(i) == hash).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<object?, object?> getId) {
 | 
			
		||||
            return GetItemFromSource(source, getId, getId(item));
 | 
			
		||||
        public static object? GetItemFromSource(IEnumerable source, object? item) {
 | 
			
		||||
            return GetItemFromSource(source, Utils.GetEntityIdentifier(item));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void SelectComboBoxItem(ComboBox cb, Func<object?, object?> getId, object? id) {
 | 
			
		||||
            cb.SelectedItem = GetItemFromSource(cb.ItemsSource, getId, id);
 | 
			
		||||
        public static void SelectItemWithHash(Selector input, int? hash) {
 | 
			
		||||
            if (hash == null) {
 | 
			
		||||
                input.SelectedItem = null;
 | 
			
		||||
            } else {
 | 
			
		||||
                input.SelectedItem = GetItemFromSource(input.ItemsSource, (int)hash);
 | 
			
		||||
            }
 | 
			
		||||
            if (input is ListBox lb) {
 | 
			
		||||
                lb.ScrollIntoView(lb.SelectedItem);
 | 
			
		||||
            } else if (input is DataGrid dg) {
 | 
			
		||||
                dg.ScrollIntoView(dg.SelectedItem);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void SelectComboBoxItem(ComboBox cb, object? item, Func<object?, object?> getId) {
 | 
			
		||||
            SelectComboBoxItem(cb, getId, getId(item));
 | 
			
		||||
        public static void SelectItemWithPk(Selector input, params object?[] pk) {
 | 
			
		||||
            SelectItemWithHash(input, Utils.GetEntityIdentifier(pk));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void SelectListBoxItem(ListBox lb, Func<object?, object?> getId, object? id) {
 | 
			
		||||
            lb.SelectedItem = GetItemFromSource(lb.ItemsSource, getId, id);
 | 
			
		||||
            lb.ScrollIntoView(lb.SelectedItem);
 | 
			
		||||
        public static void SelectItem(Selector input, object? item) {
 | 
			
		||||
            SelectItemWithHash(input, Utils.GetEntityIdentifier(item));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void SelectListBoxItem(ListBox lb, object? item, Func<object?, object?> getId) {
 | 
			
		||||
            SelectListBoxItem(lb, getId, getId(item));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static IEnumerable<object?> GetItemsFromSource(IEnumerable source, Func<object?, object?> getId, IEnumerable<object?> ids) {
 | 
			
		||||
        public static IEnumerable<object?> GetItemsFromSource(IEnumerable source, IEnumerable<int?> ids) {
 | 
			
		||||
            if (source == null)
 | 
			
		||||
                return Array.Empty<object>();
 | 
			
		||||
            return source.Cast<object>().Where(i => ids.Any(c => c?.Equals(getId(i)) ?? false));
 | 
			
		||||
                return [];
 | 
			
		||||
            return source.Cast<object>().Where(i => ids.Any(c => c == Utils.GetEntityIdentifier(i)));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static IEnumerable<object?> GetItemsFromSource(IEnumerable source, IEnumerable<object?>? items, Func<object?, object?> getId) {
 | 
			
		||||
        public static IEnumerable<object?> GetItemsFromSource(IEnumerable source, IEnumerable<object?>? items) {
 | 
			
		||||
            if (items == null)
 | 
			
		||||
                return Array.Empty<object>();
 | 
			
		||||
            return GetItemsFromSource(source, getId, items.Select(i => getId(i)));
 | 
			
		||||
                return [];
 | 
			
		||||
            return GetItemsFromSource(source, items.Select(Utils.GetEntityIdentifier));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void SelectCheckComboBoxItems(Xceed.Wpf.Toolkit.CheckComboBox ccb, Func<object?, object?> getId, IEnumerable<object?>? ids) {
 | 
			
		||||
        public static void SelectItems(Xceed.Wpf.Toolkit.CheckComboBox ccb, IEnumerable<int?>? ids) {
 | 
			
		||||
            ccb.SelectedItems.Clear();
 | 
			
		||||
            if (ids == null) return;
 | 
			
		||||
            foreach (var id in ids)
 | 
			
		||||
                ccb.SelectedItems.Add(GetItemFromSource(ccb.ItemsSource, getId, id));
 | 
			
		||||
                ccb.SelectedItems.Add(GetItemFromSource(ccb.ItemsSource, id));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void SelectCheckComboBoxItems(Xceed.Wpf.Toolkit.CheckComboBox ccb, IEnumerable<object>? items, Func<object?, object?> getId) {
 | 
			
		||||
            SelectCheckComboBoxItems(ccb, getId, items?.Select(i => getId(i)));
 | 
			
		||||
        public static void SelectItems(Xceed.Wpf.Toolkit.CheckComboBox ccb, IEnumerable<object>? items) {
 | 
			
		||||
            SelectItems(ccb, items?.Select(Utils.GetEntityIdentifier));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static int GetInputHashCode(Control input) {
 | 
			
		||||
        public static int? GetInputHashCode(Control input) {
 | 
			
		||||
            if (input is TextBox tb) {
 | 
			
		||||
                return Utils.GetEntityIdentifier(tb.Text);
 | 
			
		||||
            } else if (input is ComboBox sb) {
 | 
			
		||||
@@ -229,7 +233,7 @@ namespace Elwig.Helpers {
 | 
			
		||||
            } else if (input is RadioButton rb) {
 | 
			
		||||
                return Utils.GetEntityIdentifier(rb.IsChecked);
 | 
			
		||||
            } else {
 | 
			
		||||
                return 0;
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -435,17 +435,17 @@ namespace Elwig.Helpers {
 | 
			
		||||
            return client;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static int GetEntityIdentifier(object? obj) {
 | 
			
		||||
        public static int? GetEntityIdentifier(object? obj) {
 | 
			
		||||
            if (obj == null) {
 | 
			
		||||
                return 0;
 | 
			
		||||
            } else if (obj is IEnumerable list) {
 | 
			
		||||
                var arr = list.Cast<object>().Select(o => GetEntityIdentifier(o)).ToArray();
 | 
			
		||||
                return ((IStructuralEquatable)arr).GetHashCode(EqualityComparer<int>.Default);
 | 
			
		||||
            } else if (obj.GetType().GetCustomAttribute(typeof(PrimaryKeyAttribute), false) is not PrimaryKeyAttribute pkAttr) {
 | 
			
		||||
                return obj.GetHashCode();
 | 
			
		||||
            } else {
 | 
			
		||||
                return null;
 | 
			
		||||
            } else if (obj is IEnumerable list && obj is not string) {
 | 
			
		||||
                var arr = list.Cast<object>().Select(GetEntityIdentifier).ToArray();
 | 
			
		||||
                return ((IStructuralEquatable)arr).GetHashCode(EqualityComparer<int?>.Default);
 | 
			
		||||
            } else if (obj.GetType().GetCustomAttribute(typeof(PrimaryKeyAttribute), true) is PrimaryKeyAttribute pkAttr) {
 | 
			
		||||
                var pk = pkAttr.PropertyNames.Select(name => obj.GetType().GetProperty(name)!.GetValue(obj)?.GetHashCode() ?? 0).ToArray();
 | 
			
		||||
                return ((IStructuralEquatable)pk).GetHashCode(EqualityComparer<int>.Default);
 | 
			
		||||
            } else {
 | 
			
		||||
                return obj.GetHashCode();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -198,15 +198,15 @@ namespace Elwig.Windows {
 | 
			
		||||
 | 
			
		||||
        protected void FillOriginalValues() {
 | 
			
		||||
            foreach (var tb in TextBoxInputs)
 | 
			
		||||
                OriginalValues[tb] = Utils.GetEntityIdentifier(tb.Text);
 | 
			
		||||
                OriginalValues[tb] = ControlUtils.GetInputHashCode(tb);
 | 
			
		||||
            foreach (var cb in ComboBoxInputs)
 | 
			
		||||
                OriginalValues[cb] = Utils.GetEntityIdentifier(cb.SelectedItem);
 | 
			
		||||
                OriginalValues[cb] = ControlUtils.GetInputHashCode(cb);
 | 
			
		||||
            foreach (var ccb in CheckComboBoxInputs)
 | 
			
		||||
                OriginalValues[ccb] = Utils.GetEntityIdentifier(ccb.SelectedItems);
 | 
			
		||||
                OriginalValues[ccb] = ControlUtils.GetInputHashCode(ccb);
 | 
			
		||||
            foreach (var cb in CheckBoxInputs)
 | 
			
		||||
                OriginalValues[cb] = Utils.GetEntityIdentifier(cb.IsChecked);
 | 
			
		||||
                OriginalValues[cb] = ControlUtils.GetInputHashCode(cb);
 | 
			
		||||
            foreach (var rb in RadioButtonInputs)
 | 
			
		||||
                OriginalValues[rb] = Utils.GetEntityIdentifier(rb.IsChecked);
 | 
			
		||||
                OriginalValues[rb] = ControlUtils.GetInputHashCode(rb);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected void SetOriginalValue(Control input, object? value) {
 | 
			
		||||
@@ -232,7 +232,7 @@ namespace Elwig.Windows {
 | 
			
		||||
 | 
			
		||||
        protected void SetDefaultValue(Control input, object? value) {
 | 
			
		||||
            if (input is UnitTextBox utbx) input = utbx.TextBox;
 | 
			
		||||
            DefaultValues[input] = value != null ? Utils.GetEntityIdentifier(value) : null;
 | 
			
		||||
            DefaultValues[input] = Utils.GetEntityIdentifier(value);
 | 
			
		||||
            if (!InputHasChanged(input)) {
 | 
			
		||||
                if (InputIsNotDefault(input)) {
 | 
			
		||||
                    ControlUtils.SetInputNotDefault(input);
 | 
			
		||||
@@ -278,39 +278,21 @@ namespace Elwig.Windows {
 | 
			
		||||
 | 
			
		||||
        protected bool InputHasChanged(Control input) {
 | 
			
		||||
            if (input is UnitTextBox utbx) input = utbx.TextBox;
 | 
			
		||||
            if (!OriginalValues.ContainsKey(input)) {
 | 
			
		||||
            if (!OriginalValues.TryGetValue(input, out int? original)) {
 | 
			
		||||
                return false;
 | 
			
		||||
            } else if (input is TextBox tb) {
 | 
			
		||||
                return OriginalValues[tb] != Utils.GetEntityIdentifier(tb.Text);
 | 
			
		||||
            } else if (input is ComboBox sb) {
 | 
			
		||||
                return OriginalValues[sb] != Utils.GetEntityIdentifier(sb.SelectedItem);
 | 
			
		||||
            } else if (input is CheckComboBox ccb) {
 | 
			
		||||
                return OriginalValues[ccb] != Utils.GetEntityIdentifier(ccb.SelectedItems);
 | 
			
		||||
            } else if (input is CheckBox cb) {
 | 
			
		||||
                return OriginalValues[cb] != Utils.GetEntityIdentifier(cb.IsChecked);
 | 
			
		||||
            } else if (input is RadioButton rb) {
 | 
			
		||||
                return OriginalValues[rb] != Utils.GetEntityIdentifier(rb.IsChecked);
 | 
			
		||||
            } else {
 | 
			
		||||
                return false;
 | 
			
		||||
                var current = ControlUtils.GetInputHashCode(input);
 | 
			
		||||
                return original != current;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected bool InputIsNotDefault(Control input) {
 | 
			
		||||
            if (input is UnitTextBox utbx) input = utbx.TextBox;
 | 
			
		||||
            if (!DefaultValues.ContainsKey(input)) {
 | 
			
		||||
            if (!DefaultValues.TryGetValue(input, out int? defaultValue)) {
 | 
			
		||||
                return false;
 | 
			
		||||
            } else if (input is TextBox tb) {
 | 
			
		||||
                return DefaultValues[tb] != Utils.GetEntityIdentifier(tb.Text);
 | 
			
		||||
            } else if (input is ComboBox sb) {
 | 
			
		||||
                return DefaultValues[sb] != Utils.GetEntityIdentifier(sb.SelectedItem);
 | 
			
		||||
            } else if (input is CheckComboBox ccb) {
 | 
			
		||||
                return DefaultValues[ccb] != Utils.GetEntityIdentifier(ccb.SelectedItems);
 | 
			
		||||
            } else if (input is CheckBox cb) {
 | 
			
		||||
                return DefaultValues[cb] != Utils.GetEntityIdentifier(cb.IsChecked);
 | 
			
		||||
            } else if (input is RadioButton rb) {
 | 
			
		||||
                return DefaultValues[rb] != Utils.GetEntityIdentifier(rb.IsChecked);
 | 
			
		||||
            } else {
 | 
			
		||||
                return false;
 | 
			
		||||
                var current = ControlUtils.GetInputHashCode(input);
 | 
			
		||||
                return defaultValue != current;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -343,7 +325,7 @@ namespace Elwig.Windows {
 | 
			
		||||
                   .ToListAsync();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            ControlUtils.RenewItemsSource(ortInput, list, i => (i as AT_PlzDest)?.Id);
 | 
			
		||||
            ControlUtils.RenewItemsSource(ortInput, list);
 | 
			
		||||
            if (list != null && ortInput.SelectedItem == null && list.Count == 1)
 | 
			
		||||
                ortInput.SelectedItem = list[0];
 | 
			
		||||
            UpdateComboBox(ortInput);
 | 
			
		||||
 
 | 
			
		||||
@@ -61,7 +61,7 @@ namespace Elwig.Windows {
 | 
			
		||||
                    .ToList();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            ControlUtils.RenewItemsSource(AreaCommitmentList, areaComs, i => (i as AreaCom)?.FbNr,
 | 
			
		||||
            ControlUtils.RenewItemsSource(AreaCommitmentList, areaComs,
 | 
			
		||||
                AreaCommitmentList_SelectionChanged, filter.Count > 0 ? ControlUtils.RenewSourceDefault.IfOnly : ControlUtils.RenewSourceDefault.None, !updateSort);
 | 
			
		||||
            RefreshInputs();
 | 
			
		||||
 | 
			
		||||
@@ -153,18 +153,18 @@ namespace Elwig.Windows {
 | 
			
		||||
            YearFromInput.Text = a.YearFrom.ToString();
 | 
			
		||||
            YearToInput.Text = a.YearTo.ToString();
 | 
			
		||||
 | 
			
		||||
            ControlUtils.SelectComboBoxItem(KgInput, k => (k as AT_Kg)?.KgNr, a.KgNr);
 | 
			
		||||
            ControlUtils.SelectItemWithPk(KgInput, a.KgNr);
 | 
			
		||||
            if (a.RdNr != null) {
 | 
			
		||||
                ControlUtils.SelectComboBoxItem(RdInput, r => (r as WbRd)?.RdNr, a.RdNr);
 | 
			
		||||
                ControlUtils.SelectItemWithPk(RdInput, a.KgNr, a.RdNr);
 | 
			
		||||
            } else {
 | 
			
		||||
                RdInput.SelectedIndex = 0;
 | 
			
		||||
            }
 | 
			
		||||
            GstNrInput.Text = a.GstNr;
 | 
			
		||||
            AreaInput.Text = a.Area.ToString();
 | 
			
		||||
 | 
			
		||||
            ControlUtils.SelectComboBoxItem(AreaComTypeInput, t => (t as AreaComType)?.VtrgId, a.VtrgId);
 | 
			
		||||
            ControlUtils.SelectItemWithPk(AreaComTypeInput, a.VtrgId);
 | 
			
		||||
            if (a.CultId != null) {
 | 
			
		||||
                ControlUtils.SelectComboBoxItem(WineCultivationInput, c => (c as WineCult)?.CultId, a.CultId);
 | 
			
		||||
                ControlUtils.SelectItemWithPk(WineCultivationInput, a.CultId);
 | 
			
		||||
            } else {
 | 
			
		||||
                WineCultivationInput.SelectedIndex = 0;
 | 
			
		||||
            }
 | 
			
		||||
@@ -196,17 +196,17 @@ namespace Elwig.Windows {
 | 
			
		||||
                .Include(k => k.AtKg.WbKg!.Rds)
 | 
			
		||||
                .Select(k => k.AtKg)
 | 
			
		||||
                .OrderBy(k => k.Name)
 | 
			
		||||
                .ToListAsync(), i => (i as AT_Kg)?.KgNr);
 | 
			
		||||
                .ToListAsync());
 | 
			
		||||
            ControlUtils.RenewItemsSource(AreaComTypeInput, await ctx.AreaCommitmentTypes
 | 
			
		||||
                .Include(c => c.WineVar)
 | 
			
		||||
                .Include(c => c.WineAttr)
 | 
			
		||||
                .OrderBy(v => v.VtrgId)
 | 
			
		||||
                .ToListAsync(), i => (i as AreaComType)?.VtrgId);
 | 
			
		||||
                .ToListAsync());
 | 
			
		||||
            var cultList = await ctx.WineCultivations
 | 
			
		||||
                .OrderBy(c => c.Name)
 | 
			
		||||
                .Cast<object>().ToListAsync();
 | 
			
		||||
            cultList.Insert(0, new NullItem());
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineCultivationInput, cultList, i => (i as WineCult)?.CultId, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineCultivationInput, cultList, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            await RefreshAreaCommitmentList();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -312,7 +312,7 @@ namespace Elwig.Windows {
 | 
			
		||||
            await RefreshAreaCommitmentList();
 | 
			
		||||
            RefreshInputs();
 | 
			
		||||
            SearchInput.Text = "";
 | 
			
		||||
            AreaCommitmentList.SelectedItem = AreaCommitmentList.ItemsSource.Cast<AreaCom>().Where(a => a.FbNr == fbnr).FirstOrDefault();
 | 
			
		||||
            ControlUtils.SelectItem(AreaCommitmentList, AreaCommitmentList.ItemsSource.Cast<AreaCom>().Where(a => a.FbNr == fbnr).FirstOrDefault());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void AreaCommitmentResetButton_Click(object sender, RoutedEventArgs evt) {
 | 
			
		||||
@@ -418,10 +418,10 @@ namespace Elwig.Windows {
 | 
			
		||||
            if (KgInput.SelectedItem is AT_Kg kg) {
 | 
			
		||||
                var rdList = kg.WbKg!.Rds.OrderBy(r => r.Name).Cast<object>().ToList();
 | 
			
		||||
                rdList.Insert(0, new NullItem());
 | 
			
		||||
                ControlUtils.RenewItemsSource(RdInput, rdList, i => (i as WbRd)?.RdNr, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
                ControlUtils.RenewItemsSource(RdInput, rdList, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            } else {
 | 
			
		||||
                var rdList = new object[] { new NullItem() };
 | 
			
		||||
                ControlUtils.RenewItemsSource(RdInput, rdList, i => (i as WbRd)?.RdNr, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
                ControlUtils.RenewItemsSource(RdInput, rdList, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            }
 | 
			
		||||
            ComboBox_SelectionChanged(sender, evt);
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -26,12 +26,12 @@ namespace Elwig.Windows {
 | 
			
		||||
                .ToListAsync());
 | 
			
		||||
            _acts = _actList.ToDictionary(v => v.VtrgId, v => (string?)v.VtrgId);
 | 
			
		||||
            _actIds = _actList.ToDictionary(v => v, v => v.VtrgId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(AreaCommitmentTypeList, _actList, a => (a as AreaComType)?.VtrgId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(AreaCommitmentTypeList, _actList);
 | 
			
		||||
            AreaCommitmentTypeList_SelectionChanged(null, null);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private async Task AreaCommitmentTypesFinishEditing(AppDbContext ctx) {
 | 
			
		||||
            ControlUtils.RenewItemsSource(AreaCommitmentTypeList, await ctx.AreaCommitmentTypes.OrderBy(v => v.SortId).ToListAsync(), v => (v as AreaComType)?.VtrgId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(AreaCommitmentTypeList, await ctx.AreaCommitmentTypes.OrderBy(v => v.SortId).ToListAsync());
 | 
			
		||||
            _actList = null;
 | 
			
		||||
            _acts = null;
 | 
			
		||||
            _actIds = null;
 | 
			
		||||
@@ -73,8 +73,8 @@ namespace Elwig.Windows {
 | 
			
		||||
            _actUpdate = true;
 | 
			
		||||
            if (AreaCommitmentTypeList.SelectedItem is AreaComType type) {
 | 
			
		||||
                AreaCommitmentTypeIdInput.Text = $"{type.SortId}{type.AttrId}";
 | 
			
		||||
                ControlUtils.SelectComboBoxItem(AreaCommitmentTypeWineVariantInput, s => (s as WineVar)?.SortId, type.SortId);
 | 
			
		||||
                ControlUtils.SelectComboBoxItem(AreaCommitmentTypeWineAttributeInput, a => (a as WineAttr)?.AttrId, type.AttrId);
 | 
			
		||||
                ControlUtils.SelectItemWithPk(AreaCommitmentTypeWineVariantInput, type.SortId);
 | 
			
		||||
                ControlUtils.SelectItemWithPk(AreaCommitmentTypeWineAttributeInput, type.AttrId);
 | 
			
		||||
                AreaCommitmentTypeMinKgPerHaInput.Text = $"{type.MinKgPerHa}";
 | 
			
		||||
                AreaCommitmentTypePenaltyPerKgInput.Text = $"{type.PenaltyPerKg}";
 | 
			
		||||
                AreaCommitmentTypePenaltyInput.Text = $"{type.PenaltyAmount}";
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ namespace Elwig.Windows {
 | 
			
		||||
                .ToListAsync());
 | 
			
		||||
            _branches = _branchList.ToDictionary(b => b.ZwstId, b => (string?)b.ZwstId);
 | 
			
		||||
            _branchIds = _branchList.ToDictionary(b => b, b => b.ZwstId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(BranchList, _branchList, b => (b as Branch)?.ZwstId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(BranchList, _branchList);
 | 
			
		||||
            BranchList_SelectionChanged(null, null);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -33,7 +33,7 @@ namespace Elwig.Windows {
 | 
			
		||||
            ControlUtils.RenewItemsSource(BranchList, await ctx.Branches
 | 
			
		||||
                .OrderBy(b => b.Name)
 | 
			
		||||
                .Include(b => b.PostalDest!.AtPlz)
 | 
			
		||||
                .ToListAsync(), b => (b as Branch)?.ZwstId);
 | 
			
		||||
                .ToListAsync());
 | 
			
		||||
            _branchList = null;
 | 
			
		||||
            _branches = null;
 | 
			
		||||
            _branchIds = null;
 | 
			
		||||
@@ -85,7 +85,7 @@ namespace Elwig.Windows {
 | 
			
		||||
                BranchIdInput.Text = branch.ZwstId;
 | 
			
		||||
                BranchNameInput.Text = branch.Name;
 | 
			
		||||
                BranchPlzInput.Text = branch.PostalDest?.AtPlz?.Plz.ToString() ?? "";
 | 
			
		||||
                ControlUtils.SelectComboBoxItem(BranchOrtInput, o => (o as AT_PlzDest)?.Okz, branch.PostalDest?.AtPlz?.Okz);
 | 
			
		||||
                ControlUtils.SelectItem(BranchOrtInput, branch.PostalDest?.AtPlz);
 | 
			
		||||
                BranchAddressInput.Text = branch.Address;
 | 
			
		||||
                BranchPhoneNrInput.Text = branch.PhoneNr;
 | 
			
		||||
                BranchFaxNrInput.Text = branch.FaxNr;
 | 
			
		||||
 
 | 
			
		||||
@@ -25,13 +25,13 @@ namespace Elwig.Windows {
 | 
			
		||||
            _modList = new(await ctx.Modifiers.Where(m => m.Year == year).OrderBy(m => m.Ordering).ToListAsync());
 | 
			
		||||
            _mods = _modList.ToDictionary(m => m.ModId, m => (string?)m.ModId);
 | 
			
		||||
            _modIds = _modList.ToDictionary(m => m, m => m.ModId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(SeasonModifierList, _modList, m => (m as Modifier)?.ModId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(SeasonModifierList, _modList);
 | 
			
		||||
            SeasonModifierList_SelectionChanged(null, null);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private async Task ModifiersFinishEditing(AppDbContext ctx) {
 | 
			
		||||
            var year = (SeasonList.SelectedItem as Season)?.Year;
 | 
			
		||||
            ControlUtils.RenewItemsSource(SeasonModifierList, await ctx.Modifiers.Where(m => m.Year == year).OrderBy(m => m.Ordering).ToListAsync(), m => (m as Modifier)?.ModId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(SeasonModifierList, await ctx.Modifiers.Where(m => m.Year == year).OrderBy(m => m.Ordering).ToListAsync());
 | 
			
		||||
            _modList = null;
 | 
			
		||||
            _mods = null;
 | 
			
		||||
            _modIds = null;
 | 
			
		||||
 
 | 
			
		||||
@@ -13,12 +13,12 @@ namespace Elwig.Windows {
 | 
			
		||||
        private bool _seasonUpdate = false;
 | 
			
		||||
 | 
			
		||||
        private async Task SeasonsInitEditing(AppDbContext ctx) {
 | 
			
		||||
            ControlUtils.RenewItemsSource(SeasonList, await ctx.Seasons.OrderByDescending(s => s.Year).ToListAsync(), s => (s as Season)?.Year);
 | 
			
		||||
            ControlUtils.RenewItemsSource(SeasonList, await ctx.Seasons.OrderByDescending(s => s.Year).ToListAsync());
 | 
			
		||||
            SeasonList_SelectionChanged(null, null);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private async Task SeasonsFinishEditing(AppDbContext ctx) {
 | 
			
		||||
            ControlUtils.RenewItemsSource(SeasonList, await ctx.Seasons.OrderByDescending(s => s.Year).Include(s => s.Modifiers).ToListAsync(), s => (s as Season)?.Year);
 | 
			
		||||
            ControlUtils.RenewItemsSource(SeasonList, await ctx.Seasons.OrderByDescending(s => s.Year).Include(s => s.Modifiers).ToListAsync());
 | 
			
		||||
            _seasonChanged = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -22,12 +22,12 @@ namespace Elwig.Windows {
 | 
			
		||||
            _attrList = new(await ctx.WineAttributes.OrderBy(a => a.Name).ToListAsync());
 | 
			
		||||
            _attrs = _attrList.ToDictionary(a => a.AttrId, a => (string?)a.AttrId);
 | 
			
		||||
            _attrIds = _attrList.ToDictionary(a => a, a => a.AttrId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineAttributeList, _attrList, a => (a as WineAttr)?.AttrId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineAttributeList, _attrList);
 | 
			
		||||
            WineAttributeList_SelectionChanged(null, null);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private async Task WineAttributesFinishEditing(AppDbContext ctx) {
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineAttributeList, await ctx.WineAttributes.OrderBy(a => a.Name).ToListAsync(), a => (a as WineAttr)?.AttrId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineAttributeList, await ctx.WineAttributes.OrderBy(a => a.Name).ToListAsync());
 | 
			
		||||
            _attrList = null;
 | 
			
		||||
            _attrs = null;
 | 
			
		||||
            _attrIds = null;
 | 
			
		||||
 
 | 
			
		||||
@@ -22,12 +22,12 @@ namespace Elwig.Windows {
 | 
			
		||||
            _cultList = new(await ctx.WineCultivations.OrderBy(c => c.Name).ToListAsync());
 | 
			
		||||
            _cults = _cultList.ToDictionary(c => c.CultId, c => (string?)c.CultId);
 | 
			
		||||
            _cultIds = _cultList.ToDictionary(c => c, c => c.CultId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineCultivationList, _cultList, c => (c as WineCult)?.CultId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineCultivationList, _cultList);
 | 
			
		||||
            WineCultivationList_SelectionChanged(null, null);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private async Task WineCultivationsFinishEditing(AppDbContext ctx) {
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineCultivationList, await ctx.WineCultivations.OrderBy(c => c.Name).ToListAsync(), c => (c as WineCult)?.CultId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineCultivationList, await ctx.WineCultivations.OrderBy(c => c.Name).ToListAsync());
 | 
			
		||||
            _cultList = null;
 | 
			
		||||
            _cults = null;
 | 
			
		||||
            _cultIds = null;
 | 
			
		||||
 
 | 
			
		||||
@@ -137,33 +137,33 @@ namespace Elwig.Windows {
 | 
			
		||||
            FillInputs(App.Client);
 | 
			
		||||
            ControlUtils.RenewItemsSource(SeasonList, await ctx.Seasons
 | 
			
		||||
                .OrderByDescending(s => s.Year)
 | 
			
		||||
                .ToListAsync(), s => (s as Season)?.Year, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
                .ToListAsync(), null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            var year = (SeasonList.SelectedItem as Season)?.Year;
 | 
			
		||||
            ControlUtils.RenewItemsSource(BranchList, await ctx.Branches
 | 
			
		||||
                .OrderBy(b => b.Name)
 | 
			
		||||
                .Include(b => b.PostalDest!.AtPlz)
 | 
			
		||||
                .ToListAsync(), b => (b as Branch)?.ZwstId, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
                .ToListAsync(), null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineAttributeList, await ctx.WineAttributes
 | 
			
		||||
                .OrderBy(a => a.Name)
 | 
			
		||||
                .ToListAsync(), a => (a as WineAttr)?.AttrId, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
                .ToListAsync(), null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            ControlUtils.RenewItemsSource(AreaCommitmentTypeWineVariantInput, await ctx.WineVarieties
 | 
			
		||||
                .OrderBy(s => s.Name)
 | 
			
		||||
                .ToListAsync(), s => (s as WineVar)?.SortId);
 | 
			
		||||
                .ToListAsync());
 | 
			
		||||
            var attrList = await ctx.WineAttributes.OrderBy(a => a.Name).Cast<object>().ToListAsync();
 | 
			
		||||
            attrList.Insert(0, new NullItem(""));
 | 
			
		||||
            ControlUtils.RenewItemsSource(AreaCommitmentTypeWineAttributeInput, attrList, a => (a as WineAttr)?.AttrId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(AreaCommitmentTypeWineAttributeInput, attrList);
 | 
			
		||||
            ControlUtils.RenewItemsSource(AreaCommitmentTypeList, await ctx.AreaCommitmentTypes
 | 
			
		||||
                .OrderBy(t => t.VtrgId)
 | 
			
		||||
                .Include(t => t.WineVar)
 | 
			
		||||
                .Include(t => t.WineAttr)
 | 
			
		||||
                .ToListAsync(), t => (t as AreaComType)?.VtrgId, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
                .ToListAsync(), null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineCultivationList, await ctx.WineCultivations
 | 
			
		||||
                .OrderBy(c => c.Name)
 | 
			
		||||
                .ToListAsync(), c=> (c as WineCult)?.CultId, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
                .ToListAsync(), null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            ControlUtils.RenewItemsSource(SeasonModifierList, await ctx.Modifiers
 | 
			
		||||
                .Where(m => m.Year == year)
 | 
			
		||||
                .OrderBy(m => m.Ordering)
 | 
			
		||||
                .ToListAsync(), m => (m as Modifier)?.ModId, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
                .ToListAsync(), null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override void UpdateButtons() {
 | 
			
		||||
 
 | 
			
		||||
@@ -139,9 +139,9 @@ namespace Elwig.Windows {
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            FillingInputs = true;
 | 
			
		||||
            ControlUtils.RenewItemsSource(VaributeInput, Vaributes, v => (v as Varibute)?.Listing);
 | 
			
		||||
            ControlUtils.RenewItemsSource(VaributeInput, Vaributes);
 | 
			
		||||
            FillingInputs = false;
 | 
			
		||||
            ControlUtils.RenewItemsSource(GraphList, GraphEntries, g => (g as GraphEntry)?.VaributeStringChange, GraphList_SelectionChanged, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            ControlUtils.RenewItemsSource(GraphList, GraphEntries, GraphList_SelectionChanged, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
 | 
			
		||||
            RefreshInputs();
 | 
			
		||||
        }
 | 
			
		||||
@@ -194,7 +194,7 @@ namespace Elwig.Windows {
 | 
			
		||||
                GebundenFlatBonus.Text = "";
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            ControlUtils.SelectCheckComboBoxItems(VaributeInput, SelectedGraphEntry?.Vaributes ?? [], i => (i as Varibute)?.Listing);
 | 
			
		||||
            ControlUtils.SelectItems(VaributeInput, SelectedGraphEntry?.Vaributes ?? []);
 | 
			
		||||
 | 
			
		||||
            InitPlot();
 | 
			
		||||
            OechslePricePlot.IsEnabled = true;
 | 
			
		||||
 
 | 
			
		||||
@@ -396,10 +396,10 @@
 | 
			
		||||
 | 
			
		||||
                    <CheckBox x:Name="LesewagenInput" Content="Lesewagen" Margin="10,75,0,0" Grid.Column="2"
 | 
			
		||||
                              VerticalAlignment="Top" HorizontalAlignment="Left"
 | 
			
		||||
                              Checked="LesewagenInput_Changed" Unchecked="LesewagenInput_Changed"/>
 | 
			
		||||
                              Checked="LesewagenInput_Changed" Unchecked="LesewagenInput_Changed" Click="HandPickedInput_Changed"/>
 | 
			
		||||
                    <CheckBox x:Name="HandPickedInput" Content="Handlese" Margin="10,105,0,0" Grid.Column="2" IsThreeState="True"
 | 
			
		||||
                              VerticalAlignment="Top" HorizontalAlignment="Left"
 | 
			
		||||
                              Checked="HandPickedInput_Changed" Unchecked="HandPickedInput_Changed"/>
 | 
			
		||||
                              Checked="HandPickedInput_Changed" Unchecked="HandPickedInput_Changed" Click="HandPickedInput_Changed"/>
 | 
			
		||||
                </Grid>
 | 
			
		||||
            </GroupBox>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -288,7 +288,7 @@ namespace Elwig.Windows {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void InitInputs() {
 | 
			
		||||
            ControlUtils.SelectComboBoxItem(BranchInput, i => (i as Branch)?.ZwstId, App.ZwstId);
 | 
			
		||||
            ControlUtils.SelectItemWithPk(BranchInput, App.ZwstId);
 | 
			
		||||
            OnSecondPassed(null, null);
 | 
			
		||||
            UpdateLsNr().GetAwaiter().GetResult();
 | 
			
		||||
            InitialInputs();
 | 
			
		||||
@@ -646,7 +646,7 @@ namespace Elwig.Windows {
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            deliveries.ForEach(d => { d.PartFilter = predicate; });
 | 
			
		||||
            ControlUtils.RenewItemsSource(DeliveryList, deliveries, d => ((d as Delivery)?.Year, (d as Delivery)?.DId),
 | 
			
		||||
            ControlUtils.RenewItemsSource(DeliveryList, deliveries,
 | 
			
		||||
                DeliveryList_SelectionChanged, filter.Count > 0 ? ControlUtils.RenewSourceDefault.IfOnly : ControlUtils.RenewSourceDefault.None, !updateSort);
 | 
			
		||||
            await RefreshDeliveryParts();
 | 
			
		||||
 | 
			
		||||
@@ -795,21 +795,21 @@ namespace Elwig.Windows {
 | 
			
		||||
            await RefreshDeliveryList();
 | 
			
		||||
            var d = DeliveryList.SelectedItem as Delivery;
 | 
			
		||||
            var y = d?.Year ?? Utils.CurrentLastSeason;
 | 
			
		||||
            ControlUtils.RenewItemsSource(MemberInput, await Context.Members.Where(m => m.IsActive || !IsCreating).OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToListAsync(), i => (i as Member)?.MgNr);
 | 
			
		||||
            ControlUtils.RenewItemsSource(BranchInput, await Context.Branches.OrderBy(b => b.Name).ToListAsync(), i => (i as Branch)?.ZwstId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineVarietyInput, await Context.WineVarieties.OrderBy(v => v.Name).ToListAsync(), i => (i as WineVar)?.SortId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(MemberInput, await Context.Members.Where(m => m.IsActive || !IsCreating).OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToListAsync());
 | 
			
		||||
            ControlUtils.RenewItemsSource(BranchInput, await Context.Branches.OrderBy(b => b.Name).ToListAsync());
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineVarietyInput, await Context.WineVarieties.OrderBy(v => v.Name).ToListAsync());
 | 
			
		||||
            var attrList = await Context.WineAttributes.Where(a => !IsCreating || a.IsActive).OrderBy(a => a.Name).Cast<object>().ToListAsync();
 | 
			
		||||
            attrList.Insert(0, new NullItem(""));
 | 
			
		||||
            ControlUtils.RenewItemsSource(AttributeInput, attrList, i => (i as WineAttr)?.AttrId, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            ControlUtils.RenewItemsSource(AttributeInput, attrList, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            var cultList = await Context.WineCultivations.OrderBy(a => a.Name).Cast<object>().ToListAsync();
 | 
			
		||||
            cultList.Insert(0, new NullItem(""));
 | 
			
		||||
            ControlUtils.RenewItemsSource(CultivationInput, cultList, i => (i as WineCult)?.CultId, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineQualityLevelInput, await Context.WineQualityLevels.ToListAsync(), i => (i as WineQualLevel)?.QualId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(ModifiersInput, await Context.Modifiers.Where(m => m.Year == y).OrderBy(m => m.Ordering).ToListAsync(), i => (i as Modifier)?.ModId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineOriginInput, (await Context.WineOrigins.ToListAsync()).OrderByDescending(o => o.SortKey).ThenBy(o => o.HkId), i => (i as WineOrigin)?.HkId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(CultivationInput, cultList, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineQualityLevelInput, await Context.WineQualityLevels.ToListAsync());
 | 
			
		||||
            ControlUtils.RenewItemsSource(ModifiersInput, await Context.Modifiers.Where(m => m.Year == y).OrderBy(m => m.Ordering).ToListAsync());
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineOriginInput, (await Context.WineOrigins.ToListAsync()).OrderByDescending(o => o.SortKey).ThenBy(o => o.HkId));
 | 
			
		||||
            var kgList = await Context.WbKgs.Select(k => k.AtKg).OrderBy(k => k.Name).Cast<object>().ToListAsync();
 | 
			
		||||
            kgList.Insert(0, new NullItem());
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineKgInput, kgList, i => (i as AT_Kg)?.KgNr);
 | 
			
		||||
            ControlUtils.RenewItemsSource(WineKgInput, kgList);
 | 
			
		||||
            UpdateRdInput();
 | 
			
		||||
            if (IsCreating) await UpdateLsNr();
 | 
			
		||||
 | 
			
		||||
@@ -826,10 +826,10 @@ namespace Elwig.Windows {
 | 
			
		||||
 | 
			
		||||
        private async Task RefreshDeliveryParts() {
 | 
			
		||||
            if (DeliveryList.SelectedItem is Delivery d) {
 | 
			
		||||
                ControlUtils.RenewItemsSource(ModifiersInput, await Context.Modifiers.Where(m => m.Year == d.Year).OrderBy(m => m.Ordering).ToListAsync(), i => (i as Modifier)?.ModId);
 | 
			
		||||
                ControlUtils.RenewItemsSource(DeliveryPartList, d.FilteredParts.OrderBy(p => p.DPNr).ToList(), i => ((i as DeliveryPart)?.Year, (i as DeliveryPart)?.DId, (i as DeliveryPart)?.DPNr), DeliveryPartList_SelectionChanged, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
                ControlUtils.RenewItemsSource(ModifiersInput, await Context.Modifiers.Where(m => m.Year == d.Year).OrderBy(m => m.Ordering).ToListAsync());
 | 
			
		||||
                ControlUtils.RenewItemsSource(DeliveryPartList, d.FilteredParts.OrderBy(p => p.DPNr).ToList(), DeliveryPartList_SelectionChanged, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            } else {
 | 
			
		||||
                ControlUtils.RenewItemsSource(ModifiersInput, await Context.Modifiers.Where(m => m.Year == Utils.CurrentLastSeason).OrderBy(m => m.Ordering).ToListAsync(), i => (i as Modifier)?.ModId);
 | 
			
		||||
                ControlUtils.RenewItemsSource(ModifiersInput, await Context.Modifiers.Where(m => m.Year == Utils.CurrentLastSeason).OrderBy(m => m.Ordering).ToListAsync());
 | 
			
		||||
                DeliveryPartList.ItemsSource = null;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -854,7 +854,7 @@ namespace Elwig.Windows {
 | 
			
		||||
            ClearDefaultValues();
 | 
			
		||||
 | 
			
		||||
            MgNrInput.Text = d.MgNr.ToString();
 | 
			
		||||
            ControlUtils.SelectComboBoxItem(BranchInput, i => (i as Branch)?.ZwstId, d.ZwstId);
 | 
			
		||||
            ControlUtils.SelectItemWithPk(BranchInput, d.ZwstId);
 | 
			
		||||
            LsNrInput.Text = d.LsNr;
 | 
			
		||||
            DateInput.Text = d.Date.ToString("dd.MM.yyyy");
 | 
			
		||||
            TimeInput.Text = d.Time?.ToString("HH:mm") ?? "";
 | 
			
		||||
@@ -877,17 +877,17 @@ namespace Elwig.Windows {
 | 
			
		||||
            ClearDefaultValues();
 | 
			
		||||
 | 
			
		||||
            SortIdInput.Text = p?.SortId ?? "";
 | 
			
		||||
            ControlUtils.SelectComboBoxItem(AttributeInput, p?.Attribute, i => (i as WineAttr)?.AttrId);
 | 
			
		||||
            ControlUtils.SelectComboBoxItem(CultivationInput, p?.Cultivation, i => (i as WineCult)?.CultId);
 | 
			
		||||
            ControlUtils.SelectItemWithPk(AttributeInput, p?.AttrId);
 | 
			
		||||
            ControlUtils.SelectItemWithPk(CultivationInput, p?.CultId);
 | 
			
		||||
            GradationKmwInput.Text = (p != null) ? $"{p.Kmw:N1}" : "";
 | 
			
		||||
            ControlUtils.SelectComboBoxItem(WineQualityLevelInput, q => (q as WineQualLevel)?.QualId, p?.QualId);
 | 
			
		||||
            ControlUtils.SelectComboBoxItem(WineKgInput, k => (k as AT_Kg)?.KgNr, p?.KgNr);
 | 
			
		||||
            ControlUtils.SelectComboBoxItem(WineRdInput, r => (r as WbRd)?.RdNr, p?.RdNr);
 | 
			
		||||
            ControlUtils.SelectComboBoxItem(WineOriginInput, r => (r as WineOrigin)?.HkId, p?.HkId);
 | 
			
		||||
            ControlUtils.SelectItemWithPk(WineQualityLevelInput, p?.QualId);
 | 
			
		||||
            ControlUtils.SelectItemWithPk(WineKgInput, p?.KgNr);
 | 
			
		||||
            ControlUtils.SelectItemWithPk(WineRdInput, p?.KgNr, p?.RdNr);
 | 
			
		||||
            ControlUtils.SelectItemWithPk(WineOriginInput, p?.HkId);
 | 
			
		||||
            WeightInput.Text = (p != null) ? $"{p.Weight:N0}" : "";
 | 
			
		||||
            ManualWeighingInput.IsChecked = p?.IsManualWeighing ?? false;
 | 
			
		||||
            GerebeltGewogenInput.IsChecked = p?.IsNetWeight ?? false;
 | 
			
		||||
            ControlUtils.SelectCheckComboBoxItems(ModifiersInput, p?.Modifiers, i => (i as Modifier)?.ModId);
 | 
			
		||||
            ControlUtils.SelectItems(ModifiersInput, p?.Modifiers);
 | 
			
		||||
            PartCommentInput.Text = p?.Comment ?? "";
 | 
			
		||||
            TemperatureInput.Text = (p != null && p.Temperature != null) ? $"{p.Temperature:N1}" : "";
 | 
			
		||||
            AcidInput.Text = (p != null && p.Acid != null) ? $"{p.Acid:N1}" : "";
 | 
			
		||||
@@ -1118,12 +1118,12 @@ namespace Elwig.Windows {
 | 
			
		||||
 | 
			
		||||
        private void MgNrInput_TextChanged(object sender, TextChangedEventArgs evt) {
 | 
			
		||||
            var valid = InputTextChanged((TextBox)sender, Validator.CheckMgNr);
 | 
			
		||||
            MemberInput.SelectedItem = valid ? Context.Members.Find(int.Parse(MgNrInput.Text)) : null;
 | 
			
		||||
            ControlUtils.SelectItemWithPk(MemberInput, valid ? int.Parse(MgNrInput.Text) : null);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void MgNrInput_LostFocus(object sender, RoutedEventArgs evt) {
 | 
			
		||||
            var valid = InputLostFocus((TextBox)sender, Validator.CheckMgNr);
 | 
			
		||||
            MemberInput.SelectedItem = valid ? Context.Members.Find(int.Parse(MgNrInput.Text)) : null;
 | 
			
		||||
            ControlUtils.SelectItemWithPk(MemberInput, valid ? int.Parse(MgNrInput.Text) : null);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void MemberInput_SelectionChanged(object? sender, SelectionChangedEventArgs? evt) {
 | 
			
		||||
@@ -1134,8 +1134,8 @@ namespace Elwig.Windows {
 | 
			
		||||
                UnsetDefaultValue(WineKgInput);
 | 
			
		||||
                WineKgInput.SelectedIndex = 0;
 | 
			
		||||
            } else {
 | 
			
		||||
                SetDefaultValue(WineKgInput, m.DefaultKg);
 | 
			
		||||
                WineKgInput.SelectedItem = m.DefaultKg;
 | 
			
		||||
                ControlUtils.SelectItemWithPk(WineKgInput, m.DefaultKgNr);
 | 
			
		||||
                SetDefaultValue(WineKgInput);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -1155,7 +1155,7 @@ namespace Elwig.Windows {
 | 
			
		||||
            await RefreshDeliveryList();
 | 
			
		||||
            await RefreshDeliveryParts();
 | 
			
		||||
            NewDeliveryPartButton.Cursor = null;
 | 
			
		||||
            DeliveryList.SelectedItem = p?.Delivery;
 | 
			
		||||
            ControlUtils.SelectItem(DeliveryList, p?.Delivery);
 | 
			
		||||
            DeliveryPartList.SelectedItem = null;
 | 
			
		||||
            RefreshInputs();
 | 
			
		||||
            InitialInputs();
 | 
			
		||||
@@ -1201,8 +1201,8 @@ namespace Elwig.Windows {
 | 
			
		||||
 | 
			
		||||
            var attrList = await Context.WineAttributes.OrderBy(a => a.Name).Cast<object>().ToListAsync();
 | 
			
		||||
            attrList.Insert(0, new NullItem(""));
 | 
			
		||||
            ControlUtils.RenewItemsSource(AttributeInput, attrList, i => (i as WineAttr)?.AttrId, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            ControlUtils.RenewItemsSource(MemberInput, await Context.Members.Where(m => m.IsActive || !IsReceipt).OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToListAsync(), i => (i as Member)?.MgNr);
 | 
			
		||||
            ControlUtils.RenewItemsSource(AttributeInput, attrList, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            ControlUtils.RenewItemsSource(MemberInput, await Context.Members.Where(m => m.IsActive || !IsReceipt).OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToListAsync());
 | 
			
		||||
            if (DeliveryList.SelectedItem is not Delivery d) {
 | 
			
		||||
                // switch away from creating mode
 | 
			
		||||
                IsCreating = false;
 | 
			
		||||
@@ -1220,7 +1220,7 @@ namespace Elwig.Windows {
 | 
			
		||||
            } else {
 | 
			
		||||
                // switch to last delivery part
 | 
			
		||||
                DeliveryPartList.IsEnabled = true;
 | 
			
		||||
                DeliveryPartList.SelectedItem = d.FilteredParts.Last();
 | 
			
		||||
                ControlUtils.SelectItem(DeliveryPartList, d.FilteredParts.Last());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -1229,8 +1229,8 @@ namespace Elwig.Windows {
 | 
			
		||||
            SearchInput.Text = "";
 | 
			
		||||
            var attrList = await Context.WineAttributes.Where(a => a.IsActive).OrderBy(a => a.Name).Cast<object>().ToListAsync();
 | 
			
		||||
            attrList.Insert(0, new NullItem(""));
 | 
			
		||||
            ControlUtils.RenewItemsSource(AttributeInput, attrList, i => (i as WineAttr)?.AttrId, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            ControlUtils.RenewItemsSource(MemberInput, await Context.Members.Where(m => m.IsActive || !IsReceipt).OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToListAsync(), i => (i as Member)?.MgNr);
 | 
			
		||||
            ControlUtils.RenewItemsSource(AttributeInput, attrList, null, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            ControlUtils.RenewItemsSource(MemberInput, await Context.Members.Where(m => m.IsActive || !IsReceipt).OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToListAsync());
 | 
			
		||||
            IsCreating = true;
 | 
			
		||||
            DeliveryList.IsEnabled = false;
 | 
			
		||||
            DeliveryPartList.IsEnabled = false;
 | 
			
		||||
@@ -1253,8 +1253,8 @@ namespace Elwig.Windows {
 | 
			
		||||
                Mouse.OverrideCursor = Cursors.AppStarting;
 | 
			
		||||
                ClearOriginalValues();
 | 
			
		||||
                if (res >= p.Weight) {
 | 
			
		||||
                    ControlUtils.SelectComboBoxItem(WineQualityLevelInput, q => (q as WineQualLevel)?.QualId, "WEI");
 | 
			
		||||
                    ControlUtils.SelectComboBoxItem(WineOriginInput, o => (o as WineOrigin)?.HkId, "OEST");
 | 
			
		||||
                    ControlUtils.SelectItemWithPk(WineQualityLevelInput, "WEI");
 | 
			
		||||
                    ControlUtils.SelectItemWithPk(WineOriginInput, "OEST");
 | 
			
		||||
                    p.QualId = "WEI";
 | 
			
		||||
                    p.HkId = "OEST";
 | 
			
		||||
                    entry1 = Context.Update(p);
 | 
			
		||||
@@ -1449,7 +1449,7 @@ namespace Elwig.Windows {
 | 
			
		||||
 | 
			
		||||
                Mouse.OverrideCursor = null;
 | 
			
		||||
                await RefreshDeliveryList();
 | 
			
		||||
                DeliveryList.SelectedItem = d;
 | 
			
		||||
                ControlUtils.SelectItem(DeliveryList, d);
 | 
			
		||||
            } catch (Exception exc) {
 | 
			
		||||
                if (entry != null) {
 | 
			
		||||
                    entry.State = EntityState.Detached;
 | 
			
		||||
@@ -1612,10 +1612,10 @@ namespace Elwig.Windows {
 | 
			
		||||
        private void UpdateWineVariety(bool valid) {
 | 
			
		||||
            if (valid) {
 | 
			
		||||
                var text = SortIdInput.Text;
 | 
			
		||||
                WineVarietyInput.SelectedItem = Context.WineVarieties.Find(text[0..2]);
 | 
			
		||||
                ControlUtils.SelectItemWithPk(WineVarietyInput, text[0..2]);
 | 
			
		||||
                if (text.Length >= 3) {
 | 
			
		||||
                    ControlUtils.SelectComboBoxItem(AttributeInput, Context.WineAttributes.Find(text[2..]), a => (a as WineAttr)?.AttrId);
 | 
			
		||||
                    ControlUtils.SelectComboBoxItem(CultivationInput, Context.WineCultivations.Find(text[2..]), i => (i as WineCult)?.CultId);
 | 
			
		||||
                    ControlUtils.SelectItemWithPk(AttributeInput, text[2..]);
 | 
			
		||||
                    ControlUtils.SelectItemWithPk(CultivationInput, text[2..]);
 | 
			
		||||
                    SortIdInput.Text = text[0..2];
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
@@ -1649,7 +1649,7 @@ namespace Elwig.Windows {
 | 
			
		||||
            var qual = Context.GetWineQualityLevel(kmw).GetAwaiter().GetResult();
 | 
			
		||||
            SetDefaultValue(WineQualityLevelInput, qual);
 | 
			
		||||
            if (WineQualityLevelInput.SelectedItem == null || (WineQualityLevelInput.SelectedItem is WineQualLevel selected && !selected.IsPredicate)) {
 | 
			
		||||
                WineQualityLevelInput.SelectedItem = qual;
 | 
			
		||||
                ControlUtils.SelectItem(WineQualityLevelInput, qual);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -1744,7 +1744,7 @@ namespace Elwig.Windows {
 | 
			
		||||
            var o = kg.Origin;
 | 
			
		||||
            while (o != null && o.Level > qual.OriginLevel) o = o.Parent;
 | 
			
		||||
            SetDefaultValue(WineOriginInput, o);
 | 
			
		||||
            WineOriginInput.SelectedItem = o;
 | 
			
		||||
            ControlUtils.SelectItem(WineOriginInput, o);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void WineQualityLevelInput_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
 | 
			
		||||
@@ -1756,7 +1756,7 @@ namespace Elwig.Windows {
 | 
			
		||||
            if (WineKgInput.SelectedItem is AT_Kg kg) {
 | 
			
		||||
                var list = Context.WbRde.Where(r => r.KgNr == kg.KgNr).OrderBy(r => r.Name).Cast<object>().ToList();
 | 
			
		||||
                list.Insert(0, new NullItem());
 | 
			
		||||
                ControlUtils.RenewItemsSource(WineRdInput, list, i => ((i as WbRd)?.KgNr, (i as WbRd)?.RdNr));
 | 
			
		||||
                ControlUtils.RenewItemsSource(WineRdInput, list);
 | 
			
		||||
                if (WineRdInput.SelectedItem == null) WineRdInput.SelectedIndex = 0;
 | 
			
		||||
                WineRdInput.IsEnabled = (IsEditing || IsCreating) && list.Count > 1;
 | 
			
		||||
            } else {
 | 
			
		||||
 
 | 
			
		||||
@@ -142,7 +142,7 @@ namespace Elwig.Windows {
 | 
			
		||||
            ControlUtils.RenewItemsSource(MemberBranchInput, await ctx.Branches
 | 
			
		||||
                .Where(b => b.Members.Any())
 | 
			
		||||
                .OrderBy(b => b.Name)
 | 
			
		||||
                .ToListAsync(), b => (b as Branch)?.ZwstId, MemberInput_SelectionChanged);
 | 
			
		||||
                .ToListAsync(), MemberInput_SelectionChanged);
 | 
			
		||||
            if (MemberBranchInput.SelectedItems.Count == 0) {
 | 
			
		||||
                MemberBranchInput.ItemSelectionChanged -= MemberInput_SelectionChanged;
 | 
			
		||||
                MemberBranchInput.SelectAll();
 | 
			
		||||
@@ -151,7 +151,7 @@ namespace Elwig.Windows {
 | 
			
		||||
            ControlUtils.RenewItemsSource(MemberKgInput, await ctx.Katastralgemeinden
 | 
			
		||||
                .Where(k => k.WbKg!.Members.Any())
 | 
			
		||||
                .OrderBy(k => k.Name)
 | 
			
		||||
                .ToListAsync(), k => (k as AT_Kg)?.KgNr, MemberInput_SelectionChanged);
 | 
			
		||||
                .ToListAsync(), MemberInput_SelectionChanged);
 | 
			
		||||
            if (MemberKgInput.SelectedItems.Count == 0) {
 | 
			
		||||
                MemberKgInput.ItemSelectionChanged -= MemberInput_SelectionChanged;
 | 
			
		||||
                MemberKgInput.SelectAll();
 | 
			
		||||
@@ -159,7 +159,7 @@ namespace Elwig.Windows {
 | 
			
		||||
            }
 | 
			
		||||
            ControlUtils.RenewItemsSource(MemberAreaComInput, await ctx.AreaCommitmentTypes
 | 
			
		||||
                .OrderBy(a => a.VtrgId)
 | 
			
		||||
                .ToListAsync(), a => (a as AreaComType)?.VtrgId, MemberInput_SelectionChanged);
 | 
			
		||||
                .ToListAsync(), MemberInput_SelectionChanged);
 | 
			
		||||
            if (MemberAreaComInput.SelectedItems.Count == 0) {
 | 
			
		||||
                MemberAreaComInput.ItemSelectionChanged -= MemberInput_SelectionChanged;
 | 
			
		||||
                MemberAreaComInput.SelectAll();
 | 
			
		||||
@@ -169,7 +169,7 @@ namespace Elwig.Windows {
 | 
			
		||||
                .Where(m => m.IsActive)
 | 
			
		||||
                .OrderBy(m => m.FamilyName)
 | 
			
		||||
                .ThenBy(m => m.GivenName)
 | 
			
		||||
                .ToListAsync(), m => (m as Member)?.MgNr, MemberInput_SelectionChanged);
 | 
			
		||||
                .ToListAsync(), MemberInput_SelectionChanged);
 | 
			
		||||
            if (MemberCustomInput.SelectedItems.Count == 0) {
 | 
			
		||||
                MemberCustomInput.ItemSelectionChanged -= MemberInput_SelectionChanged;
 | 
			
		||||
                MemberCustomInput.SelectAll();
 | 
			
		||||
 
 | 
			
		||||
@@ -90,8 +90,7 @@ namespace Elwig.Windows {
 | 
			
		||||
                    FocusMember(mgnr);
 | 
			
		||||
                });
 | 
			
		||||
            } else {
 | 
			
		||||
                MemberList.SelectedItem = item;
 | 
			
		||||
                MemberList.ScrollIntoView(MemberList.SelectedItem);
 | 
			
		||||
                ControlUtils.SelectItem(MemberList, item);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -218,7 +217,7 @@ namespace Elwig.Windows {
 | 
			
		||||
                    .ToList();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            ControlUtils.RenewItemsSource(MemberList, members, i => (i as Member)?.MgNr,
 | 
			
		||||
            ControlUtils.RenewItemsSource(MemberList, members,
 | 
			
		||||
                MemberList_SelectionChanged, TextFilter.Count > 0 ? ControlUtils.RenewSourceDefault.IfOnly : ControlUtils.RenewSourceDefault.None, !updateSort);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -268,8 +267,8 @@ namespace Elwig.Windows {
 | 
			
		||||
        protected override async Task OnRenewContext() {
 | 
			
		||||
            await base.OnRenewContext();
 | 
			
		||||
            using var ctx = new AppDbContext();
 | 
			
		||||
            ControlUtils.RenewItemsSource(BranchInput, await ctx.Branches.OrderBy(b => b.Name).ToListAsync(), i => (i as Branch)?.ZwstId);
 | 
			
		||||
            ControlUtils.RenewItemsSource(DefaultKgInput, await ctx.WbKgs.Select(k => k.AtKg).OrderBy(k => k.Name).ToListAsync(), i => (i as AT_Kg)?.KgNr);
 | 
			
		||||
            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());
 | 
			
		||||
            await RefreshMemberList();
 | 
			
		||||
            StatusMembers.Text = $"Mitglieder: {await ctx.Members.CountAsync(m => m.IsActive):N0} ({await ctx.Members.CountAsync():N0})";
 | 
			
		||||
            StatusBusinessShares.Text = $"Geschäftsanteile: {await ctx.Members.Where(m => m.IsActive).SumAsync(m => m.BusinessShares):N0} ({await ctx.Members.SumAsync(m => m.BusinessShares):N0})";
 | 
			
		||||
@@ -686,7 +685,7 @@ namespace Elwig.Windows {
 | 
			
		||||
            AT_PlzDest? p = m.PostalDest.AtPlz;
 | 
			
		||||
            if (p != null) {
 | 
			
		||||
                PlzInput.Text = p.Plz.ToString();
 | 
			
		||||
                ControlUtils.SelectComboBoxItem(OrtInput, o => (o as AT_PlzDest)?.Okz, p.Okz);
 | 
			
		||||
                ControlUtils.SelectItem(OrtInput, p);
 | 
			
		||||
            } else {
 | 
			
		||||
                PlzInput.Text = null;
 | 
			
		||||
                OrtInput.SelectedItem = null;
 | 
			
		||||
@@ -728,7 +727,7 @@ namespace Elwig.Windows {
 | 
			
		||||
                AT_PlzDest? b = billingAddr.PostalDest.AtPlz;
 | 
			
		||||
                if (b != null) {
 | 
			
		||||
                    BillingPlzInput.Text = b.Plz.ToString();
 | 
			
		||||
                    ControlUtils.SelectComboBoxItem(BillingOrtInput, o => (o as AT_PlzDest)?.Okz, b.Okz);
 | 
			
		||||
                    ControlUtils.SelectItem(BillingOrtInput, b);
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                BillingNameInput.Text = "";
 | 
			
		||||
@@ -741,8 +740,8 @@ namespace Elwig.Windows {
 | 
			
		||||
            ExitDateInput.Text = (m.ExitDateString != null) ? string.Join(".", m.ExitDateString.Split("-").Reverse()) : null;
 | 
			
		||||
            BusinessSharesInput.Text = m.BusinessShares.ToString();
 | 
			
		||||
            AccountingNrInput.Text = m.AccountingNr;
 | 
			
		||||
            ControlUtils.SelectComboBoxItem(BranchInput, b => (b as Branch)?.ZwstId, m.ZwstId);
 | 
			
		||||
            ControlUtils.SelectComboBoxItem(DefaultKgInput, k => (k as AT_Kg)?.KgNr, m.DefaultKgNr);
 | 
			
		||||
            ControlUtils.SelectItemWithPk(BranchInput, m.ZwstId);
 | 
			
		||||
            ControlUtils.SelectItemWithPk(DefaultKgInput, m.DefaultKgNr);
 | 
			
		||||
            CommentInput.Text = m.Comment;
 | 
			
		||||
            ActiveInput.IsChecked = m.IsActive;
 | 
			
		||||
            VollLieferantInput.IsChecked = m.IsVollLieferant;
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ namespace Elwig.Windows {
 | 
			
		||||
                        .ToListAsync())
 | 
			
		||||
                        .OrderByDescending(o => o.SortKey)
 | 
			
		||||
                        .ThenBy(o => o.HkId);
 | 
			
		||||
                ControlUtils.RenewItemsSource(WineOrigins, origins, i => (i as WineOrigin)?.HkId, WineOrigins_SelectionChanged);
 | 
			
		||||
                ControlUtils.RenewItemsSource(WineOrigins, origins, WineOrigins_SelectionChanged);
 | 
			
		||||
                if (WineOrigins.SelectedItem == null) {
 | 
			
		||||
                    var hkid = await ctx.WbKgs
 | 
			
		||||
                        .GroupBy(k => k.AtKg.Gem.WbGem!.HkId)
 | 
			
		||||
@@ -36,14 +36,14 @@ namespace Elwig.Windows {
 | 
			
		||||
                        .OrderByDescending(g => g.Count())
 | 
			
		||||
                        .Select(g => g.Key)
 | 
			
		||||
                        .FirstOrDefaultAsync();
 | 
			
		||||
                    ControlUtils.SelectListBoxItem(WineOrigins, o => (o as WineOrigin)?.HkId, hkid);
 | 
			
		||||
                    ControlUtils.SelectItemWithPk(WineOrigins, hkid);
 | 
			
		||||
                }
 | 
			
		||||
                var gls = await ctx.WbGls
 | 
			
		||||
                    .OrderBy(g => g.GlNr)
 | 
			
		||||
                    .Include("Kgs.Rds")
 | 
			
		||||
                    .AsSplitQuery()
 | 
			
		||||
                    .ToListAsync();
 | 
			
		||||
                ControlUtils.RenewItemsSource(WbGls, gls, g => (g as WbGl)?.GlNr, WbGls_SelectionChanged, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
                ControlUtils.RenewItemsSource(WbGls, gls, WbGls_SelectionChanged, ControlUtils.RenewSourceDefault.First);
 | 
			
		||||
            }
 | 
			
		||||
            UpdateWbGems();
 | 
			
		||||
            UpdateWbKgs();
 | 
			
		||||
@@ -55,7 +55,7 @@ namespace Elwig.Windows {
 | 
			
		||||
            WbGemsHeader.Content = "Gemeinden" + (WineOrigins.SelectedItem is WineOrigin o ? $" ({o.Name})" : "");
 | 
			
		||||
            var origin = (WineOrigins.SelectedItem as WineOrigin);
 | 
			
		||||
            var gems = origin?.Gems.Select(g => g.AtGem).OrderBy(g => g.Name).ToList();
 | 
			
		||||
            ControlUtils.RenewItemsSource(WbGems, gems, g => (g as AT_Gem)?.Gkz, WbGems_SelectionChanged);
 | 
			
		||||
            ControlUtils.RenewItemsSource(WbGems, gems, WbGems_SelectionChanged);
 | 
			
		||||
            UpdateWbKgs();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -72,7 +72,7 @@ namespace Elwig.Windows {
 | 
			
		||||
                kgs = null;
 | 
			
		||||
            }
 | 
			
		||||
            var kgList = kgs?.OrderBy(k => k.WbKg?.Gl == null).ThenBy(k => k.WbKg?.GlNr).ThenBy(k => k.Name).ToList();
 | 
			
		||||
            ControlUtils.RenewItemsSource(WbKgs, kgList, k => (k as AT_Kg)?.KgNr, WbKgs_SelectionChanged);
 | 
			
		||||
            ControlUtils.RenewItemsSource(WbKgs, kgList, WbKgs_SelectionChanged);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void UpdateWbGlKgs() {
 | 
			
		||||
@@ -80,7 +80,7 @@ namespace Elwig.Windows {
 | 
			
		||||
            if (WbGls.SelectedItem is WbGl g) {
 | 
			
		||||
                WbGlKgsHeader.Content += $" ({g.Name})";
 | 
			
		||||
                var kgs = g.Kgs.Select(k => k.AtKg).OrderBy(k => k.Name).ToList();
 | 
			
		||||
                ControlUtils.RenewItemsSource(WbGlKgs, kgs, k => (k as AT_Kg)?.KgNr, WbGlKgs_SelectionChanged);
 | 
			
		||||
                ControlUtils.RenewItemsSource(WbGlKgs, kgs, WbGlKgs_SelectionChanged);
 | 
			
		||||
            } else {
 | 
			
		||||
                WbGlKgs.ItemsSource = null;
 | 
			
		||||
            }
 | 
			
		||||
@@ -122,7 +122,7 @@ namespace Elwig.Windows {
 | 
			
		||||
            if (WbGlKgs.SelectedItem is AT_Kg k) {
 | 
			
		||||
                WbRdsHeader.Content += $" ({k.Name})";
 | 
			
		||||
                var rds = k.WbKg?.Rds.OrderBy(r => r.Name).ToList();
 | 
			
		||||
                ControlUtils.RenewItemsSource(WbRds, rds, k => (k as AT_Kg)?.KgNr);
 | 
			
		||||
                ControlUtils.RenewItemsSource(WbRds, rds);
 | 
			
		||||
            } else {
 | 
			
		||||
                WbRds.ItemsSource = null;
 | 
			
		||||
            }
 | 
			
		||||
@@ -145,9 +145,9 @@ namespace Elwig.Windows {
 | 
			
		||||
            UpdateWbRds();
 | 
			
		||||
            if (!isUpdating && WbGlKgs.SelectedItem is AT_Kg k) {
 | 
			
		||||
                isUpdating = true;
 | 
			
		||||
                ControlUtils.SelectListBoxItem(WineOrigins, o => (o as WineOrigin)?.HkId, k.Gem.WbGem?.HkId);
 | 
			
		||||
                ControlUtils.SelectListBoxItem(WbGems, g => (g as AT_Gem)?.Gkz, k.Gkz);
 | 
			
		||||
                ControlUtils.SelectListBoxItem(WbKgs, k => (k as AT_Kg)?.KgNr, k.KgNr);
 | 
			
		||||
                ControlUtils.SelectItemWithPk(WineOrigins, k.Gem.WbGem?.HkId);
 | 
			
		||||
                ControlUtils.SelectItemWithPk(WbGems, k.Gkz);
 | 
			
		||||
                ControlUtils.SelectItemWithPk(WbKgs, k.KgNr);
 | 
			
		||||
                isUpdating = false;
 | 
			
		||||
            }
 | 
			
		||||
            await UpdateStatusBar();
 | 
			
		||||
@@ -157,8 +157,8 @@ namespace Elwig.Windows {
 | 
			
		||||
            UpdateButtons();
 | 
			
		||||
            if (!isUpdating && WbKgs.SelectedItem is AT_Kg k && k.WbKg != null && ((WbGls.SelectedItem as WbGl)?.GlNr == k.WbKg?.GlNr || WbGls.SelectedItem == null)) {
 | 
			
		||||
                isUpdating = true;
 | 
			
		||||
                ControlUtils.SelectListBoxItem(WbGls, g => (g as WbGl)?.GlNr, k.WbKg?.GlNr);
 | 
			
		||||
                ControlUtils.SelectListBoxItem(WbGlKgs, k => (k as AT_Kg)?.KgNr, k.KgNr);
 | 
			
		||||
                ControlUtils.SelectItemWithPk(WbGls, k.WbKg?.GlNr);
 | 
			
		||||
                ControlUtils.SelectItemWithPk(WbGlKgs, k.KgNr);
 | 
			
		||||
                isUpdating = false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -194,7 +194,7 @@ namespace Elwig.Windows {
 | 
			
		||||
                    await ctx.SaveChangesAsync();
 | 
			
		||||
                }
 | 
			
		||||
                await App.HintContextChange();
 | 
			
		||||
                ControlUtils.SelectListBoxItem(WbGlKgs, kg => (kg as AT_Kg)?.KgNr, k.KgNr);
 | 
			
		||||
                ControlUtils.SelectItemWithPk(WbGlKgs, k.KgNr);
 | 
			
		||||
            } catch (Exception exc) {
 | 
			
		||||
                var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
 | 
			
		||||
                if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
 | 
			
		||||
@@ -214,7 +214,7 @@ namespace Elwig.Windows {
 | 
			
		||||
                    await ctx.SaveChangesAsync();
 | 
			
		||||
                }
 | 
			
		||||
                await App.HintContextChange();
 | 
			
		||||
                ControlUtils.SelectListBoxItem(WbKgs, kg => (kg as AT_Kg)?.KgNr, k.KgNr);
 | 
			
		||||
                ControlUtils.SelectItemWithPk(WbKgs, k.KgNr);
 | 
			
		||||
            } catch (Exception exc) {
 | 
			
		||||
                await HintContextChange();
 | 
			
		||||
                var str = "Der Eintrag konnte nicht aus der Datenbank gelöscht werden!\n\n" + exc.Message;
 | 
			
		||||
@@ -226,8 +226,8 @@ namespace Elwig.Windows {
 | 
			
		||||
        public void FocusKgNr(int kgnr) {
 | 
			
		||||
            using var ctx = new AppDbContext();
 | 
			
		||||
            var kg = ctx.Katastralgemeinden.Find(kgnr);
 | 
			
		||||
            ControlUtils.SelectListBoxItem(WbGls, kg?.WbKg?.Gl, g => (g as WbGl)?.GlNr);
 | 
			
		||||
            ControlUtils.SelectListBoxItem(WbGlKgs, kg, k => (k as AT_Kg)?.KgNr);
 | 
			
		||||
            ControlUtils.SelectItemWithPk(WbGls, kg?.WbKg?.GlNr);
 | 
			
		||||
            ControlUtils.SelectItemWithPk(WbGlKgs, kg?.KgNr);
 | 
			
		||||
            WbGlKgs.Focus();
 | 
			
		||||
            WbGlKgs.ScrollIntoView(kg?.WbKg?.Gl);
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ namespace Elwig.Windows {
 | 
			
		||||
                .Where(v => v.Year == Year)
 | 
			
		||||
                .OrderBy(v => v.AvNr)
 | 
			
		||||
                .Include(v => v.Season.Currency)
 | 
			
		||||
                .ToListAsync(), v => (v as PaymentVar)?.AvNr);
 | 
			
		||||
                .ToListAsync());
 | 
			
		||||
            await Update();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -207,7 +207,7 @@ namespace Elwig.Windows {
 | 
			
		||||
                await ctx.SaveChangesAsync();
 | 
			
		||||
                await App.HintContextChange();
 | 
			
		||||
 | 
			
		||||
                ControlUtils.SelectListBoxItem(PaymentVariantList, v, v => (v as PaymentVar)?.AvNr);
 | 
			
		||||
                ControlUtils.SelectItem(PaymentVariantList, v);
 | 
			
		||||
            } catch (Exception exc) {
 | 
			
		||||
                var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
 | 
			
		||||
                if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
 | 
			
		||||
@@ -232,7 +232,7 @@ namespace Elwig.Windows {
 | 
			
		||||
                await ctx.SaveChangesAsync();
 | 
			
		||||
                await App.HintContextChange();
 | 
			
		||||
 | 
			
		||||
                ControlUtils.SelectListBoxItem(PaymentVariantList, n, v => (v as PaymentVar)?.AvNr);
 | 
			
		||||
                ControlUtils.SelectItem(PaymentVariantList, n);
 | 
			
		||||
            } catch (Exception exc) {
 | 
			
		||||
                var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
 | 
			
		||||
                if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user