From 2de02742a4710c52414782bef0e41cf6cb0c2aec Mon Sep 17 00:00:00 2001 From: yuliana dewi Date: Mon, 22 Jan 2024 00:02:37 +0700 Subject: [PATCH] perhitungan --- .../Controllers/DataAlternatifController.php | 2 +- .../PenilaianAlternatifController.php | 4 +- .../Controllers/PerhitunganController.php | 48 +++- app/Models/Alternatif.php | 10 +- app/Models/Penilaian.php | 8 +- resources/views/component/sidebar.blade.php | 4 +- .../views/pages/penilaian/form.blade.php | 2 +- .../views/pages/penilaian/index.blade.php | 2 +- .../pages/proses_penilaian/index.blade.php | 249 ++++++------------ 9 files changed, 151 insertions(+), 178 deletions(-) diff --git a/app/Http/Controllers/DataAlternatifController.php b/app/Http/Controllers/DataAlternatifController.php index d820b84..d387b08 100644 --- a/app/Http/Controllers/DataAlternatifController.php +++ b/app/Http/Controllers/DataAlternatifController.php @@ -15,7 +15,7 @@ class DataAlternatifController extends Controller $fetchAll = DataTables::of($data_alternatif) ->addIndexColumn() ->addColumn('nama_alternatif', function ($data) { - return $data->alternatif['nama_guru']; + return $data->guru['nama_guru']; }) ->addColumn('action', function ($data) { return' diff --git a/app/Http/Controllers/PenilaianAlternatifController.php b/app/Http/Controllers/PenilaianAlternatifController.php index 885bfd5..0243b95 100644 --- a/app/Http/Controllers/PenilaianAlternatifController.php +++ b/app/Http/Controllers/PenilaianAlternatifController.php @@ -11,12 +11,12 @@ use App\Models\SubKriteria; class PenilaianAlternatifController extends Controller { function index() { - $penilaian = Penilaian::with(['guru','kriteria','subKriteria'])->get(); + $penilaian = Penilaian::with(['alternatif','kriteria','subKriteria'])->get(); return view('pages.penilaian.index',compact('penilaian')); } function create() { - $alternatif = Alternatif::with('alternatif')->get(); + $alternatif = Alternatif::with('guru')->get(); $kriteria = Kriteria::get(); $subKriteria = SubKriteria::get(); return view('pages.penilaian.form', compact(['alternatif','kriteria','subKriteria'])); diff --git a/app/Http/Controllers/PerhitunganController.php b/app/Http/Controllers/PerhitunganController.php index ab1f0e8..f746c83 100644 --- a/app/Http/Controllers/PerhitunganController.php +++ b/app/Http/Controllers/PerhitunganController.php @@ -3,10 +3,56 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; +use App\Models\Kriteria; +use App\Models\Alternatif; +use App\Models\Penilaian; class PerhitunganController extends Controller { function index() { - return view('pages.proses_penilaian.index'); + $alternatif = Alternatif::with('penilaian.kriteria')->orderBy('kode_alternatif','ASC')->get(); + $kriteria = Kriteria::get(); + $penilaian = Penilaian::with('subKriteria')->get(); + // return response()->json($alternatif); + + // mencari min max + foreach ($kriteria as $key => $vkriteria) { + foreach ($penilaian as $key_1 => $vpenilaian) { + if ($vkriteria->id == $vpenilaian->id_kriteria) { + if ($vkriteria->sifat == "benefit") { + $minMax[$vkriteria->id][] = $vpenilaian->subKriteria['bobot']; + }elseif ($vkriteria->sifat == "cost") { + $minMax[$vkriteria->id][] = $vpenilaian->subKriteria['bobot']; + } + } + } + } + + // normalisasi + foreach ($penilaian as $key_1 => $vpenilaian) { + foreach ($kriteria as $key => $vkriteria) { + if ($vkriteria->id == $vpenilaian->id_kriteria) { + if ($vkriteria->sifat == "benefit") { //nilai sub_kriteria : nilai maksimal + $normalisasi[$vpenilaian->alternatif->guru['nama_guru']][$vkriteria->id] = $vpenilaian->subKriteria['bobot'] / max($minMax[$vkriteria->id]); + }elseif ($vkriteria->sifat == "cost") { //nilai minimal : nilai sub_kriteria + $normalisasi[$vpenilaian->alternatif->guru['nama_guru']][$vkriteria->id] = min($minMax[$vkriteria->id]) / $vpenilaian->subKriteria['bobot']; + } + } + } + } + + // perangkingan + foreach ($normalisasi as $key => $vnormalisasi) { + foreach ($kriteria as $key_1 => $vkriteria) { //hasil normalisasi x bobot_kriteria + $rank[$key][] = $vnormalisasi[$vkriteria->id] * $vkriteria->bobot_kriteria; + } + } + foreach ($normalisasi as $key => $value){ //total hasil perangkingan + $rank[$key][] = array_sum($rank[$key]); + } + asort($rank); //sortir $rank + + // dd($minMax); + return view('pages.proses_penilaian.index', compact(['kriteria','alternatif','penilaian','minMax','normalisasi','rank'])); } } diff --git a/app/Models/Alternatif.php b/app/Models/Alternatif.php index b60b19c..b3d4cef 100644 --- a/app/Models/Alternatif.php +++ b/app/Models/Alternatif.php @@ -14,8 +14,16 @@ class Alternatif extends Model protected $fillable = [ 'kode_alternatif', 'id_guru', ]; + + function penilaian() { + return $this->hasMany(Penilaian::class, 'id_alternatif'); + } - public function alternatif(){ + public function guru(){ return $this->hasOne(Guru::class, 'id', 'id_guru'); } + + function kriteria() { + return $this->hasMany(Penilaian::class, 'id_alternatif', 'id'); + } } diff --git a/app/Models/Penilaian.php b/app/Models/Penilaian.php index dc03256..11d4ae1 100644 --- a/app/Models/Penilaian.php +++ b/app/Models/Penilaian.php @@ -15,13 +15,13 @@ class Penilaian extends Model 'periode', 'id_alternatif', 'id_kriteria', 'id_sub', ]; - public function guru(){ - return $this->hasOne(Alternatif::class, 'id', 'id_alternatif'); + public function alternatif(){ + return $this->belongsTo(Alternatif::class, 'id_alternatif'); } public function kriteria(){ - return $this->hasOne(Kriteria::class, 'id', 'id_kriteria'); + return $this->belongsTo(Kriteria::class, 'id_kriteria'); } public function subKriteria(){ - return $this->hasOne(SubKriteria::class, 'id', 'id_sub'); + return $this->belongsTo(SubKriteria::class, 'id_sub'); } } diff --git a/resources/views/component/sidebar.blade.php b/resources/views/component/sidebar.blade.php index 0d37c1f..de0eeaf 100644 --- a/resources/views/component/sidebar.blade.php +++ b/resources/views/component/sidebar.blade.php @@ -62,8 +62,8 @@ Proses Perhitungan -