MH + Claude: WaitLayer im Urlaubsplaner eingefügt, damit man nicht mehr denkt, das Programm hat sich aufgehangen

This commit is contained in:
2026-05-12 12:42:51 +02:00
parent 03ceaec47b
commit 81bf28e80e
2 changed files with 34 additions and 9 deletions

View File

@@ -144,7 +144,7 @@
<DataTemplate x:Key="AppointmentTooltipContentTemplate" />
</localView:BeWoView.Resources>
<Grid>
<Grid x:Name="_RootGrid">
<GroupBox Header="Abwesenheiten" Style="{StaticResource ObjectEditGroupBox}">
<Grid>
<Grid.ColumnDefinitions>

View File

@@ -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<CompactTeamDC> SelectedTeams => FilterTeams.SelectedItems.Cast<CompactTeamDC>().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<EmployeeDC> 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);