225 lines
8.1 KiB
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.');
|
|
}
|
|
}
|