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

104 lines
3.5 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\DataAlternatif;
use App\Models\Kriteria;
use App\Models\Penilaian;
use App\Models\Subkriteria;
class PerhitunganController extends Controller
{
// Method untuk masing-masing jenis pakaian
public function dress() { return $this->showJenisPakaian('Dress'); }
public function blouse() { return $this->showJenisPakaian('Blouse'); }
public function cardigan() { return $this->showJenisPakaian('Cardigan'); }
public function rok() { return $this->showJenisPakaian('Rok'); }
public function celana() { return $this->showJenisPakaian('Celana'); }
// Method umum untuk menampilkan data berdasarkan jenis pakaian
public function showJenisPakaian($jenis)
{
// Ambil data alternatif yang memiliki penilaian pada kriteria ke-3 (jenis pakaian),
// dan nilai subkriteria-nya sesuai dengan jenis yang dipilih (misalnya 'Dress')
$alternatif = DataAlternatif::with(['penilaian.subkriteria'])
->whereHas('penilaian', function($query) use ($jenis) {
$query->where('kriteria_id', 3)
->whereHas('subkriteria', function($subquery) use ($jenis) {
$subquery->where('nama_subkriteria', $jenis);
});
})
->get();
// Ambil semua data kriteria
$kriteria = Kriteria::all();
// Hitung nilai maksimum dan minimum untuk tiap kriteria
$maxNilai = [];
$minNilai = [];
foreach ($kriteria as $index => $k) {
$nilaiKriteria = [];
foreach ($alternatif as $alt) {
$penilaian = $alt->penilaian->firstWhere('kriteria_id', $k->id);
if ($penilaian && $penilaian->subkriteria) {
$nilaiKriteria[] = $penilaian->subkriteria->nilai;
}
}
$kode = 'C' . ($index + 1);
$maxNilai[$kode] = count($nilaiKriteria) > 0 ? max($nilaiKriteria) : 1;
$minNilai[$kode] = count($nilaiKriteria) > 0 ? min($nilaiKriteria) : 1;
}
$normalisasi = [];
$pembobotan = [];
foreach ($alternatif as $alt) {
$barisNormal = [];
$barisBobot = [];
foreach ($kriteria as $index => $k) {
$penilaian = $alt->penilaian->firstWhere('kriteria_id', $k->id);
$nilai = $penilaian && $penilaian->subkriteria ? $penilaian->subkriteria->nilai : 0;
$kode = 'C' . ($index + 1);
if ($k->jenis == 'Cost') {
$normal = $nilai > 0 ? $minNilai[$kode] / $nilai : 0;
} else {
$normal = $maxNilai[$kode] > 0 ? $nilai / $maxNilai[$kode] : 0;
}
$normalRounded = round($normal, 3);
$bobot = round($normalRounded * $k->bobot, 3);
$barisNormal[$kode] = $normalRounded;
$barisBobot[$kode] = $bobot;
}
$normalisasi[] = [
'nama' => $alt->nama_alternatif,
'nilai' => $barisNormal
];
$pembobotan[] = [
'nama' => $alt->nama_alternatif,
'nilai' => $barisBobot
];
}
$viewName = strtolower($jenis);
return view("admin.pages.perhitungan.$viewName", compact(
'alternatif',
'kriteria',
'jenis',
'normalisasi',
'pembobotan'
));
}
}