diff --git a/app/Http/Controllers/Admin/LeaderboardController.php b/app/Http/Controllers/Admin/LeaderboardController.php index d1e48be..20a27c2 100644 --- a/app/Http/Controllers/Admin/LeaderboardController.php +++ b/app/Http/Controllers/Admin/LeaderboardController.php @@ -4,15 +4,50 @@ use App\Http\Controllers\Controller; use App\Models\Leaderboard; +use App\Models\Kelas; +use Carbon\Carbon; +use Illuminate\Http\Request; class LeaderboardController extends Controller { - public function index() + public function index(Request $request) { - $leaderboards = Leaderboard::orderBy('ranking') - ->orderByDesc('total_exp') - ->paginate(10); + $now = Carbon::now(); + $semester = $request->input('semester', $now->month >= 7 ? '1' : '2'); + $tahunAjaran = $request->input('tahun_ajaran', $now->month >= 7 + ? $now->year . '/' . ($now->year + 1) + : ($now->year - 1) . '/' . $now->year); + $idKelas = $request->input('id_kelas'); - return view('admin.leaderboard.index', compact('leaderboards')); + $kelasList = Kelas::orderBy('tingkat')->orderBy('nama_kelas')->get(); + + $query = Leaderboard::with(['siswa', 'kelas']) + ->where('semester', $semester) + ->where('tahun_ajaran', $tahunAjaran); + + if ($idKelas) { + $query->where('id_kelas', $idKelas); + } + + $leaderboard = $query->orderBy('total_exp', 'desc')->get() + ->map(function ($item, $i) { + return [ + 'ranking' => $i + 1, + 'nama' => optional($item->siswa)->nama ?? '-', + 'nisn' => optional($item->siswa)->nisn ?? '-', + 'nama_kelas' => optional($item->kelas)->nama_kelas ?? '-', + 'exp' => $item->total_exp, + ]; + }); + + // Tahun ajaran list untuk dropdown (5 tahun ke belakang) + $tahunList = []; + for ($y = $now->year; $y >= $now->year - 4; $y--) { + $tahunList[] = $y . '/' . ($y + 1); + } + + return view('admin.leaderboard.index', compact( + 'leaderboard', 'kelasList', 'semester', 'tahunAjaran', 'idKelas', 'tahunList' + )); } -} +} \ No newline at end of file diff --git a/app/Http/Controllers/Guru/LeaderboardController.php b/app/Http/Controllers/Guru/LeaderboardController.php index 0e75623..e8e034e 100644 --- a/app/Http/Controllers/Guru/LeaderboardController.php +++ b/app/Http/Controllers/Guru/LeaderboardController.php @@ -4,15 +4,64 @@ use App\Http\Controllers\Controller; use App\Models\Leaderboard; +use App\Models\Kelas; +use App\Models\Mengajar; +use Carbon\Carbon; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; class LeaderboardController extends Controller { - public function index() + public function index(Request $request) { - $leaderboards = Leaderboard::orderBy('ranking') - ->orderByDesc('total_exp') - ->paginate(10); + /** @var \App\Models\Guru $guru */ + $guru = Auth::guard('guru')->user(); - return view('admin.leaderboard.index', compact('leaderboards')); + $now = Carbon::now(); + $semester = $request->input('semester', $now->month >= 7 ? '1' : '2'); + $tahunAjaran = $request->input('tahun_ajaran', $now->month >= 7 + ? $now->year . '/' . ($now->year + 1) + : ($now->year - 1) . '/' . $now->year); + + // Kelas yang diajar guru ini + $idKelasList = Mengajar::where('id_guru', $guru->id_guru) + ->pluck('id_kelas') + ->unique() + ->toArray(); + + $idKelas = $request->input('id_kelas', $idKelasList[0] ?? null); + + $kelasList = Kelas::whereIn('id_kelas', $idKelasList) + ->orderBy('tingkat')->orderBy('nama_kelas') + ->get(); + + $leaderboard = collect(); + + if ($idKelas) { + $leaderboard = Leaderboard::with(['siswa', 'kelas']) + ->where('id_kelas', $idKelas) + ->where('semester', $semester) + ->where('tahun_ajaran', $tahunAjaran) + ->orderBy('total_exp', 'desc') + ->get() + ->map(function ($item, $i) { + return [ + 'ranking' => $i + 1, + 'nama' => optional($item->siswa)->nama ?? '-', + 'nisn' => optional($item->siswa)->nisn ?? '-', + 'nama_kelas' => optional($item->kelas)->nama_kelas ?? '-', + 'exp' => $item->total_exp, + ]; + }); + } + + $tahunList = []; + for ($y = $now->year; $y >= $now->year - 4; $y--) { + $tahunList[] = $y . '/' . ($y + 1); + } + + return view('guru.leaderboard.index', compact( + 'leaderboard', 'kelasList', 'semester', 'tahunAjaran', 'idKelas', 'tahunList' + )); } -} +} \ No newline at end of file diff --git a/resources/views/admin/leaderboard/index.blade.php b/resources/views/admin/leaderboard/index.blade.php index 0c84d41..892d14b 100644 --- a/resources/views/admin/leaderboard/index.blade.php +++ b/resources/views/admin/leaderboard/index.blade.php @@ -2,33 +2,229 @@ @section('title', 'Leaderboard') +@push('styles') + +@endpush + @section('content') -
Peringkat siswa berdasarkan total EXP yang dikumpulkan.
-| Ranking | -NISN | -Total EXP | -Semester | -Tahun Ajaran | -
|---|---|---|---|---|
| {{ $lb->ranking }} | -{{ $lb->nisn }} | -{{ $lb->total_exp }} | -{{ $lb->semester }} | -{{ $lb->tahun_ajaran }} | -
Peringkat siswa di kelas yang Anda ajar.
-| Ranking | -NISN | -Total EXP | -Semester | -Tahun Ajaran | -
|---|---|---|---|---|
| {{ $lb->ranking }} | -{{ $lb->nisn }} | -{{ $lb->total_exp }} | -{{ $lb->semester }} | -{{ $lb->tahun_ajaran }} | -