MIF_E31211891/app/Http/Controllers/PengajuanController.php

225 lines
8.1 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\User;
use App\Models\Pengajuan;
use Illuminate\Http\Request;
use App\Models\SettingPengajuan;
use Illuminate\Support\Facades\Auth;
class PengajuanController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(Request $request)
{
$no = 1;
$tahuns = Pengajuan::where('status', 'Menunggu Persetujuan')->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.');
}
}