From f96ebdcf60baa2ebdf898ee7a6088fc6c9442886 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Thu, 2 Apr 2026 20:56:08 +0200 Subject: [PATCH] DeliveryAdminWindow: Fix creation of new deliveries --- Elwig/App.xaml.cs | 3 +- Elwig/Windows/ContextWindow.cs | 14 ++++++-- Elwig/Windows/DeliveryAdminWindow.xaml.cs | 40 ++++++++++----------- Elwig/Windows/OriginHierarchyWindow.xaml.cs | 2 +- Elwig/Windows/PaymentVariantsWindow.xaml.cs | 4 +-- 5 files changed, 34 insertions(+), 29 deletions(-) diff --git a/Elwig/App.xaml.cs b/Elwig/App.xaml.cs index a11be14..82d1fcb 100644 --- a/Elwig/App.xaml.cs +++ b/Elwig/App.xaml.cs @@ -218,7 +218,8 @@ namespace Elwig { MainDispatcher.Invoke(() => { foreach (Window w in CurrentApp.Windows) { if (w is not ContextWindow c) continue; - MainDispatcher.BeginInvoke(c.HintContextChange); + MainDispatcher.Invoke(c.HintContextChange); + MainDispatcher.BeginInvoke(c.TryContextReload); } }); } diff --git a/Elwig/Windows/ContextWindow.cs b/Elwig/Windows/ContextWindow.cs index 08e905d..ea58985 100644 --- a/Elwig/Windows/ContextWindow.cs +++ b/Elwig/Windows/ContextWindow.cs @@ -30,11 +30,19 @@ namespace Elwig.Windows { } public async void ForceContextReload(object sender, EventArgs evt) { - await HintContextChange(); + await ForceContextReload(); } - public async Task HintContextChange() { + public async Task ForceContextReload() { + HintContextChange(); + await TryContextReload(); + } + + public void HintContextChange() { _renewPending = true; + } + + public async Task TryContextReload() { if (LockContext) return; await EnsureContextRenewed(); } @@ -49,9 +57,9 @@ namespace Elwig.Windows { protected async Task EnsureContextRenewed() { if (!_renewPending) return; + _renewPending = false; using var ctx = new AppDbContext(); await OnRenewContext(ctx); - _renewPending = false; } virtual protected async Task OnInit(AppDbContext ctx) { } diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml.cs b/Elwig/Windows/DeliveryAdminWindow.xaml.cs index 7c3f481..f9fbd1e 100644 --- a/Elwig/Windows/DeliveryAdminWindow.xaml.cs +++ b/Elwig/Windows/DeliveryAdminWindow.xaml.cs @@ -424,7 +424,7 @@ namespace Elwig.Windows { var cursor = Mouse.OverrideCursor != null; if (!cursor) Mouse.OverrideCursor = Cursors.Wait; var query = (vm.SearchQuery, vm.FilterSeason, vm.FilterAllSeasons, vm.FilterTodayOnly); - var (filter, deliveries, deliveryPartsNum, varieties, stat) = await Task.Run(async () => { + var (filter, deliveries, deliveryPartsNum, varieties, members, stat) = await Task.Run(async () => { using var ctx = new AppDbContext(); var (_, deliveryQuery, deliveryPartsQuery, predicate, filter) = await vm.GetFilters(ctx); var deliveries = await deliveryQuery @@ -452,9 +452,10 @@ namespace Elwig.Windows { var deliveryPartsNum = await deliveryPartsQuery.CountAsync(); var varieties = await deliveryPartsQuery.Select(d => d.SortId).Distinct().ToListAsync(); + var members = await deliveryQuery.Select(d => d.Member).Distinct().ToListAsync(); var stat = await DeliveryService.GenerateToolTipData(deliveryPartsQuery); - return (filter, deliveries, deliveryPartsNum, varieties, stat); + return (filter, deliveries, deliveryPartsNum, varieties, members, stat); }); if (!cursor) Mouse.OverrideCursor = null; if (query != (ViewModel.SearchQuery, ViewModel.FilterSeason, ViewModel.FilterAllSeasons, ViewModel.FilterTodayOnly)) return; @@ -463,7 +464,6 @@ namespace Elwig.Windows { DeliveryList_SelectionChanged, ViewModel.TextFilter.Count > 0 ? ControlUtils.RenewSourceDefault.IfOnly : ControlUtils.RenewSourceDefault.None, !updateSort); await RefreshDeliveryParts(); - var members = deliveries.Select(d => d.Member).DistinctBy(m => m.MgNr).ToList(); ViewModel.StatusMembers = $"{members.Count:N0}" + (members.Count > 0 && members.Count <= 4 ? $" ({string.Join(", ", members.Select(m => m.AdministrativeName))})" : ""); ViewModel.StatusDeliveries = $"{deliveries.Count:N0}"; @@ -576,7 +576,6 @@ namespace Elwig.Windows { UpdateRdInput(); if (IsCreating) await UpdateLsNr(); - await RefreshDeliveryParts(); RefreshInputs(); } @@ -824,11 +823,12 @@ namespace Elwig.Windows { } EmptyScale(); + await EnsureContextRenewed(); Mouse.OverrideCursor = null; - ControlUtils.SelectItem(DeliveryList, p?.Delivery); + ControlUtils.SelectItemWithPk(DeliveryList, p?.Year, p?.DId); DeliveryPartList.SelectedItem = null; - DeliveryPartList.ScrollIntoView(DeliveryPartList.ItemsSource.Cast().Last()); + DeliveryPartList.ScrollIntoView(DeliveryPartList.ItemsSource.Cast().LastOrDefault()); InitialInputs(); } @@ -861,25 +861,21 @@ namespace Elwig.Windows { } EmptyScale(); - await EnsureContextRenewed(); - if (p?.Delivery != null) { - try { - 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(); - } else { - await doc.Print(2); - } - } catch (Exception exc) { - MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); - } - } + Utils.RunBackground("Lieferschein drucken", async () => { + 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(); + } else { + await doc.Print(2); + } + }); + + await EnsureContextRenewed(); Mouse.OverrideCursor = null; DeliveryList.SelectedItem = null; - await EnsureContextRenewed(); InitInputs(); } diff --git a/Elwig/Windows/OriginHierarchyWindow.xaml.cs b/Elwig/Windows/OriginHierarchyWindow.xaml.cs index baa1707..963af83 100644 --- a/Elwig/Windows/OriginHierarchyWindow.xaml.cs +++ b/Elwig/Windows/OriginHierarchyWindow.xaml.cs @@ -214,7 +214,7 @@ namespace Elwig.Windows { App.HintContextChange(); ControlUtils.SelectItemWithPk(WbKgs, k.KgNr); } catch (Exception exc) { - await HintContextChange(); + await ForceContextReload(); var str = "Der Eintrag konnte nicht aus der Datenbank gelöscht werden!\n\n" + exc.Message; if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message; MessageBox.Show(str, "Katastralgemeinde deaktivieren", MessageBoxButton.OK, MessageBoxImage.Error); diff --git a/Elwig/Windows/PaymentVariantsWindow.xaml.cs b/Elwig/Windows/PaymentVariantsWindow.xaml.cs index 960faa1..bcd0411 100644 --- a/Elwig/Windows/PaymentVariantsWindow.xaml.cs +++ b/Elwig/Windows/PaymentVariantsWindow.xaml.cs @@ -256,13 +256,13 @@ namespace Elwig.Windows { await ViewModel.UpdatePaymentVariant(v.Year, v.AvNr); App.HintContextChange(); } catch (Exception exc) { - await HintContextChange(); + await ForceContextReload(); 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, "Auszahlungsvariante aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); } Mouse.OverrideCursor = null; - await HintContextChange(); + await EnsureContextRenewed(); CommentInput_TextChanged(null, null); DateInput_TextChanged(null, null); TransferDateInput_TextChanged(null, null);