startOfMonth()->toDateString(); $monthEnd = now()->endOfMonth()->toDateString(); $variants = StockVariant::count(); $healthyVariants = StockVariant::whereColumn('quantity', '>', 'reorder_level')->count(); return view('dashboard', [ 'activeEmployees' => Employee::where('status', 'active')->count(), 'uniformTypes' => UniformItem::count(), 'unitsInStock' => StockVariant::sum('quantity'), 'unitsIssued' => UniformIssue::where('status', 'issued')->get()->sum(fn ($issue) => $issue->outstanding_quantity), 'issuedThisMonth' => UniformIssue::whereBetween('issued_at', [$monthStart, $monthEnd])->sum('quantity'), 'handoversThisMonth' => Handover::whereBetween('handover_date', [$monthStart, $monthEnd])->count(), 'employeesWithIssues' => UniformIssue::where('status', 'issued')->distinct()->count('employee_id'), 'stockHealth' => $variants ? (int) round(($healthyVariants / $variants) * 100) : 100, 'lowStock' => StockVariant::with('item')->whereColumn('quantity', '<=', 'reorder_level')->orderBy('quantity')->get(), 'outOfStock' => StockVariant::with('item')->where('quantity', 0)->orderBy('size')->get(), 'replacementDue' => UniformIssue::with(['employee', 'variant.item']) ->where('status', 'issued') ->whereDate('issued_at', '<=', now()->subYear()->toDateString()) ->oldest('issued_at')->take(6)->get(), 'departmentAllocation' => UniformIssue::query() ->join('employees', 'employees.id', '=', 'uniform_issues.employee_id') ->where('uniform_issues.status', 'issued') ->select('employees.department', DB::raw('SUM(uniform_issues.quantity - uniform_issues.returned_quantity) as units')) ->groupBy('employees.department')->orderByDesc('units')->take(6)->get(), 'popularUniforms' => UniformIssue::query() ->join('stock_variants', 'stock_variants.id', '=', 'uniform_issues.stock_variant_id') ->join('uniform_items', 'uniform_items.id', '=', 'stock_variants.uniform_item_id') ->select('uniform_items.name', DB::raw('SUM(uniform_issues.quantity) as units')) ->groupBy('uniform_items.id', 'uniform_items.name')->orderByDesc('units')->take(5)->get(), 'handoverOutcomes' => HandoverItem::join('handovers', 'handovers.id', '=', 'handover_items.handover_id') ->whereBetween('handovers.handover_date', [$monthStart, $monthEnd]) ->select('handover_items.condition', DB::raw('SUM(handover_items.quantity) as units')) ->groupBy('condition')->pluck('units', 'condition'), 'recentMovements' => StockMovement::with(['variant.item'])->latest()->take(8)->get(), ]); } }