53 lines
1.8 KiB
PHP
53 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
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(Request $request)
|
|
{
|
|
$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');
|
|
|
|
$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'
|
|
));
|
|
}
|
|
} |