MIF_E31222313/app/Http/Controllers/KriteriaController.php

159 lines
4.9 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Kriteria;
use App\Models\Kurikulum;
use Barryvdh\DomPDF\Facade\Pdf;
class KriteriaController extends Controller
{
public function kriteria()
{
$kriterias = Kriteria::with('kurikulum')->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');
}
}