MIF_E31212322/app/Http/Controllers/DataSubKriteriaController.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'));
}
}