[#67] DeliveryAdminWindow: Check if member IsOrganic and has valid certs when cultivation IsOrganic
Test / Run tests (push) Successful in 2m13s

This commit is contained in:
2026-09-29 19:10:18 +02:00
parent 34b40535a6
commit 5bb84944bc
2 changed files with 56 additions and 5 deletions
+1
View File
@@ -518,6 +518,7 @@
<ComboBox x:Name="CultivationInput" SelectedItem="{Binding WineCultObj, Mode=TwoWay}" ItemsSource="{Binding WineCultSource, Mode=TwoWay}"
Grid.Row="1" Grid.Column="2" Margin="0,40,10,10"
DisplayMemberPath="Name"
SelectionChanged="CultivationInput_SelectionChanged"
KeyUp="Input_KeyUp"/>
</Grid>
</GroupBox>
+55 -5
View File
@@ -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<object>().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<bool> 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;
}
}
}
}