Queues Ticketoverview

This commit is contained in:
Meik
2026-02-04 09:47:40 +01:00
parent 688c7b1fb6
commit 06d4b16f43
2 changed files with 160 additions and 51 deletions

View File

@@ -326,7 +326,12 @@ namespace C4IT.F4SD
public bool IsIncident { get; set; }
}
internal async Task<TicketOverviewCountsResult> getTicketOverviewCounts(string sid, string scope, IEnumerable<string> keys)
internal async Task<TicketOverviewCountsResult> getTicketOverviewCounts(
string sid,
string scope,
IEnumerable<string> keys,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
@@ -343,7 +348,7 @@ namespace C4IT.F4SD
normalizedKeys.AddRange(TicketOverviewKeys);
}
var entries = await LoadTicketOverviewEntries(sid, useRoleScope);
var entries = await LoadTicketOverviewEntries(sid, useRoleScope, queueoption, queues);
var counts = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
foreach (var key in normalizedKeys)
@@ -364,7 +369,12 @@ namespace C4IT.F4SD
}
}
internal async Task<TicketOverviewCountsByRoleResult> getTicketOverviewCountsByRoles(string sid, IEnumerable<Guid> roleGuids, IEnumerable<string> keys)
internal async Task<TicketOverviewCountsByRoleResult> getTicketOverviewCountsByRoles(
string sid,
IEnumerable<Guid> roleGuids,
IEnumerable<string> keys,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
@@ -384,7 +394,7 @@ namespace C4IT.F4SD
if (roleIds.Count == 0)
return new TicketOverviewCountsByRoleResult();
var entries = await LoadTicketOverviewEntriesByRoleIds(roleIds);
var entries = await LoadTicketOverviewEntriesByRoleIds(roleIds, queueoption, queues);
var entriesByRole = entries
.GroupBy(entry => entry.RecipientRoleId)
.ToDictionary(group => group.Key, group => group.ToList());
@@ -422,7 +432,13 @@ namespace C4IT.F4SD
}
}
internal async Task<List<TicketOverviewRelationDto>> getTicketOverviewRelations(string sid, string scope, string key, int count)
internal async Task<List<TicketOverviewRelationDto>> getTicketOverviewRelations(
string sid,
string scope,
string key,
int count,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
@@ -432,7 +448,7 @@ namespace C4IT.F4SD
return new List<TicketOverviewRelationDto>();
var useRoleScope = string.Equals(scope, "role", StringComparison.OrdinalIgnoreCase);
var entries = await LoadTicketOverviewEntries(sid, useRoleScope);
var entries = await LoadTicketOverviewEntries(sid, useRoleScope, queueoption, queues);
var filtered = entries
.Where(entry => MatchesTicketOverviewKey(entry, key))
@@ -486,7 +502,11 @@ namespace C4IT.F4SD
}
}
private async Task<List<TicketOverviewEntry>> LoadTicketOverviewEntries(string sid, bool useRoleScope)
private async Task<List<TicketOverviewEntry>> LoadTicketOverviewEntries(
string sid,
bool useRoleScope,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
@@ -497,7 +517,7 @@ namespace C4IT.F4SD
if (string.IsNullOrWhiteSpace(sid))
return new List<TicketOverviewEntry>();
var filter = await BuildTicketOverviewFilterAsync(sid, useRoleScope);
var filter = await BuildTicketOverviewFilterAsync(sid, useRoleScope, queueoption, queues);
return await LoadTicketOverviewEntriesByFilter(filter);
}
catch (Exception E)
@@ -511,7 +531,10 @@ namespace C4IT.F4SD
}
}
private async Task<List<TicketOverviewEntry>> LoadTicketOverviewEntriesByRoleIds(IEnumerable<Guid> roleIds)
private async Task<List<TicketOverviewEntry>> LoadTicketOverviewEntriesByRoleIds(
IEnumerable<Guid> roleIds,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
@@ -519,7 +542,7 @@ namespace C4IT.F4SD
{
await Task.Delay(0);
var filter = BuildTicketOverviewFilterForRoleIds(roleIds);
var filter = BuildTicketOverviewFilterForRoleIds(roleIds, null, queueoption, queues);
return await LoadTicketOverviewEntriesByFilter(filter);
}
catch (Exception E)
@@ -607,9 +630,13 @@ namespace C4IT.F4SD
}
}
private async Task<string> BuildTicketOverviewFilterAsync(string sid, bool useRoleScope)
private async Task<string> BuildTicketOverviewFilterAsync(
string sid,
bool useRoleScope,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
{
var filter = BuildTicketOverviewBaseFilter();
var filter = BuildTicketOverviewBaseFilter(queueoption, queues);
if (!useRoleScope)
{
@@ -621,7 +648,7 @@ namespace C4IT.F4SD
return BuildTicketOverviewFilterForRoleIds(roleIds, filter);
}
private string BuildTicketOverviewBaseFilter()
private string BuildTicketOverviewBaseFilter(int queueoption, List<cApiM42TicketQueueInfo> queues)
{
var filter = "T(SPSCommonClassBase).State <> 204";
@@ -636,12 +663,19 @@ namespace C4IT.F4SD
filter += " AND (UsedInTypeSPSActivityTypeIncident IS NOT NULL)";
}
filter = AppendQueueFilter(filter, queueoption, queues);
return filter;
}
private string BuildTicketOverviewFilterForRoleIds(IEnumerable<Guid> roleIds, string baseFilter = null)
private string BuildTicketOverviewFilterForRoleIds(
IEnumerable<Guid> roleIds,
string baseFilter = null,
int queueoption = 0,
List<cApiM42TicketQueueInfo> queues = null)
{
var filter = string.IsNullOrWhiteSpace(baseFilter) ? BuildTicketOverviewBaseFilter() : baseFilter;
var filter = string.IsNullOrWhiteSpace(baseFilter)
? BuildTicketOverviewBaseFilter(queueoption, queues)
: baseFilter;
var roleIdList = (roleIds ?? Enumerable.Empty<Guid>())
.Where(id => id != Guid.Empty)
@@ -656,6 +690,53 @@ namespace C4IT.F4SD
return filter;
}
private string AppendQueueFilter(string filter, int queueoption, List<cApiM42TicketQueueInfo> queues)
{
if (queues != null && queues.Count > 0)
{
var escapedNames = queues
.Select(q => $"'{Escape(q.QueueName)}'")
.ToList();
var escapedIds = queues
.Select(q => $"'{Escape(q.QueueID.ToString())}'")
.ToList();
string nameList = string.Join(", ", escapedNames);
string idList = string.Join(", ", escapedIds);
switch (queueoption)
{
case 1:
filter +=
$" AND (" +
"Queue IS NULL" +
$" OR Queue.Name IN ({nameList})" +
$" OR Queue.ID IN ({idList})" +
")";
break;
case 2:
filter +=
$" AND (" +
"Queue IS NOT NULL" +
$" AND (Queue.Name IN ({nameList})" +
$" OR Queue.ID IN ({idList}))" +
")";
break;
case 3:
filter += " AND Queue IS NULL";
break;
default:
break;
}
}
else if (queueoption == 3)
{
filter += " AND Queue IS NULL";
}
return filter;
}
private async Task<List<Guid>> ResolveTicketOverviewRoleIdsAsync(string sid, IEnumerable<Guid> roleGuids)
{
var roleIds = (roleGuids ?? Enumerable.Empty<Guid>())