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()); } } }