diff
This commit is contained in:
@@ -110,6 +110,9 @@ namespace FasdDesktopUi.Basics.Services.SupportCase.Controllers
|
||||
{
|
||||
try
|
||||
{
|
||||
if (_focusedRelation == relation)
|
||||
return;
|
||||
|
||||
_selectedHealthcard = _supportCaseProcessor.GetHealthcardFor(relation);
|
||||
HashSet<string> requiredTables = cHealthCard.GetRequiredTables(_selectedHealthcard);
|
||||
_ = Task.Run(async () => await _supportCaseProcessor.LoadSupportCaseDataAsync(relation, requiredTables));
|
||||
|
||||
@@ -16,6 +16,8 @@ namespace FasdDesktopUi.Basics.Services.SupportCase
|
||||
private readonly Dictionary<string, Dictionary<cF4sdApiSearchResultRelation, cF4SDHealthCardRawData.cHealthCardTable>> _supportCaseDataCache = new Dictionary<string, Dictionary<cF4sdApiSearchResultRelation, cF4SDHealthCardRawData.cHealthCardTable>>();
|
||||
private readonly Dictionary<cF4sdApiSearchResultRelation, cF4SDHealthCardRawData> _rawDataCache = new Dictionary<cF4sdApiSearchResultRelation, cF4SDHealthCardRawData>(); // todo remove, currently only used for SupportCaseDataProviderArtifact
|
||||
|
||||
private readonly ICollection<cF4sdApiSearchResultRelation> _relationsCurrentlyLoadingData = new HashSet<cF4sdApiSearchResultRelation>();
|
||||
|
||||
internal readonly Guid Id;
|
||||
private readonly IRelationService _relationService;
|
||||
public cSupportCaseDataProvider SupportCaseDataProviderArtifact { get; }
|
||||
@@ -65,19 +67,18 @@ namespace FasdDesktopUi.Basics.Services.SupportCase
|
||||
if (relations is null)
|
||||
return;
|
||||
|
||||
foreach (var relationType in relations)
|
||||
{
|
||||
//TODO Max fragen obs passt! Bug: in den Ticketrelations (Header Ticketauswahl) sind nur zwei Tickets sichtbar anstatt 5 oder mehr..
|
||||
if (_caseRelations.TryGetValue(relationType.Key, out var caseRelation))
|
||||
_caseRelations[relationType.Key] = caseRelation.Union(relationType).ToList();
|
||||
else
|
||||
_caseRelations.Add(relationType.Key, relationType.ToList());
|
||||
|
||||
if (SupportCaseDataProviderArtifact?.CaseRelations?.TryGetValue(relationType.Key, out var caseRelations) ?? false)
|
||||
SupportCaseDataProviderArtifact.CaseRelations[relationType.Key] = caseRelations.Union(relationType).ToList();
|
||||
else
|
||||
SupportCaseDataProviderArtifact?.CaseRelations?.Add(relationType.Key, relationType.ToList());
|
||||
}
|
||||
foreach (var relationType in relations)
|
||||
{
|
||||
if (_caseRelations.TryGetValue(relationType.Key, out var caseRelation))
|
||||
caseRelation = caseRelation.Union(relationType).ToList();
|
||||
else
|
||||
_caseRelations.Add(relationType.Key, relationType.ToList());
|
||||
|
||||
if (SupportCaseDataProviderArtifact?.CaseRelations?.TryGetValue(relationType.Key, out var caseRelations) ?? false)
|
||||
caseRelations = caseRelations.Union(relationType).ToList();
|
||||
else
|
||||
SupportCaseDataProviderArtifact?.CaseRelations?.Add(relationType.Key, relationType.ToList());
|
||||
}
|
||||
|
||||
CaseRelationsAdded?.Invoke(this, new RelationEventArgs() { Relations = relations });
|
||||
}
|
||||
@@ -91,6 +92,11 @@ namespace FasdDesktopUi.Basics.Services.SupportCase
|
||||
{
|
||||
try
|
||||
{
|
||||
if (_relationsCurrentlyLoadingData.Contains(relation))
|
||||
return;
|
||||
|
||||
_relationsCurrentlyLoadingData.Add(relation);
|
||||
|
||||
cF4SDHealthCardRawData rawData = null;
|
||||
|
||||
// todo this is only a temporary fix. Currently the tablesToLoad contain also detail tables
|
||||
@@ -131,11 +137,17 @@ namespace FasdDesktopUi.Basics.Services.SupportCase
|
||||
.Where(table => table.Key.StartsWith("Computation_") == false)
|
||||
.All(table => !table.Value.IsIncomplete && !table.Value.Columns.Values.Any(c => c.IsIncomplete)) ?? false;
|
||||
}
|
||||
|
||||
SupportCaseDataProviderArtifact.HealthCardDataHelper.LoadingHelper.LastDataRequest = DateTime.Now;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogException(ex);
|
||||
}
|
||||
finally
|
||||
{
|
||||
_relationsCurrentlyLoadingData.Remove(relation);
|
||||
}
|
||||
|
||||
bool IsRawDataCacheComplete()
|
||||
{
|
||||
@@ -236,12 +248,12 @@ namespace FasdDesktopUi.Basics.Services.SupportCase
|
||||
|
||||
table.IsIncomplete = true;
|
||||
|
||||
foreach (var column in table.Columns.Values)
|
||||
{
|
||||
if (column.Values != null && column.Values.Count > 0)
|
||||
column.Values[0] = null;
|
||||
column.IsIncomplete = true;
|
||||
}
|
||||
foreach (var column in table.Columns.Values)
|
||||
{
|
||||
if (column.Values != null && column.Values.Count > 0)
|
||||
column.Values[0] = null;
|
||||
column.IsIncomplete = true;
|
||||
}
|
||||
|
||||
invalidatedTables.Add(table);
|
||||
}
|
||||
@@ -253,12 +265,12 @@ namespace FasdDesktopUi.Basics.Services.SupportCase
|
||||
{
|
||||
table.IsIncomplete = true;
|
||||
|
||||
foreach (var column in table.Columns.Values)
|
||||
{
|
||||
if (column.Values != null && column.Values.Count > 0)
|
||||
column.Values[0] = null;
|
||||
column.IsIncomplete = true;
|
||||
}
|
||||
foreach (var column in table.Columns.Values)
|
||||
{
|
||||
if (column.Values != null && column.Values.Count > 0)
|
||||
column.Values[0] = null;
|
||||
column.IsIncomplete = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@@ -140,6 +140,9 @@ namespace FasdDesktopUi.Basics.Services.SupportCase
|
||||
{
|
||||
var status = enumActualizeStatus.unknown;
|
||||
|
||||
if (!agentUserId.HasValue && !agentDeviceId.HasValue)
|
||||
return status;
|
||||
|
||||
try
|
||||
{
|
||||
TimeSpan refreshDelay = TimeSpan.FromMilliseconds(500);
|
||||
|
||||
@@ -6,8 +6,7 @@ using System.Windows;
|
||||
using System.Windows.Documents;
|
||||
using System.Linq;
|
||||
using System.Windows.Input;
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Threading;
|
||||
using System.Diagnostics;
|
||||
|
||||
using C4IT.FASD.Base;
|
||||
using C4IT.Logging;
|
||||
@@ -103,19 +102,19 @@ namespace FasdDesktopUi.Basics
|
||||
QuickActionProtocollHelper = new cQuickActionProtocollHelper(this);
|
||||
}
|
||||
|
||||
public static async Task<cSupportCaseDataProvider> GetDataProviderForAsync(cF4sdApiSearchResultRelation selectedRelation, IRelationService relationService)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (selectedRelation == null)
|
||||
{
|
||||
Debug.Assert(true, "The selected relation must not be null here!");
|
||||
LogEntry("The selected relation must not be null here!", LogLevels.Error);
|
||||
return null;
|
||||
}
|
||||
|
||||
// get the identities of the selected relation
|
||||
var Identities = selectedRelation.Identities.Clone();
|
||||
public static async Task<cSupportCaseDataProvider> GetDataProviderForAsync(cF4sdApiSearchResultRelation selectedRelation, IRelationService relationService)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (selectedRelation == null)
|
||||
{
|
||||
Debug.Assert(true, "The selected relation must not be null here!");
|
||||
LogEntry("The selected relation must not be null here!", LogLevels.Error);
|
||||
return null;
|
||||
}
|
||||
|
||||
// get the identities of the selected relation
|
||||
var Identities = selectedRelation.Identities.Clone();
|
||||
|
||||
// get the main indentities from all identites (normally this is the user, in a special case, where a computer was searched and found without any user activities, it could be the computer)
|
||||
var MainIdentity = Identities.FirstOrDefault(identity => identity.Class == enumFasdInformationClass.User);
|
||||
@@ -150,17 +149,15 @@ namespace FasdDesktopUi.Basics
|
||||
cSupportCaseDataProvider.CurrentProvider = null;
|
||||
}
|
||||
|
||||
if (!DataProviders.TryGetValue(MainIdentity.Id, out var _result))
|
||||
{
|
||||
_result = new cSupportCaseDataProvider();
|
||||
DataProviders.Add(MainIdentity.Id, _result);
|
||||
}
|
||||
|
||||
//await EnsureSupportCasePagesAsync();
|
||||
|
||||
_result.NamedParameterEntries = new cNamedParameterList(_result);
|
||||
|
||||
_result.StartCase(MainIdentity.Id);
|
||||
if (!DataProviders.TryGetValue(MainIdentity.Id, out var _result))
|
||||
{
|
||||
_result = new cSupportCaseDataProvider();
|
||||
DataProviders.Add(MainIdentity.Id, _result);
|
||||
}
|
||||
|
||||
_result.NamedParameterEntries = new cNamedParameterList(_result);
|
||||
|
||||
_result.StartCase(MainIdentity.Id);
|
||||
|
||||
var supportCase = SupportCaseFactory.Get(MainIdentity, relationService, _result);
|
||||
var supportCaseProcessor = SupportCaseProcessorFactory.Get(MainIdentity.Id);
|
||||
@@ -169,14 +166,8 @@ namespace FasdDesktopUi.Basics
|
||||
supportCaseProcessor.SetSupportCase(supportCase);
|
||||
supportCaseController.SetSupportCaseProcessor(supportCaseProcessor, Identities);
|
||||
|
||||
if (cSupportCaseDataProvider.detailsPage == null || cSupportCaseDataProvider.slimPage == null)
|
||||
{
|
||||
LogEntry("Support case pages are not initialized; aborting case start.", LogLevels.Error);
|
||||
return null;
|
||||
}
|
||||
|
||||
cSupportCaseDataProvider.detailsPage.SetSupportCaseController(supportCaseController);
|
||||
cSupportCaseDataProvider.slimPage.SetSupportCaseController(supportCaseController);
|
||||
cSupportCaseDataProvider.detailsPage.SetSupportCaseController(supportCaseController);
|
||||
cSupportCaseDataProvider.slimPage.SetSupportCaseController(supportCaseController);
|
||||
|
||||
var Status = await _result.SetViewDataAsync(requiredInformationClasses, Identities, true);
|
||||
|
||||
@@ -204,7 +195,7 @@ namespace FasdDesktopUi.Basics
|
||||
{
|
||||
cSupportCaseDataProvider.slimPage.Show();
|
||||
cSupportCaseDataProvider.detailsPage?.Hide();
|
||||
}
|
||||
}
|
||||
|
||||
return _result;
|
||||
}
|
||||
@@ -239,11 +230,11 @@ namespace FasdDesktopUi.Basics
|
||||
return selectedRelation;
|
||||
}
|
||||
|
||||
public void StartCase(Guid userId)
|
||||
{
|
||||
var CM = MethodBase.GetCurrentMethod();
|
||||
LogMethodBegin(CM);
|
||||
try
|
||||
public void StartCase(Guid userId)
|
||||
{
|
||||
var CM = MethodBase.GetCurrentMethod();
|
||||
LogMethodBegin(CM);
|
||||
try
|
||||
{
|
||||
lock (caseIdLockObject)
|
||||
{
|
||||
@@ -283,28 +274,11 @@ namespace FasdDesktopUi.Basics
|
||||
{
|
||||
LogException(E);
|
||||
}
|
||||
finally
|
||||
{
|
||||
LogMethodEnd(CM);
|
||||
}
|
||||
}
|
||||
|
||||
private static async Task EnsureSupportCasePagesAsync()
|
||||
{
|
||||
if (detailsPage != null && slimPage != null)
|
||||
return;
|
||||
|
||||
if (Application.Current == null)
|
||||
return;
|
||||
|
||||
await Application.Current.Dispatcher.InvokeAsync(() =>
|
||||
{
|
||||
if (slimPage == null)
|
||||
slimPage = new Pages.SlimPage.SlimPageView();
|
||||
if (detailsPage == null)
|
||||
detailsPage = new Pages.DetailsPage.DetailsPageView();
|
||||
}, DispatcherPriority.Normal);
|
||||
}
|
||||
finally
|
||||
{
|
||||
LogMethodEnd(CM);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task CloseCaseAsync()
|
||||
{
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
d:DesignWidth="40"
|
||||
x:Name="BadgeControl">
|
||||
|
||||
<Border Background="{DynamicResource Color.F4SD}"
|
||||
<Border Background="{DynamicResource Color.SoftContrast}"
|
||||
CornerRadius="5">
|
||||
|
||||
<StackPanel HorizontalAlignment="Center"
|
||||
@@ -19,7 +19,7 @@
|
||||
Margin="7.5 2.5">
|
||||
<TextBlock FontSize="12"
|
||||
FontWeight="Bold"
|
||||
Foreground="White"
|
||||
Foreground="{DynamicResource FontColor.DetailsPage.DataHistory.Value}"
|
||||
Text="{Binding ElementName=BadgeControl, Path=Text}" />
|
||||
</StackPanel>
|
||||
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
using F4SD_AdaptableIcon;
|
||||
using FasdDesktopUi.Basics.Helper;
|
||||
using System;
|
||||
using System.Windows;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using static C4IT.Logging.cLogManager;
|
||||
|
||||
namespace FasdDesktopUi.Basics.UserControls
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user