Changes in DeliveryAdminWindow
This commit is contained in:
		@@ -137,27 +137,54 @@ namespace Elwig.Helpers {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void RenewItemsSource(Selector selector, IEnumerable? source, Func<object?, object?> getId) {
 | 
			
		||||
        public enum RenewSourceDefault {
 | 
			
		||||
            None,
 | 
			
		||||
            IfOnly,
 | 
			
		||||
            First
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void RenewItemsSource(Selector selector, IEnumerable? source, Func<object?, object?> getId, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None) {
 | 
			
		||||
            if (selector.ItemsSource == source)
 | 
			
		||||
                return;
 | 
			
		||||
            var selectedId = getId(selector.SelectedItem);
 | 
			
		||||
            if (handler != null) selector.SelectionChanged -= handler;
 | 
			
		||||
            selector.ItemsSource = source;
 | 
			
		||||
            if (selectedId != null && source != null)
 | 
			
		||||
                selector.SelectedItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i)));
 | 
			
		||||
            if (source != null && selector.SelectedItem == null) {
 | 
			
		||||
                if ((def == RenewSourceDefault.IfOnly && source.Cast<object>().Count() == 1) || def == RenewSourceDefault.First) {
 | 
			
		||||
                    selector.SelectedItem = source.Cast<object>().First();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (handler != null) selector.SelectionChanged += handler;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void RenewItemsSource(Xceed.Wpf.Toolkit.Primitives.Selector selector, IEnumerable? source, Func<object?, object?> getId) {
 | 
			
		||||
        public static void RenewItemsSource(Xceed.Wpf.Toolkit.Primitives.Selector selector, IEnumerable? source, Func<object?, object?> getId, Xceed.Wpf.Toolkit.Primitives.ItemSelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None) {
 | 
			
		||||
            if (selector.ItemsSource == source)
 | 
			
		||||
                return;
 | 
			
		||||
            var selectedIds = selector.SelectedItems.Cast<object>().Select(i => getId(i)).ToList();
 | 
			
		||||
            if (handler != null) selector.ItemSelectionChanged -= handler;
 | 
			
		||||
            selector.ItemsSource = source;
 | 
			
		||||
            if (source != null) {
 | 
			
		||||
                foreach (var i in source.Cast<object>().Where(i => selectedIds.Contains(getId(i))))
 | 
			
		||||
                    selector.SelectedItems.Add(i);
 | 
			
		||||
            }
 | 
			
		||||
            if (source != null && selector.SelectedItem == null) {
 | 
			
		||||
                if ((def == RenewSourceDefault.IfOnly && source.Cast<object>().Count() == 1) || def == RenewSourceDefault.First) {
 | 
			
		||||
                    selector.SelectedItem = source.Cast<object>().First();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (handler != null) selector.ItemSelectionChanged += handler;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void RenewItemsSource(DataGrid dataGrid, IEnumerable? source, Func<object?, object?> getId, bool keepSort = true) {
 | 
			
		||||
        public static void RenewItemsSource(DataGrid dataGrid, IEnumerable? source, Func<object?, object?> getId, 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);
 | 
			
		||||
            if (handler != null) dataGrid.SelectionChanged -= handler;
 | 
			
		||||
            dataGrid.ItemsSource = source;
 | 
			
		||||
            if (keepSort) {
 | 
			
		||||
                for (int i = 0; i < dataGrid.Columns.Count; i++)
 | 
			
		||||
@@ -169,13 +196,28 @@ namespace Elwig.Helpers {
 | 
			
		||||
                dataGrid.SelectedItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i)));
 | 
			
		||||
            if (dataGrid.SelectedItem != null && column != null)
 | 
			
		||||
                dataGrid.CurrentCell = new(dataGrid.SelectedItem, column);
 | 
			
		||||
            if (source != null && dataGrid.SelectedItem == null) {
 | 
			
		||||
                if ((def == RenewSourceDefault.IfOnly && source.Cast<object>().Count() == 1) || def == RenewSourceDefault.First) {
 | 
			
		||||
                    dataGrid.SelectedItem = source.Cast<object>().First();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (handler != null) dataGrid.SelectionChanged += handler;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void RenewItemsSource(ListBox listBox, IEnumerable? source, Func<object?, object?> getId) {
 | 
			
		||||
        public static void RenewItemsSource(ListBox listBox, IEnumerable? source, Func<object?, object?> getId, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None) {
 | 
			
		||||
            if (listBox.ItemsSource == source)
 | 
			
		||||
                return;
 | 
			
		||||
            var selectedId = getId(listBox.SelectedItem);
 | 
			
		||||
            if (handler != null) listBox.SelectionChanged -= handler;
 | 
			
		||||
            listBox.ItemsSource = source;
 | 
			
		||||
            if (selectedId != null && source != null)
 | 
			
		||||
                listBox.SelectedItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i)));
 | 
			
		||||
            if (source != null && listBox.SelectedItem == null) {
 | 
			
		||||
                if ((def == RenewSourceDefault.IfOnly && source.Cast<object>().Count() == 1) || def == RenewSourceDefault.First) {
 | 
			
		||||
                    listBox.SelectedItem = source.Cast<object>().First();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (handler != null) listBox.SelectionChanged += handler;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static int Modulo(string a, int b) {
 | 
			
		||||
 
 | 
			
		||||
@@ -181,7 +181,7 @@ namespace Elwig.Windows {
 | 
			
		||||
            OriginalValues.Remove(input);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected void ClearInputs() {
 | 
			
		||||
        protected void ClearInputs(bool validate = true) {
 | 
			
		||||
            foreach (var tb in TextBoxInputs)
 | 
			
		||||
                tb.Text = "";
 | 
			
		||||
            foreach (var cb in ComboBoxInputs)
 | 
			
		||||
@@ -192,7 +192,7 @@ namespace Elwig.Windows {
 | 
			
		||||
                cb.IsChecked = false;
 | 
			
		||||
            foreach (var rb in RadioButtonInputs)
 | 
			
		||||
                rb.IsChecked = false;
 | 
			
		||||
            ValidateRequiredInputs();
 | 
			
		||||
            if (validate) ValidateRequiredInputs();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected bool IsValid => Valid.All(kv => kv.Value);
 | 
			
		||||
 
 | 
			
		||||
@@ -26,11 +26,11 @@ namespace Elwig.Windows {
 | 
			
		||||
            if (LockContext || !Context.HasBackendChanged) return;
 | 
			
		||||
            Context.Dispose();
 | 
			
		||||
            Context = new();
 | 
			
		||||
            RenewContext();
 | 
			
		||||
            RenewContext().GetAwaiter().GetResult();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void OnLoaded(object sender, RoutedEventArgs evt) {
 | 
			
		||||
            RenewContext();
 | 
			
		||||
            RenewContext().GetAwaiter().GetResult();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override void OnClosed(EventArgs evt) {
 | 
			
		||||
 
 | 
			
		||||
@@ -104,19 +104,29 @@
 | 
			
		||||
                </DataGrid.Columns>
 | 
			
		||||
            </DataGrid>
 | 
			
		||||
 | 
			
		||||
            <Button x:Name="NewMemberButton" Content="Neu"
 | 
			
		||||
                    HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="5,5,2.5,10" Grid.Column="0" Grid.Row="2"/>
 | 
			
		||||
            <Button x:Name="EditMemberButton" Content="Bearbeiten" IsEnabled="False"
 | 
			
		||||
                    HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,2.5,10" Grid.Column="1" Grid.Row="2"/>
 | 
			
		||||
            <Button x:Name="DeleteMemberButton" Content="Löschen" IsEnabled="False"
 | 
			
		||||
                    HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,5,10" Grid.Column="2" Grid.Row="2"/>
 | 
			
		||||
            <Button x:Name="NewDeliveryButton" Content="Neu" IsEnabled="False" Visibility="Hidden"
 | 
			
		||||
                    HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="5,5,2.5,10" Grid.Column="0" Grid.Row="2"
 | 
			
		||||
                    Click="NewDeliveryButton_Click"/>
 | 
			
		||||
            <Button x:Name="AbwertenButton" Content="Abwerten" IsEnabled="False" 
 | 
			
		||||
                    ToolTip="Ausgewählte Teillieferung vollständig oder teilweise abwerten"
 | 
			
		||||
                    HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="5,5,2.5,10" Grid.Column="0" Grid.Row="2"
 | 
			
		||||
                    Click="AbwertenButton_Click"/>
 | 
			
		||||
            <Button x:Name="EditDeliveryButton" Content="Bearbeiten" IsEnabled="False"
 | 
			
		||||
                    HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,2.5,10" Grid.Column="1" Grid.Row="2"
 | 
			
		||||
                    Click="EditDeliveryButton_Click"/>
 | 
			
		||||
            <Button x:Name="DeleteDeliveryButton" Content="Löschen" IsEnabled="False"
 | 
			
		||||
                    HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,5,10" Grid.Column="2" Grid.Row="2"
 | 
			
		||||
                    Click="DeleteDeliveryButton_Click"/>
 | 
			
		||||
 | 
			
		||||
            <Button x:Name="SaveButton" Content="Speichern" IsEnabled="False" Visibility="Hidden"
 | 
			
		||||
                    HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="5,5,2.5,10" Grid.Column="0"/>
 | 
			
		||||
                    HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="5,5,2.5,10" Grid.Column="0" Grid.Row="2"
 | 
			
		||||
                    Click="SaveButton_Click"/>
 | 
			
		||||
            <Button x:Name="ResetButton" Content="Zurücksetzen" IsEnabled="False" Visibility="Hidden"
 | 
			
		||||
                    HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,2.5,10" Grid.Column="1"/>
 | 
			
		||||
                    HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,2.5,10" Grid.Column="1" Grid.Row="2"
 | 
			
		||||
                    Click="ResetButton_Click"/>
 | 
			
		||||
            <Button x:Name="CancelButton" Content="Abbrechen" IsEnabled="False" Visibility="Hidden" IsCancel="True"
 | 
			
		||||
                    HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,5,10" Grid.Column="2"/>
 | 
			
		||||
                    HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,5,10" Grid.Column="2" Grid.Row="2"
 | 
			
		||||
                    Click="CancelButton_Click"/>
 | 
			
		||||
        </Grid>
 | 
			
		||||
 | 
			
		||||
        <GroupBox Header="Mitglied" Grid.Column="1" Grid.Row="1" Margin="5,5,5,5">
 | 
			
		||||
@@ -212,7 +222,7 @@
 | 
			
		||||
                          ItemTemplate="{StaticResource WineQualityLevelTemplate}"
 | 
			
		||||
                          SelectionChanged="WineQualityLevelInput_SelectionChanged"/>
 | 
			
		||||
 | 
			
		||||
                <CheckBox x:Name="AbgewertetInput" Content="Abgewertet"
 | 
			
		||||
                <CheckBox x:Name="AbgewertetInput" Content="Abgewertet" IsEnabled="False"
 | 
			
		||||
                          VerticalAlignment="Top" HorizontalAlignment="Left" Margin="0,75,10,10" Grid.Column="1"/>
 | 
			
		||||
            </Grid>
 | 
			
		||||
        </GroupBox>
 | 
			
		||||
@@ -231,7 +241,7 @@
 | 
			
		||||
                    <Label Content="kg" Margin="0,4,3,0" HorizontalAlignment="Right" FontSize="10"/>
 | 
			
		||||
                </Grid>
 | 
			
		||||
 | 
			
		||||
                <CheckBox x:Name="ManualWeighingInput" Content="Handwiegung"
 | 
			
		||||
                <CheckBox x:Name="ManualWeighingInput" Content="Handwiegung" IsEnabled="False"
 | 
			
		||||
                          VerticalAlignment="Top" HorizontalAlignment="Left" Margin="10,45,10,10" Grid.Column="0" Grid.ColumnSpan="2"/>
 | 
			
		||||
 | 
			
		||||
                <CheckBox x:Name="GerebeltGewogenInput" Content="Gerebelt gewogen"
 | 
			
		||||
@@ -308,9 +318,12 @@
 | 
			
		||||
                </ListBox>
 | 
			
		||||
 | 
			
		||||
                <Button x:Name="ExtractDeliveryPartButton" Content="Herausheben" IsEnabled="False"
 | 
			
		||||
                    HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="5,10,2.5,5" Grid.Column="0" Grid.Row="2"/>
 | 
			
		||||
                        ToolTip="Ausgewählte Teillieferung aus aktueller Lieferung entfernen und entweder anderer oder neuer Lieferung zuordnen"
 | 
			
		||||
                        HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="5,10,2.5,5" Grid.Column="0" Grid.Row="2"
 | 
			
		||||
                        Click="ExtractDeliveryPartButton_Click"/>
 | 
			
		||||
                <Button x:Name="DeleteDeliveryPartButton" Content="Löschen" IsEnabled="False"
 | 
			
		||||
                    HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,10,5,5" Grid.Column="1" Grid.Row="2"/>
 | 
			
		||||
                        HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,10,5,5" Grid.Column="1" Grid.Row="2"
 | 
			
		||||
                        Click="DeleteDeliveryPartButton_Click"/>
 | 
			
		||||
            </Grid>
 | 
			
		||||
        </GroupBox>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -15,22 +15,21 @@ namespace Elwig.Windows {
 | 
			
		||||
    public partial class DeliveryAdminWindow : AdministrationWindow {
 | 
			
		||||
 | 
			
		||||
        private bool IsUpdatingGradation = false;
 | 
			
		||||
        private bool IsRefreshingInputs = false;
 | 
			
		||||
        private readonly bool IsReceipt = false;
 | 
			
		||||
        private readonly Member? Member = null;
 | 
			
		||||
        private Member? Member = null;
 | 
			
		||||
        private readonly DispatcherTimer Timer;
 | 
			
		||||
        private List<string> TextFilter = new();
 | 
			
		||||
        private readonly RoutedCommand CtrlF = new();
 | 
			
		||||
 | 
			
		||||
        public DeliveryAdminWindow() {
 | 
			
		||||
        public DeliveryAdminWindow(bool receipt = false) {
 | 
			
		||||
            InitializeComponent();
 | 
			
		||||
            CtrlF.InputGestures.Add(new KeyGesture(Key.F, ModifierKeys.Control));
 | 
			
		||||
            CommandBindings.Add(new CommandBinding(CtrlF, FocusSearchInput));
 | 
			
		||||
            RequiredInputs = new Control[] {
 | 
			
		||||
                MgNrInput, MemberInput,
 | 
			
		||||
                LsNrInput, DateInput, BranchInput,
 | 
			
		||||
                SortIdInput, WineVarietyInput,
 | 
			
		||||
                GradationOeInput, GradationKmwInput,
 | 
			
		||||
                WineQualityLevelInput,
 | 
			
		||||
                GradationOeInput, GradationKmwInput, WineQualityLevelInput,
 | 
			
		||||
                WineOriginInput, WineKgInput,
 | 
			
		||||
                WeightInput
 | 
			
		||||
            };
 | 
			
		||||
@@ -38,8 +37,8 @@ namespace Elwig.Windows {
 | 
			
		||||
                SearchInput, TodayOnlyInput, SeasonOnlyInput,
 | 
			
		||||
                DeliveryList, DeliveryPartList,
 | 
			
		||||
                MemberAddressField,
 | 
			
		||||
                LsNrInput, DateInput, TimeInput, BranchInput,
 | 
			
		||||
            };
 | 
			
		||||
            IsReceipt = receipt;
 | 
			
		||||
 | 
			
		||||
            Timer = new DispatcherTimer();
 | 
			
		||||
            Timer.Tick += new EventHandler(OnSecondPassed);
 | 
			
		||||
@@ -47,12 +46,23 @@ namespace Elwig.Windows {
 | 
			
		||||
 | 
			
		||||
            InitializeDelayTimer(SearchInput, SearchInput_TextChanged);
 | 
			
		||||
            SearchInput.TextChanged -= SearchInput_TextChanged;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public DeliveryAdminWindow(bool receipt) : this() {
 | 
			
		||||
            IsReceipt = receipt;
 | 
			
		||||
            Title = "Übernahme - Elwig";
 | 
			
		||||
            TodayOnlyInput.IsChecked = true;
 | 
			
		||||
            if (IsReceipt) {
 | 
			
		||||
                Title = "Übernahme - Elwig";
 | 
			
		||||
                TodayOnlyInput.IsChecked = true;
 | 
			
		||||
                var n = App.Scales.Count();
 | 
			
		||||
                if (n < 1) WeighingAButton.Visibility = Visibility.Hidden;
 | 
			
		||||
                if (n < 2) WeighingBButton.Visibility = Visibility.Hidden;
 | 
			
		||||
                if (n < 3) WeighingCButton.Visibility = Visibility.Hidden;
 | 
			
		||||
                if (n < 4) WeighingDButton.Visibility = Visibility.Hidden;
 | 
			
		||||
                if (n == 1) WeighingAButton.Content = "Wiegen";
 | 
			
		||||
            } else {
 | 
			
		||||
                WeighingManualButton.Visibility = Visibility.Hidden;
 | 
			
		||||
                WeighingAButton.Visibility = Visibility.Hidden;
 | 
			
		||||
                WeighingBButton.Visibility = Visibility.Hidden;
 | 
			
		||||
                WeighingCButton.Visibility = Visibility.Hidden;
 | 
			
		||||
                WeighingDButton.Visibility = Visibility.Hidden;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public DeliveryAdminWindow(int mgnr) : this() {
 | 
			
		||||
@@ -75,10 +85,12 @@ namespace Elwig.Windows {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override void UpdateButtons() {
 | 
			
		||||
 | 
			
		||||
            if (!IsEditing && !IsCreating) return;
 | 
			
		||||
            bool ch = HasChanged, v = IsValid;
 | 
			
		||||
            ResetButton.IsEnabled = (ch);
 | 
			
		||||
            SaveButton.IsEnabled = (v && ch);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private async Task RefreshDeliveryList() {
 | 
			
		||||
            await RefreshDeliveryListQuery();
 | 
			
		||||
        }
 | 
			
		||||
@@ -98,44 +110,37 @@ namespace Elwig.Windows {
 | 
			
		||||
 | 
			
		||||
            List<Delivery> deliveries = await deliveryQuery.OrderByDescending(d => d.DateString).ThenByDescending(d => d.TimeString).ToListAsync();
 | 
			
		||||
            if (TextFilter.Count > 0) {
 | 
			
		||||
                deliveries = deliveries
 | 
			
		||||
                var dict = deliveries
 | 
			
		||||
                    .ToDictionary(d => d, d => d.SearchScore(TextFilter))
 | 
			
		||||
                    .OrderByDescending(a => a.Value)
 | 
			
		||||
                    .ThenBy(a => a.Key.DateTime)
 | 
			
		||||
                    .Where(a => a.Value > 0)
 | 
			
		||||
                    .ThenBy(a => a.Key.DateTime);
 | 
			
		||||
                var threshold = dict.Select(a => a.Value).Max() * 3 / 4;
 | 
			
		||||
                deliveries = dict
 | 
			
		||||
                    .Where(a => a.Value > threshold)
 | 
			
		||||
                    .Select(a => a.Key)
 | 
			
		||||
                    .ToList();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Utils.RenewItemsSource(DeliveryList, deliveries, d => ((d as Delivery)?.Year, (d as Delivery)?.DId), !updateSort);
 | 
			
		||||
            if (deliveries.Count == 1)
 | 
			
		||||
                DeliveryList.SelectedIndex = 0;
 | 
			
		||||
 | 
			
		||||
            RefreshInputs();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void RefreshDeliveryPartList(bool updateSort = false) {
 | 
			
		||||
            if (DeliveryList.SelectedItem is not Delivery d) {
 | 
			
		||||
                DeliveryPartList.ItemsSource = null;
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Utils.RenewItemsSource(DeliveryPartList, d.Parts.OrderBy(p => p.DPNr), i => ((i as DeliveryPart)?.Year, (i as DeliveryPart)?.DId, (i as DeliveryPart)?.DPNr));
 | 
			
		||||
            if (d.Parts.Count == 1)
 | 
			
		||||
                DeliveryPartList.SelectedIndex = 0;
 | 
			
		||||
 | 
			
		||||
            RefreshInputs();
 | 
			
		||||
            Utils.RenewItemsSource(DeliveryList, deliveries, d => ((d as Delivery)?.Year, (d as Delivery)?.DId), DeliveryList_SelectionChanged, Utils.RenewSourceDefault.IfOnly, !updateSort);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override async Task RenewContext() {
 | 
			
		||||
            await base.RenewContext();
 | 
			
		||||
 | 
			
		||||
            if (Member != null) {
 | 
			
		||||
                if (Context.Members.Find(Member.MgNr) is not Member m) {
 | 
			
		||||
                    Close();
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                Member = m;
 | 
			
		||||
                Title = $"Lieferungen - {Member.AdministrativeName} - Elwig";
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            await RefreshDeliveryList();
 | 
			
		||||
            RefreshDeliveryPartList();
 | 
			
		||||
            var d = DeliveryList.SelectedItem as Delivery;
 | 
			
		||||
            var y = (d?.Year ?? Utils.CurrentLastSeason);
 | 
			
		||||
            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);
 | 
			
		||||
            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);
 | 
			
		||||
@@ -144,10 +149,9 @@ namespace Elwig.Windows {
 | 
			
		||||
            var kgList = await Context.WbKgs.Select(k => k.AtKg).OrderBy(k => k.Name).Cast<object>().ToListAsync();
 | 
			
		||||
            kgList.Insert(0, new NullItem());
 | 
			
		||||
            Utils.RenewItemsSource(WineKgInput, kgList, i => (i as AT_Kg)?.KgNr);
 | 
			
		||||
            if (WineKgInput.SelectedItem == null) WineKgInput.SelectedIndex = 0;
 | 
			
		||||
            UpdateWineQualityLevels();
 | 
			
		||||
            UpdateRdInput();
 | 
			
		||||
            await UpdateLsNr();
 | 
			
		||||
 | 
			
		||||
            if (IsCreating) await UpdateLsNr();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void FocusSearchInput(object sender, RoutedEventArgs evt) {
 | 
			
		||||
@@ -157,35 +161,38 @@ namespace Elwig.Windows {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void RefreshInputs() {
 | 
			
		||||
            IsRefreshingInputs = true;
 | 
			
		||||
            ClearInputStates();
 | 
			
		||||
        private void RefreshDeliveryParts() {
 | 
			
		||||
            if (DeliveryList.SelectedItem is Delivery d) {
 | 
			
		||||
                Utils.RenewItemsSource(ModifiersInput, Context.Modifiers.Where(m => m.Year == d.Year).OrderBy(m => m.Name).ToList(), i => (i as Modifier)?.ModId);
 | 
			
		||||
                FillInputs(d);
 | 
			
		||||
                Utils.RenewItemsSource(DeliveryPartList, d.Parts.OrderBy(p => p.DPNr).ToList(), i => ((i as DeliveryPart)?.Year, (i as DeliveryPart)?.DId, (i as DeliveryPart)?.DPNr), DeliveryPartList_SelectionChanged, Utils.RenewSourceDefault.First);
 | 
			
		||||
            } else {
 | 
			
		||||
                Utils.RenewItemsSource(ModifiersInput, Context.Modifiers.Where(m => m.Year == Utils.CurrentLastSeason).OrderBy(m => m.Name).ToList(), i => (i as Modifier)?.ModId);
 | 
			
		||||
                ClearOriginalValues();
 | 
			
		||||
                ClearInputs();
 | 
			
		||||
                DeliveryPartList.ItemsSource = null;
 | 
			
		||||
            }
 | 
			
		||||
            IsRefreshingInputs = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void RefreshInputs(bool validate = false) {
 | 
			
		||||
            ClearInputStates();
 | 
			
		||||
            if (DeliveryPartList.SelectedItem is DeliveryPart p) {
 | 
			
		||||
                FillInputs(p);
 | 
			
		||||
            } else {
 | 
			
		||||
                ClearOriginalValues();
 | 
			
		||||
                ClearInputs(validate);
 | 
			
		||||
            }            
 | 
			
		||||
            GC.Collect();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void FillInputs(Delivery d) {
 | 
			
		||||
        private void FillInputs(DeliveryPart p) {
 | 
			
		||||
            ClearOriginalValues();
 | 
			
		||||
 | 
			
		||||
            var d = p.Delivery;
 | 
			
		||||
            MgNrInput.Text = d.MgNr.ToString();
 | 
			
		||||
            Utils.SelectComboBoxItem(BranchInput, i => (i as Branch)?.ZwstId, d.ZwstId);
 | 
			
		||||
            LsNrInput.Text = d.LsNr;
 | 
			
		||||
            DateInput.Text = d.Date.ToString("dd.MM.yyyy");
 | 
			
		||||
            TimeInput.Text = d.Time?.ToString("HH:mm") ?? "";
 | 
			
		||||
            CommentInput.Text = d.Comment ?? "";
 | 
			
		||||
            Utils.RenewItemsSource(DeliveryPartList, d.Parts, i => ((i as DeliveryPart)?.Year, (i as DeliveryPart)?.DId, (i as DeliveryPart)?.DPNr));
 | 
			
		||||
            if (DeliveryPartList.SelectedItem == null && DeliveryPartList.ItemsSource != null) {
 | 
			
		||||
                DeliveryPartList.SelectedIndex = 0;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var p = DeliveryPartList.SelectedItem as DeliveryPart;
 | 
			
		||||
            SortIdInput.Text = p?.SortId ?? "";
 | 
			
		||||
            Utils.SelectCheckComboBoxItems(AttributesInput, p?.Attributes, i => (i as WineAttr)?.AttrId);
 | 
			
		||||
            GradationKmwInput.Text = (p != null) ? $"{p.Kmw:N1}" : "";
 | 
			
		||||
@@ -223,11 +230,27 @@ namespace Elwig.Windows {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void DeliveryList_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
 | 
			
		||||
            RefreshInputs();
 | 
			
		||||
            RefreshDeliveryParts();
 | 
			
		||||
            if (DeliveryList.SelectedItem != null) {
 | 
			
		||||
                DeleteDeliveryButton.IsEnabled = true;
 | 
			
		||||
            } else {
 | 
			
		||||
                DeleteDeliveryButton.IsEnabled = false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void DeliveryPartList_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
 | 
			
		||||
           if (!IsRefreshingInputs) RefreshInputs();
 | 
			
		||||
        private void DeliveryPartList_SelectionChanged(object? sender, SelectionChangedEventArgs? evt) {
 | 
			
		||||
            RefreshInputs();
 | 
			
		||||
            if (DeliveryPartList.SelectedItem != null) {
 | 
			
		||||
                AbwertenButton.IsEnabled = true;
 | 
			
		||||
                EditDeliveryButton.IsEnabled = true;
 | 
			
		||||
                ExtractDeliveryPartButton.IsEnabled = true;
 | 
			
		||||
                DeleteDeliveryPartButton.IsEnabled = true;
 | 
			
		||||
            } else {
 | 
			
		||||
                AbwertenButton.IsEnabled = false;
 | 
			
		||||
                EditDeliveryButton.IsEnabled = false;
 | 
			
		||||
                ExtractDeliveryPartButton.IsEnabled = false;
 | 
			
		||||
                DeleteDeliveryPartButton.IsEnabled = false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void MgNrInput_TextChanged(object sender, TextChangedEventArgs evt) {
 | 
			
		||||
@@ -253,6 +276,144 @@ namespace Elwig.Windows {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void NewDeliveryButton_Click(object sender, RoutedEventArgs evt) {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void AbwertenButton_Click(object sender, RoutedEventArgs evt) {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void EditDeliveryButton_Click(object sender, RoutedEventArgs evt) {
 | 
			
		||||
            if (DeliveryPartList.SelectedItem == null)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            IsEditing = true;
 | 
			
		||||
            DeliveryList.IsEnabled = false;
 | 
			
		||||
            DeliveryPartList.IsEnabled = false;
 | 
			
		||||
 | 
			
		||||
            HideNewEditDeleteButtons();
 | 
			
		||||
            ShowSaveResetCancelButtons();
 | 
			
		||||
            UnlockInputs();
 | 
			
		||||
            LockSearchInputs();
 | 
			
		||||
 | 
			
		||||
            AbwertenButton.IsEnabled = false;
 | 
			
		||||
            ExtractDeliveryPartButton.IsEnabled = false;
 | 
			
		||||
            DeleteDeliveryPartButton.IsEnabled = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void DeleteDeliveryButton_Click(object sender, RoutedEventArgs evt) {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void SaveButton_Click(object sender, RoutedEventArgs evt) {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ResetButton_Click(object sender, RoutedEventArgs evt) {
 | 
			
		||||
            if (IsEditing) {
 | 
			
		||||
                RefreshInputs();
 | 
			
		||||
            } else if (IsCreating) {
 | 
			
		||||
                ClearInputs();
 | 
			
		||||
                //InitInputs();  TODO
 | 
			
		||||
            }
 | 
			
		||||
            UpdateButtons();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void CancelButton_Click(object sender, RoutedEventArgs evt) {
 | 
			
		||||
            IsEditing = false;
 | 
			
		||||
            IsCreating = false;
 | 
			
		||||
            DeliveryList.IsEnabled = true;
 | 
			
		||||
            DeliveryPartList.IsEnabled = true;
 | 
			
		||||
 | 
			
		||||
            HideSaveResetCancelButtons();
 | 
			
		||||
            ShowNewEditDeleteButtons();
 | 
			
		||||
            RefreshInputs();
 | 
			
		||||
            ClearInputStates();
 | 
			
		||||
            LockInputs();
 | 
			
		||||
            UnlockSearchInputs();
 | 
			
		||||
 | 
			
		||||
            AbwertenButton.IsEnabled = DeliveryPartList.SelectedItem != null;
 | 
			
		||||
            ExtractDeliveryPartButton.IsEnabled = DeliveryPartList.SelectedItem != null;
 | 
			
		||||
            DeleteDeliveryPartButton.IsEnabled = DeliveryPartList.SelectedItem != null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ExtractDeliveryPartButton_Click(object sender, RoutedEventArgs evt) {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void DeleteDeliveryPartButton_Click(object sender, RoutedEventArgs evt) {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private void ShowSaveResetCancelButtons() {
 | 
			
		||||
            SaveButton.IsEnabled = false;
 | 
			
		||||
            ResetButton.IsEnabled = false;
 | 
			
		||||
            CancelButton.IsEnabled = true;
 | 
			
		||||
            SaveButton.Visibility = Visibility.Visible;
 | 
			
		||||
            ResetButton.Visibility = Visibility.Visible;
 | 
			
		||||
            CancelButton.Visibility = Visibility.Visible;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void HideSaveResetCancelButtons() {
 | 
			
		||||
            SaveButton.IsEnabled = false;
 | 
			
		||||
            ResetButton.IsEnabled = false;
 | 
			
		||||
            CancelButton.IsEnabled = false;
 | 
			
		||||
            SaveButton.Visibility = Visibility.Hidden;
 | 
			
		||||
            ResetButton.Visibility = Visibility.Hidden;
 | 
			
		||||
            CancelButton.Visibility = Visibility.Hidden;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ShowNewEditDeleteButtons() {
 | 
			
		||||
            NewDeliveryButton.IsEnabled = IsReceipt;
 | 
			
		||||
            AbwertenButton.IsEnabled = DeliveryPartList.SelectedItem != null;
 | 
			
		||||
            EditDeliveryButton.IsEnabled = DeliveryPartList.SelectedItem != null;
 | 
			
		||||
            DeleteDeliveryButton.IsEnabled = DeliveryList.SelectedItem != null;
 | 
			
		||||
            NewDeliveryButton.Visibility = IsReceipt ? Visibility.Visible : Visibility.Hidden;
 | 
			
		||||
            AbwertenButton.Visibility = !IsReceipt ? Visibility.Visible : Visibility.Hidden;
 | 
			
		||||
            EditDeliveryButton.Visibility = Visibility.Visible;
 | 
			
		||||
            DeleteDeliveryButton.Visibility = Visibility.Visible;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void HideNewEditDeleteButtons() {
 | 
			
		||||
            NewDeliveryButton.IsEnabled = false;
 | 
			
		||||
            AbwertenButton.IsEnabled = false;
 | 
			
		||||
            EditDeliveryButton.IsEnabled = false;
 | 
			
		||||
            DeleteDeliveryButton.IsEnabled = false;
 | 
			
		||||
            NewDeliveryButton.Visibility = Visibility.Hidden;
 | 
			
		||||
            AbwertenButton.Visibility = Visibility.Hidden;
 | 
			
		||||
            EditDeliveryButton.Visibility = Visibility.Hidden;
 | 
			
		||||
            DeleteDeliveryButton.Visibility = Visibility.Hidden;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void LockSearchInputs() {
 | 
			
		||||
            SearchInput.IsEnabled = false;
 | 
			
		||||
            TodayOnlyInput.IsEnabled = false;
 | 
			
		||||
            SeasonOnlyInput.IsEnabled = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void UnlockSearchInputs() {
 | 
			
		||||
            SearchInput.IsEnabled = true;
 | 
			
		||||
            TodayOnlyInput.IsEnabled = true;
 | 
			
		||||
            SeasonOnlyInput.IsEnabled = true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        new protected void UnlockInputs() {
 | 
			
		||||
            base.UnlockInputs();
 | 
			
		||||
            if (WineQualityLevelInput.SelectedItem != null && WineKgInput.SelectedItem != null)
 | 
			
		||||
                WineOriginInput.IsEnabled = false;
 | 
			
		||||
            if (WineKgInput.SelectedItem == null)
 | 
			
		||||
                WineRdInput.IsEnabled = false;
 | 
			
		||||
            WeightInput.IsReadOnly = true;
 | 
			
		||||
            AbgewertetInput.IsEnabled = false;
 | 
			
		||||
            ManualWeighingInput.IsEnabled = false;
 | 
			
		||||
            LsNrInput.IsReadOnly = true;
 | 
			
		||||
            DateInput.IsReadOnly = true;
 | 
			
		||||
            TimeInput.IsReadOnly = true;
 | 
			
		||||
            BranchInput.IsEnabled = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private async Task UpdateLsNr() {
 | 
			
		||||
            var branch = (Branch)BranchInput.SelectedItem;
 | 
			
		||||
            var date = DateOnly.ParseExact(DateInput.Text, "dd.MM.yyyy");
 | 
			
		||||
@@ -261,7 +422,7 @@ namespace Elwig.Windows {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void DateInput_TextChanged(object sender, TextChangedEventArgs evt) {
 | 
			
		||||
            UpdateLsNr().GetAwaiter().GetResult();
 | 
			
		||||
            if (IsCreating) UpdateLsNr().GetAwaiter().GetResult();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void UpdateWineVariety(bool valid) {
 | 
			
		||||
@@ -288,8 +449,8 @@ namespace Elwig.Windows {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void WineVarietyInput_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
 | 
			
		||||
            var s = WineVarietyInput.SelectedItem as WineVar;
 | 
			
		||||
            if (s != null) SortIdInput.Text = s.SortId;
 | 
			
		||||
            if (WineVarietyInput.SelectedItem is WineVar s)
 | 
			
		||||
                    SortIdInput.Text = s.SortId;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void UpdateWineQualityLevels() {
 | 
			
		||||
 
 | 
			
		||||
@@ -89,17 +89,12 @@ namespace Elwig.Windows {
 | 
			
		||||
                    .ToList();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Utils.RenewItemsSource(MemberList, members, i => (i as Member)?.MgNr, !updateSort);
 | 
			
		||||
            if (members.Count == 1)
 | 
			
		||||
                MemberList.SelectedIndex = 0;
 | 
			
		||||
 | 
			
		||||
            RefreshInputs();
 | 
			
		||||
            Utils.RenewItemsSource(MemberList, members, i => (i as Member)?.MgNr, MemberList_SelectionChanged, Utils.RenewSourceDefault.IfOnly, !updateSort);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void RefreshInputs(bool validate = false) {
 | 
			
		||||
            ClearInputStates();
 | 
			
		||||
            Member m = (Member)MemberList.SelectedItem;
 | 
			
		||||
            if (m != null) {
 | 
			
		||||
            if (MemberList.SelectedItem is Member m) {
 | 
			
		||||
                EditMemberButton.IsEnabled = true;
 | 
			
		||||
                DeleteMemberButton.IsEnabled = true;
 | 
			
		||||
                AreaCommitmentButton.IsEnabled = true;
 | 
			
		||||
@@ -111,9 +106,8 @@ namespace Elwig.Windows {
 | 
			
		||||
                AreaCommitmentButton.IsEnabled = false;
 | 
			
		||||
                DeliveryButton.IsEnabled = false;
 | 
			
		||||
                ClearOriginalValues();
 | 
			
		||||
                ClearInputs();
 | 
			
		||||
                ClearInputs(validate);
 | 
			
		||||
            }
 | 
			
		||||
            if (!validate) ClearInputStates();
 | 
			
		||||
            GC.Collect();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user