user(); $query = Feedback::query() ->whereNotNull('assigned_to') ->whereNotNull('updated_at'); if ($user->hasRole('manager')) { $deptIds = Department::where('manager_id', $user->id)->pluck('id'); $query->whereIn('current_department_id', $deptIds); } $totalResolved = (clone $query)->whereIn('status', ['resolved', 'closed'])->count(); $avgMinutes = (clone $query) ->whereIn('status', ['resolved', 'closed']) ->selectRaw('AVG(strftime("%s", updated_at) - strftime("%s", created_at)) / 60 as avg_minutes') ->value('avg_minutes'); $totalPending = (clone $query)->whereNotIn('status', ['resolved', 'closed'])->count(); $escalatedCount = (clone $query)->where('is_escalated', true)->count(); return [ Stat::make('Resolved Tickets', (string) $totalResolved) ->description('Total resolved/closed tickets') ->color('success'), Stat::make('Avg Processing Time', $avgMinutes ? round($avgMinutes) . ' min' : 'N/A') ->description('Average time from creation to resolution') ->color('warning'), Stat::make('Pending Tickets', (string) $totalPending) ->description('Still in progress') ->color('danger'), Stat::make('Escalated', (string) $escalatedCount) ->description('Tickets marked as escalated') ->color('gray'), ]; } public static function canView(): bool { return auth()->user()?->hasRole(['admin', 'manager']) ?? false; } }