From 30cc7a048279dac67e400b53e1de3c415d62d03f Mon Sep 17 00:00:00 2001 From: Meik Date: Mon, 20 Jul 2026 08:55:15 +0200 Subject: [PATCH] Apply shared ticket activity capability to overview rows --- .../TicketOverviewUpdateServiceTest.cs | 19 +++++++++---- .../F4SDCockpitCommunicationDemo.cs | 2 +- .../Services/TicketOverviewUpdateService.cs | 28 +++++++++---------- .../Basics/UserControls/TicketOverview.xaml | 3 +- .../UserControls/TicketOverview.xaml.cs | 5 ++-- .../Pages/SearchPage/SearchPageView.xaml.cs | 12 ++++---- 6 files changed, 40 insertions(+), 29 deletions(-) diff --git a/F4SD.Cockpit.Client.Test/Basics/Sevices/TicketOverview/TicketOverviewUpdateServiceTest.cs b/F4SD.Cockpit.Client.Test/Basics/Sevices/TicketOverview/TicketOverviewUpdateServiceTest.cs index 2c387ed..8cd1a08 100644 --- a/F4SD.Cockpit.Client.Test/Basics/Sevices/TicketOverview/TicketOverviewUpdateServiceTest.cs +++ b/F4SD.Cockpit.Client.Test/Basics/Sevices/TicketOverview/TicketOverviewUpdateServiceTest.cs @@ -111,13 +111,13 @@ public class TicketOverviewUpdateServiceTest } [Fact] - public async Task FetchAsync_ServiceRequestsCapability_IsSeparatedFromCounts() + public async Task FetchAsync_TicketAndServiceRequestsCapability_IsSeparatedFromCounts() { // Arrange var communication = new FakeCommunication(); communication.SetCounts(TileScope.Personal, new Dictionary(StringComparer.OrdinalIgnoreCase) { - ["ServiceRequestsEnabled"] = 1, + ["TicketAndServiceRequestsEnabled"] = 1, ["ServiceRequestsNew"] = 2 }); communication.SetCounts(TileScope.Role, new Dictionary(StringComparer.OrdinalIgnoreCase) @@ -127,18 +127,27 @@ public class TicketOverviewUpdateServiceTest var service = CreateService(communication, out _); var availabilityChanges = 0; - service.ServiceRequestsAvailabilityChanged += (_, _) => availabilityChanges++; + service.TicketAndServiceRequestsAvailabilityChanged += (_, _) => availabilityChanges++; // Act service.UpdateAvailability(true); await WaitUntilAsync(() => service.AreAllScopesInitialized); // Assert - Assert.True(service.ServiceRequestsEnabled); + Assert.True(service.TicketAndServiceRequestsEnabled); Assert.Equal(1, availabilityChanges); Assert.Equal(2, service.CurrentCounts["ServiceRequestsNew"].Personal); Assert.Equal(4, service.CurrentCounts["ServiceRequestsNew"].Role); - Assert.DoesNotContain("ServiceRequestsEnabled", service.CurrentCounts.Keys); + Assert.DoesNotContain("TicketAndServiceRequestsEnabled", service.CurrentCounts.Keys); + + communication.SetCounts(TileScope.Personal, new Dictionary(StringComparer.OrdinalIgnoreCase) + { + ["ServiceRequestsNew"] = 3 + }); + await service.FetchAsync(TileScope.Personal); + + Assert.False(service.TicketAndServiceRequestsEnabled); + Assert.Equal(2, availabilityChanges); } private static TicketOverviewUpdateService CreateService(FakeCommunication communication, out FakeDispatcher dispatcher) diff --git a/FasdCockpitCommunicationDemo/F4SDCockpitCommunicationDemo.cs b/FasdCockpitCommunicationDemo/F4SDCockpitCommunicationDemo.cs index c7fe1cc..297256f 100644 --- a/FasdCockpitCommunicationDemo/F4SDCockpitCommunicationDemo.cs +++ b/FasdCockpitCommunicationDemo/F4SDCockpitCommunicationDemo.cs @@ -286,7 +286,7 @@ namespace C4IT.FASD.Cockpit.Communication if (string.IsNullOrWhiteSpace(key)) continue; - if (string.Equals(key, "ServiceRequestsEnabled", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, "TicketAndServiceRequestsEnabled", StringComparison.OrdinalIgnoreCase)) { result[key] = 1; continue; diff --git a/FasdDesktopUi/Basics/Services/TicketOverviewUpdateService.cs b/FasdDesktopUi/Basics/Services/TicketOverviewUpdateService.cs index a43a0a4..e4113b6 100644 --- a/FasdDesktopUi/Basics/Services/TicketOverviewUpdateService.cs +++ b/FasdDesktopUi/Basics/Services/TicketOverviewUpdateService.cs @@ -24,7 +24,7 @@ namespace FasdDesktopUi.Basics.Services { #region Fields - private const string ServiceRequestsEnabledKey = "ServiceRequestsEnabled"; + private const string TicketAndServiceRequestsEnabledKey = "TicketAndServiceRequestsEnabled"; private readonly ITicketOverviewCommunicationSource _communicationSource; private static readonly string[] OverviewKeys = new[] { @@ -58,7 +58,7 @@ namespace FasdDesktopUi.Basics.Services private bool _isDemo; private bool _initialized; private bool _isEnabled; - private bool _serviceRequestsEnabled; + private bool _ticketAndServiceRequestsEnabled; private readonly Random _random = new Random(); #if isDemo private readonly List _persistedDemoTickets = new List(); @@ -115,10 +115,10 @@ namespace FasdDesktopUi.Basics.Services #region Public API public event EventHandler OverviewCountsChanged; - public event EventHandler ServiceRequestsAvailabilityChanged; + public event EventHandler TicketAndServiceRequestsAvailabilityChanged; public IReadOnlyDictionary CurrentCounts => _currentCounts; - public bool ServiceRequestsEnabled => _serviceRequestsEnabled; + public bool TicketAndServiceRequestsEnabled => _ticketAndServiceRequestsEnabled; public bool IsScopeInitialized(TileScope scope) { @@ -224,7 +224,7 @@ namespace FasdDesktopUi.Basics.Services _currentCounts[key] = TileCounts.Empty; } - UpdateServiceRequestsAvailability(false); + UpdateTicketAndServiceRequestsAvailability(false); }); } @@ -339,11 +339,11 @@ namespace FasdDesktopUi.Basics.Services _isDemo = communication.IsDemo(); var requestedKeys = scope == TileScope.Personal - ? OverviewKeys.Concat(new[] { ServiceRequestsEnabledKey }).ToArray() + ? OverviewKeys.Concat(new[] { TicketAndServiceRequestsEnabledKey }).ToArray() : OverviewKeys; var rawCounts = await communication.GetTicketOverviewCounts(requestedKeys, scope == TileScope.Role).ConfigureAwait(false); var counts = new Dictionary(StringComparer.OrdinalIgnoreCase); - var serviceRequestsEnabled = _isDemo; + var ticketAndServiceRequestsEnabled = _isDemo; if (rawCounts != null) { @@ -352,10 +352,10 @@ namespace FasdDesktopUi.Basics.Services if (string.IsNullOrWhiteSpace(kvp.Key)) continue; - if (string.Equals(kvp.Key, ServiceRequestsEnabledKey, StringComparison.OrdinalIgnoreCase)) + if (string.Equals(kvp.Key, TicketAndServiceRequestsEnabledKey, StringComparison.OrdinalIgnoreCase)) { if (scope == TileScope.Personal) - serviceRequestsEnabled = _isDemo || kvp.Value > 0; + ticketAndServiceRequestsEnabled = _isDemo || kvp.Value > 0; continue; } @@ -369,7 +369,7 @@ namespace FasdDesktopUi.Basics.Services await _dispatcher.InvokeAsync(() => { if (scope == TileScope.Personal) - UpdateServiceRequestsAvailability(serviceRequestsEnabled); + UpdateTicketAndServiceRequestsAvailability(ticketAndServiceRequestsEnabled); ProcessScopeCounts(scope, counts); }); @@ -389,13 +389,13 @@ namespace FasdDesktopUi.Basics.Services #region Count Processing - private void UpdateServiceRequestsAvailability(bool isEnabled) + private void UpdateTicketAndServiceRequestsAvailability(bool isEnabled) { - if (_serviceRequestsEnabled == isEnabled) + if (_ticketAndServiceRequestsEnabled == isEnabled) return; - _serviceRequestsEnabled = isEnabled; - ServiceRequestsAvailabilityChanged?.Invoke(this, EventArgs.Empty); + _ticketAndServiceRequestsEnabled = isEnabled; + TicketAndServiceRequestsAvailabilityChanged?.Invoke(this, EventArgs.Empty); } private void RefreshTimerIntervals() diff --git a/FasdDesktopUi/Basics/UserControls/TicketOverview.xaml b/FasdDesktopUi/Basics/UserControls/TicketOverview.xaml index 30a4cb7..b59c03c 100644 --- a/FasdDesktopUi/Basics/UserControls/TicketOverview.xaml +++ b/FasdDesktopUi/Basics/UserControls/TicketOverview.xaml @@ -120,7 +120,8 @@ - + diff --git a/FasdDesktopUi/Basics/UserControls/TicketOverview.xaml.cs b/FasdDesktopUi/Basics/UserControls/TicketOverview.xaml.cs index 3feecc4..afae7af 100644 --- a/FasdDesktopUi/Basics/UserControls/TicketOverview.xaml.cs +++ b/FasdDesktopUi/Basics/UserControls/TicketOverview.xaml.cs @@ -274,10 +274,11 @@ namespace FasdDesktopUi.Basics.UserControls vm.ResetSelection(); } - public void SetServiceRequestsVisibility(bool isVisible) + public void SetTicketAndServiceRequestsVisibility(bool isVisible) { Dispatcher.Invoke(() => { + TicketsRow.Height = isVisible ? GridLength.Auto : new GridLength(0); ServiceRequestsRow.Height = isVisible ? GridLength.Auto : new GridLength(0); }); } @@ -324,7 +325,7 @@ namespace FasdDesktopUi.Basics.UserControls if (counts == null || counts.Count == 0) counts = await LoadCountsFallbackAsync(useRoleTickets).ConfigureAwait(false); - SetServiceRequestsVisibility(TicketOverviewUpdateService.Instance?.ServiceRequestsEnabled == true); + SetTicketAndServiceRequestsVisibility(TicketOverviewUpdateService.Instance?.TicketAndServiceRequestsEnabled == true); await Dispatcher.InvokeAsync(() => { diff --git a/FasdDesktopUi/Pages/SearchPage/SearchPageView.xaml.cs b/FasdDesktopUi/Pages/SearchPage/SearchPageView.xaml.cs index 7d37d9a..7acff3f 100644 --- a/FasdDesktopUi/Pages/SearchPage/SearchPageView.xaml.cs +++ b/FasdDesktopUi/Pages/SearchPage/SearchPageView.xaml.cs @@ -105,7 +105,7 @@ namespace FasdDesktopUi.Pages.SearchPage if (TicketOverviewUpdateService.Instance != null) { TicketOverviewUpdateService.Instance.OverviewCountsChanged += TicketOverviewUpdateService_OverviewCountsChanged; - TicketOverviewUpdateService.Instance.ServiceRequestsAvailabilityChanged += TicketOverviewUpdateService_ServiceRequestsAvailabilityChanged; + TicketOverviewUpdateService.Instance.TicketAndServiceRequestsAvailabilityChanged += TicketOverviewUpdateService_TicketAndServiceRequestsAvailabilityChanged; } UiSettingsChanged(null, null); @@ -735,7 +735,7 @@ namespace FasdDesktopUi.Pages.SearchPage if (TicketOverviewUpdateService.Instance != null) { TicketOverviewUpdateService.Instance.OverviewCountsChanged -= TicketOverviewUpdateService_OverviewCountsChanged; - TicketOverviewUpdateService.Instance.ServiceRequestsAvailabilityChanged -= TicketOverviewUpdateService_ServiceRequestsAvailabilityChanged; + TicketOverviewUpdateService.Instance.TicketAndServiceRequestsAvailabilityChanged -= TicketOverviewUpdateService_TicketAndServiceRequestsAvailabilityChanged; } _pipeServer?.Dispose(); } @@ -1304,7 +1304,7 @@ namespace FasdDesktopUi.Pages.SearchPage if (service == null) return; - TicketOverviewUc?.SetServiceRequestsVisibility(service.ServiceRequestsEnabled); + TicketOverviewUc?.SetTicketAndServiceRequestsVisibility(service.TicketAndServiceRequestsEnabled); var counts = service.GetCountsForScope(IsFilterChecked); if (counts == null || counts.Count == 0) return; @@ -1313,10 +1313,10 @@ namespace FasdDesktopUi.Pages.SearchPage TicketOverviewUc?.RefreshHighlightState(IsFilterChecked); } - private void TicketOverviewUpdateService_ServiceRequestsAvailabilityChanged(object sender, EventArgs e) + private void TicketOverviewUpdateService_TicketAndServiceRequestsAvailabilityChanged(object sender, EventArgs e) { - var isVisible = TicketOverviewUpdateService.Instance?.ServiceRequestsEnabled == true; - TicketOverviewUc?.SetServiceRequestsVisibility(isVisible); + var isVisible = TicketOverviewUpdateService.Instance?.TicketAndServiceRequestsEnabled == true; + TicketOverviewUc?.SetTicketAndServiceRequestsVisibility(isVisible); ScheduleSearchResultMaxHeightUpdate(); }