MIF_E31212322/app/Http/Controllers/DataKriteriaController.php

205 lines
6.9 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\datakriteria;
use App\Models\datasubkriteria;
use App\Models\perbandingank;
use App\Models\prioritaskriteria;
use App\Models\User;
use PDF;
class DataKriteriaController extends Controller
{
public function index()
{
$datakriterias = DataKriteria::all();
$prioritask = prioritaskriteria::all();
return view('pages.dataKriteria', compact('datakriterias', 'prioritask'));
}
public function index2()
{
$datakriterias = Datakriteria::all()->pluck('kode_kriteria');
return view('pages.dataKriteria', compact('datakriterias'));
}
public function showKriteria()
{
return view('pages.tKriteria');
}
public function tampile()
{
return view('pages.editkriteria');
}
public function create()
{
return view('pages.dataKriteria');
}
public function store(Request $request)
{
$validatedData = $request->validate([
'kodekriteria' => 'required',
'namakriteria' => 'required',
]);
$datakriterias = new datakriteria;
$datakriterias->kode_kriteria = $validatedData['kodekriteria'];
$datakriterias->nama_kriteria = $validatedData['namakriteria'];
$datakriterias->save();
return redirect('/datakriteria')->with('success', 'Data kriteria berhasil disimpan.');
}
public function edit($id)
{
$datakriterias = datakriteria::find($id);
return view('pages.editkriteria', compact('datakriterias'));
}
public function hapus($id)
{
$datakriterias = datakriteria::find($id);
if ($datakriterias) {
$datakriterias->delete();
return redirect()->back()->with('success', 'Data berhasil dihapus.');
} else {
return redirect()->back()->with('error', ' Data gagal dihapus');
}
}
public function update(Request $request, $id)
{
$datakriterias = datakriteria::find($id);
$datakriterias->kode_kriteria = $request->input('kodekriteria');
$datakriterias->nama_kriteria = $request->input('namakriteria');
$datakriterias->save();
// Redirect kembali ke daftar kriteria atau tampilkan pesan sukses
return redirect()->route('datakriteria')->with('success', 'Kriteria berhasil diperbarui.');
}
public function cetak()
{
$judul = 'Laporan Data Kriteria';
$datakriterias = DataKriteria::all();
return view('pages.print', compact('judul', 'datakriterias'));
}
public function storen(Request $request)
{
$request->validate([
'kriteria1' => 'required',
'nilai_bobot' => 'required',
'kriteria2' => 'required',
]);
$datakriterias = [
'kriteria1' => $request->kriteria1,
'kriteria2' => $request->kriteria2,
];
$perbandinganK = perbandingank::where($datakriterias)->first();
if ($perbandinganK) {
$perbandinganK->update([
'nilai_bobot' => $request->nilai_bobot,
]);
} else {
perbandingank::create($datakriterias + ['nilai_bobot' => $request->nilai_bobot]);
}
return redirect()->back()->with('success', 'Data berhasil disimpan')->with('tabel-kriteria', true);
}
public function calculateNormalization()
{
$datakriterias = datakriteria::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 = perbandingank::where('kriteria1', $row->kode_kriteria)
->where('kriteria2', $column->kode_kriteria)
->value('nilai_bobot');
if (!$nilai_bobot) {
$nilai_bobot = perbandingank::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
prioritaskriteria::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'));
}
}