diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml.cs b/Elwig/Windows/DeliveryAdminWindow.xaml.cs index 59df322..1cba19a 100644 --- a/Elwig/Windows/DeliveryAdminWindow.xaml.cs +++ b/Elwig/Windows/DeliveryAdminWindow.xaml.cs @@ -1,4 +1,4 @@ -using Elwig.Dialogs; +using Elwig.Documents; using Elwig.Helpers; using Elwig.Models; using Microsoft.EntityFrameworkCore; @@ -74,11 +74,17 @@ namespace Elwig.Windows { Title = $"Lieferungen - {Member.AdministrativeName} - Elwig"; } - private void Window_Loaded(object sender, RoutedEventArgs evt) { + private async void Window_Loaded(object sender, RoutedEventArgs evt) { OnSecondPassed(null, null); Timer.Start(); LockInputs(); - if (IsReceipt) NewDeliveryButton_Click(null, null); + if (IsReceipt) { + NewDeliveryButton_Click(null, null); + if ((await Context.Seasons.FindAsync(Utils.CurrentYear)) == null) { + MessageBox.Show("Die Saison für das aktuelle Jahr wurde noch nicht erstellt. Neue Lieferungen können nicht abgespeichert werden.", + "Saison noch nicht erstellt", MessageBoxButton.OK, MessageBoxImage.Error); + } + } } private void OnSecondPassed(object? sender, EventArgs? evt) { @@ -89,15 +95,19 @@ namespace Elwig.Windows { } } + private void InitialInputs() { + HandPickedInput.IsChecked = null; + // FIXME if Matzen + GerebeltGewogenInput.IsChecked = true; + ClearOriginalValues(); + ValidateRequiredInputs(); + } + private void InitInputs() { ControlUtils.SelectComboBoxItem(BranchInput, i => (i as Branch)?.ZwstId, App.ZwstId); OnSecondPassed(null, null); UpdateLsNr().GetAwaiter().GetResult(); - HandPickedInput.IsChecked = null; - // FIXME if Matzen - GerebeltGewogenInput.IsChecked = true; - FillOriginalValues(); - ValidateRequiredInputs(); + InitialInputs(); } protected override void UpdateButtons() { @@ -105,8 +115,9 @@ namespace Elwig.Windows { bool ch = HasChanged, v = IsValid; ResetButton.IsEnabled = ch; SaveButton.IsEnabled = v && ch; - FinishButton.IsEnabled = v && ch; - NewDeliveryPartButton.IsEnabled = v && ch; + FinishButton.IsEnabled = v || !ch; + NewDeliveryPartButton.IsEnabled = v; + CancelCreatingButton.IsEnabled = DeliveryList.SelectedItem == null || DeliveryPartList.SelectedItem == null; } private async Task RefreshDeliveryList() { @@ -193,6 +204,8 @@ namespace Elwig.Windows { ClearInputStates(); if (DeliveryPartList.SelectedItem is DeliveryPart p) { FillInputs(p); + } else if (DeliveryList.SelectedItem is Delivery d) { + FillInputs(d); } else { ClearOriginalValues(); ClearInputs(validate); @@ -201,10 +214,9 @@ namespace Elwig.Windows { GC.Collect(); } - private void FillInputs(DeliveryPart p) { + private void FillInputs(Delivery d) { ClearOriginalValues(); - var d = p.Delivery; MgNrInput.Text = d.MgNr.ToString(); ControlUtils.SelectComboBoxItem(BranchInput, i => (i as Branch)?.ZwstId, d.ZwstId); LsNrInput.Text = d.LsNr; @@ -212,6 +224,21 @@ namespace Elwig.Windows { TimeInput.Text = d.Time?.ToString("HH:mm") ?? ""; CommentInput.Text = d.Comment ?? ""; + SortIdInput.Text = ""; + GradationKmwInput.Text = ""; + WeightInput.Text = ""; + ManualWeighingInput.IsChecked = false; + PartCommentInput.Text = ""; + TemperatureInput.Text = ""; + AcidInput.Text = ""; + + FillOriginalValues(); + } + + private void FillInputs(DeliveryPart p) { + ClearOriginalValues(); + FillInputs(p.Delivery); + SortIdInput.Text = p?.SortId ?? ""; ControlUtils.SelectCheckComboBoxItems(AttributesInput, p?.Attributes, i => (i as WineAttr)?.AttrId); GradationKmwInput.Text = (p != null) ? $"{p.Kmw:N1}" : ""; @@ -234,7 +261,7 @@ namespace Elwig.Windows { private async Task UpdateDeliveryPart(Delivery? d, DeliveryPart? p) { int year, did, dpnr; - bool deliveryNew = d == null; + bool deliveryNew = (d == null), partNew = (p == null); if (d == null) { d = Context.CreateProxy(); year = Utils.CurrentNextSeason; @@ -260,7 +287,7 @@ namespace Elwig.Windows { d.LNr = await Context.NextLNr(d.Date); } if (IsCreating) { - d.TimeString = DateTime.Now.ToString("HH:mm:SS"); + d.TimeString = DateTime.Now.ToString("HH:mm:ss"); } else if (InputHasChanged(TimeInput)) { d.TimeString = TimeInput.Text + ":00"; } @@ -270,7 +297,7 @@ namespace Elwig.Windows { d.Comment = (CommentInput.Text == "") ? null : CommentInput.Text; p.SortId = (WineVarietyInput.SelectedItem as WineVar)?.SortId; - p.Weight = int.Parse(WeightInput.Text); + p.Weight = int.Parse(WeightInput.Text.Replace(".", "")); p.Kmw = double.Parse(GradationKmwInput.Text); p.QualId = (WineQualityLevelInput.SelectedItem as WineQualLevel)?.QualId; p.HkId = (WineOriginInput.SelectedItem as WineOrigin)?.HkId; @@ -289,6 +316,8 @@ namespace Elwig.Windows { // p.ScaleId // p.WeighingId + // TODO update KgNr when MgNr changes (if default is selected) + EntityEntry? dEntry = null; EntityEntry? pEntry = null; try { @@ -296,12 +325,8 @@ namespace Elwig.Windows { dEntry = Context.Update(d); pEntry = Context.Update(p); } else if (IsCreating) { - if (deliveryNew) { - dEntry = await Context.AddAsync(d); - } else { - dEntry = Context.Update(d); - } - pEntry = await Context.AddAsync(p); + dEntry = deliveryNew ? await Context.AddAsync(d) : Context.Update(d); + pEntry = partNew ? await Context.AddAsync(p) : Context.Update(p); } foreach (var a in AttributesInput.ItemsSource.Cast()) { @@ -346,8 +371,14 @@ namespace Elwig.Windows { await Context.SaveChangesAsync(); } catch (Exception exc) { - if (dEntry != null) await dEntry.ReloadAsync(); - if (pEntry != null) await pEntry.ReloadAsync(); + if (dEntry != null) { + await dEntry.ReloadAsync(); + if (deliveryNew) dEntry.State = EntityState.Detached; + } + if (pEntry != null) { + await pEntry.ReloadAsync(); + if (partNew) pEntry.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); @@ -386,8 +417,8 @@ namespace Elwig.Windows { if (DeliveryPartList.SelectedItem != null) { AbwertenButton.IsEnabled = true; EditDeliveryButton.IsEnabled = true; - ExtractDeliveryPartButton.IsEnabled = true; - DeleteDeliveryPartButton.IsEnabled = DeliveryList.SelectedItem is Delivery { Parts.Count: > 1 }; + ExtractDeliveryPartButton.IsEnabled = !IsCreating; + DeleteDeliveryPartButton.IsEnabled = DeliveryList.SelectedItem is Delivery { Parts.Count: > 1 } && !IsCreating; } else { AbwertenButton.IsEnabled = false; EditDeliveryButton.IsEnabled = false; @@ -419,31 +450,65 @@ namespace Elwig.Windows { } } - private void FinishButton_Click(object sender, RoutedEventArgs evt) { - // TODO finish (save) and print + private async void NewDeliveryPartButton_Click(object sender, RoutedEventArgs evt) { + DeliveryPartList.IsEnabled = false; + var p = await UpdateDeliveryPart(DeliveryList.SelectedItem as Delivery, DeliveryPartList.SelectedItem as DeliveryPart); + await RefreshDeliveryList(); + RefreshDeliveryParts(); + DeliveryList.SelectedItem = p.Delivery; + DeliveryPartList.SelectedItem = null; + InitialInputs(); } - private void NewDeliveryPartButton_Click(object sender, RoutedEventArgs evt) { - // TODO new delivery part + private async void FinishButton_Click(object sender, RoutedEventArgs evt) { + DeliveryPartList.IsEnabled = false; + var p = await UpdateDeliveryPart(DeliveryList.SelectedItem as Delivery, DeliveryPartList.SelectedItem as DeliveryPart); + await RefreshDeliveryList(); + RefreshDeliveryParts(); + if (p != null) { + var doc = new DeliveryNote(p.Delivery); + await doc.Generate(); + doc.Show(); + //await doc.Print(2); + } + DeliveryList.SelectedItem = null; + InitInputs(); } private void CancelCreatingButton_Click(object sender, RoutedEventArgs evt) { - IsCreating = false; - IsEditing = false; - DeliveryList.IsEnabled = true; - DeliveryPartList.IsEnabled = true; - HideFinishNewPartDeliveryCancelButtons(); - ShowNewEditDeleteButtons(); - RefreshInputs(); - ClearInputStates(); - LockInputs(); - UnlockSearchInputs(); + if (DeliveryList.SelectedItem is not Delivery d) { + // switch away from creating mode + IsCreating = false; + IsEditing = false; + DeliveryList.IsEnabled = true; + DeliveryPartList.IsEnabled = true; + WeighingManualButton.IsEnabled = false; + WeighingAButton.IsEnabled = false; + WeighingBButton.IsEnabled = false; + WeighingCButton.IsEnabled = false; + WeighingDButton.IsEnabled = false; + HideFinishNewPartDeliveryCancelButtons(); + ShowNewEditDeleteButtons(); + RefreshInputs(); + ClearInputStates(); + LockInputs(); + UnlockSearchInputs(); + } else { + // switch to last delivery part + DeliveryPartList.IsEnabled = true; + DeliveryPartList.SelectedItem = d.Parts.Last(); + } } private void NewDeliveryButton_Click(object? sender, RoutedEventArgs? evt) { IsCreating = true; DeliveryList.IsEnabled = false; DeliveryPartList.IsEnabled = false; + WeighingManualButton.IsEnabled = true; + WeighingAButton.IsEnabled = true; + WeighingBButton.IsEnabled = true; + WeighingCButton.IsEnabled = true; + WeighingDButton.IsEnabled = true; DeliveryList.SelectedItem = null; HideNewEditDeleteButtons(); ShowFinishNewPartDeliveryCancelButtons(); @@ -515,8 +580,8 @@ namespace Elwig.Windows { RefreshInputs(); AbwertenButton.IsEnabled = true; - ExtractDeliveryPartButton.IsEnabled = true; - DeleteDeliveryPartButton.IsEnabled = true; + ExtractDeliveryPartButton.IsEnabled = DeliveryPartList.SelectedItem != null && !IsCreating; + DeleteDeliveryPartButton.IsEnabled = DeliveryList.SelectedItem is Delivery { Parts.Count: > 1 } && !IsCreating; } private void ResetButton_Click(object sender, RoutedEventArgs evt) { @@ -543,8 +608,8 @@ namespace Elwig.Windows { UnlockSearchInputs(); AbwertenButton.IsEnabled = DeliveryPartList.SelectedItem != null; - ExtractDeliveryPartButton.IsEnabled = DeliveryPartList.SelectedItem != null; - DeleteDeliveryPartButton.IsEnabled = DeliveryPartList.SelectedItem != null; + ExtractDeliveryPartButton.IsEnabled = DeliveryPartList.SelectedItem != null && !IsCreating; + DeleteDeliveryPartButton.IsEnabled = DeliveryList.SelectedItem is Delivery { Parts.Count: > 1 } && !IsCreating; } private void ExtractDeliveryPartButton_Click(object sender, RoutedEventArgs evt) { @@ -696,7 +761,7 @@ namespace Elwig.Windows { private void UpdateWineQualityLevels() { if (!GetInputValid(GradationKmwInput)) { UnsetOriginalValue(WineQualityLevelInput); - WineQualityLevelInput.ItemsSource = null; + WineQualityLevelInput.ItemsSource = Context.WineQualityLevels.Where(q => q.QualId == "WEI").ToList(); return; } var kmw = double.Parse(GradationKmwInput.Text); @@ -798,6 +863,8 @@ namespace Elwig.Windows { } private void UpdateAbgewertet() { + if (!GetInputValid(GradationKmwInput)) + return; var qual = WineQualityLevelInput.SelectedItem as WineQualLevel; if (qual == null) { AbgewertetInput.IsChecked = false; diff --git a/Elwig/Windows/MemberAdminWindow.xaml.cs b/Elwig/Windows/MemberAdminWindow.xaml.cs index 15e1ca3..96905e4 100644 --- a/Elwig/Windows/MemberAdminWindow.xaml.cs +++ b/Elwig/Windows/MemberAdminWindow.xaml.cs @@ -327,6 +327,7 @@ namespace Elwig.Windows { } private async Task UpdateMember(Member? m) { + bool memberNew = (m == null); m ??= Context.CreateProxy(); int newMgNr = int.Parse(MgNrInput.Text); @@ -421,7 +422,10 @@ namespace Elwig.Windows { m = await Context.Members.FindAsync(newMgNr); } } catch (Exception exc) { - if (tr != null) await tr.ReloadAsync(); + if (tr != null) { + await tr.ReloadAsync(); + if (memberNew) tr.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, "Mitglied aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);