kelas_id; $tahunAjaranId = $request->tahun_ajaran_id; $tahunAjaranList = TahunAjaran::where('status', 'aktif')->orderBy('tahun', 'desc')->get(); $query = Siswa::with(['kelas', 'tahunAjaran', 'user']); if ($tahunAjaranId) { $query->where('tahun_ajaran_id', $tahunAjaranId); } if ($kelasId) { $query->where('kelas_id', $kelasId); } $data = $query->paginate(15); $kelasList = Kelas::all(); return view('admin.siswa.index', compact('data', 'kelasList', 'tahunAjaranList')) ->with('success', session('success')) ->withErrors(session('error')); } public function create() { $kelasList = Kelas::all(); $tahunAjaranList = TahunAjaran::orderBy('tahun', 'desc')->get(); return view('admin.siswa.create', compact('kelasList', 'tahunAjaranList')); } public function store(Request $request) { try { $tahunAjaran = TahunAjaran::where('status', 'aktif')->first(); $request->validate([ 'nisn' => 'required|unique:siswa,nisn', 'nama' => 'required', 'email' => 'required|email|unique:users,email', 'kelas_id' => 'required|exists:kelas,id', 'alamat' => 'nullable', 'jenis_kelamin' => 'required|in:L,P', ]); $user = User::create([ 'name' => $request->nama, 'email' => $request->email, 'password' => Hash::make('defaultpassword'), 'role' => 'siswa', 'is_active' => 1, ]); Siswa::create([ 'user_id' => $user->id, 'nisn' => $request->nisn, 'nama' => $request->nama, 'kelas_id' => $request->kelas_id, 'alamat' => $request->alamat, 'jenis_kelamin' => $request->jenis_kelamin, 'tahun_ajaran_id' => $tahunAjaran->id ?? null, ]); return redirect()->route('admin.siswa.index')->with('success', 'Data siswa berhasil ditambahkan'); } catch (\Exception $e) { Log::error('Gagal menambahkan siswa: ' . $e->getMessage()); return back()->withInput()->withErrors('Terjadi kesalahan saat menambahkan siswa.'); } } public function edit($id) { $siswa = Siswa::with(['user', 'kelas', 'tahunAjaran'])->findOrFail($id); $kelasList = Kelas::all(); $tahunAjaranList = TahunAjaran::all(); return view('admin.siswa.edit', compact('siswa', 'kelasList', 'tahunAjaranList')); } public function update(Request $request, $id) { try { $siswa = Siswa::with('user')->findOrFail($id); $user = $siswa->user; $request->validate([ 'nisn' => 'required|unique:siswa,nisn,' . $siswa->id, 'nama' => 'required', 'email' => 'required|email|unique:users,email,' . $user->id, 'password' => 'nullable|min:6', 'alamat' => 'nullable', 'jenis_kelamin' => 'required|in:L,P', 'kelas_id' => 'required|exists:kelas,id', 'tahun_ajaran_id' => 'required|exists:tahun_ajaran,id', ]); $user->name = $request->nama; $user->email = $request->email; if ($request->filled('password')) { $user->password = Hash::make($request->password); } $user->save(); $siswa->update([ 'nisn' => $request->nisn, 'nama' => $request->nama, 'alamat' => $request->alamat, 'jenis_kelamin' => $request->jenis_kelamin, 'kelas_id' => $request->kelas_id, 'tahun_ajaran_id' => $request->tahun_ajaran_id, ]); return redirect()->route('admin.siswa.index')->with('success', 'Data siswa berhasil diperbarui'); } catch (\Exception $e) { Log::error('Gagal mengupdate siswa: ' . $e->getMessage()); return back()->withInput()->withErrors('Terjadi kesalahan saat memperbarui data siswa.'); } } public function destroy($id) { try { $siswa = Siswa::findOrFail($id); $user = $siswa->user; $siswa->delete(); if ($user) { $user->delete(); } return back()->with('success', 'Data siswa berhasil dihapus'); } catch (\Exception $e) { Log::error('Gagal menghapus siswa: ' . $e->getMessage()); return back()->withErrors('Terjadi kesalahan saat menghapus data siswa.'); } } public function import(Request $request) { try { $request->validate([ 'file' => 'required|mimes:xlsx,xls', ]); Excel::import(new SiswaImport, $request->file('file')); return back()->with('success', 'Import data siswa berhasil!'); } catch (\Exception $e) { Log::error('Import siswa gagal: ' . $e->getMessage()); return back()->withErrors('Terjadi kesalahan saat mengimpor data siswa.'); } } public function export() { return Excel::download(new SiswaExport, 'data_siswa.xlsx'); } public function siswaLulus(Request $request) { $filterTahunAjaranId = $request->tahun_ajaran_id; $tahunAjaranLulus = TahunAjaran::where('status', 'lulus')->pluck('id'); if ($filterTahunAjaranId) { $tahunAjaranLulus = $tahunAjaranLulus->filter(function ($id) use ($filterTahunAjaranId) { return $id == $filterTahunAjaranId; }); } $data = Siswa::with(['kelas', 'tahunAjaran', 'user']) ->whereIn('tahun_ajaran_id', $tahunAjaranLulus) ->paginate(15); $kelasList = Kelas::all(); $tahunAjaranList = TahunAjaran::where('status', 'lulus')->get(); return view('admin.siswa.lulus', compact('data', 'kelasList', 'tahunAjaranList')); } }