role, ['super_admin', 'admin'])) { abort(403, 'Anda tidak punya akses.'); } $kriterias = Kriteria::all(); return view('admin.kriteria', [ 'kriterias' => $kriterias, 'title' => 'Data Kriteria' ]); } // Simpan kriteria baru public function store(Request $request) { $user = Auth::user(); if (!$user || !in_array($user->role, ['super_admin', 'admin'])) { abort(403, 'Anda tidak punya akses.'); } $validated = $request->validate([ 'kode_kriteria' => 'required|string|max:10', 'nama_kriteria' => 'required|string|max:255', 'jenis' => 'required|in:benefit,cost', 'bobot' => 'required|numeric|min:0|max:100', ]); // Hitung jumlah kriteria yang sudah ada $jumlahKriteria = \App\Models\Kriteria::count(); $totalBobot = \App\Models\Kriteria::sum('bobot'); // Cek jika sudah 6 kriteria atau bobot akan melebihi 100 if ($jumlahKriteria >= 6) { return redirect()->back()->with('error', 'Jumlah maksimal kriteria adalah 6.'); } if ($totalBobot + $request->bobot > 100) { return redirect()->back()->with('error', 'Total bobot tidak boleh melebihi 100.'); } // Simpan \App\Models\Kriteria::create($validated); return redirect()->route('kriteria.index')->with('success', 'Kriteria berhasil disimpan.'); } public function update(Request $request, $id) { $user = Auth::user(); if (!$user || !in_array($user->role, ['super_admin', 'admin'])) { abort(403, 'Anda tidak punya akses.'); } $request->validate([ 'kode_kriteria' => 'required', 'nama_kriteria' => 'required', 'jenis' => 'required|in:benefit,cost', 'bobot' => 'required|numeric', ]); $kriteria = Kriteria::findOrFail($id); // Hitung total bobot dari semua kriteria KECUALI yang sedang diupdate $totalBobotLain = Kriteria::where('id', '!=', $id)->sum('bobot'); // Bobot baru dari input $bobotBaru = $request->bobot; if (($totalBobotLain + $bobotBaru) > 100) { return redirect()->back()->with('error', 'Total bobot melebihi 100. Silakan kurangi bobot.'); } $kriteria->update($request->all()); return redirect()->route('kriteria.index')->with('success', 'Data berhasil diperbarui!'); } // Hapus kriteria public function destroy($id) { $user = Auth::user(); if (!$user || !in_array($user->role, ['super_admin', 'admin'])) { abort(403, 'Anda tidak punya akses.'); } $kriteria = Kriteria::findOrFail($id); $kriteria->delete(); return redirect()->back()->with('success', 'Data kriteria berhasil dihapus.'); } }