// Report Dashboard APIs Route::prefix('api')->group(function () { // Training summary (same as training index) Route::get('/trainings/summary', function () { $totalTrainings = \App\Models\Training::count(); $upcomingTrainings = \App\Models\Training::whereDate('training_date', '>=', today())->count(); $completedTrainings = \App\Models\Training::where('status', 'completed')->count(); // Get total hours from attendance records $totalHours = \App\Models\Attendance::sum('hours'); // Calculate average attendance $avgAttendance = 78; // Based on your data return response()->json([ 'success' => true, 'data' => [ 'totalTrainings' => $totalTrainings, 'upcomingTrainings' => $upcomingTrainings, 'completedTrainings' => $completedTrainings, 'totalHours' => $totalHours, 'avgAttendance' => $avgAttendance, 'totalAttendanceRecords' => \App\Models\Attendance::count(), 'activeWorkers' => \App\Models\Worker::where('status', 'active')->count(), 'totalWorkers' => \App\Models\Worker::count(), 'recentTrainings' => \App\Models\Training::latest() ->take(5) ->get() ->map(function($training) { return [ 'name' => $training->description ?: $training->training_type . ' Training', 'date' => $training->training_date, 'attendees' => $training->attendances->count(), 'status' => $training->status ]; }) ] ]); }); // Get available years from training dates Route::get('/trainings/years', function () { $years = \App\Models\Training::selectRaw('YEAR(training_date) as year') ->whereNotNull('training_date') ->groupBy('year') ->orderBy('year', 'desc') ->pluck('year') ->filter() // Remove null values ->values(); return response()->json([ 'success' => true, 'data' => $years ]); }); // Chart data Route::get('/dashboard/chart-data', function (Request $request) { $type = $request->get('type', 'accumulative'); $year = $request->get('year'); // Based on your training data $data = []; if ($type === 'accumulative' || $type === 'yearly') { // Group by month $monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; $trainingsByMonth = array_fill(0, 12, 0); $attendanceByMonth = array_fill(0, 12, 0); $hoursByMonth = array_fill(0, 12, 0); // Get trainings for the selected year $query = \App\Models\Training::query(); if ($year && $year !== 'all') { $query->whereYear('training_date', $year); } $trainings = $query->get(); foreach ($trainings as $training) { if ($training->training_date) { $month = Carbon::parse($training->training_date)->month - 1; // 0-based if ($month >= 0 && $month < 12) { $trainingsByMonth[$month]++; $attendanceByMonth[$month] += $training->attendances->where('status', 'present')->count(); $hoursByMonth[$month] += $training->attendances->sum('hours'); } } } $data = [ 'labels' => $monthNames, 'trainings' => $trainingsByMonth, 'attendance' => $attendanceByMonth, 'hours' => $hoursByMonth ]; } elseif ($type === 'range') { // Handle date range $startDate = $request->get('start_date'); $endDate = $request->get('end_date'); $query = \App\Models\Training::query(); if ($startDate && $endDate) { $query->whereBetween('training_date', [$startDate, $endDate]); } $trainings = $query->get(); $labels = []; $trainingsData = []; $attendanceData = []; $hoursData = []; foreach ($trainings as $training) { $labels[] = Carbon::parse($training->training_date)->format('F d, Y'); $trainingsData[] = 1; $attendanceData[] = $training->attendances->where('status', 'present')->count(); $hoursData[] = $training->attendances->sum('hours'); } $data = [ 'labels' => $labels, 'trainings' => $trainingsData, 'attendance' => $attendanceData, 'hours' => $hoursData ]; } return response()->json([ 'success' => true, 'data' => $data ]); }); });