MIF_E31220442/app/Http/Controllers/AlgoritmaController.php

150 lines
5.0 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Alternatif;
use App\Models\Kriteria;
use App\Models\Penilaian;
use PDF;
use Carbon\Carbon;
class AlgoritmaController extends Controller
{
public function __construct()
{
return $this->middleware('auth');
}
public function index()
{
$alternatif = Alternatif::with('penilaian.crips')->get();
$kriteria = Kriteria::with('crips')->orderBy('nama_kriteria','ASC')->get();
$penilaian = Penilaian::with('crips','alternatif')->get();
if (count($penilaian) == 0) {
return redirect(route('penilaian.index'))->with('empty','Data Kosong Silahkan Isi Terlbih Dahulu');
}
//mencari min max normalisasi
foreach ($kriteria as $key => $value) {
foreach ($penilaian as $key_1 => $value_1) {
if ($value->id == $value_1->crips->kriteria_id)
{
if ($value->attribut == 'Benefit') {
$minMax[$value->id][] = $value_1->crips->bobot;
}elseif ($value->attribut == 'Cost') {
$minMax[$value->id][] = $value_1->crips->bobot;
}
}
}
}
//Normalisasi
foreach ($penilaian as $key_1 => $value_1) {
foreach ($kriteria as $key => $value) {
if ($value->id == $value_1->crips->kriteria_id) {
if ($value->attribut == 'Benefit') {
$normalisasi[$value_1->alternatif->nama_alternatif][$value->id] = $value_1->crips->bobot / max($minMax[$value->id]);
}elseif ($value->attribut == 'Cost') {
$normalisasi[$value_1->alternatif->nama_alternatif][$value->id] = min($minMax[$value->id]) / $value_1->crips->bobot;
}
}
}
}
// Perangkingan
foreach ($normalisasi as $key => $value) {
foreach ($kriteria as $key_1 => $value_1) {
$rank[$key][] = $value[$value_1->id] * $value_1->bobot;
}
}
$ranking = $normalisasi;
foreach ($normalisasi as $key => $value) {
$ranking[$key][] = array_sum($rank[$key]);
}
// arsort($ranking);
$sortedData = collect($ranking)->sortByDesc(function ($value) {
return array_sum($value);
})->toArray();
// dd($sortedData);
return view('admin.perhitungan.index', compact('alternatif','kriteria','normalisasi','sortedData'));
}
public function downloadPDF() {
setlocale(LC_ALL, 'IND');
$tanggal = Carbon::now()->formatLocalized('%A, %d %B %Y');
$alternatif = Alternatif::with('penilaian.crips')->get();
$kriteria = Kriteria::with('crips')->orderBy('nama_kriteria','ASC')->get();
$penilaian = Penilaian::with('crips','alternatif')->get();
if (count($penilaian) == 0) {
return redirect(route('penilaian.index'));
}
//mencari min max normalisasi
foreach ($kriteria as $key => $value) {
foreach ($penilaian as $key_1 => $value_1) {
if ($value->id == $value_1->crips->kriteria_id)
{
if ($value->attribut == 'Benefit') {
$minMax[$value->id][] = $value_1->crips->bobot;
}elseif ($value->attribut == 'Cost') {
$minMax[$value->id][] = $value_1->crips->bobot;
}
}
}
}
//Normalisasi
foreach ($penilaian as $key_1 => $value_1) {
foreach ($kriteria as $key => $value) {
if ($value->id == $value_1->crips->kriteria_id) {
if ($value->attribut == 'Benefit') {
$normalisasi[$value_1->alternatif->nama_alternatif][$value->id] = $value_1->crips->bobot / max($minMax[$value->id]);
}elseif ($value->attribut == 'Cost') {
$normalisasi[$value_1->alternatif->nama_alternatif][$value->id] = min($minMax[$value->id]) / $value_1->crips->bobot;
}
}
}
}
// Perangkingan
foreach ($normalisasi as $key => $value) {
foreach ($kriteria as $key_1 => $value_1) {
$rank[$key][] = $value[$value_1->id] * $value_1->bobot;
}
}
$ranking = $normalisasi;
foreach ($normalisasi as $key => $value) {
$ranking[$key][] = array_sum($rank[$key]);
}
// arsort($ranking);
$sortedData = collect($ranking)->sortByDesc(function ($value) {
return array_sum($value);
})->toArray();
$pdf = PDF::loadView('admin.perhitungan.perhitungan-pdf',compact('alternatif','kriteria','normalisasi','sortedData','tanggal'));
$pdf->setPaper('A3', 'potrait');
return $pdf->stream('perhitungan.pdf');
}
}