diff --git a/Elwig/ViewModels/DeliveryAdminViewModel.cs b/Elwig/ViewModels/DeliveryAdminViewModel.cs index 7bb135a..ad8ea42 100644 --- a/Elwig/ViewModels/DeliveryAdminViewModel.cs +++ b/Elwig/ViewModels/DeliveryAdminViewModel.cs @@ -116,7 +116,11 @@ namespace Elwig.ViewModels { [ObservableProperty] private bool _isManualWeighing; [ObservableProperty] - private bool _isNetWeight; + private bool? _isNetWeightValue = false; + public bool IsNetWeight { + get => IsNetWeightValue ?? false; + set => IsNetWeightValue = value; + } [ObservableProperty] private WineOrigin? _wineOrigin; diff --git a/Elwig/Windows/AdministrationWindow.cs b/Elwig/Windows/AdministrationWindow.cs index 9532f50..5fe2dff 100644 --- a/Elwig/Windows/AdministrationWindow.cs +++ b/Elwig/Windows/AdministrationWindow.cs @@ -109,7 +109,7 @@ namespace Elwig.Windows { private void OnClosing(object? sender, CancelEventArgs evt) { if ((IsCreating || IsEditing) && HasChanged) { - var r = System.Windows.MessageBox.Show("Soll das Fenster wirklich geschlossen werden?", "Schließen bestätigen", + var r = MessageBox.Show("Soll das Fenster wirklich geschlossen werden?", "Schließen bestätigen", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No); if (r != MessageBoxResult.Yes) { evt.Cancel = true; @@ -166,7 +166,7 @@ namespace Elwig.Windows { ControlUtils.SetInputInvalid(input); } else if (input is ListBox lb && lb.SelectedItem == null && lb.ItemsSource != null && lb.ItemsSource.Cast<object>().Any()) { ControlUtils.SetInputInvalid(input); - } else if (input is CheckBox ckb && ckb.IsChecked != true) { + } else if (input is CheckBox ckb && ((ckb.IsThreeState && ckb.IsChecked == null) || (!ckb.IsThreeState && ckb.IsChecked != true))) { ControlUtils.SetInputInvalid(input); Valid[input] = false; } else if (input is RadioButton rb && rb.IsChecked != true) { @@ -402,20 +402,24 @@ namespace Elwig.Windows { protected bool InputLostFocus(TextBox input, ValidationResult res, string? msg = null) { if (DoShowWarningWindows && !res.IsValid && !IsClosing && (IsEditing || IsCreating)) - System.Windows.MessageBox.Show(res.ErrorContent.ToString(), msg ?? res.ErrorContent.ToString(), MessageBoxButton.OK, MessageBoxImage.Warning); + MessageBox.Show(res.ErrorContent.ToString(), msg ?? res.ErrorContent.ToString(), MessageBoxButton.OK, MessageBoxImage.Warning); return res.IsValid; } protected void CheckBox_Changed(object sender, RoutedEventArgs evt) { var input = (CheckBox)sender; - if (SenderIsRequired(input) && input.IsChecked != true) { + if (SenderIsRequired(input) && ((input.IsThreeState && input.IsChecked == null) || (!input.IsThreeState && input.IsChecked != true))) { + ValidateInput(input, false); ControlUtils.SetInputInvalid(input); - } else if (InputHasChanged(input)) { - ControlUtils.SetInputChanged(input); - } else if (InputIsNotDefault(input)) { - ControlUtils.SetInputNotDefault(input); } else { - ControlUtils.ClearInputState(input); + ValidateInput(input, true); + if (InputHasChanged(input)) { + ControlUtils.SetInputChanged(input); + } else if (InputIsNotDefault(input)) { + ControlUtils.SetInputNotDefault(input); + } else { + ControlUtils.ClearInputState(input); + } } UpdateButtons(); } @@ -423,13 +427,17 @@ namespace Elwig.Windows { protected void RadioButton_Changed(object sender, RoutedEventArgs evt) { var input = (RadioButton)sender; if (SenderIsRequired(input) && input.IsChecked != true) { + ValidateInput(input, false); ControlUtils.SetInputInvalid(input); - } else if (InputHasChanged(input)) { - ControlUtils.SetInputChanged(input); - } else if (InputIsNotDefault(input)) { - ControlUtils.SetInputNotDefault(input); } else { - ControlUtils.ClearInputState(input); + ValidateInput(input, true); + if (InputHasChanged(input)) { + ControlUtils.SetInputChanged(input); + } else if (InputIsNotDefault(input)) { + ControlUtils.SetInputNotDefault(input); + } else { + ControlUtils.ClearInputState(input); + } } UpdateButtons(); } diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml b/Elwig/Windows/DeliveryAdminWindow.xaml index 8b48c41..69df874 100644 --- a/Elwig/Windows/DeliveryAdminWindow.xaml +++ b/Elwig/Windows/DeliveryAdminWindow.xaml @@ -468,10 +468,10 @@ VerticalAlignment="Top" HorizontalAlignment="Left" Margin="10,45,10,10" Grid.Column="0" Grid.ColumnSpan="2" Checked="CheckBox_Changed" Unchecked="CheckBox_Changed"/> - <CheckBox x:Name="GerebeltGewogenInput" IsChecked="{Binding IsNetWeight, Mode=TwoWay}" - Content="Gerebelt gewogen" + <CheckBox x:Name="GerebeltGewogenInput" IsChecked="{Binding IsNetWeightValue, Mode=TwoWay}" + Content="Gerebelt gewogen" IsThreeState="True" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="10,75,10,10" Grid.Column="0" Grid.ColumnSpan="2" - Checked="GerebeltGewogenInput_Changed" Unchecked="GerebeltGewogenInput_Changed"/> + Checked="GerebeltGewogenInput_Changed" Unchecked="GerebeltGewogenInput_Changed" Indeterminate="GerebeltGewogenInput_Changed"/> <Button x:Name="WeighingAButton" Content="Wiegen A" Width="120" Click="WeighingButton_Click" diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml.cs b/Elwig/Windows/DeliveryAdminWindow.xaml.cs index 5347f3a..d6a220f 100644 --- a/Elwig/Windows/DeliveryAdminWindow.xaml.cs +++ b/Elwig/Windows/DeliveryAdminWindow.xaml.cs @@ -50,7 +50,7 @@ namespace Elwig.Windows { SortIdInput, WineVarietyInput, GradationOeInput, GradationKmwInput, WineQualityLevelInput, WineOriginInput, WineKgInput, - WeightInput + WeightInput, GerebeltGewogenInput, ]; ExemptInputs = [ SearchInput, SeasonInput, TodayOnlyInput, AllSeasonsInput, @@ -257,6 +257,7 @@ namespace Elwig.Windows { SetDefaultValue(GerebeltGewogenInput, true); } else { GerebeltGewogenInput.IsEnabled = true; + GerebeltGewogenInput.IsChecked = null; UnsetDefaultValue(GerebeltGewogenInput); } @@ -1380,6 +1381,9 @@ namespace Elwig.Windows { if (!App.Client.HasNetWeighing(ViewModel.Branch)) { HandPickedInput.IsChecked = !GerebeltGewogenInput.IsChecked; } + if (!ViewModel.IsReceipt || App.Client.HasNetWeighing(ViewModel.Branch)) { + GerebeltGewogenInput.IsChecked ??= false; + } CheckBox_Changed(sender, evt); } diff --git a/Tests/E2ETests/DeliveryAdminWindowReceiptTest.cs b/Tests/E2ETests/DeliveryAdminWindowReceiptTest.cs index ce1d246..0f62bba 100644 --- a/Tests/E2ETests/DeliveryAdminWindowReceiptTest.cs +++ b/Tests/E2ETests/DeliveryAdminWindowReceiptTest.cs @@ -40,6 +40,10 @@ namespace Tests.E2ETests { } private void FinishDeliveryNote(WindowsDriver<WindowsElement> window) { + var gerebeltGewogen = window.FindElement(By.WpfId("GerebeltGewogenInput")); + gerebeltGewogen.Click(); + gerebeltGewogen.Click(); + Thread.Sleep(500); window.FindElement(By.Name("Abschließen")).Click(); Thread.Sleep(2000); var doc = Session.CreateWindowDriver("DocumentViewerWindow"); @@ -53,7 +57,6 @@ namespace Tests.E2ETests { public void Test_1_Minimal() { var window = OpenReceiptWindow(); window.FindElement(By.WpfId("MgNrInput")).SendKeys("101" + Keys.Enter + "GV" + Keys.Enter + "73" + Keys.Enter + Keys.Enter); - Thread.Sleep(500); FinishDeliveryNote(window); window.Close(); } @@ -65,7 +68,6 @@ namespace Tests.E2ETests { window.FindElement(By.WpfId("WineVarietyInput")).SelectItem("Zweigelt"); window.FindElement(By.WpfId("GradationKmwInput")).SendKeys("18"); window.FindElement(By.Name("Wiegen")).Click(); - Thread.Sleep(500); FinishDeliveryNote(window); window.Close(); } @@ -76,8 +78,6 @@ namespace Tests.E2ETests { window.FindElement(By.WpfId("MgNrInput")).SendKeys("102" + Keys.Enter + "GVK"); window.FindElement(By.WpfId("CultivationInput")).SelectItem("Bio"); window.FindElement(By.WpfId("GradationOeInput")).SendKeys("73" + Keys.Enter + Keys.Enter); - - Thread.Sleep(500); FinishDeliveryNote(window); window.Close(); }