whereNotNull('judul')->where('pembimbing', NULL)->orderBy('name', 'ASC')->get(); $dosen = User::where('role', 'Dosen')->orderBy('prodi', 'ASC')->orderBy('name', 'ASC')->get(); return view('daftar-tunggu', compact('no', 'mahasiswa', 'dosen')); } /** * Store a newly created resource in storage. */ public function store(Request $request) { $mahasiswas = User::where('role', 'Mahasiswa')->whereNotNull('judul')->where('pembimbing', NULL)->get(); $results = []; // Mendapatkan prodi yang dipilih dari checkbox $prodi = $request->input('prodi'); // Kata kunci untuk setiap kategori $kategoriKeywords = [ 'Sistem Pendukung Keputusan' => ['Sistem Pendukung Keputusan', 'Rekomendasi', 'Pemilihan', 'Penentuan'], 'Media Pembelajaran' => ['Media Pembelajaran', 'Augmented Reality', 'Game', 'Edukasi', 'Pembelajaran'], 'Sistem Pakar' => ['Sistem Pakar'], 'Sistem Informasi' => ['Sistem Informasi', 'Sistem Penjualan', 'Website'], 'Aplikasi Mobile' => ['Mobile', 'Android'], 'Data Mining' => ['Data Mining', 'Analisis', 'Visualisasi Data', 'Peramalan', 'Prediksi', 'Forecasting'] ]; // Mengambil daftar jabatan dari database $jabatanData = Subkriteria::where('id_kriteria', '2')->get(); $jabatanTertinggi = $jabatanData->pluck('nama_subkriteria')->toArray(); $jabatanTerendah = array_reverse($jabatanTertinggi); foreach ($mahasiswas as $mahasiswa) { $judul = $mahasiswa->judul; $kategori = NULL; foreach ($kategoriKeywords as $kategoriKey => $keywords) { foreach ($keywords as $keyword) { if (strpos($judul, $keyword) !== false) { $kategori = $kategoriKey; break 2; // Keluar dari kedua loop } } } // Tentukan urutan jabatan berdasarkan IPK mahasiswa $jabatanUrut = $mahasiswa->ipk >= 3.75 ? $jabatanTerendah : $jabatanTertinggi; $randomDosen = null; // Loop melalui urutan jabatan foreach ($jabatanUrut as $jabatan) { // Mendapatkan dosen berdasarkan jabatan dan kategori $dosens = User::where(function($query) use ($jabatan) { if ($jabatan === 'Dosen') { $query->where('jabatan', $jabatan) ->orWhereNull('jabatan'); } else { $query->where('jabatan', $jabatan); } }) ->where(function($query) use ($kategori) { $query->where('keahlian', 'like', "%$kategori%") ->orWhere('minat', 'like', "%$kategori%"); }) ->whereIn('prodi', $prodi) ->get(); // Filter dosen yang kuotanya belum penuh $availableDosens = $dosens->reject(function ($dosen) { $settingPengajuan = SettingPengajuan::first(); $maxMahasiswa = $settingPengajuan->maxMahasiswa; return User::where('pembimbing', $dosen->name)->count() >= $maxMahasiswa; }); // Jika ada dosen yang tersedia, pilih salah satu secara acak if ($availableDosens->isNotEmpty()) { $randomDosen = $availableDosens->random(); break; // Keluar dari loop jabatan setelah menemukan dosen } } // Jika tidak menemukan dosen yang tersedia dalam urutan jabatan yang ditentukan if (!$randomDosen) { $dosens = User::where(function($query) use ($jabatanUrut) { $query->whereIn('jabatan', $jabatanUrut) ->orWhereNull('jabatan'); }) ->whereIn('prodi', $prodi) ->get(); $randomDosen = $dosens->random(); } $results[] = [ 'mahasiswa' => $mahasiswa, 'dosen' => $randomDosen, 'dosens' => $dosens ]; } Session::put('pembimbing', $results); return view('daftar-tunggu', compact('results'))->with('toast_success', 'Generate Dosen Pembimbing Berhasil'); } /** * Display the specified resource. */ public function show(string $id) { // } /** * Update the specified resource in storage. */ public function update(Request $request) { $dosenSelections = $request->input('pembimbing'); $results = Session::get('pembimbing'); foreach ($results as $result) { $mahasiswa = $result['mahasiswa']; $selectedDosen = $dosenSelections[$mahasiswa->id]; $mahasiswa->update([ 'pembimbing' => $selectedDosen, ]); } Session::forget('pembimbing'); // Hapus session setelah disimpan return redirect()->route('daftar-tunggu')->with('toast_success', 'Dosen Pembimbing Berhasil Disimpan'); } /** * Remove the specified resource from storage. */ public function destroy(string $id) { // } }