SPK-Lahan-Tanaman-Cabai-SAW/app/Http/Controllers/KriteriaController.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.');
}
}