[#43] DeliveryAdminWindow: Do not use Context from WintextWindow any more
This commit is contained in:
@ -5,7 +5,6 @@ using Elwig.Helpers.Weighing;
|
||||
using Elwig.Models.Entities;
|
||||
using LinqKit;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.ChangeTracking;
|
||||
using Microsoft.Win32;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@ -100,18 +99,32 @@ namespace Elwig.Windows {
|
||||
}
|
||||
|
||||
public DeliveryAdminWindow(int mgnr) : this() {
|
||||
Member = Context.Members.Find(mgnr) ?? throw new ArgumentException("MgNr argument has invalid value");
|
||||
using var ctx = new AppDbContext();
|
||||
Member = GetMember(mgnr) ?? throw new ArgumentException("MgNr argument has invalid value");
|
||||
Title = $"Lieferungen - {Member.AdministrativeName} - Elwig";
|
||||
AllSeasonsInput.IsEnabled = true;
|
||||
}
|
||||
|
||||
private static async Task<Member?> GetMemberAsync(int mgnr) {
|
||||
using var ctx = new AppDbContext();
|
||||
return await ctx.Members
|
||||
.Include(m => m.PostalDest.AtPlz!.Ort)
|
||||
.Include(m => m.DefaultWbKg!.AtKg)
|
||||
.FirstOrDefaultAsync(m => m.MgNr == mgnr);
|
||||
}
|
||||
|
||||
private static Member? GetMember(int mgnr) {
|
||||
return GetMemberAsync(mgnr).GetAwaiter().GetResult();
|
||||
}
|
||||
|
||||
private void Window_Loaded(object sender, RoutedEventArgs evt) {
|
||||
OnSecondPassed(null, null);
|
||||
Timer.Start();
|
||||
LockInputs();
|
||||
if (IsReceipt) {
|
||||
NewDeliveryButton_Click(null, null);
|
||||
if ((Context.Seasons.Find(Utils.CurrentYear)) == null) {
|
||||
using var ctx = new AppDbContext();
|
||||
if (ctx.Seasons.Find(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.Warning);
|
||||
}
|
||||
@ -122,7 +135,8 @@ namespace Elwig.Windows {
|
||||
if (DeliveryList.SelectedItem is not Delivery d) return;
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
try {
|
||||
using var doc = new DeliveryNote(d, Context);
|
||||
using var ctx = new AppDbContext();
|
||||
using var doc = new DeliveryNote((await ctx.Deliveries.FindAsync(d.Year, d.DId))!, ctx);
|
||||
await doc.Generate();
|
||||
doc.Show();
|
||||
} catch (Exception exc) {
|
||||
@ -135,7 +149,8 @@ namespace Elwig.Windows {
|
||||
if (DeliveryList.SelectedItem is not Delivery d) return;
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
try {
|
||||
using var doc = new DeliveryNote(d, Context);
|
||||
using var ctx = new AppDbContext();
|
||||
using var doc = new DeliveryNote((await ctx.Deliveries.FindAsync(d.Year, d.DId))!, ctx);
|
||||
await doc.Generate();
|
||||
await doc.Print();
|
||||
} catch (Exception exc) {
|
||||
@ -164,7 +179,8 @@ namespace Elwig.Windows {
|
||||
private async void Menu_Print_DeliveryJournal_ShowToday_Click(object sender, RoutedEventArgs evt) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
try {
|
||||
var doc = new DeliveryJournal(Context, DateOnly.FromDateTime(Utils.Today));
|
||||
using var ctx = new AppDbContext();
|
||||
using var doc = new DeliveryJournal(ctx, DateOnly.FromDateTime(Utils.Today));
|
||||
await doc.Generate();
|
||||
doc.Show();
|
||||
} catch (Exception exc) {
|
||||
@ -176,7 +192,8 @@ namespace Elwig.Windows {
|
||||
private async void Menu_Print_DeliveryJournal_PrintToday_Click(object sender, RoutedEventArgs evt) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
try {
|
||||
var doc = new DeliveryJournal(Context, DateOnly.FromDateTime(Utils.Today));
|
||||
using var ctx = new AppDbContext();
|
||||
using var doc = new DeliveryJournal(ctx, DateOnly.FromDateTime(Utils.Today));
|
||||
await doc.Generate();
|
||||
await doc.Print();
|
||||
} catch (Exception exc) {
|
||||
@ -188,7 +205,8 @@ namespace Elwig.Windows {
|
||||
private async void Menu_Print_DeliveryJournal_ShowFilter_Click(object sender, RoutedEventArgs evt) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
try {
|
||||
var (f, _, d, _, _) = await GetFilters();
|
||||
using var ctx = new AppDbContext();
|
||||
var (f, _, d, _, _) = await GetFilters(ctx);
|
||||
var doc = new DeliveryJournal(string.Join(" / ", f), d);
|
||||
await doc.Generate();
|
||||
doc.Show();
|
||||
@ -201,7 +219,8 @@ namespace Elwig.Windows {
|
||||
private async void Menu_Print_DeliveryJournal_PrintFilter_Click(object sender, RoutedEventArgs evt) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
try {
|
||||
var (f, _, d, _, _) = await GetFilters();
|
||||
using var ctx = new AppDbContext();
|
||||
var (f, _, d, _, _) = await GetFilters(ctx);
|
||||
var doc = new DeliveryJournal(string.Join(" / ", f), d);
|
||||
await doc.Generate();
|
||||
doc.Show();
|
||||
@ -323,9 +342,9 @@ namespace Elwig.Windows {
|
||||
await RefreshDeliveryListQuery();
|
||||
}
|
||||
|
||||
private async Task<(List<string>, IQueryable<Delivery>, IQueryable<DeliveryPart>, Predicate<DeliveryPart>, List<string>)> GetFilters() {
|
||||
private async Task<(List<string>, IQueryable<Delivery>, IQueryable<DeliveryPart>, Predicate<DeliveryPart>, List<string>)> GetFilters(AppDbContext ctx) {
|
||||
List<string> filterNames = [];
|
||||
IQueryable<Delivery> deliveryQuery = Context.Deliveries;
|
||||
IQueryable<Delivery> deliveryQuery = ctx.Deliveries;
|
||||
if (IsReceipt && App.BranchNum > 1) {
|
||||
deliveryQuery = deliveryQuery.Where(d => d.ZwstId == App.ZwstId);
|
||||
filterNames.Add($"Zweigstelle {App.BranchName}");
|
||||
@ -364,12 +383,12 @@ namespace Elwig.Windows {
|
||||
|
||||
var filter = TextFilter.ToList();
|
||||
if (filter.Count > 0) {
|
||||
var var = await Context.WineVarieties.ToDictionaryAsync(v => v.SortId, v => v);
|
||||
var qual = await Context.WineQualityLevels.Where(q => !q.IsPredicate).ToDictionaryAsync(q => q.QualId, q => q);
|
||||
var mgnr = await Context.Members.ToDictionaryAsync(m => m.MgNr.ToString(), m => m);
|
||||
var zwst = await Context.Branches.ToDictionaryAsync(b => b.Name.ToLower().Split(" ")[0], b => b);
|
||||
var attr = await Context.WineAttributes.ToDictionaryAsync(a => a.Name.ToLower().Split(' ')[0], a => a);
|
||||
var cult = await Context.WineCultivations.ToDictionaryAsync(c => c.Name.ToLower().Split(' ')[0], c => c);
|
||||
var var = await ctx.WineVarieties.ToDictionaryAsync(v => v.SortId, v => v);
|
||||
var qual = await ctx.WineQualityLevels.Where(q => !q.IsPredicate).ToDictionaryAsync(q => q.QualId, q => q);
|
||||
var mgnr = await ctx.Members.ToDictionaryAsync(m => m.MgNr.ToString(), m => m);
|
||||
var zwst = await ctx.Branches.ToDictionaryAsync(b => b.Name.ToLower().Split(" ")[0], b => b);
|
||||
var attr = await ctx.WineAttributes.ToDictionaryAsync(a => a.Name.ToLower().Split(' ')[0], a => a);
|
||||
var cult = await ctx.WineCultivations.ToDictionaryAsync(c => c.Name.ToLower().Split(' ')[0], c => c);
|
||||
|
||||
for (int i = 0; i < filter.Count; i++) {
|
||||
var e = filter[i];
|
||||
@ -629,8 +648,13 @@ namespace Elwig.Windows {
|
||||
}
|
||||
|
||||
private async Task RefreshDeliveryListQuery(bool updateSort = false) {
|
||||
var (_, deliveryQuery, deliveryPartsQuery, predicate, filter) = await GetFilters();
|
||||
var deliveries = await deliveryQuery.ToListAsync();
|
||||
using var ctx = new AppDbContext();
|
||||
var (_, deliveryQuery, deliveryPartsQuery, predicate, filter) = await GetFilters(ctx);
|
||||
var deliveries = await deliveryQuery
|
||||
.Include(d => d.Parts).ThenInclude(p => p.PartModifiers)
|
||||
.ThenInclude(m => m.Modifier)
|
||||
.AsSplitQuery()
|
||||
.ToListAsync();
|
||||
deliveries.Reverse();
|
||||
|
||||
if (filter.Count > 0 && deliveries.Count > 0) {
|
||||
@ -773,9 +797,10 @@ namespace Elwig.Windows {
|
||||
|
||||
protected override async Task OnRenewContext() {
|
||||
await base.OnRenewContext();
|
||||
using var ctx = new AppDbContext();
|
||||
|
||||
if (Member != null) {
|
||||
if (Context.Members.Find(Member.MgNr) is not Member m) {
|
||||
if (await GetMemberAsync(Member.MgNr) is not Member m) {
|
||||
Close();
|
||||
return;
|
||||
}
|
||||
@ -784,7 +809,7 @@ namespace Elwig.Windows {
|
||||
}
|
||||
|
||||
Menu_Export_Bki.Items.Clear();
|
||||
foreach (var s in await Context.Seasons.OrderByDescending(s => s.Year).ToListAsync()) {
|
||||
foreach (var s in await ctx.Seasons.OrderByDescending(s => s.Year).ToListAsync()) {
|
||||
var i = new MenuItem {
|
||||
Header = $"Saison {s.Year}",
|
||||
};
|
||||
@ -795,19 +820,31 @@ namespace Elwig.Windows {
|
||||
await RefreshDeliveryList();
|
||||
var d = DeliveryList.SelectedItem as Delivery;
|
||||
var y = d?.Year ?? Utils.CurrentLastSeason;
|
||||
ControlUtils.RenewItemsSource(MemberInput, await Context.Members.Where(m => m.IsActive || !IsCreating).OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToListAsync());
|
||||
ControlUtils.RenewItemsSource(BranchInput, await Context.Branches.OrderBy(b => b.Name).ToListAsync());
|
||||
ControlUtils.RenewItemsSource(WineVarietyInput, await Context.WineVarieties.OrderBy(v => v.Name).ToListAsync());
|
||||
var attrList = await Context.WineAttributes.Where(a => !IsCreating || a.IsActive).OrderBy(a => a.Name).Cast<object>().ToListAsync();
|
||||
ControlUtils.RenewItemsSource(MemberInput, await ctx.Members
|
||||
.Where(m => m.IsActive || !IsCreating)
|
||||
.Include(m => m.PostalDest.AtPlz!.Ort)
|
||||
.Include(m => m.DefaultWbKg!.AtKg)
|
||||
.OrderBy(m => m.FamilyName)
|
||||
.ThenBy(m => m.GivenName)
|
||||
.ToListAsync());
|
||||
ControlUtils.RenewItemsSource(BranchInput, await ctx.Branches.OrderBy(b => b.Name).ToListAsync());
|
||||
ControlUtils.RenewItemsSource(WineVarietyInput, await ctx.WineVarieties.OrderBy(v => v.Name).ToListAsync());
|
||||
var attrList = await ctx.WineAttributes.Where(a => !IsCreating || a.IsActive).OrderBy(a => a.Name).Cast<object>().ToListAsync();
|
||||
attrList.Insert(0, new NullItem(""));
|
||||
ControlUtils.RenewItemsSource(AttributeInput, attrList, null, ControlUtils.RenewSourceDefault.First);
|
||||
var cultList = await Context.WineCultivations.OrderBy(a => a.Name).Cast<object>().ToListAsync();
|
||||
var cultList = await ctx.WineCultivations.OrderBy(a => a.Name).Cast<object>().ToListAsync();
|
||||
cultList.Insert(0, new NullItem(""));
|
||||
ControlUtils.RenewItemsSource(CultivationInput, cultList, null, ControlUtils.RenewSourceDefault.First);
|
||||
ControlUtils.RenewItemsSource(WineQualityLevelInput, await Context.WineQualityLevels.ToListAsync());
|
||||
ControlUtils.RenewItemsSource(ModifiersInput, await Context.Modifiers.Where(m => m.Year == y).OrderBy(m => m.Ordering).ToListAsync());
|
||||
ControlUtils.RenewItemsSource(WineOriginInput, (await Context.WineOrigins.ToListAsync()).OrderByDescending(o => o.SortKey).ThenBy(o => o.HkId));
|
||||
var kgList = await Context.WbKgs.Select(k => k.AtKg).OrderBy(k => k.Name).Cast<object>().ToListAsync();
|
||||
ControlUtils.RenewItemsSource(WineQualityLevelInput, await ctx.WineQualityLevels.ToListAsync());
|
||||
ControlUtils.RenewItemsSource(ModifiersInput, await ctx.Modifiers.Where(m => m.Year == y).OrderBy(m => m.Ordering).ToListAsync());
|
||||
ControlUtils.RenewItemsSource(WineOriginInput, (await ctx.WineOrigins.ToListAsync()).OrderByDescending(o => o.SortKey).ThenBy(o => o.HkId));
|
||||
var kgList = (await ctx.Katastralgemeinden
|
||||
.Where(k => k.WbKg != null)
|
||||
.Include(k => k.WbKg)
|
||||
.Include(k => k.Gem.WbGem)
|
||||
.OrderBy(k => k.Name)
|
||||
.AsSplitQuery()
|
||||
.ToListAsync()).Cast<object>().ToList();
|
||||
kgList.Insert(0, new NullItem());
|
||||
ControlUtils.RenewItemsSource(WineKgInput, kgList);
|
||||
UpdateRdInput();
|
||||
@ -825,11 +862,12 @@ namespace Elwig.Windows {
|
||||
}
|
||||
|
||||
private async Task RefreshDeliveryParts() {
|
||||
using var ctx = new AppDbContext();
|
||||
if (DeliveryList.SelectedItem is Delivery d) {
|
||||
ControlUtils.RenewItemsSource(ModifiersInput, await Context.Modifiers.Where(m => m.Year == d.Year).OrderBy(m => m.Ordering).ToListAsync());
|
||||
ControlUtils.RenewItemsSource(ModifiersInput, await ctx.Modifiers.Where(m => m.Year == d.Year).OrderBy(m => m.Ordering).ToListAsync());
|
||||
ControlUtils.RenewItemsSource(DeliveryPartList, d.FilteredParts.OrderBy(p => p.DPNr).ToList(), DeliveryPartList_SelectionChanged, ControlUtils.RenewSourceDefault.First);
|
||||
} else {
|
||||
ControlUtils.RenewItemsSource(ModifiersInput, await Context.Modifiers.Where(m => m.Year == Utils.CurrentLastSeason).OrderBy(m => m.Ordering).ToListAsync());
|
||||
ControlUtils.RenewItemsSource(ModifiersInput, await ctx.Modifiers.Where(m => m.Year == Utils.CurrentLastSeason).OrderBy(m => m.Ordering).ToListAsync());
|
||||
DeliveryPartList.ItemsSource = null;
|
||||
}
|
||||
}
|
||||
@ -902,100 +940,95 @@ namespace Elwig.Windows {
|
||||
FinishInputFilling();
|
||||
}
|
||||
|
||||
private async Task<DeliveryPart> UpdateDeliveryPart(Delivery? d, DeliveryPart? p) {
|
||||
int year, did, dpnr;
|
||||
bool deliveryNew = (d == null), partNew = (p == null);
|
||||
var originalMgNr = d?.MgNr;
|
||||
var originalMemberKgNr = d?.Member?.DefaultKgNr;
|
||||
if (d == null) {
|
||||
d = Context.CreateProxy<Delivery>();
|
||||
year = Utils.CurrentYear;
|
||||
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;
|
||||
private async Task<DeliveryPart> UpdateDeliveryPart(int? oldYear, int? oldDid, int? oldDpnr) {
|
||||
using var ctx = new AppDbContext();
|
||||
|
||||
d.DateString = string.Join("-", DateInput.Text.Split(".").Reverse());
|
||||
if (deliveryNew || InputHasChanged(DateInput)) {
|
||||
d.LNr = await Context.NextLNr(d.Date);
|
||||
}
|
||||
int year = oldYear ?? Utils.CurrentYear;
|
||||
int did = oldDid ?? await ctx.NextDId(year);
|
||||
int dpnr = oldDpnr ?? await ctx.NextDPNr(year, did);
|
||||
|
||||
var oldDelivery = await ctx.Deliveries.FindAsync(year, did);
|
||||
bool deliveryNew = (oldDid == null);
|
||||
bool partNew = (oldDpnr == null);
|
||||
var originalMgNr = oldDelivery?.MgNr;
|
||||
var originalMemberKgNr = oldDelivery?.Member.DefaultKgNr;
|
||||
|
||||
var date = DateOnly.ParseExact(DateInput.Text, "dd.MM.yyyy");
|
||||
int? newLnr = (deliveryNew || InputHasChanged(DateInput)) ? await ctx.NextLNr(date) : null;
|
||||
|
||||
string? newTimeString = null;
|
||||
if (IsCreating && !InputIsNotDefault(TimeInput)) {
|
||||
d.TimeString = DateTime.Now.ToString("HH:mm:ss");
|
||||
newTimeString = DateTime.Now.ToString("HH:mm:ss");
|
||||
} else if (IsCreating || InputHasChanged(TimeInput)) {
|
||||
d.TimeString = (TimeInput.Text != "") ? TimeInput.Text + ":00" : null;
|
||||
newTimeString = (TimeInput.Text != "") ? TimeInput.Text + ":00" : null;
|
||||
}
|
||||
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.AttrId = (AttributeInput.SelectedItem as WineAttr)?.AttrId;
|
||||
p.CultId = (CultivationInput.SelectedItem as WineCult)?.CultId;
|
||||
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;
|
||||
var d = new Delivery {
|
||||
Year = year,
|
||||
DId = did,
|
||||
DateString = $"{date:yyyy-MM-dd}",
|
||||
TimeString = newTimeString ?? oldDelivery?.TimeString,
|
||||
LNr = newLnr ?? oldDelivery!.LNr,
|
||||
ZwstId = (BranchInput.SelectedItem as Branch)!.ZwstId,
|
||||
LsNr = LsNrInput.Text,
|
||||
MgNr = int.Parse(MgNrInput.Text),
|
||||
Comment = (CommentInput.Text == "") ? null : CommentInput.Text,
|
||||
};
|
||||
|
||||
p.IsNetWeight = GerebeltGewogenInput.IsChecked ?? false;
|
||||
p.IsHandPicked = HandPickedInput.IsChecked;
|
||||
p.IsLesewagen = LesewagenInput.IsChecked;
|
||||
p.IsGebunden = GebundenInput.IsChecked;
|
||||
p.Temperature = (TemperatureInput.Text == "") ? null : double.Parse(TemperatureInput.Text);
|
||||
p.Acid = (AcidInput.Text == "") ? null : double.Parse(AcidInput.Text);
|
||||
p.Comment = (PartCommentInput.Text == "") ? null : PartCommentInput.Text;
|
||||
var p = new DeliveryPart {
|
||||
Year = year,
|
||||
DId = did,
|
||||
DPNr = dpnr,
|
||||
|
||||
p.Weight = int.Parse(WeightInput.Text.Replace(Utils.GroupSeparator, ""));
|
||||
p.IsManualWeighing = ManualWeighingInput.IsChecked ?? false;
|
||||
p.ScaleId = ScaleId;
|
||||
p.WeighingId = WeighingId;
|
||||
p.WeighingReason = ManualWeighingReason;
|
||||
SortId = (WineVarietyInput.SelectedItem as WineVar)!.SortId,
|
||||
AttrId = (AttributeInput.SelectedItem as WineAttr)?.AttrId,
|
||||
CultId = (CultivationInput.SelectedItem as WineCult)?.CultId,
|
||||
Kmw = double.Parse(GradationKmwInput.Text),
|
||||
QualId = (WineQualityLevelInput.SelectedItem as WineQualLevel)!.QualId,
|
||||
HkId = (WineOriginInput.SelectedItem as WineOrigin)!.HkId,
|
||||
KgNr = (WineKgInput.SelectedItem as AT_Kg)?.KgNr,
|
||||
RdNr = (WineRdInput.SelectedItem as WbRd)?.RdNr,
|
||||
|
||||
IsNetWeight = GerebeltGewogenInput.IsChecked ?? false,
|
||||
IsHandPicked = HandPickedInput.IsChecked,
|
||||
IsLesewagen = LesewagenInput.IsChecked,
|
||||
IsGebunden = GebundenInput.IsChecked,
|
||||
Temperature = (TemperatureInput.Text == "") ? null : double.Parse(TemperatureInput.Text),
|
||||
Acid = (AcidInput.Text == "") ? null : double.Parse(AcidInput.Text),
|
||||
Comment = (PartCommentInput.Text == "") ? null : PartCommentInput.Text,
|
||||
|
||||
Weight = int.Parse(WeightInput.Text.Replace(Utils.GroupSeparator, "")),
|
||||
IsManualWeighing = ManualWeighingInput.IsChecked ?? false,
|
||||
ScaleId = ScaleId,
|
||||
WeighingId = WeighingId,
|
||||
WeighingReason = ManualWeighingReason,
|
||||
};
|
||||
|
||||
EntityEntry<Delivery>? dEntry = null;
|
||||
EntityEntry<DeliveryPart>? pEntry = null;
|
||||
try {
|
||||
if (IsEditing) {
|
||||
dEntry = Context.Update(d);
|
||||
pEntry = Context.Update(p);
|
||||
} else if (IsCreating) {
|
||||
dEntry = deliveryNew ? await Context.AddAsync(d) : Context.Update(d);
|
||||
pEntry = partNew ? await Context.AddAsync(p) : Context.Update(p);
|
||||
if (IsEditing || !deliveryNew) {
|
||||
ctx.Update(d);
|
||||
} else {
|
||||
ctx.Add(d);
|
||||
}
|
||||
if (IsEditing || !partNew) {
|
||||
ctx.Update(p);
|
||||
} else {
|
||||
ctx.Add(p);
|
||||
}
|
||||
|
||||
Context.UpdateDeliveryPartModifiers(p, ModifiersInput.SelectedItems.Cast<Modifier>());
|
||||
ctx.UpdateDeliveryPartModifiers(p, ModifiersInput.SelectedItems.Cast<Modifier>());
|
||||
|
||||
if (originalMgNr != null && originalMgNr.Value != d.MgNr) {
|
||||
// update origin (KgNr), if default is selected
|
||||
var newKgNr = (await Context.Members.FindAsync(d.MgNr))?.DefaultKgNr;
|
||||
var newKgNr = (await ctx.Members.FindAsync(d.MgNr))?.DefaultKgNr;
|
||||
foreach (var part in d.Parts.Where(part => part.DPNr != dpnr && part.KgNr == originalMemberKgNr)) {
|
||||
part.KgNr = newKgNr;
|
||||
Context.Update(part);
|
||||
ctx.Update(part);
|
||||
}
|
||||
}
|
||||
|
||||
await Context.SaveChangesAsync();
|
||||
await ctx.SaveChangesAsync();
|
||||
} catch (Exception exc) {
|
||||
if (dEntry != null) {
|
||||
dEntry.State = EntityState.Detached;
|
||||
await dEntry.ReloadAsync();
|
||||
}
|
||||
if (pEntry != null) {
|
||||
pEntry.State = EntityState.Detached;
|
||||
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);
|
||||
@ -1150,7 +1183,11 @@ namespace Elwig.Windows {
|
||||
NewDeliveryPartButton.IsEnabled = false;
|
||||
NewDeliveryPartButton.Cursor = Cursors.Wait;
|
||||
DeliveryPartList.IsEnabled = false;
|
||||
var p = await UpdateDeliveryPart(DeliveryList.SelectedItem as Delivery, DeliveryPartList.SelectedItem as DeliveryPart);
|
||||
var p = await UpdateDeliveryPart(
|
||||
(DeliveryList.SelectedItem as Delivery)?.Year,
|
||||
(DeliveryList.SelectedItem as Delivery)?.DId,
|
||||
(DeliveryPartList.SelectedItem as DeliveryPart)?.DPNr
|
||||
);
|
||||
EmptyScale();
|
||||
await RefreshDeliveryList();
|
||||
await RefreshDeliveryParts();
|
||||
@ -1166,14 +1203,19 @@ namespace Elwig.Windows {
|
||||
NewDeliveryPartButton.IsEnabled = false;
|
||||
FinishButton.Cursor = Cursors.Wait;
|
||||
DeliveryPartList.IsEnabled = false;
|
||||
var p = await UpdateDeliveryPart(DeliveryList.SelectedItem as Delivery, DeliveryPartList.SelectedItem as DeliveryPart);
|
||||
var p = await UpdateDeliveryPart(
|
||||
(DeliveryList.SelectedItem as Delivery)?.Year,
|
||||
(DeliveryList.SelectedItem as Delivery)?.DId,
|
||||
(DeliveryPartList.SelectedItem as DeliveryPart)?.DPNr
|
||||
);
|
||||
EmptyScale();
|
||||
await RefreshDeliveryList();
|
||||
await RefreshDeliveryParts();
|
||||
if (p?.Delivery != null) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
try {
|
||||
using var doc = new DeliveryNote(p.Delivery, Context);
|
||||
using var ctx = new AppDbContext();
|
||||
using var doc = new DeliveryNote((await ctx.Deliveries.FindAsync(p.Year, p.DId))!, ctx);
|
||||
await doc.Generate();
|
||||
if (App.Config.Debug) {
|
||||
doc.Show();
|
||||
@ -1199,10 +1241,17 @@ namespace Elwig.Windows {
|
||||
if (r != MessageBoxResult.Yes) return;
|
||||
}
|
||||
|
||||
var attrList = await Context.WineAttributes.OrderBy(a => a.Name).Cast<object>().ToListAsync();
|
||||
using var ctx = new AppDbContext();
|
||||
var attrList = await ctx.WineAttributes.OrderBy(a => a.Name).Cast<object>().ToListAsync();
|
||||
attrList.Insert(0, new NullItem(""));
|
||||
ControlUtils.RenewItemsSource(AttributeInput, attrList, null, ControlUtils.RenewSourceDefault.First);
|
||||
ControlUtils.RenewItemsSource(MemberInput, await Context.Members.Where(m => m.IsActive || !IsReceipt).OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToListAsync());
|
||||
ControlUtils.RenewItemsSource(MemberInput, await ctx.Members
|
||||
.Where(m => m.IsActive || !IsReceipt)
|
||||
.Include(m => m.PostalDest.AtPlz!.Ort)
|
||||
.Include(m => m.DefaultWbKg!.AtKg)
|
||||
.OrderBy(m => m.FamilyName)
|
||||
.ThenBy(m => m.GivenName)
|
||||
.ToListAsync());
|
||||
if (DeliveryList.SelectedItem is not Delivery d) {
|
||||
// switch away from creating mode
|
||||
IsCreating = false;
|
||||
@ -1227,10 +1276,17 @@ namespace Elwig.Windows {
|
||||
private async void NewDeliveryButton_Click(object? sender, RoutedEventArgs? evt) {
|
||||
TodayOnlyInput.IsChecked = true;
|
||||
SearchInput.Text = "";
|
||||
var attrList = await Context.WineAttributes.Where(a => a.IsActive).OrderBy(a => a.Name).Cast<object>().ToListAsync();
|
||||
using var ctx = new AppDbContext();
|
||||
var attrList = await ctx.WineAttributes.Where(a => a.IsActive).OrderBy(a => a.Name).Cast<object>().ToListAsync();
|
||||
attrList.Insert(0, new NullItem(""));
|
||||
ControlUtils.RenewItemsSource(AttributeInput, attrList, null, ControlUtils.RenewSourceDefault.First);
|
||||
ControlUtils.RenewItemsSource(MemberInput, await Context.Members.Where(m => m.IsActive || !IsReceipt).OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToListAsync());
|
||||
ControlUtils.RenewItemsSource(MemberInput, await ctx.Members
|
||||
.Where(m => m.IsActive || !IsReceipt)
|
||||
.Include(m => m.PostalDest.AtPlz!.Ort)
|
||||
.Include(m => m.DefaultWbKg!.AtKg)
|
||||
.OrderBy(m => m.FamilyName)
|
||||
.ThenBy(m => m.GivenName)
|
||||
.ToListAsync());
|
||||
IsCreating = true;
|
||||
DeliveryList.IsEnabled = false;
|
||||
DeliveryPartList.IsEnabled = false;
|
||||
@ -1246,53 +1302,46 @@ namespace Elwig.Windows {
|
||||
private async void AbwertenButton_Click(object sender, RoutedEventArgs evt) {
|
||||
if (DeliveryPartList.SelectedItem is not DeliveryPart p) return;
|
||||
var res = Utils.ShowAbwertenDialog($"{p.Delivery.LsNr}/{p.DPNr}", p.Delivery.Member.AdministrativeName, p.Weight);
|
||||
EntityEntry<DeliveryPart>? entry1 = null, entry2 = null;
|
||||
try {
|
||||
if (res == null || res <= 0)
|
||||
return;
|
||||
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
try {
|
||||
using var ctx = new AppDbContext();
|
||||
ClearOriginalValues();
|
||||
if (res >= p.Weight) {
|
||||
ControlUtils.SelectItemWithPk(WineQualityLevelInput, "WEI");
|
||||
ControlUtils.SelectItemWithPk(WineOriginInput, "OEST");
|
||||
p.QualId = "WEI";
|
||||
p.HkId = "OEST";
|
||||
entry1 = Context.Update(p);
|
||||
ctx.Update(p);
|
||||
} else {
|
||||
var w = p.Weight - res.Value;
|
||||
WeightInput.Text = $"{w:N0}";
|
||||
p.Weight = w;
|
||||
entry1 = Context.Update(p);
|
||||
ctx.Update(p);
|
||||
|
||||
var d = p.Delivery;
|
||||
var p2 = Context.CreateProxy<DeliveryPart>();
|
||||
var values = Context.Entry(p).CurrentValues;
|
||||
Context.Entry(p2).CurrentValues.SetValues(values);
|
||||
p2.DPNr = await Context.NextDPNr(d.Year, d.DId);
|
||||
var p2 = ctx.CreateProxy<DeliveryPart>();
|
||||
var values = ctx.Entry(p).CurrentValues;
|
||||
ctx.Entry(p2).CurrentValues.SetValues(values);
|
||||
p2.DPNr = await ctx.NextDPNr(d.Year, d.DId);
|
||||
p2.Weight = res.Value;
|
||||
p2.QualId = "WEI";
|
||||
p2.HkId = "OEST";
|
||||
entry2 = await Context.AddAsync(p2);
|
||||
ctx.Add(p2);
|
||||
|
||||
Context.UpdateDeliveryPartModifiers(p2, p.Modifiers);
|
||||
ctx.UpdateDeliveryPartModifiers(p2, p.Modifiers);
|
||||
}
|
||||
await Context.SaveChangesAsync();
|
||||
await ctx.SaveChangesAsync();
|
||||
await RefreshDeliveryParts();
|
||||
Mouse.OverrideCursor = null;
|
||||
FinishInputFilling();
|
||||
} catch (Exception exc) {
|
||||
if (entry1 != null) {
|
||||
entry1.State = EntityState.Detached;
|
||||
await entry1.ReloadAsync();
|
||||
}
|
||||
if (entry2 != null) {
|
||||
entry2.State = EntityState.Detached;
|
||||
await entry2.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);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
|
||||
private void WeighingManualButton_Click(object sender, RoutedEventArgs evt) {
|
||||
@ -1332,8 +1381,10 @@ namespace Elwig.Windows {
|
||||
"Lieferung löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No);
|
||||
if (r == MessageBoxResult.Yes) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Context.Remove(d);
|
||||
await Context.SaveChangesAsync();
|
||||
using (var ctx = new AppDbContext()) {
|
||||
ctx.Remove(d);
|
||||
await ctx.SaveChangesAsync();
|
||||
}
|
||||
await RefreshDeliveryList();
|
||||
await RefreshDeliveryParts();
|
||||
Mouse.OverrideCursor = null;
|
||||
@ -1349,7 +1400,11 @@ namespace Elwig.Windows {
|
||||
DeliveryList.IsEnabled = true;
|
||||
DeliveryPartList.IsEnabled = true;
|
||||
|
||||
DeliveryPart p = await UpdateDeliveryPart(DeliveryList.SelectedItem as Delivery, DeliveryPartList.SelectedItem as DeliveryPart);
|
||||
var p = await UpdateDeliveryPart(
|
||||
(DeliveryList.SelectedItem as Delivery)?.Year,
|
||||
(DeliveryList.SelectedItem as Delivery)?.DId,
|
||||
(DeliveryPartList.SelectedItem as DeliveryPart)?.DPNr
|
||||
);
|
||||
|
||||
SaveButton.Cursor = null;
|
||||
|
||||
@ -1404,7 +1459,10 @@ namespace Elwig.Windows {
|
||||
|
||||
if (delivery.Time <= new TimeOnly(3, 0))
|
||||
day = day.AddDays(-1);
|
||||
var lsnrs = await Context.Deliveries
|
||||
|
||||
string? res;
|
||||
using (var ctx = new AppDbContext()) {
|
||||
var lsnrs = await ctx.Deliveries
|
||||
.Where(d => d.ZwstId == delivery.ZwstId)
|
||||
.Where(d => (d.DateString == day.ToString("yyyy-MM-dd") && (d.TimeString == null || d.TimeString.CompareTo("03:00:00") > 0)) ||
|
||||
(d.DateString == day.AddDays(1).ToString("yyyy-MM-dd") && (d.TimeString == null || d.TimeString.CompareTo("03:00:00") <= 0)))
|
||||
@ -1413,52 +1471,46 @@ namespace Elwig.Windows {
|
||||
.Select(d => d.LsNr)
|
||||
.ToListAsync();
|
||||
|
||||
var res = Utils.ShowDeliveryExtractionDialog($"{delivery.LsNr}/{p.DPNr}", delivery.Member.AdministrativeName, count == 1, lsnrs);
|
||||
if (res == null) return;
|
||||
EntityEntry<Delivery>? entry = null;
|
||||
try {
|
||||
Delivery? d = null;
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
if (res == "new") {
|
||||
d = Context.CreateProxy<Delivery>();
|
||||
d.Date = delivery.Date;
|
||||
d.Time = delivery.Time;
|
||||
d.Year = p.Year;
|
||||
d.DId = await Context.NextDId(d.Year);
|
||||
d.LNr = await Context.NextLNr(d.Date);
|
||||
d.ZwstId = delivery.ZwstId;
|
||||
d.MgNr = delivery.MgNr;
|
||||
d.Comment = delivery.Comment;
|
||||
d.LsNr = Utils.GenerateLsNr(d);
|
||||
entry = await Context.AddAsync(d);
|
||||
await Context.SaveChangesAsync();
|
||||
} else {
|
||||
d = await Context.Deliveries.Where(d => d.LsNr == res).FirstOrDefaultAsync();
|
||||
res = Utils.ShowDeliveryExtractionDialog($"{delivery.LsNr}/{p.DPNr}", delivery.Member.AdministrativeName, count == 1, lsnrs);
|
||||
if (res == null)
|
||||
return;
|
||||
}
|
||||
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
try {
|
||||
using var ctx = new AppDbContext();
|
||||
if (res == "new") {
|
||||
var lnr = await ctx.NextLNr(delivery.Date);
|
||||
ctx.Add(new Delivery {
|
||||
Year = p.Year,
|
||||
DId = await ctx.NextDId(p.Year),
|
||||
LNr = lnr,
|
||||
DateString = $"{delivery.Date:yyyy-MM-dd}",
|
||||
TimeString = $"{delivery.Time:HH:mm:SS}",
|
||||
ZwstId = delivery.ZwstId,
|
||||
MgNr = delivery.MgNr,
|
||||
Comment = delivery.Comment,
|
||||
LsNr = Utils.GenerateLsNr(delivery.Date, delivery.ZwstId, lnr),
|
||||
});
|
||||
await ctx.SaveChangesAsync();
|
||||
}
|
||||
Delivery? d = await ctx.Deliveries.Where(d => d.LsNr == res).FirstOrDefaultAsync();
|
||||
if (d == null) return;
|
||||
|
||||
await Context.Database.ExecuteSqlAsync($"UPDATE delivery_part SET year = {d.Year}, did = {d.DId}, dpnr = {await Context.NextDPNr(d.Year, d.DId)} WHERE (year, did, dpnr) = ({p.Year}, {p.DId}, {p.DPNr})");
|
||||
Context.Entry(p).State = EntityState.Detached;
|
||||
await ctx.Database.ExecuteSqlAsync($"UPDATE delivery_part SET year = {d.Year}, did = {d.DId}, dpnr = {await ctx.NextDPNr(d.Year, d.DId)} WHERE (year, did, dpnr) = ({p.Year}, {p.DId}, {p.DPNr})");
|
||||
if (count == 1) {
|
||||
await Context.Database.ExecuteSqlAsync($"DELETE FROM delivery WHERE (year, did) = ({delivery.Year}, {delivery.DId})");
|
||||
Context.Entry(delivery).State = EntityState.Detached;
|
||||
await ctx.Database.ExecuteSqlAsync($"DELETE FROM delivery WHERE (year, did) = ({delivery.Year}, {delivery.DId})");
|
||||
}
|
||||
await Context.SaveChangesAsync();
|
||||
await Context.Entry(p).ReloadAsync();
|
||||
await Context.Entry(delivery).ReloadAsync();
|
||||
await ctx.SaveChangesAsync();
|
||||
|
||||
Mouse.OverrideCursor = null;
|
||||
await RefreshDeliveryList();
|
||||
ControlUtils.SelectItem(DeliveryList, d);
|
||||
} catch (Exception exc) {
|
||||
if (entry != null) {
|
||||
entry.State = EntityState.Detached;
|
||||
await entry.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);
|
||||
}
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
|
||||
private async void DeleteDeliveryPartButton_Click(object sender, RoutedEventArgs evt) {
|
||||
@ -1470,8 +1522,10 @@ namespace Elwig.Windows {
|
||||
"Lieferung löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No);
|
||||
if (r == MessageBoxResult.Yes) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Context.Remove(p);
|
||||
await Context.SaveChangesAsync();
|
||||
using (var ctx = new AppDbContext()) {
|
||||
ctx.Remove(p);
|
||||
await ctx.SaveChangesAsync();
|
||||
}
|
||||
await RefreshDeliveryParts();
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
@ -1588,7 +1642,8 @@ namespace Elwig.Windows {
|
||||
try {
|
||||
var branch = (Branch)BranchInput.SelectedItem;
|
||||
var date = DateOnly.ParseExact(DateInput.Text, "dd.MM.yyyy");
|
||||
var lnr = await Context.NextLNr(date);
|
||||
using var ctx = new AppDbContext();
|
||||
var lnr = await ctx.NextLNr(date);
|
||||
LsNrInput.Text = Utils.GenerateLsNr(date, branch.ZwstId, lnr);
|
||||
} catch {
|
||||
LsNrInput.Text = "";
|
||||
@ -1639,14 +1694,15 @@ namespace Elwig.Windows {
|
||||
}
|
||||
|
||||
private void UpdateWineQualityLevels() {
|
||||
using var ctx = new AppDbContext();
|
||||
if (!GetInputValid(GradationKmwInput)) {
|
||||
UnsetDefaultValue(WineQualityLevelInput);
|
||||
WineQualityLevelInput.ItemsSource = Context.WineQualityLevels.Where(q => q.QualId == "WEI").ToList();
|
||||
WineQualityLevelInput.ItemsSource = ctx.WineQualityLevels.Where(q => q.QualId == "WEI").ToList();
|
||||
return;
|
||||
}
|
||||
var kmw = double.Parse(GradationKmwInput.Text);
|
||||
WineQualityLevelInput.ItemsSource = Context.WineQualityLevels.Where(q => q.MinKmw == null || q.MinKmw <= kmw).ToList();
|
||||
var qual = Context.GetWineQualityLevel(kmw).GetAwaiter().GetResult();
|
||||
WineQualityLevelInput.ItemsSource = ctx.WineQualityLevels.Where(q => q.MinKmw == null || q.MinKmw <= kmw).ToList();
|
||||
var qual = ctx.GetWineQualityLevel(kmw).GetAwaiter().GetResult();
|
||||
SetDefaultValue(WineQualityLevelInput, qual);
|
||||
if (WineQualityLevelInput.SelectedItem == null || (WineQualityLevelInput.SelectedItem is WineQualLevel selected && !selected.IsPredicate)) {
|
||||
ControlUtils.SelectItem(WineQualityLevelInput, qual);
|
||||
@ -1754,7 +1810,8 @@ namespace Elwig.Windows {
|
||||
|
||||
private void UpdateRdInput() {
|
||||
if (WineKgInput.SelectedItem is AT_Kg kg) {
|
||||
var list = Context.WbRde.Where(r => r.KgNr == kg.KgNr).OrderBy(r => r.Name).Cast<object>().ToList();
|
||||
using var ctx = new AppDbContext();
|
||||
var list = ctx.WbRde.Where(r => r.KgNr == kg.KgNr).OrderBy(r => r.Name).Cast<object>().ToList();
|
||||
list.Insert(0, new NullItem());
|
||||
ControlUtils.RenewItemsSource(WineRdInput, list);
|
||||
if (WineRdInput.SelectedItem == null) WineRdInput.SelectedIndex = 0;
|
||||
@ -1778,7 +1835,8 @@ namespace Elwig.Windows {
|
||||
AbgewertetInput.IsChecked = false;
|
||||
return;
|
||||
}
|
||||
var defQual = Context.GetWineQualityLevel(double.Parse(GradationKmwInput.Text)).GetAwaiter().GetResult();
|
||||
using var ctx = new AppDbContext();
|
||||
var defQual = ctx.GetWineQualityLevel(double.Parse(GradationKmwInput.Text)).GetAwaiter().GetResult();
|
||||
AbgewertetInput.IsChecked = !qual.IsPredicate && defQual != qual;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user