Add provider-aware activity filter API

This commit is contained in:
Drechsler, Meik
2026-07-23 11:09:14 +02:00
parent af679472db
commit 083fdf01dc
11 changed files with 728 additions and 74 deletions

View File

@@ -22,7 +22,8 @@ namespace C4IT.F4SD
Guid userId,
int hours,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
List<cApiM42TicketQueueInfo> queues,
cActivityFilterPolicy filters = null)
{
var method = MethodBase.GetCurrentMethod();
LogMethodBegin(method);
@@ -33,6 +34,9 @@ namespace C4IT.F4SD
return new List<cF4SDTicketSummary>();
var activityFilter = GetActivityFilter(userId, hours, ticketAndServiceRequestEnabled(), queueoption, queues);
activityFilter = await ApplyActivityFiltersAsync(activityFilter, filters);
if (string.IsNullOrWhiteSpace(activityFilter))
return new List<cF4SDTicketSummary>();
LogEntry($"Generating ticket list for userId '{userId}'. ASQL filter: {activityFilter}", LogLevels.Debug);
var activityTable = FragmentRequestBase.SimpleLoad(
@@ -91,7 +95,8 @@ namespace C4IT.F4SD
string scope,
IEnumerable<string> keys,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
List<cApiM42TicketQueueInfo> queues,
cActivityFilterPolicy filters = null)
{
var method = MethodBase.GetCurrentMethod();
LogMethodBegin(method);
@@ -106,10 +111,10 @@ namespace C4IT.F4SD
if (normalizedKeys.Count == 0)
normalizedKeys.AddRange(TicketOverviewKeys);
var entries = await LoadTicketOverviewEntries(userId, useRoleScope, queueoption, queues);
var entries = await LoadTicketOverviewEntries(userId, useRoleScope, queueoption, queues, filters);
List<TicketOverviewEntry> unassignedEntries = null;
if (!useRoleScope && normalizedKeys.Any(IsUnassignedOverviewKey))
unassignedEntries = await LoadTicketOverviewUnassignedEntriesForPersonalScope(userId, queueoption, queues);
unassignedEntries = await LoadTicketOverviewUnassignedEntriesForPersonalScope(userId, queueoption, queues, filters);
var counts = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
foreach (var key in normalizedKeys)
@@ -138,10 +143,11 @@ namespace C4IT.F4SD
IEnumerable<Guid> roleGuids,
IEnumerable<string> keys,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
List<cApiM42TicketQueueInfo> queues,
cActivityFilterPolicy filters = null)
{
var roleIds = await ResolveTicketOverviewRoleIdsAsync(userId, roleGuids);
return await getTicketOverviewCountsByRoles(null, roleIds, keys, queueoption, queues);
return await getTicketOverviewCountsByRoles(null, roleIds, keys, queueoption, queues, filters);
}
internal async Task<List<TicketOverviewRelationDto>> getTicketOverviewRelations(
@@ -150,7 +156,8 @@ namespace C4IT.F4SD
string key,
int count,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
List<cApiM42TicketQueueInfo> queues,
cActivityFilterPolicy filters = null)
{
var method = MethodBase.GetCurrentMethod();
LogMethodBegin(method);
@@ -161,8 +168,8 @@ namespace C4IT.F4SD
var useRoleScope = string.Equals(scope, "role", StringComparison.OrdinalIgnoreCase);
var entries = !useRoleScope && IsUnassignedOverviewKey(key)
? await LoadTicketOverviewUnassignedEntriesForPersonalScope(userId, queueoption, queues)
: await LoadTicketOverviewEntries(userId, useRoleScope, queueoption, queues);
? await LoadTicketOverviewUnassignedEntriesForPersonalScope(userId, queueoption, queues, filters)
: await LoadTicketOverviewEntries(userId, useRoleScope, queueoption, queues, filters);
var filtered = entries
.Where(entry => MatchesTicketOverviewKey(entry, key))
@@ -212,25 +219,28 @@ namespace C4IT.F4SD
Guid userId,
bool useRoleScope,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
List<cApiM42TicketQueueInfo> queues,
cActivityFilterPolicy filters = null)
{
if (userId == Guid.Empty)
return new List<TicketOverviewEntry>();
var filter = await BuildTicketOverviewFilterAsync(userId, useRoleScope, queueoption, queues);
var filter = await BuildTicketOverviewFilterAsync(userId, useRoleScope, queueoption, queues, filters);
return await LoadTicketOverviewEntriesByFilter(filter);
}
private async Task<List<TicketOverviewEntry>> LoadTicketOverviewUnassignedEntriesForPersonalScope(
Guid userId,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
List<cApiM42TicketQueueInfo> queues,
cActivityFilterPolicy filters = null)
{
if (userId == Guid.Empty)
return new List<TicketOverviewEntry>();
var roleIds = await ResolveTicketOverviewRoleIdsAsync(userId, null);
var filter = BuildTicketOverviewFilterForRoleIds(roleIds, null, queueoption, queues);
filter = await ApplyActivityFiltersAsync(filter, filters);
if (string.IsNullOrWhiteSpace(filter))
return new List<TicketOverviewEntry>();
@@ -241,14 +251,16 @@ namespace C4IT.F4SD
Guid userId,
bool useRoleScope,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
List<cApiM42TicketQueueInfo> queues,
cActivityFilterPolicy filters = null)
{
var filter = BuildTicketOverviewBaseFilter(queueoption, queues);
if (!useRoleScope)
return filter + $" AND (Recipient = '{Escape(userId.ToString("D"))}')";
return await ApplyActivityFiltersAsync(filter + $" AND (Recipient = '{Escape(userId.ToString("D"))}')", filters);
var roleIds = await ResolveTicketOverviewRoleIdsAsync(userId, null);
return BuildTicketOverviewFilterForRoleIds(roleIds, filter);
filter = BuildTicketOverviewFilterForRoleIds(roleIds, filter);
return await ApplyActivityFiltersAsync(filter, filters);
}
private async Task<List<Guid>> ResolveTicketOverviewRoleIdsAsync(Guid userId, IEnumerable<Guid> roleGuids)