53 lines
1.7 KiB
PHP
53 lines
1.7 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace App\Http\Controllers\Admin;
|
||
|
|
|
||
|
|
use App\Http\Controllers\Controller;
|
||
|
|
use App\Models\User;
|
||
|
|
use App\Models\ExamResult;
|
||
|
|
use Illuminate\Http\Request;
|
||
|
|
|
||
|
|
class ReportController extends Controller
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
* Menampilkan daftar Karyawan (Trainee) beserta ringkasan progres mereka.
|
||
|
|
*/
|
||
|
|
public function training()
|
||
|
|
{
|
||
|
|
// Ambil semua user dengan role 'trainee', beserta relasi hasil ujiannya
|
||
|
|
$trainees = User::whereHas('roles', function ($query) {
|
||
|
|
$query->where('name', 'trainee');
|
||
|
|
})
|
||
|
|
->with('examResults') // Pastikan relasi examResults sudah dibuat di model User
|
||
|
|
->latest()
|
||
|
|
->paginate(15);
|
||
|
|
|
||
|
|
return view('pages.admin.reports.training', compact('trainees'));
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Menampilkan detail riwayat training & ujian per individu.
|
||
|
|
*/
|
||
|
|
public function showTraining(User $user)
|
||
|
|
{
|
||
|
|
// Pastikan user tersebut benar-benar trainee
|
||
|
|
if (!$user->hasRole('trainee')) {
|
||
|
|
abort(404, 'Data riwayat training tidak ditemukan atau user bukan karyawan.');
|
||
|
|
}
|
||
|
|
|
||
|
|
// Ambil riwayat ujian, relasikan ke data Soal/Sesi (Exam) dan Dokumen (SOP)
|
||
|
|
$examHistory = ExamResult::where('user_id', $user->id)
|
||
|
|
->latest()
|
||
|
|
->get();
|
||
|
|
|
||
|
|
// Kalkulasi Statistik Cepat
|
||
|
|
$stats = [
|
||
|
|
'total_exams' => $examHistory->count(),
|
||
|
|
'passed' => $examHistory->where('is_passed', true)->count(),
|
||
|
|
'failed' => $examHistory->where('is_passed', false)->count(),
|
||
|
|
'avg_score' => $examHistory->avg('score') ?? 0,
|
||
|
|
];
|
||
|
|
|
||
|
|
return view('pages.admin.reports.show', compact('user', 'examHistory', 'stats'));
|
||
|
|
}
|
||
|
|
}
|