SPKNETLAB / app / Http / Controllers / PerhitunganController.php
PerhitunganController.php
Raw
<?php

namespace App\Http\Controllers;

use App\Models\Kriteria;
use App\Models\Penilaian;
use App\Models\Alternatif;
use App\Models\Perhitungan;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use PhpParser\Node\Stmt\Foreach_;

class PerhitunganController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(){
        $penilaians=Penilaian::all();
        $alternatifs=Alternatif::all();
        $kriterias=Kriteria::all();
        
        // foreach($alternatifss as $altera){
        //     $alternatifs[] = $altera;
        // }
        // // dd($alternatifs);

        try{
        $matriksawal = array();
        foreach($alternatifs as $alter){
            $nilaia = Penilaian::select('nilai')
                        ->where('id_alternatif', $alter->idalter)
                        ->orderBy('id_kriteria')
                        ->get(); //berupa collection
            // $nilaia = DB::table('penilaians')
            //         ->select('nilai')
            //         ->orderBy('id_kriteria','asc') //berarti kriteria wajib urut
            //         ->where('id_alternatif', $alter->idalter)
            //         ->get(); //nanti berupa objek
            $matriksawal[] = $nilaia;
        }
        $kuadrat = array();
        for($i = 0; $i < $alternatifs->count(); $i++){
            for ($j = 0; $j < $kriterias->count(); $j++){
                $kuadrat[$i][$j] = pow($matriksawal[$i][$j]->nilai,2);
            }
        }

        $kuadrat1 = array();
        $kuadrat1 = $kuadrat;
        $totalkuadrat = array_shift($kuadrat1);
        foreach ($kuadrat1 as $val) {
            foreach ($val as $key => $val) {
                $totalkuadrat[$key]+=$val;
            }
        }

        $akartotalkuadrat = array();
        for ($z = 0; $z < $kriterias->count(); $z++){
            $akartotalkuadrat[$z] = sqrt($totalkuadrat[$z]);
        }
        
        $normalisasi = array();
        for($p = 0; $p < $alternatifs->count(); $p++){
            for ($q = 0; $q < $kriterias->count(); $q++){
                $normalisasi[$p][$q] = $matriksawal[$p][$q]->nilai / $akartotalkuadrat[$q];
            }
        }
       
        $bobot = array();
        $bobot = Kriteria::select('bobot')
                        ->orderBy('kodekriteria')
                        ->get(); //berupa collection
        $normaterbobot = array();
        for($p = 0; $p < $alternatifs->count(); $p++){
            for ($q = 0; $q < $kriterias->count(); $q++){
                $normaterbobot[$p][$q] = $normalisasi[$p][$q] * $bobot[$q]->bobot;
            }
        }


        $normaterbobot1 = array();
        $normaterbobot1 = $normaterbobot;
        $sifat = array();
        $sifat = Kriteria::select('sifat')
                    ->orderBy('kodekriteria')
                    ->get(); //berupa collection
        $perkolom = array();
        for($p = 0; $p < $kriterias->count(); $p++){
            for ($q = 0; $q < $alternatifs->count(); $q++){
                $perkolom[$p][$q] = $normaterbobot1[$q][$p];
            }
        }

        // dd(max($perkolom[3]));
        $idealpositif = array();
        for($d = 0; $d < $kriterias->count(); $d++){
            if($sifat[$d]->sifat == "Benefit"){
                $idealpositif[$d] = max($perkolom[$d]);
            } else {
                $idealpositif[$d] = min($perkolom[$d]);
            }
        }

        $idealnegatif = array();
        for($d = 0; $d < $kriterias->count(); $d++){
            if($sifat[$d]->sifat == "Benefit"){
                $idealnegatif[$d] = min($perkolom[$d]);
            } else {
                $idealnegatif[$d] = max($perkolom[$d]);
            }
        }
        

        $normaterbobot2 = array();
        $normaterbobot2 = $normaterbobot;
        $idealpositif2 = array();
        $idealpositif2 = $idealpositif;
        $jarakpositiftotal = array();
        $summ = 0;
        for ($f = 0; $f < $alternatifs->count(); $f++){
            for($h = 0; $h < $kriterias->count(); $h++){
                $summ += pow($normaterbobot2[$f][$h]-$idealpositif2[$h],2);
            }
            $jarakpositiftotal[] = sqrt($summ);
            $summ = 0;
        }
        $idealnegatif2 = array();
        $idealnegatif2 = $idealnegatif;
        $jaraknegatiftotal = array();
        $summ = 0;
        for ($f = 0; $f < $alternatifs->count(); $f++){
            for($h = 0; $h < $kriterias->count(); $h++){
                $summ += pow($normaterbobot2[$f][$h]-$idealnegatif2[$h],2);
            }
            $jaraknegatiftotal[] = sqrt($summ);
            $summ = 0;
        }

        $Preferensi = array();
        for ($f = 0; $f < $alternatifs->count(); $f++){
            $Preferensi[] = $jaraknegatiftotal[$f]/($jaraknegatiftotal[$f]+$jarakpositiftotal[$f]);
        }

        // $nilaiakhirnya = array();
        Perhitungan::query()->truncate();
        for ($f = 0; $f < $alternatifs->count(); $f++){
            // $nilaiakhirnya[$f] = array('kodenyaalter' =>$alternatifs[$f]->kodealternatif,
            //                            'namanyaalter' =>$alternatifs[$f]->namaalternatif, 
            //                            'nilaipreferensi' => $Preferensi[$f]); 
            Perhitungan::create(['kodenyaalter' =>$alternatifs[$f]->kodealternatif,
                                 'namanyaalter' =>$alternatifs[$f]->namaalternatif, 
                                 'nilaipreferensi' => $Preferensi[$f]]); 
        }
    } catch (\Throwable $th){
        return redirect()->route('dashboard')->with('error','Silahkan Lengkapi Data Penilaian Terlebih Dahulu.');
    }

        // dd($Preferensi);
        return view ('dashboards.perhitungan.index', [
            'kriterias' => $kriterias,
            'alternatifs' => $alternatifs,
            'matriksawal' => $matriksawal,
            'kuadrat' => $kuadrat,
            'totalkuadrat' => $totalkuadrat,
            'akartotalkuadrat' => $akartotalkuadrat,
            'normalisasi' => $normalisasi,
            'normaterbobot' => $normaterbobot,
            'idealpositif' => $idealpositif,
            'idealnegatif' => $idealnegatif,
            'jarakpositiftotal' => $jarakpositiftotal,
            'jaraknegatiftotal' => $jaraknegatiftotal,
            'Preferensi' => $Preferensi
        ]);
    }

    public function indexKOTOR()
    {
        // $alternatifs=Perhitungan::all();
        $penilaians=Penilaian::all();
        $alternatifs=Alternatif::all();
        $kriterias=Kriteria::all();
        
        // $kriterias=Kriteria::all()->where('name', 'Banyak Praktikan Rajin Hadir');
        // $BobotKriteria = DB::table('kriterias')
        //     ->select('bobot')
        //     ->orderBy('id','asc')
        //     ->get();
        // $NamaKriteria = DB::table('kriterias')
        //     ->select('name')
        //     ->orderBy('id','asc')
        //     ->get();
        // $matriksawal = Alternatif::join('penilaians', 'penilaians.id_alternatif', '=', 'alternatifs.id')
        //                             ->join('kriterias','kriterias.id','=','penilaians.id_kriteria')
        //                             ->get(['alternatifs.name','kriterias.id','penilaians.nilai']);
        // $matriksawal = Penilaian::join('alternatifs', 'alternatifs.id', '=', 'penilaians.id_alternatif')
        //                             ->join('kriterias','kriterias.id','=','penilaians.id_kriteria')
        //                             ->get(['penilaians.nilai'])->where('penilaians.id_alternatif')->sortBy('kriterias.id','asc');

        // dd($matriksawal); MULAI BENER
        // $nilaia = Penilaian::all('nilai');
        // $newarray = array();
        // for ($x = 0; $x <= $alternatifs->count(); $x++) {
        //     for ($z = 0; $z <= $kriterias->count(); $z++) {
        //         $newarray[$x] = $nilaia;
        //     }
        // }
        $as = DB::table('alternatifs')
            ->select('idalter')
            ->orderBy('idalter','asc')
            ->get();
        // dd($as);
        $newarray = array();
        foreach($alternatifs as $alter){
            $nilaia = DB::table('penilaians')
                    ->select('nilai')
                    ->orderBy('id_kriteria','asc') //berarti kriteria wajib urut
                    ->where('id_alternatif', $alter->idalter)
                    ->get();
            $newarray[] = $nilaia;
        }
        
        // dd($newarray[2][2]);
        // $items = array();
        // foreach($alternatifs as $alter) {
        //     foreach($kriterias as $krite) {
        //         $nilaia = Penilaian::all('nilai')->where('id_alternatif', $alter->id);
        //         $items[] = $;
        //     }
        // }
        // dd($items);
        
        // return view('dashboards.admins.perhitungan.index',  compact('newarray','kriterias'));
        return view ('dashboards.admins.perhitungan.index', [
            'kriterias' => $kriterias,
            'alternatifs' => $alternatifs,
            'newarray' => $newarray,
            // 'matriksawal' => $matriksawal,
            // 'NamaKriteria'=>$NamaKriteria,
            // 'BobotKriteria'=>$BobotKriteria,
        ]);
        
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Perhitungan  $perhitungan
     * @return \Illuminate\Http\Response
     */
    public function show(Perhitungan $perhitungan)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Perhitungan  $perhitungan
     * @return \Illuminate\Http\Response
     */
    public function edit(Perhitungan $perhitungan)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Perhitungan  $perhitungan
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Perhitungan $perhitungan)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Perhitungan  $perhitungan
     * @return \Illuminate\Http\Response
     */
    public function destroy(Perhitungan $perhitungan)
    {
        //
    }
}