get(); $kecerdasans = Kecerdasan::orderBy('nama')->get(); return view('user.perhitunganaph', compact('kriterias', 'kecerdasans')); } public function analisa(Request $request) { $request->validate([ 'kondisi' => 'required|array|min:2', 'kondisi.*' => 'regex:/^[A-Za-z0-9]+_[0-4]$/', ], [ 'kondisi.min' => 'Pilih minimal 2 kriteria untuk analisa.', 'kondisi.required' => 'Anda harus memilih kriteria.', ]); $kriterias = Kriteria::orderBy('nama')->get(); $kecerdasans = Kecerdasan::with(['basisPengetahuans' => function ($q) use ($request) { $ids = array_map(fn($item) => explode('_', $item)[0], $request->input('kondisi', [])); $q->whereIn('kriteria_id', $ids); }])->orderBy('nama')->get(); // Mapping level ke bobot $arbobot = [0 => 0, 1 => 0.25, 2 => 0.5, 3 => 0.75, 4 => 1.0]; // Ambil tingkat kepastian per kriteria $kepastian = []; foreach ($request->kondisi as $item) { [$kritId, $lvl] = explode('_', $item); $kepastian[$kritId] = (int) $lvl; } $cfHasil = []; foreach ($kecerdasans as $kec) { $cfs = []; foreach ($kec->basisPengetahuans as $bp) { $level = $kepastian[$bp->kriteria_id] ?? 0; $cfs[] = $bp->nilai * $arbobot[$level]; } // Gabungan CF $cfTotal = array_reduce($cfs, fn($acc, $cf) => $acc === null ? $cf : $acc + $cf * (1 - $acc), null); $cfHasil[$kec->id] = round($cfTotal ?? 0, 4); } arsort($cfHasil); $topId = array_key_first($cfHasil); $presentase = ($cfHasil[$topId] ?? 0) * 100; // Simpan diagnosa (jika masih ingin simpan ke Diagnosa) Diagnosa::create([ 'user_id' => Auth::id(), 'kecerdasan_id' => $topId, 'presentase' => $presentase, 'catatan' => null, ]); // Kirim data ke view return view('user.perhitunganaph', compact( 'kriterias', 'kecerdasans', 'kepastian', 'cfHasil' ))->with('success', 'Analisa berhasil dihitung.'); } public function reset(Request $request) { $request->session()->forget('biodata'); return redirect()->route('user.perhitunganaph.index'); } }