first(); // Ambil data angket yang sudah diisi siswa (jika ada) $angket = AngketSiswa::where('siswa_id', $siswa->id)->first(); // Ambil semua data paket mapel beserta relasi mapel $paketMapels = PaketMapel::with('mapels')->get(); // Hitung jumlah peminat tiap paket (manual karena tidak bisa pakai withCount) foreach ($paketMapels as $paket) { $paket->jumlah_peminat = AngketSiswa::where('paket_pertama_id', $paket->id) ->orWhere('paket_kedua_id', $paket->id) ->orWhere('paket_ketiga_id', $paket->id) ->count(); } return view('siswa.angket.index', compact('siswa', 'angket', 'paketMapels')); } // Menampilkan halaman info angket untuk siswa public function info() { // Ambil informasi angket terbaru $info = \App\Models\InfoAngket::latest()->first(); // Ambil semua paket mapel dan prodi lanjutan untuk ditampilkan $pakets = PaketMapel::with('mapels')->get(); $prodis = ProdiLanjutan::with('mapels')->get(); return view('siswa.angket.info', compact('info', 'pakets', 'prodis')); } // Menampilkan form pengisian angket public function create() { // Ambil data siswa yang login $siswa = Siswa::where('user_id', Auth::id())->first(); // Ambil data prodi lanjutan dan paket mapel $prodis = ProdiLanjutan::with('mapels')->get(); $paketMapels = PaketMapel::with('mapels')->get(); // Cek apakah siswa sudah pernah mengisi angket $angket = AngketSiswa::where('siswa_id', $siswa->id)->first(); return view('siswa.angket.create', compact('siswa', 'prodis', 'paketMapels', 'angket')); } // Menyimpan data angket yang diisi siswa public function store(Request $request) { // Validasi input siswa $request->validate([ 'prodi_id' => 'required|exists:prodi_lanjutan,id', 'paket_pertama_id' => 'required|exists:paket_mapel,id', 'paket_kedua_id' => 'nullable|exists:paket_mapel,id|different:paket_pertama_id', 'paket_ketiga_id' => 'nullable|exists:paket_mapel,id|different:paket_pertama_id|different:paket_kedua_id', 'cita_cita' => 'nullable|string', 'rencana' => 'nullable|string', ]); // Ambil data siswa yang login $siswa = Siswa::where('user_id', Auth::id())->first(); // Cek apakah siswa sudah pernah mengisi angket (hanya sekali boleh) $count = AngketSiswa::where('siswa_id', $siswa->id)->count(); if ($count >= 1) { return redirect()->route('siswa.angket.index')->with('error', 'Anda sudah mengisi angket.'); } // Simpan data angket ke database AngketSiswa::create([ 'siswa_id' => $siswa->id, 'nama' => $siswa->nama, 'jenis_kelamin' => $siswa->jenis_kelamin, 'kelas_id' => $siswa->kelas_id, 'cita_cita' => $request->cita_cita ?? '-', 'rencana_setelah_lulus' => $request->rencana ?? '-', 'prodi_id' => $request->prodi_id, 'paket_pertama_id' => $request->paket_pertama_id, 'paket_kedua_id' => $request->paket_kedua_id, 'paket_ketiga_id' => $request->paket_ketiga_id, 'paket_final_id' => null, // Finalisasi dilakukan oleh admin nanti ]); return redirect()->route('siswa.angket.index')->with('success', 'Pilihan paket mapel berhasil disimpan.'); } // Menampilkan hasil angket yang sudah diisi siswa public function hasil() { // Ambil data siswa yang login $siswa = Siswa::where('user_id', Auth::id())->first(); // Ambil data angket milik siswa tersebut $angket = AngketSiswa::where('siswa_id', $siswa->id)->first(); if (!$angket) { return redirect()->route('siswa.angket.index')->with('error', 'Belum ada data angket.'); } // Ambil data masing-masing paket mapel yang dipilih siswa $paket1 = PaketMapel::with('mapels')->find($angket->paket_pertama_id); $paket2 = PaketMapel::with('mapels')->find($angket->paket_kedua_id); $paket3 = PaketMapel::with('mapels')->find($angket->paket_ketiga_id); $paketFinal = $angket->paket_final_id ? PaketMapel::with('mapels')->find($angket->paket_final_id) : null; // Ambil ranking siswa berdasarkan total nilai dari tabel nilai_total_mapel $ranking = DB::table('nilai_total_mapel') ->select('siswa_id', DB::raw('SUM(nilai_total) as total_nilai')) ->groupBy('siswa_id') ->orderByDesc('total_nilai') ->get(); // Ambil nilai total siswa $nilaiSiswa = $ranking->firstWhere('siswa_id', $siswa->id); // Cari posisi ranking siswa $peringkat = $ranking->search(fn($item) => $item->siswa_id == $siswa->id); return view('siswa.angket.hasil', compact('paket1', 'paket2', 'paket3', 'paketFinal', 'nilaiSiswa', 'peringkat')); } }