Implemented übernahme

This commit is contained in:
2023-08-02 22:20:11 +02:00
parent a984c4f16c
commit d05eb145b6
2 changed files with 116 additions and 45 deletions

View File

@ -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<DeliveryPart> 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<Delivery>();
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<Delivery>? dEntry = null;
EntityEntry<DeliveryPart>? 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<WineAttr>()) {
@ -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;

View File

@ -327,6 +327,7 @@ namespace Elwig.Windows {
}
private async Task<Member> UpdateMember(Member? m) {
bool memberNew = (m == null);
m ??= Context.CreateProxy<Member>();
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);