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.Helpers;
using Elwig.Models; using Elwig.Models;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
@ -74,11 +74,17 @@ namespace Elwig.Windows {
Title = $"Lieferungen - {Member.AdministrativeName} - Elwig"; 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); OnSecondPassed(null, null);
Timer.Start(); Timer.Start();
LockInputs(); 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) { 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() { private void InitInputs() {
ControlUtils.SelectComboBoxItem(BranchInput, i => (i as Branch)?.ZwstId, App.ZwstId); ControlUtils.SelectComboBoxItem(BranchInput, i => (i as Branch)?.ZwstId, App.ZwstId);
OnSecondPassed(null, null); OnSecondPassed(null, null);
UpdateLsNr().GetAwaiter().GetResult(); UpdateLsNr().GetAwaiter().GetResult();
HandPickedInput.IsChecked = null; InitialInputs();
// FIXME if Matzen
GerebeltGewogenInput.IsChecked = true;
FillOriginalValues();
ValidateRequiredInputs();
} }
protected override void UpdateButtons() { protected override void UpdateButtons() {
@ -105,8 +115,9 @@ namespace Elwig.Windows {
bool ch = HasChanged, v = IsValid; bool ch = HasChanged, v = IsValid;
ResetButton.IsEnabled = ch; ResetButton.IsEnabled = ch;
SaveButton.IsEnabled = v && ch; SaveButton.IsEnabled = v && ch;
FinishButton.IsEnabled = v && ch; FinishButton.IsEnabled = v || !ch;
NewDeliveryPartButton.IsEnabled = v && ch; NewDeliveryPartButton.IsEnabled = v;
CancelCreatingButton.IsEnabled = DeliveryList.SelectedItem == null || DeliveryPartList.SelectedItem == null;
} }
private async Task RefreshDeliveryList() { private async Task RefreshDeliveryList() {
@ -193,6 +204,8 @@ namespace Elwig.Windows {
ClearInputStates(); ClearInputStates();
if (DeliveryPartList.SelectedItem is DeliveryPart p) { if (DeliveryPartList.SelectedItem is DeliveryPart p) {
FillInputs(p); FillInputs(p);
} else if (DeliveryList.SelectedItem is Delivery d) {
FillInputs(d);
} else { } else {
ClearOriginalValues(); ClearOriginalValues();
ClearInputs(validate); ClearInputs(validate);
@ -201,10 +214,9 @@ namespace Elwig.Windows {
GC.Collect(); GC.Collect();
} }
private void FillInputs(DeliveryPart p) { private void FillInputs(Delivery d) {
ClearOriginalValues(); ClearOriginalValues();
var d = p.Delivery;
MgNrInput.Text = d.MgNr.ToString(); MgNrInput.Text = d.MgNr.ToString();
ControlUtils.SelectComboBoxItem(BranchInput, i => (i as Branch)?.ZwstId, d.ZwstId); ControlUtils.SelectComboBoxItem(BranchInput, i => (i as Branch)?.ZwstId, d.ZwstId);
LsNrInput.Text = d.LsNr; LsNrInput.Text = d.LsNr;
@ -212,6 +224,21 @@ namespace Elwig.Windows {
TimeInput.Text = d.Time?.ToString("HH:mm") ?? ""; TimeInput.Text = d.Time?.ToString("HH:mm") ?? "";
CommentInput.Text = d.Comment ?? ""; 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 ?? ""; SortIdInput.Text = p?.SortId ?? "";
ControlUtils.SelectCheckComboBoxItems(AttributesInput, p?.Attributes, i => (i as WineAttr)?.AttrId); ControlUtils.SelectCheckComboBoxItems(AttributesInput, p?.Attributes, i => (i as WineAttr)?.AttrId);
GradationKmwInput.Text = (p != null) ? $"{p.Kmw:N1}" : ""; GradationKmwInput.Text = (p != null) ? $"{p.Kmw:N1}" : "";
@ -234,7 +261,7 @@ namespace Elwig.Windows {
private async Task<DeliveryPart> UpdateDeliveryPart(Delivery? d, DeliveryPart? p) { private async Task<DeliveryPart> UpdateDeliveryPart(Delivery? d, DeliveryPart? p) {
int year, did, dpnr; int year, did, dpnr;
bool deliveryNew = d == null; bool deliveryNew = (d == null), partNew = (p == null);
if (d == null) { if (d == null) {
d = Context.CreateProxy<Delivery>(); d = Context.CreateProxy<Delivery>();
year = Utils.CurrentNextSeason; year = Utils.CurrentNextSeason;
@ -260,7 +287,7 @@ namespace Elwig.Windows {
d.LNr = await Context.NextLNr(d.Date); d.LNr = await Context.NextLNr(d.Date);
} }
if (IsCreating) { if (IsCreating) {
d.TimeString = DateTime.Now.ToString("HH:mm:SS"); d.TimeString = DateTime.Now.ToString("HH:mm:ss");
} else if (InputHasChanged(TimeInput)) { } else if (InputHasChanged(TimeInput)) {
d.TimeString = TimeInput.Text + ":00"; d.TimeString = TimeInput.Text + ":00";
} }
@ -270,7 +297,7 @@ namespace Elwig.Windows {
d.Comment = (CommentInput.Text == "") ? null : CommentInput.Text; d.Comment = (CommentInput.Text == "") ? null : CommentInput.Text;
p.SortId = (WineVarietyInput.SelectedItem as WineVar)?.SortId; 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.Kmw = double.Parse(GradationKmwInput.Text);
p.QualId = (WineQualityLevelInput.SelectedItem as WineQualLevel)?.QualId; p.QualId = (WineQualityLevelInput.SelectedItem as WineQualLevel)?.QualId;
p.HkId = (WineOriginInput.SelectedItem as WineOrigin)?.HkId; p.HkId = (WineOriginInput.SelectedItem as WineOrigin)?.HkId;
@ -289,6 +316,8 @@ namespace Elwig.Windows {
// p.ScaleId // p.ScaleId
// p.WeighingId // p.WeighingId
// TODO update KgNr when MgNr changes (if default is selected)
EntityEntry<Delivery>? dEntry = null; EntityEntry<Delivery>? dEntry = null;
EntityEntry<DeliveryPart>? pEntry = null; EntityEntry<DeliveryPart>? pEntry = null;
try { try {
@ -296,12 +325,8 @@ namespace Elwig.Windows {
dEntry = Context.Update(d); dEntry = Context.Update(d);
pEntry = Context.Update(p); pEntry = Context.Update(p);
} else if (IsCreating) { } else if (IsCreating) {
if (deliveryNew) { dEntry = deliveryNew ? await Context.AddAsync(d) : Context.Update(d);
dEntry = await Context.AddAsync(d); pEntry = partNew ? await Context.AddAsync(p) : Context.Update(p);
} else {
dEntry = Context.Update(d);
}
pEntry = await Context.AddAsync(p);
} }
foreach (var a in AttributesInput.ItemsSource.Cast<WineAttr>()) { foreach (var a in AttributesInput.ItemsSource.Cast<WineAttr>()) {
@ -346,8 +371,14 @@ namespace Elwig.Windows {
await Context.SaveChangesAsync(); await Context.SaveChangesAsync();
} catch (Exception exc) { } catch (Exception exc) {
if (dEntry != null) await dEntry.ReloadAsync(); if (dEntry != null) {
if (pEntry != null) await pEntry.ReloadAsync(); 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; 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; if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Lieferung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(str, "Lieferung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
@ -386,8 +417,8 @@ namespace Elwig.Windows {
if (DeliveryPartList.SelectedItem != null) { if (DeliveryPartList.SelectedItem != null) {
AbwertenButton.IsEnabled = true; AbwertenButton.IsEnabled = true;
EditDeliveryButton.IsEnabled = true; EditDeliveryButton.IsEnabled = true;
ExtractDeliveryPartButton.IsEnabled = true; ExtractDeliveryPartButton.IsEnabled = !IsCreating;
DeleteDeliveryPartButton.IsEnabled = DeliveryList.SelectedItem is Delivery { Parts.Count: > 1 }; DeleteDeliveryPartButton.IsEnabled = DeliveryList.SelectedItem is Delivery { Parts.Count: > 1 } && !IsCreating;
} else { } else {
AbwertenButton.IsEnabled = false; AbwertenButton.IsEnabled = false;
EditDeliveryButton.IsEnabled = false; EditDeliveryButton.IsEnabled = false;
@ -419,31 +450,65 @@ namespace Elwig.Windows {
} }
} }
private void FinishButton_Click(object sender, RoutedEventArgs evt) { private async void NewDeliveryPartButton_Click(object sender, RoutedEventArgs evt) {
// TODO finish (save) and print 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) { private async void FinishButton_Click(object sender, RoutedEventArgs evt) {
// TODO new delivery part 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) { private void CancelCreatingButton_Click(object sender, RoutedEventArgs evt) {
IsCreating = false; if (DeliveryList.SelectedItem is not Delivery d) {
IsEditing = false; // switch away from creating mode
DeliveryList.IsEnabled = true; IsCreating = false;
DeliveryPartList.IsEnabled = true; IsEditing = false;
HideFinishNewPartDeliveryCancelButtons(); DeliveryList.IsEnabled = true;
ShowNewEditDeleteButtons(); DeliveryPartList.IsEnabled = true;
RefreshInputs(); WeighingManualButton.IsEnabled = false;
ClearInputStates(); WeighingAButton.IsEnabled = false;
LockInputs(); WeighingBButton.IsEnabled = false;
UnlockSearchInputs(); 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) { private void NewDeliveryButton_Click(object? sender, RoutedEventArgs? evt) {
IsCreating = true; IsCreating = true;
DeliveryList.IsEnabled = false; DeliveryList.IsEnabled = false;
DeliveryPartList.IsEnabled = false; DeliveryPartList.IsEnabled = false;
WeighingManualButton.IsEnabled = true;
WeighingAButton.IsEnabled = true;
WeighingBButton.IsEnabled = true;
WeighingCButton.IsEnabled = true;
WeighingDButton.IsEnabled = true;
DeliveryList.SelectedItem = null; DeliveryList.SelectedItem = null;
HideNewEditDeleteButtons(); HideNewEditDeleteButtons();
ShowFinishNewPartDeliveryCancelButtons(); ShowFinishNewPartDeliveryCancelButtons();
@ -515,8 +580,8 @@ namespace Elwig.Windows {
RefreshInputs(); RefreshInputs();
AbwertenButton.IsEnabled = true; AbwertenButton.IsEnabled = true;
ExtractDeliveryPartButton.IsEnabled = true; ExtractDeliveryPartButton.IsEnabled = DeliveryPartList.SelectedItem != null && !IsCreating;
DeleteDeliveryPartButton.IsEnabled = true; DeleteDeliveryPartButton.IsEnabled = DeliveryList.SelectedItem is Delivery { Parts.Count: > 1 } && !IsCreating;
} }
private void ResetButton_Click(object sender, RoutedEventArgs evt) { private void ResetButton_Click(object sender, RoutedEventArgs evt) {
@ -543,8 +608,8 @@ namespace Elwig.Windows {
UnlockSearchInputs(); UnlockSearchInputs();
AbwertenButton.IsEnabled = DeliveryPartList.SelectedItem != null; AbwertenButton.IsEnabled = DeliveryPartList.SelectedItem != null;
ExtractDeliveryPartButton.IsEnabled = DeliveryPartList.SelectedItem != null; ExtractDeliveryPartButton.IsEnabled = DeliveryPartList.SelectedItem != null && !IsCreating;
DeleteDeliveryPartButton.IsEnabled = DeliveryPartList.SelectedItem != null; DeleteDeliveryPartButton.IsEnabled = DeliveryList.SelectedItem is Delivery { Parts.Count: > 1 } && !IsCreating;
} }
private void ExtractDeliveryPartButton_Click(object sender, RoutedEventArgs evt) { private void ExtractDeliveryPartButton_Click(object sender, RoutedEventArgs evt) {
@ -696,7 +761,7 @@ namespace Elwig.Windows {
private void UpdateWineQualityLevels() { private void UpdateWineQualityLevels() {
if (!GetInputValid(GradationKmwInput)) { if (!GetInputValid(GradationKmwInput)) {
UnsetOriginalValue(WineQualityLevelInput); UnsetOriginalValue(WineQualityLevelInput);
WineQualityLevelInput.ItemsSource = null; WineQualityLevelInput.ItemsSource = Context.WineQualityLevels.Where(q => q.QualId == "WEI").ToList();
return; return;
} }
var kmw = double.Parse(GradationKmwInput.Text); var kmw = double.Parse(GradationKmwInput.Text);
@ -798,6 +863,8 @@ namespace Elwig.Windows {
} }
private void UpdateAbgewertet() { private void UpdateAbgewertet() {
if (!GetInputValid(GradationKmwInput))
return;
var qual = WineQualityLevelInput.SelectedItem as WineQualLevel; var qual = WineQualityLevelInput.SelectedItem as WineQualLevel;
if (qual == null) { if (qual == null) {
AbgewertetInput.IsChecked = false; AbgewertetInput.IsChecked = false;

View File

@ -327,6 +327,7 @@ namespace Elwig.Windows {
} }
private async Task<Member> UpdateMember(Member? m) { private async Task<Member> UpdateMember(Member? m) {
bool memberNew = (m == null);
m ??= Context.CreateProxy<Member>(); m ??= Context.CreateProxy<Member>();
int newMgNr = int.Parse(MgNrInput.Text); int newMgNr = int.Parse(MgNrInput.Text);
@ -421,7 +422,10 @@ namespace Elwig.Windows {
m = await Context.Members.FindAsync(newMgNr); m = await Context.Members.FindAsync(newMgNr);
} }
} catch (Exception exc) { } 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; 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; if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Mitglied aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(str, "Mitglied aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);