MIF_E31221264/app/Http/Controllers/Admin/PenilaianController.php

94 lines
3.5 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Penilaian;
use App\Models\Alternatif;
use App\Models\DataAlternatif;
use App\Models\Kriteria;
use App\Models\Subkriteria;
use Illuminate\Http\Request;
class PenilaianController extends Controller
{
// Menampilkan daftar penilaian
public function indexPage(Request $request)
{
$perPage = $request->input('perPage', 10); // Jumlah data per halaman
$search = $request->input('search'); // Keyword pencaria
$query = DataAlternatif::with(['penilaian.subkriteria']); // Relasi eager loading
if ($search) {
// Jika terdapat pencarian, filter berdasarkan nama alternatif atau nama subkriteria
$query->where(function ($q) use ($search) {
$q->where('nama_alternatif', 'like', "%{$search}%")
->orWhereHas('penilaian.subkriteria', function ($sub) use ($search) {
$sub->where('nama_subkriteria', 'like', "%{$search}%");
});
});
}
// Ambil data dengan pagination dan simpan parameter query kecuali halaman
$data = $query->paginate($perPage)->appends($request->except('page'));
// Ambil semua data kriteria untuk ditampilkan
$kriteria = Kriteria::all();
return view('admin.pages.penilaian.index', compact('data', 'perPage', 'kriteria', 'search'));
}
// Menampilkan form edit penilaian
public function edit($id)
{
$alternatif = DataAlternatif::findOrFail($id); // Ambil data alternatif berdasarkan ID
$penilaians = Penilaian::where('alternatif_id', $id)->get(); // Ambil data penilaian yang terkait
$kriteria = Kriteria::all(); // Ambil seluruh kriteria
$nilai = []; // Menyimpan ID subkriteria per kriteria untuk ditampilkan di form
foreach ($penilaians as $penilaian) {
$nilai[$penilaian->kriteria_id] = $penilaian->subkriteria_id;
}
return view('admin.pages.penilaian.edit', compact('alternatif', 'kriteria', 'nilai'));
}
// Memperbarui data penilaian
public function update(Request $request, $id)
{
$alternatif = DataAlternatif::findOrFail($id); // Pastikan data alternatif ada
// Validasi input
$request->validate([
'subkriteria_1' => 'required|numeric',
'subkriteria_2' => 'required|numeric',
'subkriteria_3' => 'required|numeric',
'subkriteria_4' => 'required|numeric',
'subkriteria_5' => 'required|numeric',
'subkriteria_6' => 'required|numeric',
]);
// Lakukan update atau insert data penilaian untuk masing-masing kriteria
foreach (range(1, 6) as $i) {
$subkriteriaId = $request->input("subkriteria_$i"); // Ambil input subkriteria
$subkriteria = Subkriteria::find($subkriteriaId); // Cari data subkriteria
if ($subkriteria) {
Penilaian::updateOrCreate(
[
'alternatif_id' => $alternatif->id, // Berdasarkan alternatif dan kriteria
'kriteria_id' => $i,
],
[
'subkriteria_id' => $subkriteria->id, // Simpan subkriteria yang dipilih
'nilai' => $subkriteria->nilai, // Ambil nilai dari subkriteria
]
);
}
}
return redirect()->route('admin.penilaian.index')->with('success', 'Penilaian berhasil diperbarui!');
}
}