Saving delivery now works

This commit is contained in:
2023-07-31 15:42:46 +02:00
parent d06ea4f045
commit a62fb9ab16
4 changed files with 162 additions and 6 deletions

View File

@ -122,6 +122,14 @@ namespace Elwig.Helpers {
return c + 1;
}
public async Task<int> NextDId(int year) {
return await Deliveries.Where(d => d.Year == year).Select(d => d.DId).MaxAsync() + 1;
}
public async Task<int> NextDPNr(int year, int did) {
return await DeliveryParts.Where(p => p.Year == year && p.DId == did).Select(d => d.DPNr).MaxAsync() + 1;
}
public async Task<WineQualLevel> GetWineQualityLevel(double kmw) {
return await WineQualityLevels
.Where(q => !q.IsPredicate && (q.MinKmw == null || q.MinKmw <= kmw))

View File

@ -222,6 +222,7 @@ namespace Elwig.Windows {
!IsValid ||
TextBoxInputs.Any(InputHasChanged) ||
ComboBoxInputs.Any(InputHasChanged) ||
CheckComboBoxInputs.Any(InputHasChanged) ||
CheckBoxInputs.Any(InputHasChanged) ||
RadioButtonInputs.Any(InputHasChanged);

View File

@ -1,6 +1,7 @@
using Elwig.Helpers;
using Elwig.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using System;
using System.Collections.Generic;
using System.Linq;
@ -226,6 +227,130 @@ namespace Elwig.Windows {
FillOriginalValues();
}
private async Task<DeliveryPart> UpdateDeliveryPart(Delivery? d, DeliveryPart? p) {
int year, did, dpnr;
bool deliveryNew = d == null;
if (d == null) {
d = Context.CreateProxy<Delivery>();
year = Utils.CurrentNextSeason;
did = await Context.NextDId(year);
} else {
year = d.Year;
did = d.DId;
}
if (p == null) {
p = Context.CreateProxy<DeliveryPart>();
dpnr = await Context.NextDPNr(year, did);
} else {
dpnr = p.DPNr;
}
d.Year = year;
d.DId = did;
p.Year = year;
p.DId = did;
p.DPNr = dpnr;
d.DateString = string.Join("-", DateInput.Text.Split(".").Reverse());
if (IsCreating || InputHasChanged(DateInput)) {
d.LNr = await Context.NextLNr(d.Date);
}
if (IsCreating) {
d.TimeString = DateTime.Now.ToString("HH:mm:SS");
} else if (InputHasChanged(TimeInput)) {
d.TimeString = TimeInput.Text + ":00";
}
d.ZwstId = (BranchInput.SelectedItem as Branch)?.ZwstId;
d.LsNr = LsNrInput.Text;
d.MgNr = int.Parse(MgNrInput.Text);
d.Comment = (CommentInput.Text == "") ? null : CommentInput.Text;
p.SortId = (WineVarietyInput.SelectedItem as WineVar)?.SortId;
p.Weight = int.Parse(WeightInput.Text);
p.Kmw = double.Parse(GradationKmwInput.Text);
p.QualId = (WineQualityLevelInput.SelectedItem as WineQualLevel)?.QualId;
p.HkId = (WineOriginInput.SelectedItem as WineOrigin)?.HkId;
p.KgNr = (WineKgInput.SelectedItem as AT_Kg)?.KgNr;
p.RdNr = (WineRdInput.SelectedItem as WbRd)?.RdNr;
p.IsGerebelt = GerebeltGewogenInput.IsChecked ?? false;
p.ManualWeighing = ManualWeighingInput.IsChecked ?? false;
p.IsHandPicked = HandPickedInput.IsChecked;
p.IsLesewagen = LesewagenInput.IsChecked;
p.Temperature = (TemperatureInput.Text == "") ? null : double.Parse(TemperatureInput.Text);
p.Acid = (TemperatureInput.Text == "") ? null : double.Parse(AcidInput.Text);
p.Comment = (PartCommentInput.Text == "") ? null : PartCommentInput.Text;
// TODO weighing/scale id
// p.ScaleId
// p.WeighingId
EntityEntry<Delivery>? dEntry = null;
EntityEntry<DeliveryPart>? pEntry = null;
try {
if (IsEditing) {
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);
}
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.SaveChangesAsync();
} catch (Exception exc) {
if (dEntry != null) await dEntry.ReloadAsync();
if (pEntry != null) await pEntry.ReloadAsync();
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);
}
return p;
}
private async void SearchInput_TextChanged(object sender, RoutedEventArgs evt) {
TextFilter = SearchInput.Text.ToLower().Split(" ").ToList().FindAll(e => e.Length > 0);
await RefreshDeliveryListQuery(true);
@ -349,8 +474,26 @@ namespace Elwig.Windows {
// TODO delete delivery
}
private void SaveButton_Click(object sender, RoutedEventArgs evt) {
// TODO save delivery (part)
private async void SaveButton_Click(object sender, RoutedEventArgs evt) {
DeliveryPart p = await UpdateDeliveryPart(DeliveryList.SelectedItem as Delivery, DeliveryPartList.SelectedItem as DeliveryPart);
IsEditing = false;
IsCreating = false;
DeliveryList.IsEnabled = true;
DeliveryPartList.IsEnabled = true;
HideSaveResetCancelButtons();
ShowNewEditDeleteButtons();
LockInputs();
UnlockSearchInputs();
FillOriginalValues();
await RefreshDeliveryList();
RefreshDeliveryParts();
RefreshInputs();
AbwertenButton.IsEnabled = true;
ExtractDeliveryPartButton.IsEnabled = true;
DeleteDeliveryPartButton.IsEnabled = true;
}
private void ResetButton_Click(object sender, RoutedEventArgs evt) {

View File

@ -137,7 +137,7 @@ namespace Elwig.Windows {
inputs.Item3.Text = comment;
}
private (string, string, string?)? GetPhonenrInput(int nr) {
private (string, string, string?)? GetPhoneNrInput(int nr) {
var inputs = PhoneNrInputs[nr];
var number = inputs.Item2.Text;
if (string.IsNullOrEmpty(number))
@ -206,7 +206,7 @@ namespace Elwig.Windows {
}
private async void SaveButton_Click(object sender, RoutedEventArgs evt) {
Member m = await UpdateMember(IsEditing ? (Member)MemberList.SelectedItem : Context.CreateProxy<Member>());
Member m = await UpdateMember(MemberList.SelectedItem as Member);
IsEditing = false;
IsCreating = false;
MemberList.IsEnabled = true;
@ -215,7 +215,9 @@ namespace Elwig.Windows {
LockInputs();
UpdatePhoneNrInputVisibility();
UnlockSearchInputs();
FillOriginalValues();
await RefreshMemberList();
RefreshInputs();
SearchInput.Text = "";
MemberList.SelectedItem = m;
}
@ -326,7 +328,9 @@ namespace Elwig.Windows {
}
}
private async Task<Member> UpdateMember(Member m) {
private async Task<Member> UpdateMember(Member? m) {
m ??= Context.CreateProxy<Member>();
int newMgNr = int.Parse(MgNrInput.Text);
m.PredecessorMgNr = (PredecessorMgNrInput.Text == "") ? null : int.Parse(PredecessorMgNrInput.Text);
m.Prefix = (PrefixInput.Text == "") ? null : PrefixInput.Text;
@ -389,7 +393,7 @@ namespace Elwig.Windows {
}
for (int i = 0, j = 0; i < PhoneNrInputs.Length; i++) {
var input = GetPhonenrInput(i);
var input = GetPhoneNrInput(i);
var phoneNr = m.TelephoneNumbers.FirstOrDefault(p => p.Nr - 1 == i);
if (input == null) {
if (phoneNr != null) {