MIF_E31231754/manual_calc.php

69 lines
2.0 KiB
PHP

<?php
require 'vendor/autoload.php';
$app = require_once 'bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
$kernel->bootstrap();
$periode = \App\Models\PeriodeSeleksi::where('status', 'aktif')->first();
if (!$periode) {
echo "Tidak ada periode aktif.";
exit;
}
$gimo = \App\Models\Warga::where('nama', 'LIKE', '%GIMO%')->first();
if (!$gimo) {
echo "Warga bernama GIMO tidak ditemukan.";
exit;
}
$kriteria = \App\Models\Kriteria::orderBy('kode')->get();
$penilaianGimo = \App\Models\PenilaianWarga::where('warga_id', $gimo->id)
->where('periode_id', $periode->id)
->get()
->keyBy('kriteria_id');
$statPerKriteria = \App\Models\PenilaianWarga::where('periode_id', $periode->id)
->groupBy('kriteria_id')
->selectRaw('kriteria_id, MAX(nilai) as max_val, MIN(nilai) as min_val')
->get()
->keyBy('kriteria_id');
echo "Nama: " . $gimo->nama . "\n";
echo "Periode: " . $periode->nama . "\n\n";
$skorTotal = 0;
foreach ($kriteria as $k) {
if (!isset($penilaianGimo[$k->id])) {
echo "Nilai {$k->kode} belum diisi untuk GIMO.\n";
continue;
}
$nilaiAsli = $penilaianGimo[$k->id]->nilai;
$stat = $statPerKriteria[$k->id] ?? null;
$max = $stat ? $stat->max_val : 0;
$min = $stat ? $stat->min_val : 0;
echo "Kriteria {$k->kode} ({$k->jenis}), Bobot: {$k->bobot}\n";
echo " - Nilai Asli GIMO: {$nilaiAsli}\n";
echo " - Nilai Max Semua Warga: {$max}\n";
echo " - Nilai Min Semua Warga: {$min}\n";
if ($k->jenis === 'benefit') {
$nilaiNormalisasi = $max > 0 ? $nilaiAsli / $max : 0;
echo " - Rumus Benefit: {$nilaiAsli} / {$max} = {$nilaiNormalisasi}\n";
} else {
$nilaiNormalisasi = $nilaiAsli > 0 ? $min / $nilaiAsli : 0;
echo " - Rumus Cost: {$min} / {$nilaiAsli} = {$nilaiNormalisasi}\n";
}
$nilaiTerbobot = $nilaiNormalisasi * $k->bobot;
echo " - Nilai Terbobot: {$nilaiNormalisasi} * {$k->bobot} = {$nilaiTerbobot}\n\n";
$skorTotal += $nilaiTerbobot;
}
echo "Skor Total SAW: {$skorTotal}\n";