Add AbwertenDialog

This commit is contained in:
2023-08-26 20:54:25 +02:00
parent c0a6f16374
commit 6dda9e09cf
7 changed files with 213 additions and 58 deletions

View File

@ -396,8 +396,9 @@ namespace Elwig.Windows {
kgList.Insert(0, new NullItem());
ControlUtils.RenewItemsSource(WineKgInput, kgList, i => (i as AT_Kg)?.KgNr);
UpdateRdInput();
if (IsCreating) await UpdateLsNr();
await RefreshDeliveryParts();
}
private void FocusSearchInput(object sender, RoutedEventArgs evt) {
@ -407,12 +408,12 @@ namespace Elwig.Windows {
}
}
private void RefreshDeliveryParts() {
private async Task RefreshDeliveryParts() {
if (DeliveryList.SelectedItem is Delivery d) {
ControlUtils.RenewItemsSource(ModifiersInput, Context.Modifiers.Where(m => m.Year == d.Year).OrderBy(m => m.Ordering).ToList(), i => (i as Modifier)?.ModId);
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.Parts.OrderBy(p => p.DPNr).ToList(), i => ((i as DeliveryPart)?.Year, (i as DeliveryPart)?.DId, (i as DeliveryPart)?.DPNr), DeliveryPartList_SelectionChanged, ControlUtils.RenewSourceDefault.First);
} else {
ControlUtils.RenewItemsSource(ModifiersInput, Context.Modifiers.Where(m => m.Year == Utils.CurrentLastSeason).OrderBy(m => m.Ordering).ToList(), i => (i as Modifier)?.ModId);
ControlUtils.RenewItemsSource(ModifiersInput, await Context.Modifiers.Where(m => m.Year == Utils.CurrentLastSeason).OrderBy(m => m.Ordering).ToListAsync(), i => (i as Modifier)?.ModId);
DeliveryPartList.ItemsSource = null;
}
}
@ -550,45 +551,8 @@ namespace Elwig.Windows {
pEntry = partNew ? await Context.AddAsync(p) : Context.Update(p);
}
foreach (var a in AttributesInput.ItemsSource.Cast<WineAttr>()) {
var attr = p.PartAttributes.Where(pa => pa.AttrId == a.AttrId).FirstOrDefault();
if (AttributesInput.SelectedItems.Contains(a)) {
DeliveryPartAttr dpa = attr ?? Context.CreateProxy<DeliveryPartAttr>();
dpa.Year = year;
dpa.DId = did;
dpa.DPNr = dpnr;
dpa.AttrId = a.AttrId;
if (attr == null) {
await Context.AddAsync(dpa);
} else {
Context.Update(dpa);
}
} else {
if (attr != null) {
Context.Remove(attr);
}
}
}
foreach (var m in ModifiersInput.ItemsSource.Cast<Modifier>()) {
var mod = p.PartModifiers.Where(pa => pa.ModId == m.ModId).FirstOrDefault();
if (ModifiersInput.SelectedItems.Contains(m)) {
DeliveryPartModifier dpm = mod ?? Context.CreateProxy<DeliveryPartModifier>();
dpm.Year = year;
dpm.DId = did;
dpm.DPNr = dpnr;
dpm.ModId = m.ModId;
if (mod == null) {
await Context.AddAsync(dpm);
} else {
Context.Update(dpm);
}
} else {
if (mod != null) {
Context.Remove(mod);
}
}
}
await Context.UpdateDeliveryPartAttributes(p, AttributesInput.ItemsSource.Cast<WineAttr>());
await Context.UpdateDeliveryPartModifiers(p, ModifiersInput.ItemsSource.Cast<Modifier>());
await Context.SaveChangesAsync();
} catch (Exception exc) {
@ -674,8 +638,8 @@ namespace Elwig.Windows {
await RefreshDeliveryListQuery();
}
private void DeliveryList_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
RefreshDeliveryParts();
private async void DeliveryList_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
await RefreshDeliveryParts();
if (DeliveryList.SelectedItem != null) {
DeleteDeliveryButton.IsEnabled = true;
Menu_Print_ShowDeliveryNote.IsEnabled = !IsEditing && !IsCreating;
@ -689,8 +653,8 @@ namespace Elwig.Windows {
private void DeliveryPartList_SelectionChanged(object? sender, SelectionChangedEventArgs? evt) {
RefreshInputs();
if (DeliveryPartList.SelectedItem != null) {
AbwertenButton.IsEnabled = true;
if (DeliveryPartList.SelectedItem is DeliveryPart p) {
AbwertenButton.IsEnabled = p.QualId != "WEI";
EditDeliveryButton.IsEnabled = true;
ExtractDeliveryPartButton.IsEnabled = !IsCreating;
DeleteDeliveryPartButton.IsEnabled = DeliveryList.SelectedItem is Delivery { Parts.Count: > 1 } && !IsCreating;
@ -729,7 +693,7 @@ namespace Elwig.Windows {
DeliveryPartList.IsEnabled = false;
var p = await UpdateDeliveryPart(DeliveryList.SelectedItem as Delivery, DeliveryPartList.SelectedItem as DeliveryPart);
await RefreshDeliveryList();
RefreshDeliveryParts();
await RefreshDeliveryParts();
DeliveryList.SelectedItem = p?.Delivery;
DeliveryPartList.SelectedItem = null;
InitialInputs();
@ -739,7 +703,7 @@ namespace Elwig.Windows {
DeliveryPartList.IsEnabled = false;
var p = await UpdateDeliveryPart(DeliveryList.SelectedItem as Delivery, DeliveryPartList.SelectedItem as DeliveryPart);
await RefreshDeliveryList();
RefreshDeliveryParts();
await RefreshDeliveryParts();
if (p?.Delivery != null) {
using var doc = new DeliveryNote(p.Delivery);
await doc.Generate();
@ -786,8 +750,52 @@ namespace Elwig.Windows {
LockSearchInputs();
}
private void AbwertenButton_Click(object sender, RoutedEventArgs evt) {
// TODO abwerten dialog
private async void AbwertenButton_Click(object sender, RoutedEventArgs evt) {
if (DeliveryPartList.SelectedItem is not DeliveryPart p) return;
var res = Utils.ShowAbwertenDialog($"{p.Delivery.LsNr}/{p.DPNr}", p.Delivery.Member.AdministrativeName, p.Weight);
EntityEntry<DeliveryPart>? entry1 = null, entry2 = null;
try {
if (res == null || res <= 0)
return;
ClearOriginalValues();
if (res >= p.Weight) {
ControlUtils.SelectComboBoxItem(WineQualityLevelInput, q => (q as WineQualLevel)?.QualId, "WEI");
ControlUtils.SelectComboBoxItem(WineOriginInput, o => (o as WineOrigin)?.HkId, "OEST");
p.QualId = "WEI";
p.HkId = "OEST";
entry1 = Context.Update(p);
} else {
var w = p.Weight - res.Value;
WeightInput.Text = $"{w:N0}";
p.Weight = w;
entry1 = Context.Update(p);
var d = p.Delivery;
var p2 = Context.CreateProxy<DeliveryPart>();
var values = Context.Entry(p).CurrentValues;
Context.Entry(p2).CurrentValues.SetValues(values);
p2.DPNr = await Context.NextDPNr(d.Year, d.DId);
p2.Weight = res.Value;
p2.QualId = "WEI";
p2.HkId = "OEST";
entry2 = await Context.AddAsync(p2);
await Context.UpdateDeliveryPartAttributes(p2, p.Attributes);
await Context.UpdateDeliveryPartModifiers(p2, p.Modifiers);
}
await Context.SaveChangesAsync();
await RefreshDeliveryParts();
FinishInputFilling();
} catch (Exception exc) {
if (entry1 != null) await entry1.ReloadAsync();
if (entry2 != null) {
await entry2.ReloadAsync();
entry2.State = EntityState.Detached;
}
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;
MessageBox.Show(str, "Lieferung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
private void WeighingManualButton_Click(object sender, RoutedEventArgs evt) {
@ -829,7 +837,7 @@ namespace Elwig.Windows {
Context.Remove(d);
await Context.SaveChangesAsync();
await RefreshDeliveryList();
RefreshDeliveryParts();
await RefreshDeliveryParts();
}
}
@ -847,10 +855,10 @@ namespace Elwig.Windows {
UnlockSearchInputs();
FinishInputFilling();
await RefreshDeliveryList();
RefreshDeliveryParts();
await RefreshDeliveryParts();
RefreshInputs();
AbwertenButton.IsEnabled = true;
AbwertenButton.IsEnabled = p.QualId != "WEI";
ExtractDeliveryPartButton.IsEnabled = DeliveryPartList.SelectedItem != null && !IsCreating;
DeleteDeliveryPartButton.IsEnabled = DeliveryList.SelectedItem is Delivery { Parts.Count: > 1 } && !IsCreating;
}
@ -877,7 +885,7 @@ namespace Elwig.Windows {
LockInputs();
UnlockSearchInputs();
AbwertenButton.IsEnabled = DeliveryPartList.SelectedItem != null;
AbwertenButton.IsEnabled = DeliveryPartList.SelectedItem is DeliveryPart p && p.QualId != "WEI";
ExtractDeliveryPartButton.IsEnabled = DeliveryPartList.SelectedItem != null && !IsCreating;
DeleteDeliveryPartButton.IsEnabled = DeliveryList.SelectedItem is Delivery { Parts.Count: > 1 } && !IsCreating;
}
@ -896,7 +904,7 @@ namespace Elwig.Windows {
if (r == MessageBoxResult.Yes) {
Context.Remove(p);
await Context.SaveChangesAsync();
RefreshDeliveryParts();
await RefreshDeliveryParts();
}
}
@ -920,7 +928,7 @@ namespace Elwig.Windows {
private void ShowNewEditDeleteButtons() {
NewDeliveryButton.IsEnabled = IsReceipt;
AbwertenButton.IsEnabled = DeliveryPartList.SelectedItem != null;
AbwertenButton.IsEnabled = DeliveryPartList.SelectedItem is DeliveryPart p && p.QualId == "WEI";
EditDeliveryButton.IsEnabled = DeliveryPartList.SelectedItem != null;
DeleteDeliveryButton.IsEnabled = DeliveryList.SelectedItem != null;
NewDeliveryButton.Visibility = IsReceipt ? Visibility.Visible : Visibility.Hidden;