159 lines
4.9 KiB
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');
|
|
}
|
|
|
|
|
|
|
|
} |