feat(helpdesk): add team workload dashboard with per-agent metrics

New standalone page (helpdesk/team) showing support agent workload
aggregated from BC tickets. KPI bar (open, unassigned, avg age, resolved),
per-agent table sorted by open tickets, period selector (30/90/180/365d).
Global OData query via getTicketsForTeam() without customer filter.
New permission helpdesk.team-workload.view with admin role assignment.
Includes 6 PHPUnit tests for buildTeamWorkloadDashboard().

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-05 18:46:54 +02:00
parent aeb9c9f9fb
commit cae66e5361
18 changed files with 711 additions and 12 deletions

View File

@@ -3,10 +3,12 @@
$layoutNav = is_array($layoutNav ?? null) ? $layoutNav : [];
$helpdeskNav = is_array($layoutNav['helpdesk.nav'] ?? null) ? $layoutNav['helpdesk.nav'] : [];
$canManageSettings = !empty($helpdeskNav['can_manage_settings']);
$canViewTeam = !empty($helpdeskNav['can_view_team']);
$settingsActive = navActive('helpdesk/settings', true);
$teamActive = navActive('helpdesk/team', true);
$customersActive = navActive('helpdesk', true);
if ($settingsActive['isActive']) {
if ($settingsActive['isActive'] || $teamActive['isActive']) {
$customersActive = ['class' => '', 'aria' => '', 'isActive' => false];
}
@@ -17,6 +19,12 @@ $helpdeskNavItems = [
'active' => $customersActive,
'visible' => true,
],
[
'label' => t('Team'),
'path' => 'helpdesk/team',
'active' => $teamActive,
'visible' => $canViewTeam,
],
[
'label' => t('Settings'),
'path' => 'helpdesk/settings',