get(); return view('admin.tahunajaran', compact('tahunAjarans')); } public function tambahtahunajaran(Request $request) { $request->validate([ 'nama' => 'required|string|max:255', 'tanggal_mulai' => 'required|date', 'tanggal_selesai' => 'required|date|after:tanggal_mulai', ]); $nama = $request->input('nama'); $tanggalMulai = $request->input('tanggal_mulai'); $tanggalSelesai = $request->input('tanggal_selesai'); // Cek apakah nama tahun ajaran sudah ada $duplikatNama = TahunAjaran::where('nama', $nama)->exists(); if ($duplikatNama) { toastr()->error('Tahun ajaran dengan nama tersebut sudah ada.'); return redirect()->back(); } // Cek overlap tanggal dengan tahun ajaran lain $overlap = TahunAjaran::where(function($query) use ($tanggalMulai, $tanggalSelesai) { $query->whereBetween('tanggal_mulai', [$tanggalMulai, $tanggalSelesai]) ->orWhereBetween('tanggal_selesai', [$tanggalMulai, $tanggalSelesai]) ->orWhere(function($q) use ($tanggalMulai, $tanggalSelesai) { $q->where('tanggal_mulai', '<=', $tanggalMulai) ->where('tanggal_selesai', '>=', $tanggalSelesai); }); })->exists(); if ($overlap) { toastr()->error('Periode tahun ajaran bertumpang tindih dengan tahun ajaran yang sudah ada.'); return redirect()->back(); } $tahunAjaran = new TahunAjaran(); $tahunAjaran->nama = $nama; $tahunAjaran->tanggal_mulai = $tanggalMulai; $tahunAjaran->tanggal_selesai = $tanggalSelesai; $tahunAjaran->is_active = $request->has('is_active') ? true : false; // Jika set sebagai aktif, nonaktifkan yang lain if ($tahunAjaran->is_active) { TahunAjaran::where('is_active', true)->update(['is_active' => false]); } if ($tahunAjaran->save()) { toastr()->success('Data tahun ajaran berhasil ditambahkan.'); } else { toastr()->error('Gagal menambahkan data tahun ajaran.'); } return redirect()->route('tahunajaran'); } public function updatetahunajaran(Request $request, $id) { $request->validate([ 'nama' => 'required|string|max:255', 'tanggal_mulai' => 'required|date', 'tanggal_selesai' => 'required|date|after:tanggal_mulai', ]); $tahunAjaran = TahunAjaran::findOrFail($id); $nama = $request->input('nama'); $tanggalMulai = $request->input('tanggal_mulai'); $tanggalSelesai = $request->input('tanggal_selesai'); // Cek duplikasi nama (kecuali yang sedang diedit) $duplikatNama = TahunAjaran::where('nama', $nama) ->where('id', '!=', $id) ->exists(); if ($duplikatNama) { toastr()->error('Tahun ajaran dengan nama tersebut sudah ada.'); return redirect()->back(); } // Cek overlap tanggal (kecuali yang sedang diedit) $overlap = TahunAjaran::where('id', '!=', $id) ->where(function($query) use ($tanggalMulai, $tanggalSelesai) { $query->whereBetween('tanggal_mulai', [$tanggalMulai, $tanggalSelesai]) ->orWhereBetween('tanggal_selesai', [$tanggalMulai, $tanggalSelesai]) ->orWhere(function($q) use ($tanggalMulai, $tanggalSelesai) { $q->where('tanggal_mulai', '<=', $tanggalMulai) ->where('tanggal_selesai', '>=', $tanggalSelesai); }); })->exists(); if ($overlap) { toastr()->error('Periode tahun ajaran bertumpang tindih dengan tahun ajaran yang sudah ada.'); return redirect()->back(); } // Jika diset sebagai aktif, nonaktifkan yang lain $isActive = $request->has('is_active') ? true : false; if ($isActive) { TahunAjaran::where('is_active', true)->where('id', '!=', $id)->update(['is_active' => false]); } $tahunAjaran->nama = $nama; $tahunAjaran->tanggal_mulai = $tanggalMulai; $tahunAjaran->tanggal_selesai = $tanggalSelesai; $tahunAjaran->is_active = $isActive; if ($tahunAjaran->save()) { toastr()->success('Data tahun ajaran berhasil diupdate.'); } else { toastr()->error('Gagal memperbarui data tahun ajaran.'); } return redirect()->route('tahunajaran')->with('reload', true); } public function hapustahunajaran($id) { $tahunAjaran = TahunAjaran::findOrFail($id); // Cek apakah tahun ajaran ini sedang digunakan oleh siswa if ($tahunAjaran->siswas()->count() > 0) { toastr()->error('Tahun ajaran tidak dapat dihapus karena masih digunakan oleh data siswa.'); return redirect()->back(); } $tahunAjaran->delete(); toastr()->success('Data tahun ajaran berhasil dihapus.'); return redirect()->route('tahunajaran'); } public function downloadtahunajaran() { $tahunAjarans = TahunAjaran::orderBy('tanggal_mulai', 'desc')->get(); $pdf = Pdf::loadView('admin.tahunajaranpdf', compact('tahunAjarans')); return $pdf->download('data_tahun_ajaran.pdf'); } public function setaktif($id) { // Nonaktifkan semua tahun ajaran TahunAjaran::where('is_active', true)->update(['is_active' => false]); // Aktifkan tahun ajaran yang dipilih $tahunAjaran = TahunAjaran::findOrFail($id); $tahunAjaran->is_active = true; $tahunAjaran->save(); toastr()->success('Tahun ajaran berhasil diaktifkan.'); return redirect()->route('tahunajaran'); } }