diff --git a/F4SD-Cockpit-ServerCore/DataHistoryCollectorM42Wpm.cs b/F4SD-Cockpit-ServerCore/DataHistoryCollectorM42Wpm.cs index 4627dec..e943dbb 100644 --- a/F4SD-Cockpit-ServerCore/DataHistoryCollectorM42Wpm.cs +++ b/F4SD-Cockpit-ServerCore/DataHistoryCollectorM42Wpm.cs @@ -37,9 +37,9 @@ namespace C4IT.DataHistoryProvider private const string constUrlUpdateSolution = "m42Services/api/c4itf4sdwebapi/updateactivitysolution/{0}/"; private const string constUrlGetPickupValues = "m42Services/api/c4itf4sdwebapi/getpickup/{0}?group={1}"; private const string constUrlGetRoleMeberships = "m42services/api/c4itf4sdwebapi/getrolememberships/?sid={0}"; - private const string constUrlGetTicketOverviewCounts = "m42Services/api/c4itf4sdwebapi/getticketoverviewcounts?sid={0}&scope={1}&keys={2}"; + private const string constUrlGetTicketOverviewCounts = "m42Services/api/c4itf4sdwebapi/getticketoverviewcounts"; private const string constUrlGetTicketOverviewCountsByRoles = "m42Services/api/c4itf4sdwebapi/getticketoverviewcountsbyroles"; - private const string constUrlGetTicketOverviewRelations = "m42Services/api/c4itf4sdwebapi/getticketoverviewrelations?sid={0}&scope={1}&key={2}&count={3}"; + private const string constUrlGetTicketOverviewRelations = "m42Services/api/c4itf4sdwebapi/getticketoverviewrelations"; private const string constUrlGetDataQueryRelationItems = "m42Services/api/dataquery/relationitems"; private const string constUrlGetDataQueryRelationItemsCount = "m42Services/api/dataquery/relationitems/count"; private const string constUrlCreateTicket = "m42Services/api/ticket/create?activitytype={0}"; @@ -118,6 +118,8 @@ namespace C4IT.DataHistoryProvider public string Sid { get; set; } public List RoleGuids { get; set; } = new List(); public List Keys { get; set; } = new List(); + public int QueueOption { get; set; } + public string Queues { get; set; } } private sealed class TicketOverviewCountsByRolesResponse @@ -803,11 +805,16 @@ namespace C4IT.DataHistoryProvider if (roleList.Count == 0) return new Dictionary>(); + var queueOption = GetActivityQueueOption(); + var encodedQueues = queueOption != 0 ? GetEncodedActivityQueues() : null; + var request = new TicketOverviewCountsByRolesRequest { Sid = requestInfo?.userInfo?.AdSid, RoleGuids = roleList, - Keys = requestedKeys?.Where(k => !string.IsNullOrWhiteSpace(k)).ToList() ?? new List() + Keys = requestedKeys?.Where(k => !string.IsNullOrWhiteSpace(k)).ToList() ?? new List(), + QueueOption = queueOption, + Queues = encodedQueues }; var jsonBody = JsonConvert.SerializeObject(request, Formatting.None, @@ -901,6 +908,36 @@ namespace C4IT.DataHistoryProvider return filtered; } + private int GetActivityQueueOption() + { + return (int)Collector.InfrastructureConfig.M42Wpm.ActivityQueueFilterOption; + } + + private string GetEncodedActivityQueues() + { + var queues = Collector.InfrastructureConfig.M42Wpm.ActivityQueues; + if (queues == null || queues.Count == 0) + return null; + + return string.Join("|", + queues.Select(q => + string.Format("{0}:{1}", + HttpUtility.UrlEncode(q.QueueName), + HttpUtility.UrlEncode(q.QueueID.ToString()) + ) + ) + ); + } + + private static void AppendQueueFilterQuery(StringBuilder urlBuilder, int queueOption, string encodedQueues) + { + if (queueOption != 0) + urlBuilder.Append("&queueoption=").Append(queueOption); + + if (!string.IsNullOrWhiteSpace(encodedQueues)) + urlBuilder.Append("&queues=").Append(encodedQueues); + } + private async Task> FetchTicketOverviewCountsAsync( string sid, string scope, @@ -910,15 +947,20 @@ namespace C4IT.DataHistoryProvider { try { - var keyParam = requestedKeys != null && requestedKeys.Count > 0 - ? HttpUtility.UrlEncode(string.Join(",", requestedKeys)) - : null; + var urlBuilder = new StringBuilder(constUrlGetTicketOverviewCounts); + urlBuilder.Append("?sid=").Append(HttpUtility.UrlEncode(sid)); + urlBuilder.Append("&scope=").Append(HttpUtility.UrlEncode(scope ?? string.Empty)); - var url = string.Format(constUrlGetTicketOverviewCounts, HttpUtility.UrlEncode(sid), scope, keyParam ?? string.Empty); - if (string.IsNullOrWhiteSpace(keyParam)) + if (requestedKeys != null && requestedKeys.Count > 0) { - url = $"m42Services/api/c4itf4sdwebapi/getticketoverviewcounts?sid={HttpUtility.UrlEncode(sid)}&scope={scope}"; + urlBuilder.Append("&keys=").Append(HttpUtility.UrlEncode(string.Join(",", requestedKeys))); } + + var queueOption = GetActivityQueueOption(); + var encodedQueues = queueOption != 0 ? GetEncodedActivityQueues() : null; + AppendQueueFilterQuery(urlBuilder, queueOption, encodedQueues); + + var url = urlBuilder.ToString(); var wc = await GetWebClient(requestInfo, token); var res = await wc.HttpEnh.GetAsync(url, token); if (token.IsCancellationRequested) @@ -1062,13 +1104,17 @@ namespace C4IT.DataHistoryProvider return new List(); var scope = useRoleScope ? "role" : "personal"; - var url = string.Format( - constUrlGetTicketOverviewRelations, - HttpUtility.UrlEncode(sid), - scope, - HttpUtility.UrlEncode(key), - Math.Max(0, count) - ); + var urlBuilder = new StringBuilder(constUrlGetTicketOverviewRelations); + urlBuilder.Append("?sid=").Append(HttpUtility.UrlEncode(sid)); + urlBuilder.Append("&scope=").Append(HttpUtility.UrlEncode(scope)); + urlBuilder.Append("&key=").Append(HttpUtility.UrlEncode(key)); + urlBuilder.Append("&count=").Append(Math.Max(0, count)); + + var queueOption = GetActivityQueueOption(); + var encodedQueues = queueOption != 0 ? GetEncodedActivityQueues() : null; + AppendQueueFilterQuery(urlBuilder, queueOption, encodedQueues); + + var url = urlBuilder.ToString(); var wc = await GetWebClient(requestInfo, Token); var res = await wc.HttpEnh.GetAsync(url, Token);