80 lines
2.6 KiB
PHP
80 lines
2.6 KiB
PHP
<?php
|
|
namespace App\Http\Controllers\Bk;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\{Siswa, Tes};
|
|
use App\Services\TesPdfService;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class SiswaController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
$query = Siswa::with([
|
|
'user',
|
|
'tes' => fn($q) => $q->latest()->with('rekomendasiTeratas.jurusan', 'minatJurusan1', 'minatJurusan2'),
|
|
]);
|
|
|
|
if (request('search')) {
|
|
$query->whereHas('user', fn($q) => $q->where('nama', 'like', '%'.request('search').'%'));
|
|
}
|
|
|
|
$siswas = $query->paginate(15);
|
|
return view('pages.bk.siswa.index', compact('siswas'));
|
|
}
|
|
|
|
public function show($id)
|
|
{
|
|
$siswa = Siswa::with('user')->findOrFail($id);
|
|
|
|
$riwayatTes = Tes::where('siswa_id', $id)
|
|
->with([
|
|
'rekomendasiTeratas.jurusan',
|
|
'minatJurusan1', 'minatJurusan2',
|
|
'hasilSaw' => fn($q) => $q->orderBy('peringkat')->with('jurusan'),
|
|
])->latest()->get();
|
|
|
|
return view('pages.bk.siswa.show', compact('siswa', 'riwayatTes'));
|
|
}
|
|
|
|
public function downloadPdf($siswaId, $tesId, TesPdfService $tesPdfService)
|
|
{
|
|
$tes = \App\Models\Tes::where('siswa_id', $siswaId)->findOrFail($tesId);
|
|
|
|
$tesPdf = $tesPdfService->ensureAvailable($tes);
|
|
|
|
if (!$tesPdf?->upload || !$tesPdf->upload->existsOnPublicDisk()) {
|
|
return back()->with('warning', 'File PDF belum tersedia untuk tes ini.');
|
|
}
|
|
|
|
return Storage::disk('public')->download(
|
|
$tesPdf->upload->normalizedStoragePath(),
|
|
'hasil_tes_' . $tesId . '.pdf'
|
|
);
|
|
}
|
|
|
|
public function hasilTes($siswaId, $tesId)
|
|
{
|
|
$tes = \App\Models\Tes::with([
|
|
'siswa.user',
|
|
'hasilSaw' => fn($q) => $q->orderBy('peringkat')->with('jurusan'),
|
|
'minatJurusan1', 'minatJurusan2',
|
|
])->where('siswa_id', $siswaId)->findOrFail($tesId);
|
|
|
|
$hasilList = $tes->hasilSaw;
|
|
$tesTerakhir = $tes;
|
|
$siswa = $tes->siswa;
|
|
|
|
$jurusanPilihan1 = $tes->minatJurusan1;
|
|
$jurusanPilihan2 = $tes->minatJurusan2;
|
|
$skorPilihan1 = $hasilList->firstWhere('jurusan_id', $tes->minat_jurusan_1_id);
|
|
$skorPilihan2 = $hasilList->firstWhere('jurusan_id', $tes->minat_jurusan_2_id);
|
|
|
|
return view('pages.siswa.hasil', compact(
|
|
'hasilList', 'tesTerakhir', 'siswa',
|
|
'jurusanPilihan1', 'jurusanPilihan2',
|
|
'skorPilihan1', 'skorPilihan2'
|
|
));
|
|
}
|
|
}
|