Implemented übernahme
This commit is contained in:
@ -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;
|
||||||
|
@ -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);
|
||||||
|
Reference in New Issue
Block a user