Add conditional service request row to ticket overview
This commit is contained in:
@@ -110,6 +110,37 @@ public class TicketOverviewUpdateServiceTest
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task FetchAsync_ServiceRequestsCapability_IsSeparatedFromCounts()
|
||||
{
|
||||
// Arrange
|
||||
var communication = new FakeCommunication();
|
||||
communication.SetCounts(TileScope.Personal, new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase)
|
||||
{
|
||||
["ServiceRequestsEnabled"] = 1,
|
||||
["ServiceRequestsNew"] = 2
|
||||
});
|
||||
communication.SetCounts(TileScope.Role, new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase)
|
||||
{
|
||||
["ServiceRequestsNew"] = 4
|
||||
});
|
||||
|
||||
var service = CreateService(communication, out _);
|
||||
var availabilityChanges = 0;
|
||||
service.ServiceRequestsAvailabilityChanged += (_, _) => availabilityChanges++;
|
||||
|
||||
// Act
|
||||
service.UpdateAvailability(true);
|
||||
await WaitUntilAsync(() => service.AreAllScopesInitialized);
|
||||
|
||||
// Assert
|
||||
Assert.True(service.ServiceRequestsEnabled);
|
||||
Assert.Equal(1, availabilityChanges);
|
||||
Assert.Equal(2, service.CurrentCounts["ServiceRequestsNew"].Personal);
|
||||
Assert.Equal(4, service.CurrentCounts["ServiceRequestsNew"].Role);
|
||||
Assert.DoesNotContain("ServiceRequestsEnabled", service.CurrentCounts.Keys);
|
||||
}
|
||||
|
||||
private static TicketOverviewUpdateService CreateService(FakeCommunication communication, out FakeDispatcher dispatcher)
|
||||
{
|
||||
dispatcher = new FakeDispatcher();
|
||||
|
||||
@@ -286,6 +286,12 @@ namespace C4IT.FASD.Cockpit.Communication
|
||||
if (string.IsNullOrWhiteSpace(key))
|
||||
continue;
|
||||
|
||||
if (string.Equals(key, "ServiceRequestsEnabled", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
result[key] = 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (TicketOverviewRelations.TryGetValue(key, out var scopeDictionary) &&
|
||||
scopeDictionary != null &&
|
||||
scopeDictionary.TryGetValue(scopeKey, out var definitions) &&
|
||||
|
||||
@@ -308,6 +308,58 @@
|
||||
}
|
||||
],
|
||||
"Tickets": [
|
||||
{
|
||||
"TicketId": "8f3ef61d-6f59-44ee-ae2e-38e7dd9d6f61",
|
||||
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
|
||||
"TileKey": "ServiceRequestsNew",
|
||||
"UseRoleScope": false,
|
||||
"ActivityType": "SPSActivityTypeServiceRequest",
|
||||
"DisplayName": "SRQ00001",
|
||||
"Summary": "Neue Software fuer den Arbeitsplatz bereitstellen",
|
||||
"StatusId": "New",
|
||||
"UserDisplayName": "Busch, Andrea",
|
||||
"UserAccount": "AB014",
|
||||
"UserDomain": "CONTOSO"
|
||||
},
|
||||
{
|
||||
"TicketId": "8f3ef61d-6f59-44ee-ae2e-38e7dd9d6f61",
|
||||
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
|
||||
"TileKey": "ServiceRequestsActive",
|
||||
"UseRoleScope": false,
|
||||
"ActivityType": "SPSActivityTypeServiceRequest",
|
||||
"DisplayName": "SRQ00001",
|
||||
"Summary": "Neue Software fuer den Arbeitsplatz bereitstellen",
|
||||
"StatusId": "InProgress",
|
||||
"UserDisplayName": "Busch, Andrea",
|
||||
"UserAccount": "AB014",
|
||||
"UserDomain": "CONTOSO"
|
||||
},
|
||||
{
|
||||
"TicketId": "8f3ef61d-6f59-44ee-ae2e-38e7dd9d6f61",
|
||||
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
|
||||
"TileKey": "ServiceRequestsCritical",
|
||||
"UseRoleScope": false,
|
||||
"ActivityType": "SPSActivityTypeServiceRequest",
|
||||
"DisplayName": "SRQ00001",
|
||||
"Summary": "Neue Software fuer den Arbeitsplatz bereitstellen",
|
||||
"StatusId": "InProgress",
|
||||
"UserDisplayName": "Busch, Andrea",
|
||||
"UserAccount": "AB014",
|
||||
"UserDomain": "CONTOSO"
|
||||
},
|
||||
{
|
||||
"TicketId": "8f3ef61d-6f59-44ee-ae2e-38e7dd9d6f61",
|
||||
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
|
||||
"TileKey": "ServiceRequestsNewInfo",
|
||||
"UseRoleScope": false,
|
||||
"ActivityType": "SPSActivityTypeServiceRequest",
|
||||
"DisplayName": "SRQ00001",
|
||||
"Summary": "Neue Software fuer den Arbeitsplatz bereitstellen",
|
||||
"StatusId": "OnHold",
|
||||
"UserDisplayName": "Busch, Andrea",
|
||||
"UserAccount": "AB014",
|
||||
"UserDomain": "CONTOSO"
|
||||
},
|
||||
{
|
||||
"TicketId": "7e852bb9-420b-4caa-b79a-9178d793fc06",
|
||||
"UserId": "a2c35ad1-7cc7-4b2b-9aa5-d03fdaecd155",
|
||||
|
||||
@@ -62,6 +62,34 @@ namespace FasdDesktopUi.Basics.Models
|
||||
set { if (_incidentNewInfoSelected != value) { _incidentNewInfoSelected = value; OnPropertyChanged(nameof(IncidentNewInfoSelected)); } }
|
||||
}
|
||||
|
||||
private bool _serviceRequestsNewSelected;
|
||||
public bool ServiceRequestsNewSelected
|
||||
{
|
||||
get => _serviceRequestsNewSelected;
|
||||
set { if (_serviceRequestsNewSelected != value) { _serviceRequestsNewSelected = value; OnPropertyChanged(nameof(ServiceRequestsNewSelected)); } }
|
||||
}
|
||||
|
||||
private bool _serviceRequestsActiveSelected;
|
||||
public bool ServiceRequestsActiveSelected
|
||||
{
|
||||
get => _serviceRequestsActiveSelected;
|
||||
set { if (_serviceRequestsActiveSelected != value) { _serviceRequestsActiveSelected = value; OnPropertyChanged(nameof(ServiceRequestsActiveSelected)); } }
|
||||
}
|
||||
|
||||
private bool _serviceRequestsCriticalSelected;
|
||||
public bool ServiceRequestsCriticalSelected
|
||||
{
|
||||
get => _serviceRequestsCriticalSelected;
|
||||
set { if (_serviceRequestsCriticalSelected != value) { _serviceRequestsCriticalSelected = value; OnPropertyChanged(nameof(ServiceRequestsCriticalSelected)); } }
|
||||
}
|
||||
|
||||
private bool _serviceRequestsNewInfoSelected;
|
||||
public bool ServiceRequestsNewInfoSelected
|
||||
{
|
||||
get => _serviceRequestsNewInfoSelected;
|
||||
set { if (_serviceRequestsNewInfoSelected != value) { _serviceRequestsNewInfoSelected = value; OnPropertyChanged(nameof(ServiceRequestsNewInfoSelected)); } }
|
||||
}
|
||||
|
||||
private bool _unassignedTicketsSelected;
|
||||
public bool UnassignedTicketsSelected
|
||||
{
|
||||
@@ -102,6 +130,18 @@ namespace FasdDesktopUi.Basics.Models
|
||||
private bool _incidentNewInfoHighlighted;
|
||||
public bool IncidentNewInfoHighlighted { get => _incidentNewInfoHighlighted; set { if (_incidentNewInfoHighlighted != value) { _incidentNewInfoHighlighted = value; OnPropertyChanged(nameof(IncidentNewInfoHighlighted)); } } }
|
||||
|
||||
private bool _serviceRequestsNewHighlighted;
|
||||
public bool ServiceRequestsNewHighlighted { get => _serviceRequestsNewHighlighted; set { if (_serviceRequestsNewHighlighted != value) { _serviceRequestsNewHighlighted = value; OnPropertyChanged(nameof(ServiceRequestsNewHighlighted)); } } }
|
||||
|
||||
private bool _serviceRequestsActiveHighlighted;
|
||||
public bool ServiceRequestsActiveHighlighted { get => _serviceRequestsActiveHighlighted; set { if (_serviceRequestsActiveHighlighted != value) { _serviceRequestsActiveHighlighted = value; OnPropertyChanged(nameof(ServiceRequestsActiveHighlighted)); } } }
|
||||
|
||||
private bool _serviceRequestsCriticalHighlighted;
|
||||
public bool ServiceRequestsCriticalHighlighted { get => _serviceRequestsCriticalHighlighted; set { if (_serviceRequestsCriticalHighlighted != value) { _serviceRequestsCriticalHighlighted = value; OnPropertyChanged(nameof(ServiceRequestsCriticalHighlighted)); } } }
|
||||
|
||||
private bool _serviceRequestsNewInfoHighlighted;
|
||||
public bool ServiceRequestsNewInfoHighlighted { get => _serviceRequestsNewInfoHighlighted; set { if (_serviceRequestsNewInfoHighlighted != value) { _serviceRequestsNewInfoHighlighted = value; OnPropertyChanged(nameof(ServiceRequestsNewInfoHighlighted)); } } }
|
||||
|
||||
private bool _unassignedTicketsHighlighted;
|
||||
public bool UnassignedTicketsHighlighted { get => _unassignedTicketsHighlighted; set { if (_unassignedTicketsHighlighted != value) { _unassignedTicketsHighlighted = value; OnPropertyChanged(nameof(UnassignedTicketsHighlighted)); } } }
|
||||
|
||||
@@ -134,6 +174,18 @@ namespace FasdDesktopUi.Basics.Models
|
||||
private string _incidentNewInfoChangeHint;
|
||||
public string IncidentNewInfoChangeHint { get => _incidentNewInfoChangeHint; set { if (_incidentNewInfoChangeHint != value) { _incidentNewInfoChangeHint = value; OnPropertyChanged(nameof(IncidentNewInfoChangeHint)); } } }
|
||||
|
||||
private string _serviceRequestsNewChangeHint;
|
||||
public string ServiceRequestsNewChangeHint { get => _serviceRequestsNewChangeHint; set { if (_serviceRequestsNewChangeHint != value) { _serviceRequestsNewChangeHint = value; OnPropertyChanged(nameof(ServiceRequestsNewChangeHint)); } } }
|
||||
|
||||
private string _serviceRequestsActiveChangeHint;
|
||||
public string ServiceRequestsActiveChangeHint { get => _serviceRequestsActiveChangeHint; set { if (_serviceRequestsActiveChangeHint != value) { _serviceRequestsActiveChangeHint = value; OnPropertyChanged(nameof(ServiceRequestsActiveChangeHint)); } } }
|
||||
|
||||
private string _serviceRequestsCriticalChangeHint;
|
||||
public string ServiceRequestsCriticalChangeHint { get => _serviceRequestsCriticalChangeHint; set { if (_serviceRequestsCriticalChangeHint != value) { _serviceRequestsCriticalChangeHint = value; OnPropertyChanged(nameof(ServiceRequestsCriticalChangeHint)); } } }
|
||||
|
||||
private string _serviceRequestsNewInfoChangeHint;
|
||||
public string ServiceRequestsNewInfoChangeHint { get => _serviceRequestsNewInfoChangeHint; set { if (_serviceRequestsNewInfoChangeHint != value) { _serviceRequestsNewInfoChangeHint = value; OnPropertyChanged(nameof(ServiceRequestsNewInfoChangeHint)); } } }
|
||||
|
||||
private string _unassignedTicketsChangeHint;
|
||||
public string UnassignedTicketsChangeHint { get => _unassignedTicketsChangeHint; set { if (_unassignedTicketsChangeHint != value) { _unassignedTicketsChangeHint = value; OnPropertyChanged(nameof(UnassignedTicketsChangeHint)); } } }
|
||||
|
||||
@@ -169,6 +221,19 @@ namespace FasdDesktopUi.Basics.Models
|
||||
private int _incidentNewInfo;
|
||||
public int IncidentNewInfo { get => _incidentNewInfo; set { _incidentNewInfo = value; OnPropertyChanged(nameof(IncidentNewInfo)); } }
|
||||
|
||||
// Service Request Properties
|
||||
private int _serviceRequestsNew;
|
||||
public int ServiceRequestsNew { get => _serviceRequestsNew; set { _serviceRequestsNew = value; OnPropertyChanged(nameof(ServiceRequestsNew)); } }
|
||||
|
||||
private int _serviceRequestsActive;
|
||||
public int ServiceRequestsActive { get => _serviceRequestsActive; set { _serviceRequestsActive = value; OnPropertyChanged(nameof(ServiceRequestsActive)); } }
|
||||
|
||||
private int _serviceRequestsCritical;
|
||||
public int ServiceRequestsCritical { get => _serviceRequestsCritical; set { _serviceRequestsCritical = value; OnPropertyChanged(nameof(ServiceRequestsCritical)); } }
|
||||
|
||||
private int _serviceRequestsNewInfo;
|
||||
public int ServiceRequestsNewInfo { get => _serviceRequestsNewInfo; set { _serviceRequestsNewInfo = value; OnPropertyChanged(nameof(ServiceRequestsNewInfo)); } }
|
||||
|
||||
// Unassigned Ticket Properties
|
||||
private int _unassignedTickets;
|
||||
public int UnassignedTickets { get => _unassignedTickets; set { _unassignedTickets = value; OnPropertyChanged(nameof(UnassignedTickets)); } }
|
||||
@@ -196,6 +261,11 @@ namespace FasdDesktopUi.Basics.Models
|
||||
IncidentCriticalSelected = false;
|
||||
IncidentNewInfoSelected = false;
|
||||
|
||||
ServiceRequestsNewSelected = false;
|
||||
ServiceRequestsActiveSelected = false;
|
||||
ServiceRequestsCriticalSelected = false;
|
||||
ServiceRequestsNewInfoSelected = false;
|
||||
|
||||
UnassignedTicketsSelected = false;
|
||||
UnassignedTicketsCriticalSelected = false;
|
||||
}
|
||||
@@ -212,6 +282,11 @@ namespace FasdDesktopUi.Basics.Models
|
||||
IncidentCriticalHighlighted = false;
|
||||
IncidentNewInfoHighlighted = false;
|
||||
|
||||
ServiceRequestsNewHighlighted = false;
|
||||
ServiceRequestsActiveHighlighted = false;
|
||||
ServiceRequestsCriticalHighlighted = false;
|
||||
ServiceRequestsNewInfoHighlighted = false;
|
||||
|
||||
UnassignedTicketsHighlighted = false;
|
||||
UnassignedTicketsCriticalHighlighted = false;
|
||||
|
||||
@@ -225,6 +300,11 @@ namespace FasdDesktopUi.Basics.Models
|
||||
IncidentCriticalChangeHint = null;
|
||||
IncidentNewInfoChangeHint = null;
|
||||
|
||||
ServiceRequestsNewChangeHint = null;
|
||||
ServiceRequestsActiveChangeHint = null;
|
||||
ServiceRequestsCriticalChangeHint = null;
|
||||
ServiceRequestsNewInfoChangeHint = null;
|
||||
|
||||
UnassignedTicketsChangeHint = null;
|
||||
UnassignedTicketsCriticalChangeHint = null;
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ namespace FasdDesktopUi.Basics.Services
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private const string ServiceRequestsEnabledKey = "ServiceRequestsEnabled";
|
||||
private readonly ITicketOverviewCommunicationSource _communicationSource;
|
||||
private static readonly string[] OverviewKeys = new[]
|
||||
{
|
||||
@@ -35,6 +36,10 @@ namespace FasdDesktopUi.Basics.Services
|
||||
"IncidentActive",
|
||||
"IncidentCritical",
|
||||
"IncidentNewInfo",
|
||||
"ServiceRequestsNew",
|
||||
"ServiceRequestsActive",
|
||||
"ServiceRequestsCritical",
|
||||
"ServiceRequestsNewInfo",
|
||||
"UnassignedTickets",
|
||||
"UnassignedTicketsCritical"
|
||||
};
|
||||
@@ -53,6 +58,7 @@ namespace FasdDesktopUi.Basics.Services
|
||||
private bool _isDemo;
|
||||
private bool _initialized;
|
||||
private bool _isEnabled;
|
||||
private bool _serviceRequestsEnabled;
|
||||
private readonly Random _random = new Random();
|
||||
#if isDemo
|
||||
private readonly List<DemoTicketRecord> _persistedDemoTickets = new List<DemoTicketRecord>();
|
||||
@@ -109,8 +115,10 @@ namespace FasdDesktopUi.Basics.Services
|
||||
#region Public API
|
||||
|
||||
public event EventHandler<TicketOverviewCountsChangedEventArgs> OverviewCountsChanged;
|
||||
public event EventHandler ServiceRequestsAvailabilityChanged;
|
||||
|
||||
public IReadOnlyDictionary<string, TileCounts> CurrentCounts => _currentCounts;
|
||||
public bool ServiceRequestsEnabled => _serviceRequestsEnabled;
|
||||
|
||||
public bool IsScopeInitialized(TileScope scope)
|
||||
{
|
||||
@@ -215,6 +223,8 @@ namespace FasdDesktopUi.Basics.Services
|
||||
{
|
||||
_currentCounts[key] = TileCounts.Empty;
|
||||
}
|
||||
|
||||
UpdateServiceRequestsAvailability(false);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -328,8 +338,12 @@ namespace FasdDesktopUi.Basics.Services
|
||||
|
||||
_isDemo = communication.IsDemo();
|
||||
|
||||
var rawCounts = await communication.GetTicketOverviewCounts(OverviewKeys, scope == TileScope.Role).ConfigureAwait(false);
|
||||
var requestedKeys = scope == TileScope.Personal
|
||||
? OverviewKeys.Concat(new[] { ServiceRequestsEnabledKey }).ToArray()
|
||||
: OverviewKeys;
|
||||
var rawCounts = await communication.GetTicketOverviewCounts(requestedKeys, scope == TileScope.Role).ConfigureAwait(false);
|
||||
var counts = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
|
||||
var serviceRequestsEnabled = _isDemo;
|
||||
|
||||
if (rawCounts != null)
|
||||
{
|
||||
@@ -338,6 +352,13 @@ namespace FasdDesktopUi.Basics.Services
|
||||
if (string.IsNullOrWhiteSpace(kvp.Key))
|
||||
continue;
|
||||
|
||||
if (string.Equals(kvp.Key, ServiceRequestsEnabledKey, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
if (scope == TileScope.Personal)
|
||||
serviceRequestsEnabled = _isDemo || kvp.Value > 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
counts[kvp.Key] = Math.Max(0, kvp.Value);
|
||||
}
|
||||
}
|
||||
@@ -345,7 +366,13 @@ namespace FasdDesktopUi.Basics.Services
|
||||
if (!_isEnabled)
|
||||
return;
|
||||
|
||||
await _dispatcher.InvokeAsync(() => ProcessScopeCounts(scope, counts));
|
||||
await _dispatcher.InvokeAsync(() =>
|
||||
{
|
||||
if (scope == TileScope.Personal)
|
||||
UpdateServiceRequestsAvailability(serviceRequestsEnabled);
|
||||
|
||||
ProcessScopeCounts(scope, counts);
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -362,6 +389,15 @@ namespace FasdDesktopUi.Basics.Services
|
||||
|
||||
#region Count Processing
|
||||
|
||||
private void UpdateServiceRequestsAvailability(bool isEnabled)
|
||||
{
|
||||
if (_serviceRequestsEnabled == isEnabled)
|
||||
return;
|
||||
|
||||
_serviceRequestsEnabled = isEnabled;
|
||||
ServiceRequestsAvailabilityChanged?.Invoke(this, EventArgs.Empty);
|
||||
}
|
||||
|
||||
private void RefreshTimerIntervals()
|
||||
{
|
||||
_ = _dispatcher.InvokeAsync(() =>
|
||||
|
||||
@@ -84,6 +84,8 @@
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition x:Name="ServiceRequestsRow"
|
||||
Height="0" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
@@ -269,15 +271,87 @@
|
||||
HorizontalAlignment="Center"
|
||||
Cursor="Hand" />
|
||||
|
||||
<!-- Unassigned -->
|
||||
<!-- Service Requests -->
|
||||
<Label Grid.Row="4"
|
||||
Grid.Column="0"
|
||||
Foreground="{DynamicResource FontColor.DetailsPage.TitleSection.Header}"
|
||||
Content="{Binding Converter={StaticResource LanguageConverter}, ConverterParameter=TicketOverview.Row.Heading.ServiceRequests}"
|
||||
FontWeight="Bold"
|
||||
FontSize="12" />
|
||||
|
||||
<Label Grid.Row="4"
|
||||
Grid.Column="1"
|
||||
Content="{Binding ServiceRequestsNew}"
|
||||
Style="{StaticResource RoundedSelectedLabelStyle}"
|
||||
local:TicketOverview.IsSelected="{Binding ServiceRequestsNewSelected, Mode=TwoWay}"
|
||||
local:TicketOverview.IsHighlighted="{Binding ServiceRequestsNewHighlighted}"
|
||||
ToolTip="{Binding ServiceRequestsNewChangeHint}"
|
||||
Tag="ServiceRequestsNewSelected"
|
||||
MouseLeftButtonUp="Label_MouseLeftButtonUp"
|
||||
FontWeight="Medium"
|
||||
Foreground="{DynamicResource Color.Green}"
|
||||
FontSize="12"
|
||||
VerticalAlignment="Center"
|
||||
HorizontalAlignment="Center"
|
||||
Cursor="Hand" />
|
||||
|
||||
<Label Grid.Row="4"
|
||||
Grid.Column="2"
|
||||
Content="{Binding ServiceRequestsActive}"
|
||||
Style="{StaticResource RoundedSelectedLabelStyle}"
|
||||
local:TicketOverview.IsSelected="{Binding ServiceRequestsActiveSelected, Mode=TwoWay}"
|
||||
local:TicketOverview.IsHighlighted="{Binding ServiceRequestsActiveHighlighted}"
|
||||
ToolTip="{Binding ServiceRequestsActiveChangeHint}"
|
||||
Tag="ServiceRequestsActiveSelected"
|
||||
MouseLeftButtonUp="Label_MouseLeftButtonUp"
|
||||
FontWeight="Medium"
|
||||
Foreground="{DynamicResource Color.Green}"
|
||||
FontSize="12"
|
||||
VerticalAlignment="Center"
|
||||
HorizontalAlignment="Center"
|
||||
Cursor="Hand" />
|
||||
|
||||
<Label Grid.Row="4"
|
||||
Grid.Column="3"
|
||||
Content="{Binding ServiceRequestsCritical}"
|
||||
Style="{StaticResource RoundedSelectedLabelStyle}"
|
||||
local:TicketOverview.IsSelected="{Binding ServiceRequestsCriticalSelected, Mode=TwoWay}"
|
||||
local:TicketOverview.IsHighlighted="{Binding ServiceRequestsCriticalHighlighted}"
|
||||
ToolTip="{Binding ServiceRequestsCriticalChangeHint}"
|
||||
Tag="ServiceRequestsCriticalSelected"
|
||||
MouseLeftButtonUp="Label_MouseLeftButtonUp"
|
||||
FontWeight="Medium"
|
||||
Foreground="{DynamicResource Color.Red}"
|
||||
FontSize="12"
|
||||
VerticalAlignment="Center"
|
||||
HorizontalAlignment="Center"
|
||||
Cursor="Hand" />
|
||||
|
||||
<Label Grid.Row="4"
|
||||
Grid.Column="4"
|
||||
Content="{Binding ServiceRequestsNewInfo}"
|
||||
Style="{StaticResource RoundedSelectedLabelStyle}"
|
||||
local:TicketOverview.IsSelected="{Binding ServiceRequestsNewInfoSelected, Mode=TwoWay}"
|
||||
local:TicketOverview.IsHighlighted="{Binding ServiceRequestsNewInfoHighlighted}"
|
||||
ToolTip="{Binding ServiceRequestsNewInfoChangeHint}"
|
||||
Tag="ServiceRequestsNewInfoSelected"
|
||||
MouseLeftButtonUp="Label_MouseLeftButtonUp"
|
||||
FontWeight="Medium"
|
||||
Foreground="{DynamicResource Color.Orange}"
|
||||
FontSize="12"
|
||||
VerticalAlignment="Center"
|
||||
HorizontalAlignment="Center"
|
||||
Cursor="Hand" />
|
||||
|
||||
<!-- Unassigned -->
|
||||
<Label Grid.Row="5"
|
||||
Grid.Column="0"
|
||||
Foreground="{DynamicResource FontColor.DetailsPage.TitleSection.Header}"
|
||||
Content="{Binding Converter={StaticResource LanguageConverter}, ConverterParameter=TicketOverview.Row.Heading.UnassignedTickets}"
|
||||
FontWeight="Bold"
|
||||
FontSize="12" />
|
||||
|
||||
<Label Grid.Row="4"
|
||||
<Label Grid.Row="5"
|
||||
Grid.Column="1"
|
||||
Content="{Binding UnassignedTickets}"
|
||||
Style="{StaticResource RoundedSelectedLabelStyle}"
|
||||
@@ -293,7 +367,7 @@
|
||||
HorizontalAlignment="Center"
|
||||
Cursor="Hand" />
|
||||
|
||||
<Label Grid.Row="4"
|
||||
<Label Grid.Row="5"
|
||||
Grid.Column="3"
|
||||
Content="{Binding UnassignedTicketsCritical}"
|
||||
Style="{StaticResource RoundedSelectedLabelStyle}"
|
||||
|
||||
@@ -31,6 +31,10 @@ namespace FasdDesktopUi.Basics.UserControls
|
||||
("IncidentActive", new Action<TicketOverviewModel, int>((vm, value) => { vm.IncidentActive = value; })),
|
||||
("IncidentCritical", new Action<TicketOverviewModel, int>((vm, value) => { vm.IncidentCritical = value; })),
|
||||
("IncidentNewInfo", new Action<TicketOverviewModel, int>((vm, value) => { vm.IncidentNewInfo = value; })),
|
||||
("ServiceRequestsNew", new Action<TicketOverviewModel, int>((vm, value) => { vm.ServiceRequestsNew = value; })),
|
||||
("ServiceRequestsActive", new Action<TicketOverviewModel, int>((vm, value) => { vm.ServiceRequestsActive = value; })),
|
||||
("ServiceRequestsCritical", new Action<TicketOverviewModel, int>((vm, value) => { vm.ServiceRequestsCritical = value; })),
|
||||
("ServiceRequestsNewInfo", new Action<TicketOverviewModel, int>((vm, value) => { vm.ServiceRequestsNewInfo = value; })),
|
||||
("UnassignedTickets", new Action<TicketOverviewModel, int>((vm, value) => { vm.UnassignedTickets = value; })),
|
||||
("UnassignedTicketsCritical", new Action<TicketOverviewModel, int>((vm, value) => { vm.UnassignedTicketsCritical = value; }))
|
||||
};
|
||||
@@ -44,6 +48,10 @@ namespace FasdDesktopUi.Basics.UserControls
|
||||
("IncidentActive", new Action<TicketOverviewModel, bool>((vm, value) => { vm.IncidentActiveHighlighted = value; })),
|
||||
("IncidentCritical", new Action<TicketOverviewModel, bool>((vm, value) => { vm.IncidentCriticalHighlighted = value; })),
|
||||
("IncidentNewInfo", new Action<TicketOverviewModel, bool>((vm, value) => { vm.IncidentNewInfoHighlighted = value; })),
|
||||
("ServiceRequestsNew", new Action<TicketOverviewModel, bool>((vm, value) => { vm.ServiceRequestsNewHighlighted = value; })),
|
||||
("ServiceRequestsActive", new Action<TicketOverviewModel, bool>((vm, value) => { vm.ServiceRequestsActiveHighlighted = value; })),
|
||||
("ServiceRequestsCritical", new Action<TicketOverviewModel, bool>((vm, value) => { vm.ServiceRequestsCriticalHighlighted = value; })),
|
||||
("ServiceRequestsNewInfo", new Action<TicketOverviewModel, bool>((vm, value) => { vm.ServiceRequestsNewInfoHighlighted = value; })),
|
||||
("UnassignedTickets", new Action<TicketOverviewModel, bool>((vm, value) => { vm.UnassignedTicketsHighlighted = value; })),
|
||||
("UnassignedTicketsCritical", new Action<TicketOverviewModel, bool>((vm, value) => { vm.UnassignedTicketsCriticalHighlighted = value; }))
|
||||
};
|
||||
@@ -57,6 +65,10 @@ namespace FasdDesktopUi.Basics.UserControls
|
||||
("IncidentActive", new Action<TicketOverviewModel, string>((vm, value) => { vm.IncidentActiveChangeHint = value; })),
|
||||
("IncidentCritical", new Action<TicketOverviewModel, string>((vm, value) => { vm.IncidentCriticalChangeHint = value; })),
|
||||
("IncidentNewInfo", new Action<TicketOverviewModel, string>((vm, value) => { vm.IncidentNewInfoChangeHint = value; })),
|
||||
("ServiceRequestsNew", new Action<TicketOverviewModel, string>((vm, value) => { vm.ServiceRequestsNewChangeHint = value; })),
|
||||
("ServiceRequestsActive", new Action<TicketOverviewModel, string>((vm, value) => { vm.ServiceRequestsActiveChangeHint = value; })),
|
||||
("ServiceRequestsCritical", new Action<TicketOverviewModel, string>((vm, value) => { vm.ServiceRequestsCriticalChangeHint = value; })),
|
||||
("ServiceRequestsNewInfo", new Action<TicketOverviewModel, string>((vm, value) => { vm.ServiceRequestsNewInfoChangeHint = value; })),
|
||||
("UnassignedTickets", new Action<TicketOverviewModel, string>((vm, value) => { vm.UnassignedTicketsChangeHint = value; })),
|
||||
("UnassignedTicketsCritical", new Action<TicketOverviewModel, string>((vm, value) => { vm.UnassignedTicketsCriticalChangeHint = value; }))
|
||||
};
|
||||
@@ -225,6 +237,14 @@ namespace FasdDesktopUi.Basics.UserControls
|
||||
if (DataContext is TicketOverviewModel vm)
|
||||
vm.ResetSelection();
|
||||
}
|
||||
|
||||
public void SetServiceRequestsVisibility(bool isVisible)
|
||||
{
|
||||
Dispatcher.Invoke(() =>
|
||||
{
|
||||
ServiceRequestsRow.Height = isVisible ? GridLength.Auto : new GridLength(0);
|
||||
});
|
||||
}
|
||||
/// <summary>
|
||||
/// Prüft welche Daten für die Ansicht geladen werden sollen
|
||||
/// Wenn UseRoledTickets = true dann Rolebased Tickets und Incidents laden
|
||||
@@ -268,6 +288,8 @@ namespace FasdDesktopUi.Basics.UserControls
|
||||
if (counts == null || counts.Count == 0)
|
||||
counts = await LoadCountsFallbackAsync(useRoleTickets).ConfigureAwait(false);
|
||||
|
||||
SetServiceRequestsVisibility(TicketOverviewUpdateService.Instance?.ServiceRequestsEnabled == true);
|
||||
|
||||
await Dispatcher.InvokeAsync(() =>
|
||||
{
|
||||
foreach (var (key, setter) in CategorySetters)
|
||||
|
||||
@@ -560,6 +560,11 @@ Wie möchten Sie fortfahren?</Language>
|
||||
<Language Lang="DE">Eigene Störungen</Language>
|
||||
</UIItem>
|
||||
|
||||
<UIItem Name="TicketOverview.ScopeRow.Personal.ServiceRequests">
|
||||
<Language Lang="EN">My service requests</Language>
|
||||
<Language Lang="DE">Eigene Serviceanfragen</Language>
|
||||
</UIItem>
|
||||
|
||||
<UIItem Name="TicketOverview.ScopeRow.Personal.UnassignedTickets">
|
||||
<Language Lang="EN">My unassigned</Language>
|
||||
<Language Lang="DE">Eigener Eingang</Language>
|
||||
@@ -575,6 +580,11 @@ Wie möchten Sie fortfahren?</Language>
|
||||
<Language Lang="DE">Rollenstörungen</Language>
|
||||
</UIItem>
|
||||
|
||||
<UIItem Name="TicketOverview.ScopeRow.Role.ServiceRequests">
|
||||
<Language Lang="EN">Role service requests</Language>
|
||||
<Language Lang="DE">Rollen-Serviceanfragen</Language>
|
||||
</UIItem>
|
||||
|
||||
<UIItem Name="TicketOverview.ScopeRow.Role.UnassignedTickets">
|
||||
<Language Lang="EN">Role unassigned</Language>
|
||||
<Language Lang="DE">Rolleneingang</Language>
|
||||
@@ -1754,6 +1764,11 @@ Wollen Sie das F4SD Cockpit jetzt neu starten?</Language>
|
||||
<Language Lang="DE">Störungen</Language>
|
||||
</UIItem>
|
||||
|
||||
<UIItem Name="TicketOverview.Row.Heading.ServiceRequests">
|
||||
<Language Lang="EN">Service requests</Language>
|
||||
<Language Lang="DE">Serviceanfragen</Language>
|
||||
</UIItem>
|
||||
|
||||
<UIItem Name="TicketOverview.Row.Heading.UnassignedTickets">
|
||||
<Language Lang="EN">Unassigned</Language>
|
||||
<Language Lang="DE">Eingang</Language>
|
||||
|
||||
@@ -105,6 +105,7 @@ namespace FasdDesktopUi.Pages.SearchPage
|
||||
if (TicketOverviewUpdateService.Instance != null)
|
||||
{
|
||||
TicketOverviewUpdateService.Instance.OverviewCountsChanged += TicketOverviewUpdateService_OverviewCountsChanged;
|
||||
TicketOverviewUpdateService.Instance.ServiceRequestsAvailabilityChanged += TicketOverviewUpdateService_ServiceRequestsAvailabilityChanged;
|
||||
}
|
||||
|
||||
UiSettingsChanged(null, null);
|
||||
@@ -732,7 +733,10 @@ namespace FasdDesktopUi.Pages.SearchPage
|
||||
try
|
||||
{
|
||||
if (TicketOverviewUpdateService.Instance != null)
|
||||
{
|
||||
TicketOverviewUpdateService.Instance.OverviewCountsChanged -= TicketOverviewUpdateService_OverviewCountsChanged;
|
||||
TicketOverviewUpdateService.Instance.ServiceRequestsAvailabilityChanged -= TicketOverviewUpdateService_ServiceRequestsAvailabilityChanged;
|
||||
}
|
||||
_pipeServer?.Dispose();
|
||||
}
|
||||
catch { }
|
||||
@@ -1299,6 +1303,8 @@ namespace FasdDesktopUi.Pages.SearchPage
|
||||
var service = TicketOverviewUpdateService.Instance;
|
||||
if (service == null)
|
||||
return;
|
||||
|
||||
TicketOverviewUc?.SetServiceRequestsVisibility(service.ServiceRequestsEnabled);
|
||||
var counts = service.GetCountsForScope(IsFilterChecked);
|
||||
if (counts == null || counts.Count == 0)
|
||||
return;
|
||||
@@ -1307,6 +1313,13 @@ namespace FasdDesktopUi.Pages.SearchPage
|
||||
TicketOverviewUc?.RefreshHighlightState(IsFilterChecked);
|
||||
}
|
||||
|
||||
private void TicketOverviewUpdateService_ServiceRequestsAvailabilityChanged(object sender, EventArgs e)
|
||||
{
|
||||
var isVisible = TicketOverviewUpdateService.Instance?.ServiceRequestsEnabled == true;
|
||||
TicketOverviewUc?.SetServiceRequestsVisibility(isVisible);
|
||||
ScheduleSearchResultMaxHeightUpdate();
|
||||
}
|
||||
|
||||
private string BuildNotificationMessage(IReadOnlyList<TileCountChange> changes)
|
||||
{
|
||||
if (changes == null || changes.Count == 0)
|
||||
@@ -1370,6 +1383,8 @@ namespace FasdDesktopUi.Pages.SearchPage
|
||||
rowKey = "TicketOverview.Row.Heading.Tickets";
|
||||
else if (normalized.StartsWith("incident"))
|
||||
rowKey = "TicketOverview.Row.Heading.Incidents";
|
||||
else if (normalized.StartsWith("servicerequests"))
|
||||
rowKey = "TicketOverview.Row.Heading.ServiceRequests";
|
||||
else if (normalized.StartsWith("unassigned"))
|
||||
rowKey = "TicketOverview.Row.Heading.UnassignedTickets";
|
||||
else
|
||||
@@ -1397,6 +1412,8 @@ namespace FasdDesktopUi.Pages.SearchPage
|
||||
suffix = "Tickets";
|
||||
else if (string.Equals(rowKey, "TicketOverview.Row.Heading.Incidents", StringComparison.OrdinalIgnoreCase))
|
||||
suffix = "Incidents";
|
||||
else if (string.Equals(rowKey, "TicketOverview.Row.Heading.ServiceRequests", StringComparison.OrdinalIgnoreCase))
|
||||
suffix = "ServiceRequests";
|
||||
else if (string.Equals(rowKey, "TicketOverview.Row.Heading.UnassignedTickets", StringComparison.OrdinalIgnoreCase))
|
||||
suffix = "UnassignedTickets";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user