From f4ec95cdca98ecc495c258803a7248dea213ea74 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Thu, 16 Nov 2023 17:42:01 +0100 Subject: [PATCH] AreaComAdminWindow: Allow users to create new reeds inline --- Elwig/App.xaml.cs | 50 +++++++++++++++++++++++ Elwig/Helpers/AppDbContext.cs | 7 ++++ Elwig/Windows/AdministrationWindow.cs | 8 ++++ Elwig/Windows/AreaComAdminWindow.xaml | 19 ++++++--- Elwig/Windows/AreaComAdminWindow.xaml.cs | 29 ++++++++++++- Elwig/Windows/BaseDataWindow.xaml | 2 +- Elwig/Windows/DeliveryAdminWindow.xaml.cs | 4 +- Elwig/Windows/MainWindow.xaml | 2 +- Elwig/Windows/MainWindow.xaml.cs | 15 ++++--- Elwig/Windows/MemberAdminWindow.xaml | 5 ++- Elwig/Windows/MemberAdminWindow.xaml.cs | 6 +-- Elwig/Windows/SeasonFinishWindow.xaml.cs | 3 +- 12 files changed, 128 insertions(+), 22 deletions(-) diff --git a/Elwig/App.xaml.cs b/Elwig/App.xaml.cs index 6cea706..23d2767 100644 --- a/Elwig/App.xaml.cs +++ b/Elwig/App.xaml.cs @@ -13,10 +13,15 @@ using System.Threading; using System.Windows.Markup; using System.Reflection; using Elwig.Helpers.Printing; +using Elwig.Windows; +using Elwig.Dialogs; namespace Elwig { public partial class App : Application { + protected static App CurrentApp; + public static int NumWindows => CurrentApp.Windows.Count; + public static readonly string DataPath = @"C:\ProgramData\Elwig\"; public static readonly string ExePath = @"C:\Program Files\Elwig\"; public static readonly string TempPath = Path.Combine(Path.GetTempPath(), "Elwig"); @@ -56,6 +61,7 @@ namespace Elwig { Directory.CreateDirectory(DataPath); MainDispatcher = Dispatcher; Scales = Array.Empty(); + CurrentApp = this; } protected override void OnStartup(StartupEventArgs evt) { @@ -168,5 +174,49 @@ namespace Elwig { } } } + + private static T FocusWindow(Func constructor, Predicate? selector = null) where T : Window { + foreach (Window w in CurrentApp.Windows) { + if (w is T t && (selector == null || selector(t))) { + if (t.WindowState == WindowState.Minimized) + t.WindowState = WindowState.Normal; + t.Activate(); + return t; + } + } + var n = constructor(); + n.Show(); + return n; + } + + public static DeliveryAdminWindow FocusReceipt() { + return FocusWindow(() => new(true), w => w.IsReceipt); + } + + public static DeliveryAdminWindow FocusMemberDeliveries(int mgnr) { + return FocusWindow(() => new(mgnr), w => w.MgNr == mgnr); + } + + public static AreaComAdminWindow FocusMemberAreaComs(int mgnr) { + return FocusWindow(() => new(mgnr), w => w.MgNr == mgnr); + } + + public static BaseDataWindow FocusBaseData() { + return FocusWindow(() => new()); + } + + public static BaseDataWindow FocusBaseDataAreaComType() { + var w = FocusBaseData(); + w.AreaCommitmentTypes.Focus(); + return w; + } + + public static SeasonFinishWindow FocusSeasonFinish() { + return FocusWindow(() => new()); + } + + public static DeliveryConfirmationsWindow FocusDeliveryConfirmations(int year) { + return FocusWindow(() => new(year), w => w.Year == year); + } } } diff --git a/Elwig/Helpers/AppDbContext.cs b/Elwig/Helpers/AppDbContext.cs index 8f000a0..cb28a14 100644 --- a/Elwig/Helpers/AppDbContext.cs +++ b/Elwig/Helpers/AppDbContext.cs @@ -163,6 +163,13 @@ namespace Elwig.Helpers { return c + 1; } + public async Task NextRdNr(int kgnr) { + int c = 0; + (await WbRde.Where(r => r.KgNr == kgnr).Select(r => r.RdNr).ToListAsync()) + .ForEach(a => { if (a <= c + 100) c = a; }); + return c + 1; + } + public async Task GetWineQualityLevel(double kmw) { return await WineQualityLevels .Where(q => !q.IsPredicate && (q.MinKmw == null || q.MinKmw <= kmw)) diff --git a/Elwig/Windows/AdministrationWindow.cs b/Elwig/Windows/AdministrationWindow.cs index ad899e5..a946daa 100644 --- a/Elwig/Windows/AdministrationWindow.cs +++ b/Elwig/Windows/AdministrationWindow.cs @@ -572,5 +572,13 @@ namespace Elwig.Windows { protected void UpperCaseInput_LostFocus(object sender, RoutedEventArgs evt) { InputLostFocus((TextBox)sender, Validator.CheckUpperCase); } + + protected void KgDetailsButton_Click(object sender, RoutedEventArgs evt) { + // TODO open origin window + } + + protected void AreaComTypeDetailsButton_Click(object sender, RoutedEventArgs evt) { + App.FocusBaseDataAreaComType(); + } } } diff --git a/Elwig/Windows/AreaComAdminWindow.xaml b/Elwig/Windows/AreaComAdminWindow.xaml index 88e64d8..ca9f945 100644 --- a/Elwig/Windows/AreaComAdminWindow.xaml +++ b/Elwig/Windows/AreaComAdminWindow.xaml @@ -144,7 +144,10 @@