get(); $detail_mitra = DetailMitra::all(); $mitra = Mitra::all(); $kriteria = Kriteria::all(); $siswa = Siswa::find($id); return view('admin.pages.data-penghitungan', [ 'detail_siswa' => $detail_siswa, 'detail_mitra' => $detail_mitra, 'mitra' => $mitra, 'kriteria' => $kriteria, 'siswa' => $siswa, ]); } public function index2($id) { $data_detail_siswa = DetailSiswa::where('id_siswa', $id)->get(); $data_detail_mitra = DetailMitra::all(); $datamitra = Mitra::all(); $datakriteria = Kriteria::all(); // Temukan siswa dengan ID tertentu $siswa = Siswa::find($id); if (!$siswa) { return; // Jika siswa tidak ditemukan, keluar dari fungsi } $kriteria_list = Kriteria::all(); $mitra_list = Mitra::all(); // Inisialisasi nilai maksimum dan minimum untuk setiap kriteria $nilai_maks = []; $nilai_min = []; $data_alternatif = []; $data_normalisasi = []; // Menentukan data alternatif berdasarkan id kriteria dan id nilai kepentingan dari detail siswa, kemudian di cocokkan dengan detail mitra, jika cocok maka ambil bobot dari detail mitra foreach ($siswa->detailSiswa as $detail_siswa) { foreach ($mitra_list as $mitra) { foreach ($mitra->detailMitra as $detail_mitra) { if ( $detail_mitra->id_kriteria == $detail_siswa->id_kriteria && $detail_mitra->id_nilai_kepentingan == $detail_siswa->id_nilai_kepentingan ) { $data_alternatif[$mitra->id][$detail_siswa->id_kriteria] = $detail_mitra->bobot; } } } } // Menentukan nilai maksimum dan minimum dari setiap kriteria pada data alternatif foreach ($kriteria_list as $kriteria) { $nilai_maks[$kriteria->id] = max(array_column($data_alternatif, $kriteria->id)); $nilai_min[$kriteria->id] = min(array_column($data_alternatif, $kriteria->id)); } // Normalisasi data alternatif jika benefit (bobot alternatif / maksimum * bobot_kriteria) jika cost (minimum * bobot_alternatif / bobot_kriteria) foreach ($data_alternatif as $id_mitra => $alternatif) { $data_normalisasi[$id_mitra] = []; foreach ($alternatif as $id_kriteria => $bobot) { $kriteria = Kriteria::find($id_kriteria); if ($kriteria->jenis == 'Benefit') { $data_normalisasi[$id_mitra][$id_kriteria] = $bobot / $nilai_maks[$id_kriteria] * $kriteria->bobot; } else { $data_normalisasi[$id_mitra][$id_kriteria] = $nilai_min[$id_kriteria] / $bobot * $kriteria->bobot; } } } // Initialize an array to store the normalized data in a matrix form $tampil_normalisasi = []; // Initialize the headers for kriteria $kriteria_headers = Kriteria::all()->pluck('name', 'id')->toArray(); // Initialize the rows for each mitra foreach ($mitra_list as $mitra) { $tampil_normalisasi[$mitra->id] = [ 'mitra' => $mitra->name, 'data' => array_fill_keys(array_keys($kriteria_headers), null) ]; } // Fill in the bobot values foreach ($data_normalisasi as $id_mitra => $normalisasi) { foreach ($normalisasi as $id_kriteria => $bobot) { $tampil_normalisasi[$id_mitra]['data'][$id_kriteria] = $bobot; } } // dd($tampil_normalisasi); // Menentukan nilai akhir dari data normalisasi $nilai_akhir = []; foreach ($data_normalisasi as $id_mitra => $normalisasi) { $nilai_akhir[$id_mitra] = array_sum($normalisasi); } // Mengurutkan nilai akhir dari yang terbesar ke terkecil arsort($nilai_akhir); // // Menentukan perangkingan // $perangkingan = []; // $ranking = 1; // foreach ($nilai_akhir as $id_mitra => $nilai) { // $perangkingan[] = [ // 'mitra' => Mitra::find($id_mitra)->name, // 'nilai' => $nilai, // 'ranking' => $ranking, // ]; // $ranking++; // } // // buat perankingan, namun nilai yang sama memiliki ranking yang sama // $perangkingan_nilai_sama = []; // $ranking = 1; // $nilai_sebelumnya = null; // foreach ($perangkingan as $key => $value) { // if ($nilai_sebelumnya == $value['nilai']) { // $perangkingan_nilai_sama[] = [ // 'mitra' => $value['mitra'], // 'nilai' => $value['nilai'], // 'ranking' => $ranking, // ]; // } else { // $perangkingan_nilai_sama[] = [ // 'mitra' => $value['mitra'], // 'nilai' => $value['nilai'], // 'ranking' => $ranking, // ]; // } // $nilai_sebelumnya = $value['nilai']; // $ranking++; // } // $urut_by_ranking = collect($perangkingan)->sortByDesc('nilai')->values()->all(); // Menentukan perangkingan $perangkingan = []; foreach ($nilai_akhir as $id_mitra => $nilai) { $perangkingan[] = [ 'mitra' => Mitra::find($id_mitra)->name, 'nilai' => $nilai, ]; } // Urutkan perangkingan berdasarkan nilai dari yang terbesar ke yang terkecil usort($perangkingan, function ($a, $b) { return $b['nilai'] <=> $a['nilai']; }); // Buat perankingan, namun nilai yang sama memiliki ranking yang sama $perangkingan_nilai_sama = []; $ranking = 1; $nilai_sebelumnya = null; foreach ($perangkingan as $key => $value) { if ($nilai_sebelumnya !== $value['nilai']) { $ranking = $key + 1; // Peringkat sesuai dengan posisi dalam array setelah diurutkan } $perangkingan_nilai_sama[] = [ 'mitra' => $value['mitra'], 'nilai' => $value['nilai'], 'ranking' => $ranking, ]; $nilai_sebelumnya = $value['nilai']; } // perangkingan_nilai_sama hanya 5 data $perangkingan_nilai_sama = array_slice($perangkingan_nilai_sama, 0, 5); return view('admin.pages.hitung', [ 'detail_siswa' => $data_detail_siswa, 'detail_mitra' => $data_detail_mitra, 'mitra' => $datamitra, 'kriteria' => $datakriteria, 'siswa' => $siswa, // 'perangkingan' => $urut_by_ranking, 'perangkingan_nilai_sama' => $perangkingan_nilai_sama, 'tampil_normalisasi' => $tampil_normalisasi, 'kriteria_headers' => $kriteria_headers, ]); } public function rekomendasimitrabyadmin(Request $request) { $mitra = Mitra::where('name', $request->mitra)->first(); $batas_jumlah_siswa_mitra = $mitra->batas_siswa; $cek = Siswa::where('rekomendasi', $request->mitra)->count(); if ($cek >= $batas_jumlah_siswa_mitra) { return redirect()->back()->with('addmitrabyadmingagal', 'Rekomendasi gagal diubah, batas jumlah siswa mitra sudah tercapai'); } $siswa = Siswa::find($request->id_siswa); $siswa->rekomendasi = $request->mitra; $siswa->rekomendasi_by = 'Admin'; $siswa->save(); return redirect()->back()->with('addmitrabyadmin', 'Rekomendasi berhasil diubah'); } public function batalkanmitra(Request $request) { $siswa = Siswa::find($request->id_siswa); $siswa->rekomendasi = null; $siswa->rekomendasi_by = 'Sistem'; $siswa->save(); return redirect()->back()->with('batalkanmitra', 'Rekomendasi berhasil dibatalkan'); } }