user()->role !== 'admin') { return redirect()->route('employee.index'); } $currentPeriod = Carbon::now()->format('Y-m'); $stats = [ 'total_employees' => Employee::count(), 'total_departments' => Department::count(), 'total_positions' => Position::count(), 'payroll_realisasi' => Payroll::where('period', $currentPeriod) ->where('status', 'paid') ->sum('net_salary'), ]; $genderData = Employee::selectRaw('gender, count(*) as total') ->groupBy('gender') ->get() ->map(fn($item) => [ 'name' => $item->gender == 'L' ? 'Laki-laki' : 'Perempuan', 'value' => $item->total, 'fill' => $item->gender == 'L' ? '#3b82f6' : '#ec4899', ]); $deptData = Department::withCount('employees') ->having('employees_count', '>', 0) ->get() ->map(fn($item) => [ 'name' => $item->name, 'employees' => $item->employees_count, ]); $latestEmployees = Employee::with(['department', 'position', 'user']) ->latest('join_date') ->take(5) ->get(); return Inertia::render('dashboard', [ 'stats' => $stats, 'genderData' => $genderData, 'deptData' => $deptData, 'latestEmployees' => $latestEmployees, 'currentPeriod' => $currentPeriod, ]); } }