MIF_E31222313/app/Http/Controllers/OpsiSubkriteriaController.php

132 lines
4.3 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\OpsiSubkriteria;
use App\Models\Alternatif; // Pastikan model Alternatif digunakan
use App\Models\Subkriteria;
use App\Models\Crip;
use Barryvdh\DomPDF\Facade\Pdf;
class OpsiSubkriteriaController extends Controller
{
public function opsisubkriteria()
{
// Mengambil data opsi subkriteria, dengan relasi ke subkriteria, crips, dan alternatif
$opsisubkriterias = OpsiSubkriteria::with(['subkriteria', 'crips', 'alternatif'])->get();
// Mengambil semua data crips dan alternatif
$crips = Crip::all();
$alternatifs = Alternatif::all();
$subkriterias = Subkriteria::all();
return view('admin.opsisubkriteria', compact('opsisubkriterias', 'crips', 'alternatifs', 'subkriterias'));
}
public function tambahopsisubkriteria(Request $request)
{
// Validasi input
$request->validate([
'subkriteria_id' => 'required|exists:subkriterias,id',
'alternatif_id' => 'required|exists:alternatifs,id',
'crips_id' => 'required|exists:crips,id',
'opsi' => 'required|string',
]);
// Cek duplikat opsi untuk kombinasi subkriteria + alternatif
$duplikat = OpsiSubkriteria::where('subkriteria_id', $request->subkriteria_id)
->where('alternatif_id', $request->alternatif_id)
->where('opsi', $request->opsi)
->exists();
if ($duplikat) {
toastr()->error('Opsi tersebut sudah ada untuk kombinasi subkriteria dan alternatif ini.');
return redirect()->back();
}
// Simpan data opsi subkriteria
$opsi = new OpsiSubkriteria();
$opsi->subkriteria_id = $request->subkriteria_id;
$opsi->alternatif_id = $request->alternatif_id;
$opsi->crips_id = $request->crips_id;
$opsi->opsi = $request->opsi;
if ($opsi->save()) {
toastr()->success('Opsi subkriteria berhasil ditambahkan.');
} else {
toastr()->error('Gagal menambahkan opsi subkriteria.');
}
return redirect()->route('opsisubkriteria');
}
public function updateopsisubkriteria(Request $request, $id)
{
// Validasi input
$request->validate([
'subkriteria_id' => 'required|exists:subkriterias,id',
'alternatif_id' => 'required|exists:alternatifs,id',
'crips_id' => 'required|exists:crips,id',
'opsi' => 'required|string',
]);
// Ambil data berdasarkan ID
$opsi = OpsiSubkriteria::findOrFail($id);
// Cek duplikat (kecuali jika data yang sama persis dengan yang sedang diedit)
$duplikat = OpsiSubkriteria::where('subkriteria_id', $request->subkriteria_id)
->where('alternatif_id', $request->alternatif_id)
->where('opsi', $request->opsi)
->where('id', '!=', $id)
->exists();
if ($duplikat) {
toastr()->error('Opsi tersebut sudah ada untuk kombinasi subkriteria dan alternatif ini.');
return redirect()->back();
}
// Update data
$opsi->subkriteria_id = $request->subkriteria_id;
$opsi->alternatif_id = $request->alternatif_id;
$opsi->crips_id = $request->crips_id;
$opsi->opsi = $request->opsi;
if ($opsi->save()) {
toastr()->success('Opsi subkriteria berhasil diperbarui.');
} else {
toastr()->error('Gagal memperbarui opsi subkriteria.');
}
return redirect()->route('opsisubkriteria')->with('reload', true);
}
public function hapusopsisubkriteria($id)
{
// Cari data opsi subkriteria berdasarkan ID
$opsisubkriteria = OpsiSubkriteria::findOrFail($id);
// Hapus data opsi subkriteria
$opsisubkriteria->delete();
// Tampilkan pesan sukses
toastr()->success('Data opsi subkriteria berhasil dihapus.');
// Redirect kembali ke halaman opsi subkriteria
return redirect()->route('opsisubkriteria');
}
public function downloadopsisubkriteria()
{
// Ambil data sekolah dari database
$opsisubkriterias = OpsiSubkriteria::all();
$subkriterias = Subkriteria::all();
$pdf = Pdf::loadView('admin.opsubpdf', compact('opsisubkriterias', 'subkriterias'));
// Download file PDF
return $pdf->download('data_opsisubkriterias.pdf');
}
}