diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml b/Elwig/Windows/DeliveryAdminWindow.xaml index d060111..8deeefe 100644 --- a/Elwig/Windows/DeliveryAdminWindow.xaml +++ b/Elwig/Windows/DeliveryAdminWindow.xaml @@ -518,6 +518,7 @@ diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml.cs b/Elwig/Windows/DeliveryAdminWindow.xaml.cs index ec03c8a..3182d19 100644 --- a/Elwig/Windows/DeliveryAdminWindow.xaml.cs +++ b/Elwig/Windows/DeliveryAdminWindow.xaml.cs @@ -774,12 +774,12 @@ namespace Elwig.Windows { MgNrInput.CaretIndex = caret; } - private void MgNrInput_LostFocus(object sender, RoutedEventArgs evt) { + private async void MgNrInput_LostFocus(object sender, RoutedEventArgs evt) { var valid = InputLostFocus((TextBox)sender, Validator.CheckMgNr); ControlUtils.SelectItemWithPk(MemberInput, valid ? ViewModel.MgNr : null); } - private void MemberInput_SelectionChanged(object? sender, SelectionChangedEventArgs? evt) { + private async void MemberInput_SelectionChanged(object? sender, SelectionChangedEventArgs? evt) { var m = MemberInput.SelectedItem as Member; ViewModel.MgNr = m?.MgNr; ViewModel.MemberAddress = m?.FullAddress; @@ -796,6 +796,8 @@ namespace Elwig.Windows { SetDefaultValue(WineKgInput); ComboBox_SelectionChanged(WineKgInput, null); } + if (IsCreating && Mouse.OverrideCursor == null) + await CheckOrganic(); } private void EmptyScale() { @@ -805,6 +807,9 @@ namespace Elwig.Windows { } private async void NewDeliveryPartButton_Click(object sender, RoutedEventArgs evt) { + if (!await CheckOrganic(true)) + return; + FinishButton.IsEnabled = false; NewDeliveryPartButton.IsEnabled = false; Mouse.OverrideCursor = Cursors.Wait; @@ -824,7 +829,7 @@ namespace Elwig.Windows { } catch (Exception exc) { InteractionService.ShowDbException("Lieferung aktualisieren", exc); FinishButton.IsEnabled = true; - SaveButton.IsEnabled = true; + NewDeliveryPartButton.IsEnabled = true; Mouse.OverrideCursor = null; DeliveryPartList.IsEnabled = true; return; @@ -833,14 +838,18 @@ namespace Elwig.Windows { EmptyScale(); await EnsureContextRenewed(); - Mouse.OverrideCursor = null; ControlUtils.SelectItemWithPk(DeliveryList, p?.Year, p?.DId); DeliveryPartList.SelectedItem = null; DeliveryPartList.ScrollIntoView(DeliveryPartList.ItemsSource.Cast().LastOrDefault()); InitialInputs(); + + Mouse.OverrideCursor = null; } private async void FinishButton_Click(object sender, RoutedEventArgs evt) { + if (!await CheckOrganic(true)) + return; + FinishButton.IsEnabled = false; NewDeliveryPartButton.IsEnabled = false; Mouse.OverrideCursor = Cursors.Wait; @@ -860,7 +869,7 @@ namespace Elwig.Windows { } catch (Exception exc) { InteractionService.ShowDbException("Lieferung aktualisieren", exc); FinishButton.IsEnabled = true; - SaveButton.IsEnabled = true; + NewDeliveryPartButton.IsEnabled = true; Mouse.OverrideCursor = null; DeliveryPartList.IsEnabled = true; return; @@ -1038,6 +1047,9 @@ namespace Elwig.Windows { } private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) { + if (!await CheckOrganic(true)) + return; + SaveButton.IsEnabled = false; Mouse.OverrideCursor = Cursors.Wait; @@ -1539,5 +1551,43 @@ namespace Elwig.Windows { if (MemberInput.SelectedItem is not Member m) return; App.FocusMember(m.MgNr); } + + private async void CultivationInput_SelectionChanged(object sender, RoutedEventArgs evt) { + if (IsCreating && Mouse.OverrideCursor == null) + await CheckOrganic(); + } + + private async Task CheckOrganic(bool confirm = false) { + if (MemberInput.SelectedValue is not Member m || CultivationInput.SelectedItem is not WineCult c) { + return true; + } else if (c.IsOrganic) { + if (m.IsOrganic) { + var valid = true; + if (IsCreating) { + try { + var certs = await OrganicService.GetTracesCertificates(m); + valid = certs.Length > 0 && certs[0].IsValidForWineProduction; + } catch { } + } + if (valid) + return true; + if (confirm) { + return InteractionService.AskConfirmation("Kein gültiges Bio-Zertifikat", "Soll die Bio-Lieferung wirklich gespeichert werden,\nobwohl für das Mitglied kein gültiges Bio-Zertifikat gefunden werden konnte?"); + } else { + InteractionService.ShowWarning("Kein gültiges Bio-Zertifikat", "Achtung! Für diesen Bio-Betrieb konnte kein gültiges Bio-Zertifikat gefunden werden!"); + } + return false; + } else { + if (confirm) { + return InteractionService.AskConfirmation("Kein Bio-Betrieb", "Soll die Bio-Lieferung wirklich gespeichert werden, obwohl das Mitglied keinen Bio-Betrieb hat?"); + } else { + InteractionService.ShowWarning("Kein Bio-Betrieb", "Achtung! Bio-Lieferung ohne Bio-Betrieb!"); + } + return false; + } + } else { + return true; + } + } } }