$criteria) { $sum = 0; // Iterasi untuk setiap nilai prioritas pada kriteria for ($i = $key; $i < $totalKriteria; $i++) { // Hitung nilai SMARTER $sum += 1 / ($i + 1); } // Hitung bobot kriteria menggunakan rumus SMARTER ROC $bobot = $sum / $totalKriteria; $bobotKriteria[$criteria->nama] = $bobot; $criteria->update(['bobot' => $bobot]); $criteria->save(); } return redirect()->route('kriteria.index')->with('success', 'Bobot Kriteria Berhasil Dihitung dan Disimpan.'); } public function calculateBobotSubKriteria() { $criterias = Criteria::all(); foreach ($criterias as $criteria) { // Ambil semua sub-kriteria untuk kriteria ini $subcriterias = SubCriteria::where('criteria_id', $criteria->id)->get(); $totalSubKriteria = $subcriterias->count(); $bobotSubKriteria = []; // Hitung bobot untuk setiap sub-kriteria foreach ($subcriterias as $key => $subcriteria) { $sum = 0; // Iterasi untuk setiap nilai prioritas pada kriteria for ($i = $key; $i < $totalSubKriteria; $i++) { // Hitung nilai SMARTER $sum += 1 / ($i + 1); } // Hitung bobot kriteria menggunakan rumus SMARTER ROC $bobot = $sum / $totalSubKriteria; $bobotSubKriteria[$subcriteria->nama] = $bobot; $subcriteria->update(['bobot' => $bobot]); $subcriteria->save(); } } return redirect()->route('subkriteria.index')->with('success', 'Bobot Sub Kriteria Berhasil Dihitung dan Disimpan.'); } public function penilaian() { $criterias = Criteria::all(); $extracuricullars = Extracuricullar ::all(); $subcriterias = Subcriteria::all(); return view('penilaian.input-nilai', compact('criterias','extracuricullars','subcriterias')); } public function transformasiNilai(Request $request) { // Ambil data nilai dari subkriteria yang dipilih dari form $subcriteriaData = $request->input('subcriteria'); // Inisialisasi variabel untuk menyimpan nilai hasil transformasi $transformedValues = []; // Lakukan transformasi nilai berdasarkan bobot subkriteria foreach ($subcriteriaData as $extracurricularId => $criteriaData) { foreach ($criteriaData as $criteriaId => $subcriteriaId) { // Ambil data sub-kriteria berdasarkan ID yang dipilih dari form $subcriteria = SubCriteria::findOrFail($subcriteriaId); // Ambil bobot dari subkriteria yang dipilih $bobot = $subcriteria->bobot; // Simpan hasil transformasi nilai ke dalam array $transformedValues[$extracurricularId][$criteriaId] = $bobot; } } // Simpan data transformasi nilai ke dalam session session(['transformedValues' => $transformedValues]); // Ambil semua kriteria dan ekstrakurikuler untuk ditampilkan di view $criterias = Criteria::all(); $extracuricullars = Extracuricullar::all(); return view('perhitungan.transformasi-nilai', compact('criterias', 'extracuricullars', 'transformedValues')); } public function nilaiUtility(Request $request) { // Ambil data transformasi nilai dari session $transformedValues = session('transformedValues', []); // Inisialisasi variabel untuk menyimpan nilai utility $nilaiUtility = []; foreach ($transformedValues as $extracurricularId => $criteriaData) { foreach ($criteriaData as $criteriaId => $bobot) { // Temukan bobot terbesar dan terkecil dari subkriteria $maxBobot = SubCriteria::where('criteria_id', $criteriaId)->max('bobot'); $minBobot = SubCriteria::where('criteria_id', $criteriaId)->min('bobot'); // Periksa apakah penyebut bernilai nol $denominator = $maxBobot - $minBobot; if ($denominator == 0) { // Tangani jika penyebut bernilai nol $nilaiUtility[$extracurricularId][$criteriaId] = 0; // Atau nilai lainnya sesuai kebutuhan } else { // Lakukan perhitungan nilai utility $utility = (($bobot - $minBobot) / $denominator); $nilaiUtility[$extracurricularId][$criteriaId] = number_format($utility, 2, '.', ''); } } } session(['nilaiUtility' => $nilaiUtility]); // Ambil semua kriteria dan ekstrakurikuler untuk ditampilkan di view $criterias = Criteria::all(); $extracuricullars = Extracuricullar::all(); // Tampilkan hasil perhitungan nilai utility ke dalam view return view('perhitungan.nilai-utility', compact('criterias', 'extracuricullars', 'nilaiUtility')); } public function nilaiAkhir(Request $request) { // Ambil data nilai utility dari session $nilaiUtility = session('nilaiUtility', []); // Inisialisasi variabel untuk menyimpan nilai akhir $nilaiAkhir = []; $totalNilaiAkhir = []; foreach ($nilaiUtility as $extracurricularId => $criteriaData) { foreach ($criteriaData as $criteriaId => $utility) { // Temukan bobot kriteria $criteria = Criteria::find($criteriaId); if ($criteria) { // Lakukan perhitungan nilai akhir $bobotKriteria = $criteria->bobot; $nilaiAkhir[$extracurricularId][$criteriaId] = number_format($utility * $bobotKriteria, 2, '.', ''); } else { // Handle jika kriteria tidak ditemukan $nilaiAkhir[$extracurricularId][$criteriaId] = '0'; } } $totalNilai = array_sum($nilaiAkhir[$extracurricularId]); $totalNilai = min($totalNilai, 100); $totalNilaiAkhir[$extracurricularId] = number_format($totalNilai, 2, '.', ''); } $totalAkhir = collect($nilaiAkhir)->flatten()->sum(); // Ambil semua kriteria dan ekstrakurikuler untuk ditampilkan di view $criterias = Criteria::all(); $extracuricullars = Extracuricullar::all(); // Tampilkan hasil perhitungan nilai akhir ke dalam view return view('perhitungan.nilai-akhir', compact('criterias', 'extracuricullars', 'nilaiAkhir', 'totalNilaiAkhir')); } public function perangkingan(Request $request) { // Ambil data nilai utility dari session $nilaiUtility = session('nilaiUtility', []); $criterias = Criteria::all(); $extracuricullars = Extracuricullar::all(); // Inisialisasi variabel untuk menyimpan nilai akhir $nilaiAkhir = []; $totalNilaiAkhir = []; $totalNilaiAkhirPersen = []; $peringkat = []; foreach ($nilaiUtility as $extracurricularId => $criteriaData) { $totalNilai = 0; // Inisialisasi nilai total untuk setiap ekstrakurikuler foreach ($criteriaData as $criteriaId => $utility) { // Temukan bobot kriteria $criteria = Criteria::find($criteriaId); if ($criteria) { // Lakukan perhitungan nilai akhir $bobotKriteria = $criteria->bobot; $nilaiAkhir[$extracurricularId][$criteriaId] = number_format($utility * $bobotKriteria, 2, '.', ''); // Tambahkan nilai akhir ke total nilai untuk ekstrakurikuler saat ini $totalNilai += $utility * $bobotKriteria; } else { // Handle jika kriteria tidak ditemukan $nilaiAkhir[$extracurricularId][$criteriaId] = '0'; } } // Simpan total nilai akhir untuk setiap ekstrakurikuler $totalNilaiAkhir[$extracurricularId] = number_format($totalNilai, 2, '.', ''); // Hitung persentase total nilai akhir $totalPersen = ($totalNilai ) * 100; // di sini 100 adalah jumlah maksimum bobot $totalNilaiAkhirPersen[$extracurricularId] = number_format($totalPersen, 0, '.', ''); // Simpan peringkat $peringkat[$extracurricularId] = $totalPersen; } // Urutkan peringkat arsort($peringkat); // Tampilkan hasil perhitungan nilai akhir ke dalam view return view('perhitungan.perangkingan', compact('criterias', 'extracuricullars', 'nilaiAkhir', 'totalNilaiAkhir', 'totalNilaiAkhirPersen', 'peringkat')); } public function getRiwayatHasil(Request $request) { // Ambil data riwayat hasil dengan pagination $logsQuery = LogActivity::query(); // Periksa apakah pengguna telah login if (auth()->check()) { // Jika pengguna adalah admin, ambil semua aktivitas log if (auth()->user()->role === 'admin') { $logs = LogActivity::all(); } else { // Jika pengguna bukan admin, ambil hanya aktivitas log milik mereka sendiri $userId = auth()->id(); $logs = LogActivity::where('user_id', $userId)->get(); } } else { // Jika pengguna belum login, kembalikan koleksi kosong $logs = collect(); } if ($request->has('search')) { $search = $request->search; $logsQuery->where(function ($query) use ($search) { $query->whereHas('user', function ($query) use ($search) { $query->where('name', 'like', '%' . $search . '%'); })->orWhereHas('extracuricullar', function ($query) use ($search) { $query->where('nama', 'like', '%' . $search . '%'); }); }); } // Lakukan pagination dengan 10 item per halaman $logs = $logsQuery->paginate(10); // Ambil data dari formulir atau perhitungan Anda $nilaiUtility = session('nilaiUtility', []); // Lakukan perhitungan perangkingan jika ada data if (!empty($nilaiUtility)) { $nilaiAkhir = []; foreach ($nilaiUtility as $extracurricularId => $criteriaData) { $totalNilai = 0; foreach ($criteriaData as $criteriaId => $utility) { $criteria = Criteria::find($criteriaId); if ($criteria) { $bobotKriteria = $criteria->bobot; $nilaiAkhir[$extracurricularId][$criteriaId] = $utility * $bobotKriteria; $totalNilai += $utility * $bobotKriteria; } else { $nilaiAkhir[$extracurricularId][$criteriaId] = 0; } } $totalNilaiAkhir[$extracurricularId] = $totalNilai; $totalPersen = $totalNilai * 100; $totalNilaiAkhirPersen[$extracurricularId] = $totalPersen; $peringkat[$extracurricularId] = $totalPersen; } arsort($peringkat); // Ambil id ekstrakurikuler dari peringkat pertama $extracurricularIds = array_keys($peringkat); $extracurricularId = reset($extracurricularIds); // Periksa apakah id ekstrakurikuler valid if (isset($nilaiAkhir[$extracurricularId])) { $nilaiAkhir = $nilaiAkhir[$extracurricularId]; // Simpan ke database jika id ekstrakurikuler valid $userId = auth()->check() ? auth()->user()->id : 1; // Check apakah sudah ada log untuk ekskul peringkat pertama $existingLog = LogActivity::where('user_id', $userId) ->where('extracuricullar_id', $extracurricularId) ->first(); // Jika belum ada log, buat log baru if (!$existingLog) { LogActivity::create([ 'user_id' => $userId, 'extracuricullar_id' => $extracurricularId, 'final_score' => $totalNilaiAkhir[$extracurricularId], ]); } else { // Jika sudah ada log, perbarui final score jika nilai akhir baru lebih tinggi if ($existingLog->final_score < $totalNilaiAkhir[$extracurricularId]) { $existingLog->final_score = $totalNilaiAkhir[$extracurricularId]; $existingLog->save(); } } // Tampilkan view hasil perangkingan dan riwayat return view('perhitungan.riwayat-hasil', compact('logs', 'userId', 'extracurricularId', 'nilaiAkhir')); } else { // Handle jika id ekstrakurikuler tidak valid return redirect()->back()->with('error', 'Ekstrakurikuler tidak valid'); } } // Jika tidak ada data perhitungan, langsung tampilkan riwayat hasil return view('perhitungan.riwayat-hasil', compact('logs')); } public function index() { } /** * Show the form for creating a new resource. */ public function create() { // } /** * Store a newly created resource in storage. */ public function store(Request $request) { // } /** * Display the specified resource. */ public function show(string $id) { // } /** * Show the form for editing the specified resource. */ public function edit(string $id) { // } /** * Update the specified resource in storage. */ public function update(Request $request, string $id) { // } /** * Remove the specified resource from storage. */ public function destroy(string $id) { // } }