From fd29954b721497f16bcf9d4f5429f5e92770299c Mon Sep 17 00:00:00 2001 From: Sai Charan Koratala Date: Mon, 13 Oct 2025 17:24:54 +0530 Subject: [PATCH 1/2] Create WorkLoad_Balancer.js --- .../WorkLoad_Balancer.js | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Server-Side Components/Business Rules/Auto-Assign Tickets based on workload/WorkLoad_Balancer.js diff --git a/Server-Side Components/Business Rules/Auto-Assign Tickets based on workload/WorkLoad_Balancer.js b/Server-Side Components/Business Rules/Auto-Assign Tickets based on workload/WorkLoad_Balancer.js new file mode 100644 index 0000000000..38aaa27002 --- /dev/null +++ b/Server-Side Components/Business Rules/Auto-Assign Tickets based on workload/WorkLoad_Balancer.js @@ -0,0 +1,42 @@ +(function executeRule(current, previous /*null when async*/) { + + // Add your code here + if (!current.assignment_group || current.assigned_to) + return; + + var userWorkload = {}; + var grp = current.assignment_group; + var grMember = new GlideRecord('sys_user_grmember'); + grMember.addQuery('group', grp); + grMember.query(); + while (grMember.next()) { + var userId = grMember.user.toString(); + var inc = new GlideAggregate('incident'); + inc.addAggregate('COUNT'); + inc.addQuery('assigned_to', userId); + inc.addQuery('state', 'NOT IN', '6,7'); // not resolved or closed + inc.query(); + + if (inc.next()) { + userWorkload[userId] = parseInt(inc.getAggregate('COUNT'), 10); + } else { + userWorkload[userId] = 0; + } + } + + // Find user with minimum workload + var minUser = null; + var minCount = Number.MAX_VALUE; + for (var u in userWorkload) { + if (userWorkload[u] < minCount) { + minCount = userWorkload[u]; + minUser = u; + } + } + + if (minUser) { + current.assigned_to = minUser; + gs.info('Auto-assigned incident to user: ' + minUser); + } + +})(current, previous); From 6ab3fa8af72ee6150820132ebee584b4381f34c5 Mon Sep 17 00:00:00 2001 From: Sai Charan Koratala Date: Mon, 13 Oct 2025 17:25:39 +0530 Subject: [PATCH 2/2] Create README.md --- .../Auto-Assign Tickets based on workload/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 Server-Side Components/Business Rules/Auto-Assign Tickets based on workload/README.md diff --git a/Server-Side Components/Business Rules/Auto-Assign Tickets based on workload/README.md b/Server-Side Components/Business Rules/Auto-Assign Tickets based on workload/README.md new file mode 100644 index 0000000000..6cfe7ba94c --- /dev/null +++ b/Server-Side Components/Business Rules/Auto-Assign Tickets based on workload/README.md @@ -0,0 +1,3 @@ +This functionality automatically assigns newly created or updated tickets to the most available user within the assigned group, based on their current workload. + +When a ticket is assigned to a group, the system evaluates all active members of that group, calculates the number of open or active tasks each member currently owns, and assigns the ticket to the user with the least workload. This ensures fair and efficient distribution of tasks across team members, helping prevent overload on specific users and improving overall response time.