111 lines
3.2 KiB
PHP
111 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Kriteria;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
class KriteriaController extends Controller
|
|
{
|
|
// Tampilkan semua kriteria
|
|
public function index()
|
|
{
|
|
$user = Auth::user();
|
|
|
|
if (!$user || !in_array($user->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.');
|
|
}
|
|
}
|