get(); $kurikulums = Kurikulum::all(); return view('admin.kriteria', compact('kriterias', 'kurikulums')); } public function tambahkriteria(Request $request) { $request->validate([ 'nama' => 'required|string|max:255', 'jenis' => 'required|in:Benefit,Cost', 'bobot' => [ 'required', 'numeric', 'min:0', 'max:1', 'regex:/^(0(\.\d{1,2})?|1(\.0{1,2})?)$/', ], 'kurikulum_id' => 'required|exists:kurikulums,id', ], [ 'bobot.numeric' => 'Bobot harus berupa angka desimal, misalnya 0.50.', 'bobot.min' => 'Bobot minimal adalah 0.', 'bobot.max' => 'Bobot maksimal adalah 1.00.', 'bobot.regex' => 'Format bobot harus dua angka di belakang koma, contoh: 0.20 atau 1.00.', ]); // Cek apakah nama kriteria sudah ada dalam kurikulum yang sama $duplikatNama = Kriteria::where('nama', $request->nama) ->where('kurikulum_id', $request->kurikulum_id) ->exists(); if ($duplikatNama) { toastr()->error('Nama kriteria sudah ada dalam kurikulum yang sama.'); return redirect()->back()->withInput(); } // Cek total bobot agar tidak melebihi 1 $totalBobot = Kriteria::where('kurikulum_id', $request->kurikulum_id)->sum('bobot'); $bobotBaru = $request->bobot; if (($totalBobot + $bobotBaru) > 1) { toastr()->error('Total bobot untuk kurikulum ini melebihi 1.0. Silakan periksa kembali.'); return redirect()->back()->withInput(); } // Simpan data kriteria $kriteria = new Kriteria(); $kriteria->nama = $request->nama; $kriteria->jenis = $request->jenis; $kriteria->bobot = $bobotBaru; $kriteria->kurikulum_id = $request->kurikulum_id; if ($kriteria->save()) { toastr()->success('Kriteria berhasil ditambahkan'); } else { toastr()->error('Gagal menambahkan kriteria'); } return redirect()->route('kriteria'); } public function updatekriteria(Request $request, $id) { $request->validate([ 'nama' => 'required|string|max:255', 'jenis' => 'required|in:Benefit,Cost', 'bobot' => [ 'required', 'numeric', 'min:0', 'max:1', 'regex:/^(0(\.\d{1,2})?|1(\.0{1,2})?)$/', ], 'kurikulum_id' => 'required|exists:kurikulums,id', ], [ 'bobot.numeric' => 'Bobot harus berupa angka desimal, misalnya 0.50.', 'bobot.min' => 'Bobot minimal adalah 0.', 'bobot.max' => 'Bobot maksimal adalah 1.00.', 'bobot.regex' => 'Format bobot harus dua angka di belakang koma, contoh: 0.20 atau 1.00.', ]); $kriteria = Kriteria::findOrFail($id); // Cek duplikat nama (kecuali untuk dirinya sendiri) $duplikatNama = Kriteria::where('nama', $request->nama) ->where('kurikulum_id', $request->kurikulum_id) ->where('id', '!=', $id) ->exists(); if ($duplikatNama) { toastr()->error('Nama kriteria sudah ada dalam kurikulum yang sama.'); return redirect()->back()->withInput(); } // Cek total bobot: kurangi dulu bobot lama, lalu tambah bobot baru $totalBobot = Kriteria::where('kurikulum_id', $request->kurikulum_id) ->where('id', '!=', $id) ->sum('bobot'); $bobotBaru = $request->bobot; if (($totalBobot + $bobotBaru) > 1) { toastr()->error('Total bobot untuk kurikulum ini melebihi 1.0. Silakan periksa kembali.'); return redirect()->back()->withInput(); } // Update data $kriteria->nama = $request->nama; $kriteria->jenis = $request->jenis; $kriteria->bobot = $bobotBaru; $kriteria->kurikulum_id = $request->kurikulum_id; if ($kriteria->save()) { toastr()->success('Kriteria berhasil diperbarui'); } else { toastr()->error('Gagal memperbarui kriteria'); } return redirect()->route('kriteria')->with('reload', true); } public function hapuskriteria($id) { $kriteria = Kriteria::findOrFail($id); if ($kriteria->delete()) { toastr()->success('Kriteria berhasil dihapus'); } else { toastr()->error('Gagal menghapus kriteria'); } return redirect()->route('kriteria'); } public function downloadkriteria() { // Ambil data sekolah dari database $kriterias = Kriteria::all(); $pdf = Pdf::loadView('admin.kriteriapdf', compact('kriterias')); // Download file PDF return $pdf->download('data_kriterias.pdf'); } }