68 lines
2.1 KiB
PHP
68 lines
2.1 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;
|
||
}
|
||
|
||
$names = ['GIMO', 'SATUMI', 'NUR DIANA'];
|
||
|
||
$kriteria = \App\Models\Kriteria::orderBy('kode')->get();
|
||
|
||
$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');
|
||
|
||
foreach ($names as $name) {
|
||
$wargaList = \App\Models\Warga::where('nama', 'LIKE', '%' . $name . '%')->get();
|
||
|
||
foreach ($wargaList as $warga) {
|
||
$penilaian = \App\Models\PenilaianWarga::where('warga_id', $warga->id)
|
||
->where('periode_id', $periode->id)
|
||
->get()
|
||
->keyBy('kriteria_id');
|
||
|
||
if ($penilaian->count() < 5) continue;
|
||
|
||
$normStr = [];
|
||
$terbobotStr = [];
|
||
$skorTotal = 0;
|
||
|
||
foreach ($kriteria as $k) {
|
||
$nilaiAsli = $penilaian[$k->id]->nilai;
|
||
$stat = $statPerKriteria[$k->id];
|
||
$max = $stat->max_val;
|
||
$min = $stat->min_val;
|
||
|
||
if ($k->jenis === 'benefit') {
|
||
$nilaiNormalisasi = $max > 0 ? $nilaiAsli / $max : 0;
|
||
} else {
|
||
$nilaiNormalisasi = $nilaiAsli > 0 ? $min / $nilaiAsli : 0;
|
||
}
|
||
|
||
$nilaiTerbobot = $nilaiNormalisasi * $k->bobot;
|
||
$skorTotal += $nilaiTerbobot;
|
||
|
||
$normFmt = number_format($nilaiNormalisasi, 3);
|
||
$bobotFmt = number_format($k->bobot, 2);
|
||
$terbobotFmt = number_format($nilaiTerbobot, 3);
|
||
|
||
$normStr[] = "({$normFmt} × {$bobotFmt})";
|
||
$terbobotStr[] = $terbobotFmt;
|
||
}
|
||
|
||
$totalFmt = number_format($skorTotal, 3);
|
||
|
||
echo "**{$warga->nama}**\n";
|
||
echo implode(" + ", $normStr) . " = " . implode(" + ", $terbobotStr) . " = **{$totalFmt}**\n\n";
|
||
}
|
||
}
|