207 lines
7.9 KiB
PHP
207 lines
7.9 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\datakriteria;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\datasubkriteria;
|
|
use App\Models\perbandingans;
|
|
use App\Models\prioritassubkriteria;
|
|
|
|
class DataSubKriteriaController extends Controller
|
|
{
|
|
|
|
public function index()
|
|
{
|
|
$datasubkriterias = datakriteria::all();
|
|
return view('pages.dataSubKriteria', compact('datasubkriterias'));
|
|
}
|
|
|
|
public function showkriteria()
|
|
{
|
|
$datasubkriterias = datakriteria::all();
|
|
return view('pages.tSubkriteria', compact('datasubkriterias'));
|
|
}
|
|
public function showparameter()
|
|
{
|
|
$datakriterias = datakriteria::all();
|
|
return view('pages.parameter', compact('datakriterias'));
|
|
}
|
|
public function tabelparameter()
|
|
{
|
|
$datasubkriterias = datakriteria::all();
|
|
$datasubkriterias = DataSubKriteria::all();
|
|
return view('pages.parameter', compact('datasubkriterias','datasubkriterias'));
|
|
}
|
|
public function create()
|
|
{
|
|
return view('pages.tSubkriteriariteria');
|
|
}
|
|
public function tabelsubkriteria()
|
|
{
|
|
$datasubkriterias = DataSubKriteria::all();
|
|
return view('pages.dataSubKriteria', compact('datasubkriterias'));
|
|
}
|
|
public function store(Request $request)
|
|
{
|
|
$validatedData = $request->validate([
|
|
'kodekriteria' => 'required',
|
|
'kodesubkriteria' => 'required',
|
|
'namasubkriteria' => 'required',
|
|
'nilaibobot' => 'required',
|
|
]);
|
|
|
|
$datasubkriterias = new datasubkriteria;
|
|
$datasubkriterias->id_kriteria = $validatedData['kodekriteria'];
|
|
$datasubkriterias->kode_subkriteria = $validatedData['kodesubkriteria'];
|
|
$datasubkriterias->nama_subkriteria = $validatedData['namasubkriteria'];
|
|
$datasubkriterias->nilai_bobot = $validatedData['nilaibobot'];
|
|
$datasubkriterias->save();
|
|
|
|
|
|
return redirect('/parameter')->with('success', 'Data Sub Kriteria berhasil disimpan.');
|
|
}
|
|
|
|
public function hapus($id)
|
|
{
|
|
$datasubkriterias = datasubkriteria::find($id);
|
|
|
|
if ($datasubkriterias) {
|
|
$datasubkriterias->delete();
|
|
return redirect()->back()->with('success', 'Data berhasil dihapus.');
|
|
} else {
|
|
return redirect()->back()->with('error', ' Data gagal dihapus');
|
|
}
|
|
}
|
|
public function edit($id)
|
|
{
|
|
$datasubkriterias = datasubkriteria::find($id);
|
|
return view('pages.eparameter', compact('datasubkriterias'));
|
|
}
|
|
|
|
// Metode untuk memperbarui data yang diubah
|
|
public function update(Request $request, $id)
|
|
{
|
|
$datasubKriterias = datasubkriteria::find($id);
|
|
$datasubKriterias->id_kriteria = $request->input('kodekriteria');
|
|
$datasubKriterias->kode_subkriteria = $request->input('kodesubkriteria');
|
|
$datasubKriterias->nama_subkriteria = $request->input('namasubkriteria');
|
|
$datasubKriterias->nilai_bobot = $request->input('nilaibobot');
|
|
$datasubKriterias->save();
|
|
|
|
// Redirect ke halaman yang sesuai atau lakukan tindakan lainnya
|
|
return redirect()->back()->with('success', 'Data Sub Kriteria berhasil diperbarui.');
|
|
}
|
|
public function subkriteria($id_kriteria)
|
|
{
|
|
$datakriteria = Datakriteria::findOrFail($id_kriteria);
|
|
$subkriterias = datasubkriteria::where('id_kriteria', $id_kriteria)->get();
|
|
return view('pages.dataSubKriteria', compact('datakriteria', 'subkriterias'));
|
|
}
|
|
public function storen(Request $request)
|
|
{
|
|
$request->validate([
|
|
'subkriteria1' => 'required',
|
|
'nilai_bobot' => 'required',
|
|
'subkriteria2' => 'required',
|
|
]);
|
|
|
|
$datasubkriterias = [
|
|
'subkriteria1' => $request->subkriteria1,
|
|
'subkriteria2' => $request->subkriteria2,
|
|
];
|
|
|
|
|
|
|
|
$perbandingans = perbandingans::where($datasubkriterias)->first();
|
|
|
|
if ($perbandingans) {
|
|
$perbandingans->update([
|
|
'nilai_bobot' => $request->nilai_bobot,
|
|
]);
|
|
} else {
|
|
perbandingans::create($datasubkriterias + ['nilai_bobot' => $request->nilai_bobot]);
|
|
}
|
|
|
|
return redirect()->back()->with('success', 'Data berhasil disimpan')->with('tabel-kriteria', true);
|
|
}
|
|
public function calculateNormalization()
|
|
{
|
|
$datakriterias = datasubkriteria::all();
|
|
$columnTotals = [];
|
|
$nilaiBobotMatrix = [];
|
|
$priorities = [];
|
|
|
|
// Hitung nilai bobot dan total per kolom
|
|
foreach ($datakriterias as $row) {
|
|
$rowTotal = 0;
|
|
foreach ($datakriterias as $column) {
|
|
if ($row->kode_kriteria === $column->kode_kriteria) {
|
|
$nilai_bobot = 1; // Isi otomatis dengan nilai 1 jika xkriteria dan ykriteria sama
|
|
} else {
|
|
$nilai_bobot = perbandingans::where('kriteria1', $row->kode_kriteria)
|
|
->where('kriteria2', $column->kode_kriteria)
|
|
->value('nilai_bobot');
|
|
if (!$nilai_bobot) {
|
|
$nilai_bobot = perbandingans::where('kriteria1', $column->kode_kriteria)
|
|
->where('kriteria2', $row->kode_kriteria)
|
|
->value('nilai_bobot');
|
|
if (!$nilai_bobot) {
|
|
$nilai_bobot = 0; // Set nilai_bobot menjadi 0 jika tidak ada data yang ditemukan
|
|
} else {
|
|
$nilai_bobot = 1 / floatval($nilai_bobot); // Menghitung nilai kebalikan setelah mengubah ke tipe float
|
|
}
|
|
}
|
|
}
|
|
$rowTotal += floatval($nilai_bobot);
|
|
$columnTotals[$column->id] = isset($columnTotals[$column->id]) ? $columnTotals[$column->id] + floatval($nilai_bobot) : floatval($nilai_bobot);
|
|
$nilaiBobotMatrix[$row->id][$column->id] = floatval($nilai_bobot);
|
|
}
|
|
}
|
|
|
|
// Hitung nilai normalisasi dan prioritas
|
|
foreach ($datakriterias as $rowIndex => $row) {
|
|
$rowSum = 0;
|
|
foreach ($datakriterias as $columnIndex => $column) {
|
|
$normalizedValue = 0;
|
|
if (isset($columnTotals[$column->id]) && $columnTotals[$column->id] != 0) {
|
|
$normalizedValue = $nilaiBobotMatrix[$row->id][$column->id] / $columnTotals[$column->id];
|
|
}
|
|
$rowSum += $normalizedValue;
|
|
}
|
|
$priority = $rowSum / count($datakriterias);
|
|
$priorities[$row->id] = $priority;
|
|
|
|
// Simpan nilai prioritas ke database
|
|
$kriteria = datakriteria::find($row->id);
|
|
$kriteria->priority = $priority;
|
|
$kriteria->save();
|
|
}
|
|
foreach ($datakriterias as $rowIndex => $row) {
|
|
// Hitung prioritas
|
|
$priority = $rowSum / count($datakriterias);
|
|
|
|
// Simpan hasil prioritas ke database
|
|
prioritassubkriteria::create([
|
|
'kriteria_id' => $row->id, // Sesuaikan dengan kolom yang sesuai di database
|
|
'nilai_prioritas' => $priority,
|
|
// Jika ada kolom lain yang perlu disimpan, tambahkan di sini
|
|
]);
|
|
}
|
|
|
|
// Hitung Lambda Max
|
|
$lambdaMax = array_sum(array_map(function ($priority, $columnId) use ($columnTotals) {
|
|
return $priority * $columnTotals[$columnId];
|
|
}, $priorities, array_keys($priorities)));
|
|
|
|
// Hitung CI dan CR
|
|
$CI = ($lambdaMax - count($datakriterias)) / (count($datakriterias) - 1);
|
|
$RI = 1.12; // Nilai Random Index untuk jumlah kriteria tertentu, sesuaikan dengan tabel RI
|
|
$CR = $CI / $RI;
|
|
|
|
// Kirim data ke view
|
|
return view('pages.dataKriteria', compact('datakriterias', 'columnTotals', 'nilaiBobotMatrix', 'priorities', 'lambdaMax', 'CI', 'CR'));
|
|
}
|
|
}
|
|
|