Queues Ticketoverview
This commit is contained in:
@@ -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>())
|
||||
|
||||
Reference in New Issue
Block a user