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

@@ -186,7 +186,7 @@ namespace C4IT.F4SD
}
internal async Task<List<cF4SDTicketSummary>> getTicketListByUser(string userSid, int hours, int queueoption, List<cApiM42TicketQueueInfo> queues)
internal async Task<List<cF4SDTicketSummary>> getTicketListByUser(string userSid, int hours, int queueoption, List<cApiM42TicketQueueInfo> queues, cActivityFilterPolicy filters = null)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
@@ -196,7 +196,10 @@ namespace C4IT.F4SD
await Task.Delay(0);
var tickets = new List<cF4SDTicketSummary>();
var activityFilter = GetActivityFilter(userSid, hours, ticketAndServiceRequestEnabled(), queueoption, queues);
var activityFilter = GetActivityFilter(userSid, hours, ticketAndServiceRequestEnabled(), queueoption, queues);
activityFilter = await ApplyActivityFiltersAsync(activityFilter, filters);
if (string.IsNullOrWhiteSpace(activityFilter))
return new List<cF4SDTicketSummary>();
LogEntry($"ASql Filter: {activityFilter}");
var activityTable = FragmentRequestBase.SimpleLoad(SPSActivityClassBaseID,
@@ -374,12 +377,13 @@ namespace C4IT.F4SD
public string ActivityType { get; set; }
}
internal async Task<TicketOverviewCountsResult> getTicketOverviewCounts(
string sid,
string scope,
IEnumerable<string> keys,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
internal async Task<TicketOverviewCountsResult> getTicketOverviewCounts(
string sid,
string scope,
IEnumerable<string> keys,
int queueoption,
List<cApiM42TicketQueueInfo> queues,
cActivityFilterPolicy filters = null)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
@@ -396,11 +400,11 @@ namespace C4IT.F4SD
normalizedKeys.AddRange(TicketOverviewKeys);
}
var entries = await LoadTicketOverviewEntries(sid, useRoleScope, queueoption, queues);
var entries = await LoadTicketOverviewEntries(sid, useRoleScope, queueoption, queues, filters);
List<TicketOverviewEntry> unassignedEntries = null;
if (!useRoleScope && normalizedKeys.Any(IsUnassignedOverviewKey))
{
unassignedEntries = await LoadTicketOverviewUnassignedEntriesForPersonalScope(sid, queueoption, queues);
unassignedEntries = await LoadTicketOverviewUnassignedEntriesForPersonalScope(sid, queueoption, queues, filters);
}
var counts = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
@@ -430,12 +434,13 @@ namespace C4IT.F4SD
}
}
internal async Task<TicketOverviewCountsByRoleResult> getTicketOverviewCountsByRoles(
string sid,
IEnumerable<Guid> roleGuids,
IEnumerable<string> keys,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
internal async Task<TicketOverviewCountsByRoleResult> getTicketOverviewCountsByRoles(
string sid,
IEnumerable<Guid> roleGuids,
IEnumerable<string> keys,
int queueoption,
List<cApiM42TicketQueueInfo> queues,
cActivityFilterPolicy filters = null)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
@@ -455,7 +460,7 @@ namespace C4IT.F4SD
if (roleIds.Count == 0)
return new TicketOverviewCountsByRoleResult();
var entries = await LoadTicketOverviewEntriesByRoleIds(roleIds, queueoption, queues);
var entries = await LoadTicketOverviewEntriesByRoleIds(roleIds, queueoption, queues, filters);
var entriesByRole = entries
.GroupBy(entry => entry.RecipientRoleId)
.ToDictionary(group => group.Key, group => group.ToList());
@@ -493,13 +498,14 @@ namespace C4IT.F4SD
}
}
internal async Task<List<TicketOverviewRelationDto>> getTicketOverviewRelations(
string sid,
string scope,
string key,
int count,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
internal async Task<List<TicketOverviewRelationDto>> getTicketOverviewRelations(
string sid,
string scope,
string key,
int count,
int queueoption,
List<cApiM42TicketQueueInfo> queues,
cActivityFilterPolicy filters = null)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
@@ -512,11 +518,11 @@ namespace C4IT.F4SD
List<TicketOverviewEntry> entries;
if (!useRoleScope && IsUnassignedOverviewKey(key))
{
entries = await LoadTicketOverviewUnassignedEntriesForPersonalScope(sid, queueoption, queues);
entries = await LoadTicketOverviewUnassignedEntriesForPersonalScope(sid, queueoption, queues, filters);
}
else
{
entries = await LoadTicketOverviewEntries(sid, useRoleScope, queueoption, queues);
entries = await LoadTicketOverviewEntries(sid, useRoleScope, queueoption, queues, filters);
}
var filtered = entries
@@ -572,11 +578,12 @@ namespace C4IT.F4SD
}
}
private async Task<List<TicketOverviewEntry>> LoadTicketOverviewEntries(
string sid,
bool useRoleScope,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
private async Task<List<TicketOverviewEntry>> LoadTicketOverviewEntries(
string sid,
bool useRoleScope,
int queueoption,
List<cApiM42TicketQueueInfo> queues,
cActivityFilterPolicy filters = null)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
@@ -587,7 +594,7 @@ namespace C4IT.F4SD
if (string.IsNullOrWhiteSpace(sid))
return new List<TicketOverviewEntry>();
var filter = await BuildTicketOverviewFilterAsync(sid, useRoleScope, queueoption, queues);
var filter = await BuildTicketOverviewFilterAsync(sid, useRoleScope, queueoption, queues, filters);
return await LoadTicketOverviewEntriesByFilter(filter);
}
catch (Exception E)
@@ -601,10 +608,11 @@ namespace C4IT.F4SD
}
}
private async Task<List<TicketOverviewEntry>> LoadTicketOverviewUnassignedEntriesForPersonalScope(
string sid,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
private async Task<List<TicketOverviewEntry>> LoadTicketOverviewUnassignedEntriesForPersonalScope(
string sid,
int queueoption,
List<cApiM42TicketQueueInfo> queues,
cActivityFilterPolicy filters = null)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
@@ -616,7 +624,8 @@ namespace C4IT.F4SD
return new List<TicketOverviewEntry>();
var roleIds = await ResolveTicketOverviewRoleIdsAsync(sid, null);
var filter = BuildTicketOverviewFilterForRoleIds(roleIds, null, queueoption, queues);
var filter = BuildTicketOverviewFilterForRoleIds(roleIds, null, queueoption, queues);
filter = await ApplyActivityFiltersAsync(filter, filters);
if (string.IsNullOrWhiteSpace(filter))
return new List<TicketOverviewEntry>();
@@ -634,10 +643,11 @@ namespace C4IT.F4SD
}
}
private async Task<List<TicketOverviewEntry>> LoadTicketOverviewEntriesByRoleIds(
IEnumerable<Guid> roleIds,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
private async Task<List<TicketOverviewEntry>> LoadTicketOverviewEntriesByRoleIds(
IEnumerable<Guid> roleIds,
int queueoption,
List<cApiM42TicketQueueInfo> queues,
cActivityFilterPolicy filters = null)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
@@ -645,7 +655,8 @@ namespace C4IT.F4SD
{
await Task.Delay(0);
var filter = BuildTicketOverviewFilterForRoleIds(roleIds, null, queueoption, queues);
var filter = BuildTicketOverviewFilterForRoleIds(roleIds, null, queueoption, queues);
filter = await ApplyActivityFiltersAsync(filter, filters);
return await LoadTicketOverviewEntriesByFilter(filter);
}
catch (Exception E)
@@ -784,23 +795,25 @@ namespace C4IT.F4SD
return null;
}
private async Task<string> BuildTicketOverviewFilterAsync(
string sid,
bool useRoleScope,
int queueoption,
List<cApiM42TicketQueueInfo> queues)
private async Task<string> BuildTicketOverviewFilterAsync(
string sid,
bool useRoleScope,
int queueoption,
List<cApiM42TicketQueueInfo> queues,
cActivityFilterPolicy filters = null)
{
var filter = BuildTicketOverviewBaseFilter(queueoption, queues);
if (!useRoleScope)
{
var recipientFilter = $"Recipient.Accounts.T(SPSAccountClassAd).Sid = '{Escape(sid)}'";
filter += $" AND ({recipientFilter})";
return filter;
filter += $" AND ({recipientFilter})";
return await ApplyActivityFiltersAsync(filter, filters);
}
var roleIds = await ResolveTicketOverviewRoleIdsAsync(sid, null);
return BuildTicketOverviewFilterForRoleIds(roleIds, filter);
filter = BuildTicketOverviewFilterForRoleIds(roleIds, filter);
return await ApplyActivityFiltersAsync(filter, filters);
}
private string BuildTicketOverviewBaseFilter(int queueoption, List<cApiM42TicketQueueInfo> queues)