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";