From 81bf28e80e2fa0d61aa74885b8520d8945432e0a Mon Sep 17 00:00:00 2001 From: HirschleM Date: Tue, 12 May 2026 12:42:51 +0200 Subject: [PATCH] =?UTF-8?q?MH=20+=20Claude:=20WaitLayer=20im=20Urlaubsplan?= =?UTF-8?q?er=20eingef=C3=BCgt,=20damit=20man=20nicht=20mehr=20denkt,=20da?= =?UTF-8?q?s=20Programm=20hat=20sich=20aufgehangen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BeWo/View/Detail/Report/AbwesenheitsView.xaml | 2 +- .../Detail/Report/AbwesenheitsView.xaml.cs | 41 +++++++++++++++---- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/BeWo/View/Detail/Report/AbwesenheitsView.xaml b/BeWo/View/Detail/Report/AbwesenheitsView.xaml index ae06d3bbb..12b1fd4f5 100644 --- a/BeWo/View/Detail/Report/AbwesenheitsView.xaml +++ b/BeWo/View/Detail/Report/AbwesenheitsView.xaml @@ -144,7 +144,7 @@ - + diff --git a/BeWo/View/Detail/Report/AbwesenheitsView.xaml.cs b/BeWo/View/Detail/Report/AbwesenheitsView.xaml.cs index dd88ae6e3..a7ac71d0b 100644 --- a/BeWo/View/Detail/Report/AbwesenheitsView.xaml.cs +++ b/BeWo/View/Detail/Report/AbwesenheitsView.xaml.cs @@ -13,6 +13,8 @@ using DevExpress.XtraScheduler; using System; using System.Collections.Generic; using System.Linq; +// Claude - Task für async/await-Unterstützung (Hintergrundladen) +using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Forms; @@ -77,18 +79,37 @@ namespace BeWo.View.Detail.Report public List SelectedTeams => FilterTeams.SelectedItems.Cast().ToList(); - private void Button_Click(object sender, RoutedEventArgs e) + // Claude - Servicaufrufe laufen asynchron im Hintergrund; WaitLayer2 zeigt Ladeindikator; + // - Hauptfenster wird während des Ladens komplett deaktiviert (keine Interaktion möglich) + private async void Button_Click(object sender, RoutedEventArgs e) { UpdateFilter(); - + SelectedMonth = _MonthPicker.SelectedMonth; SelectedYear = (int)_YearPicker.SelectedItem; - UrlaubsplanerRootObj = ServiceFacade.DoEmployeeServiceSync(s => s.BuildUrlaubsplanerRootObject(_SelectedFilter)); + var waitLayer = new WaitLayer2(); + _RootGrid.Children.Add(waitLayer); + BeWoApp.CurrentBeWo.MainWindow.IsEnabled = false; - UpdateScheduler(false); - ColorizeFeiertage(); - ApplyFeiertagCellStyle(); + try + { + var filter = _SelectedFilter; + UrlaubsplanerRootObj = await Task.Run(() => + ServiceFacade.DoEmployeeServiceSync(s => s.BuildUrlaubsplanerRootObject(filter))); + + var absenceOverview = await Task.Run(() => + ServiceFacade.DoEmployeeServiceSync(x => x.GetAbsenceOverview(filter))); + + UpdateScheduler(false, absenceOverview); + ColorizeFeiertage(); + ApplyFeiertagCellStyle(); + } + finally + { + _RootGrid.Children.Remove(waitLayer); + BeWoApp.CurrentBeWo.MainWindow.IsEnabled = true; + } } private void ColorizeFeiertage() @@ -254,10 +275,14 @@ namespace BeWo.View.Detail.Report } - public void UpdateScheduler(bool neuLaden) + // Claude - optionaler Parameter absenceOverview: vorgeladene Daten aus Button_Click werden übergeben, um doppelten Serviceaufruf zu vermeiden + public void UpdateScheduler(bool neuLaden, List absenceOverview = null) { var absenceReasons = _AbsenceReasonDCs; - var absenceOverview = ServiceFacade.DoEmployeeServiceSync(x => x.GetAbsenceOverview(_SelectedFilter)); + + if (absenceOverview == null) + absenceOverview = ServiceFacade.DoEmployeeServiceSync(x => x.GetAbsenceOverview(_SelectedFilter)); + _ListOfEmployee = absenceOverview; var start = new DateTime(_SelectedFilter.Year, _SelectedFilter.Month, 1);