selectRaw('YEAR(created_at) as year')->groupBy('year')->pluck('year'); $tahun = $request->tahun; if (Auth::User()->role == 'Admin') { $pengajuans = Pengajuan::with('mahasiswa')->whereIn(Pengajuan::raw('YEAR(created_at)'), $tahuns)->where('status', 'Menunggu Persetujuan')->orderBy('created_at', 'DESC')->when($tahun, function ($query, $tahun) { return $query->whereYear('created_at', $tahun); })->get(); } elseif (Auth::User()->role == 'Dosen') { $pengajuans = Pengajuan::with('mahasiswa')->whereIn(Pengajuan::raw('YEAR(created_at)'), $tahuns)->where('id_dosen_pembimbing', Auth::user()->id)->where('status', 'Menunggu Persetujuan')->orderBy('created_at', 'DESC')->when($tahun, function ($query, $tahun) { return $query->whereYear('created_at', $tahun); })->get(); } $dosen = User::where('role', 'Dosen')->get(); $status = []; // Inisialisasi array untuk menyimpan status dari setiap pengajuan foreach ($pengajuans as $pengajuan) { $judul = $pengajuan->judul; $kategori = NULL; // Inisialisasi kategori // 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'] ]; // Loop melalui setiap kategori dan kata kunci foreach ($kategoriKeywords as $kategoriKey => $keywords) { foreach ($keywords as $keyword) { // Jika judul mengandung kata kunci, atur kategori if (strpos($judul, $keyword) !== false) { $kategori = $kategoriKey; break 2; // Keluar dari kedua loop } } } // Inisialisasi array untuk menyimpan status dari setiap dosen untuk pengajuan saat ini $pengajuanStatus = []; // Lakukan pengecekan kesesuaian kategori dengan keahlian/minat dosen foreach ($dosen as $dsn) { // Inisialisasi status untuk dosen saat ini $dosenStatus = ''; // Jika keahlian/minat dosen sama dengan kategori judul mahasiswa, atur status kesesuaian if ($dsn->keahlian == NULL || $dsn->minat == NULL) { $dosenStatus = 'Tidak Sesuai'; } elseif ($dsn->keahlian == $kategori || $dsn->minat == $kategori) { $dosenStatus = 'Sesuai'; } else { $dosenStatus = 'Tidak Sesuai'; } // Tambahkan status dosen saat ini ke dalam array untuk pengajuan saat ini $pengajuanStatus[] = $dosenStatus; } // Tambahkan array status untuk pengajuan saat ini ke dalam array status keseluruhan $status[] = $pengajuanStatus; } return view('pengajuan', compact('no', 'tahuns', 'tahun', 'pengajuans', 'dosen', 'status')); } /** * Store a newly created resource in storage. */ public function store(Request $request) { // } /** * Display the specified resource. */ public function show(string $id) { // } /** * Update the specified resource in storage. */ public function update(Request $request, $id) { // Ambil data dosen yang akan disetujui pengajuannya $idDosenPembimbing = $request->input('id_dosen_pembimbing'); // Hitung jumlah pengajuan yang sudah disetujui oleh dosen tersebut $countPengajuan = Pengajuan::where('id_dosen_pembimbing', $idDosenPembimbing)->where('status', 'Disetujui')->count(); // Ambil batas maksimum mahasiswa per dosen $maxMahasiswa = SettingPengajuan::select('maxMahasiswa')->first()->maxMahasiswa; // Cek apakah jumlah pengajuan yang disetujui sudah mencapai batas maksimum if ($countPengajuan >= $maxMahasiswa) { return redirect('pengajuan')->with('toast_error', 'Persetujuan Dosen Pembimbing Telah Mencapai Batas ' . $maxMahasiswa . ' Mahasiswa'); } $request->validate([ 'judul' => 'required', 'id_dosen_pembimbing' => 'required', ]); $pengajuan = Pengajuan::find($id); $existingApproval = Pengajuan::where('id_mahasiswa', $pengajuan->id_mahasiswa)->where('status', 'Disetujui')->where('id', '!=', $id)->exists(); if ($existingApproval) { return redirect('pengajuan')->with('toast_error', 'Mahasiswa Sudah Memiliki Dosen Pembimbing.'); } $pengajuan->update([ 'status' => 'Disetujui', 'id_dosen_pembimbing' => $request->id_dosen_pembimbing ]); $dosen = User::find($request->id_dosen_pembimbing); $mahasiswa = User::where('id', $pengajuan->id_mahasiswa); $mahasiswa->update([ 'judul' => $request->judul, 'pembimbing' => $dosen->name, ]); return redirect('pengajuan')->with('toast_success', 'Pengajuan Dosen Pembimbing Diterima.'); } /** * Remove the specified resource from storage. */ public function destroy(string $id) { // } /** * Accept the specified resource in storage. */ public function accept(Request $request, $id) { $user = Auth::user(); $countPengajuan = Pengajuan::where('id_dosen_pembimbing', $user->id)->where('status', 'Disetujui')->count(); $maxMahasiswa = SettingPengajuan::select('maxMahasiswa')->first()->maxMahasiswa; if ($countPengajuan >= $maxMahasiswa) { return redirect('pengajuan')->with('toast_error', 'Persetujuan Dosen Pembimbing Telah Mencapai Batas ' . $maxMahasiswa . ' Mahasiswa'); } $request->validate([ 'judul' => 'required', 'id_dosen_pembimbing' => 'required', ]); $pengajuan = Pengajuan::find($id); $existingApproval = Pengajuan::where('id_mahasiswa', $pengajuan->id_mahasiswa)->where('status', 'Disetujui')->where('id', '!=', $id)->exists(); if ($existingApproval) { return redirect('pengajuan')->with('toast_error', 'Mahasiswa Sudah Memiliki Dosen Pembimbing.'); } $pengajuan->update([ 'status' => 'Disetujui' ]); $dosen = User::find($request->id_dosen_pembimbing); $mahasiswa = User::where('id', $pengajuan->id_mahasiswa); $mahasiswa->update([ 'judul' => $request->judul, 'pembimbing' => $dosen->name, ]); return redirect('pengajuan')->with('toast_success', 'Pengajuan Dosen Pembimbing Diterima.'); } /** * Decline the specified resource from storage. */ public function decline(Request $request, $id) { $request->validate([ 'judul' => 'required', ]); $pengajuan = Pengajuan::find($id); $pengajuan->update([ 'status' => 'Ditolak' ]); $mahasiswa = User::where('id', $pengajuan->id_mahasiswa); $mahasiswa->update([ 'judul' => $request->judul, ]); return redirect('pengajuan')->with('toast_success', 'Pengajuan Dosen Pembimbing Ditolak.'); } }