MIF_E31222658/app/Http/Controllers/MahasiswaController.php

144 lines
5.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\PengajuanUkt;
use App\Models\Form;
use App\Models\RankingFile;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class MahasiswaController extends Controller
{
public function dashboard()
{
try {
$user = Auth::user();
$today = now();
// Get latest forms
$formPenurunan = Form::where('jenis_form', 'penurunan')
->orderByDesc('tahun')
->orderByDesc('semester')
->first();
$formPengangsuran = Form::where('jenis_form', 'pengangsuran')
->orderByDesc('tahun')
->orderByDesc('semester')
->first();
// Get all pengajuan for this user
$pengajuan = PengajuanUkt::with(['form', 'details' => function($query) {
$query->whereNotNull('rejection_reason');
}])
->where('mahasiswa_id', $user->id)
->orderBy('created_at', 'desc')
->get();
// Get latest ranking file
$rankingFile = RankingFile::whereNotNull('path')->latest()->first();
// Penurunan setup
$penurunanSubmission = null;
$submissionStatusPenurunan = null;
$canSubmitPenurunan = true;
$showAnnouncementPenurunan = false;
$tanggal_pengumuman_penurunan = null;
if ($formPenurunan) {
$tanggal_pengumuman_penurunan = $formPenurunan->tanggal_pengumuman;
$showAnnouncementPenurunan = $tanggal_pengumuman_penurunan && $today >= $tanggal_pengumuman_penurunan;
$penurunanSubmission = $pengajuan->first(function($item) use ($formPenurunan) {
return $item->form &&
$item->form->jenis_form === 'penurunan' &&
$item->form->semester === $formPenurunan->semester &&
$item->form->tahun === $formPenurunan->tahun;
});
if ($penurunanSubmission) {
$submissionStatusPenurunan = $penurunanSubmission->status_validasi;
$canSubmitPenurunan = $submissionStatusPenurunan === 'tidak valid';
}
}
// Pengangsuran setup
$pengangsuranSubmission = null;
$submissionStatusPengangsuran = null;
$canSubmitPengangsuran = true;
$showAnnouncementPengangsuran = false;
$tanggal_pengumuman_pengangsuran = null;
if ($formPengangsuran) {
$tanggal_pengumuman_pengangsuran = $formPengangsuran->tanggal_pengumuman;
$showAnnouncementPengangsuran = $tanggal_pengumuman_pengangsuran && $today >= $tanggal_pengumuman_pengangsuran;
$pengangsuranSubmission = $pengajuan->first(function($item) use ($formPengangsuran) {
return $item->form &&
$item->form->jenis_form === 'pengangsuran' &&
$item->form->semester === $formPengangsuran->semester &&
$item->form->tahun === $formPengangsuran->tahun;
});
if ($pengangsuranSubmission) {
$submissionStatusPengangsuran = $pengangsuranSubmission->status_validasi;
$canSubmitPengangsuran = $submissionStatusPengangsuran === 'tidak valid';
}
}
return view('mahasiswa.dashboard', [
'user' => $user,
'today' => $today,
'pengajuan' => $pengajuan,
'formPenurunan' => $formPenurunan,
'formPengangsuran' => $formPengangsuran,
'rankingFile' => $rankingFile,
'submissionStatusPenurunan' => $submissionStatusPenurunan,
'canSubmitPenurunan' => $canSubmitPenurunan,
'showAnnouncementPenurunan' => $showAnnouncementPenurunan,
'submissionStatusPengangsuran' => $submissionStatusPengangsuran,
'canSubmitPengangsuran' => $canSubmitPengangsuran,
'showAnnouncementPengangsuran' => $showAnnouncementPengangsuran,
'tanggal_pengumuman' => max(
$tanggal_pengumuman_penurunan ?? now()->subCentury(),
$tanggal_pengumuman_pengangsuran ?? now()->subCentury()
),
'showAnnouncement' => ($showAnnouncementPenurunan || $showAnnouncementPengangsuran),
]);
} catch (\Exception $e) {
\Log::error("Dashboard error: ".$e->getMessage());
return response()->view('errors.simple', [
'message' => 'Terjadi kesalahan saat memuat dashboard'
], 500);
}
}
public function downloadRanking($id)
{
try {
$rankingFile = RankingFile::findOrFail($id);
$filePath = storage_path('app/public/' . $rankingFile->path);
if (!file_exists($filePath)) {
throw new \Exception("File laporan tidak ditemukan");
}
$filename = 'Laporan-UKT-' . $rankingFile->created_at->format('Y-m-d') . '.pdf';
return response()->download($filePath, $filename, [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="' . $filename . '"'
]);
} catch (\Exception $e) {
\Log::error("Download error - User: " . Auth::id() . " - Error: " . $e->getMessage());
return redirect()->route('mahasiswa.dashboard')
->with('error', 'Gagal mengunduh laporan: ' . $e->getMessage());
}
}
}