@extends('layouts.app') @section('title', 'Kelayakan Seminar') @section('page-title', 'Kelayakan Seminar') @section('content') @php $kelayakanTerkirim = (bool) $kelayakan; $statusBadge = [ 'belum_dikirim' => 'secondary', 'menunggu' => 'warning text-dark', 'revisi' => 'danger', 'disetujui' => 'success', ]; $statusLabel = [ 'belum_dikirim' => 'Belum Dikirim', 'menunggu' => 'Menunggu Validasi', 'revisi' => 'Direvisi', 'disetujui' => 'Disetujui', ]; $reviewerStatusLabel = [ 'menunggu' => 'Menunggu Validasi', 'revisi' => 'Direvisi', 'disetujui' => 'Disetujui', ]; $summaryBadge = [ 'Belum Lengkap' => 'secondary', 'Menunggu Validasi Dokumen' => 'warning text-dark', 'Perlu Revisi Dokumen' => 'danger', 'Siap Ajukan Seminar' => 'success', 'Seminar Sudah Diajukan' => 'success', ]; $documents = [ 'laporan_hasil_magang' => [ 'title' => 'Laporan Hasil Magang', 'input' => 'laporan_hasil_magang', 'accept' => '.pdf,application/pdf', 'helper' => 'Format file: PDF. Maksimal 50 MB.', 'path' => $kelayakan?->laporan_hasil_magang, 'original_name' => $kelayakan?->laporan_hasil_magang_original_name, 'preview' => 'Lihat', 'download' => 'Download', ], 'draft_jurnal' => [ 'title' => 'Draft Jurnal', 'input' => 'draft_jurnal', 'accept' => '.pdf,application/pdf', 'helper' => 'Format file: PDF. Maksimal 50 MB.', 'path' => $kelayakan?->draft_jurnal, 'original_name' => $kelayakan?->draft_jurnal_original_name, 'preview' => 'Lihat', 'download' => 'Download', ], 'produk_magang' => [ 'title' => 'Produk Magang', 'input' => 'produk_magang_file', 'accept' => '.pdf,.zip,.rar,.jpg,.jpeg,.png,.ppt,.pptx,.xls,.xlsx,application/pdf,application/zip,application/vnd.rar,image/jpeg,image/png,application/vnd.ms-powerpoint,application/vnd.openxmlformats-officedocument.presentationml.presentation,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'helper' => 'Format file: PDF, ZIP, RAR, JPG, JPEG, PNG, PPT, PPTX, XLS, XLSX. Maksimal 50 MB. Produk Magang dapat diisi dengan file, link, atau keduanya.', 'path' => $kelayakan?->produk_magang, 'original_name' => $kelayakan?->produk_magang_original_name, 'link' => $kelayakan?->produk_magang_link, 'preview' => 'Lihat', 'download' => 'Download', ], ]; $validationFor = function (string $documentKey, string $role) use ($kelayakan) { return $kelayakan?->documentValidations ->where('document_key', $documentKey) ->where('reviewer_role', $role) ->first(); }; $documentHistories = function (string $documentKey) use ($kelayakan) { return $kelayakan?->catatanHistories ->where('document_key', $documentKey) ->filter(fn($history) => strcasecmp((string) $history->role_pemberi, 'Mahasiswa') === 0) ->when($kelayakan?->wajibUploadUlang(), fn($histories) => $histories->filter(fn($history) => $history->created_at && $history->created_at->greaterThanOrEqualTo($kelayakan->reupload_required_at))) ->sortBy('created_at') ->values() ?? collect(); }; $validationHistories = function (string $documentKey) use ($kelayakan) { return $kelayakan?->catatanHistories ->where('document_key', $documentKey) ->reject(fn($history) => strcasecmp((string) $history->role_pemberi, 'Mahasiswa') === 0) ->when($kelayakan?->wajibUploadUlang(), fn($histories) => $histories->filter(fn($history) => $history->created_at && $history->created_at->greaterThanOrEqualTo($kelayakan->reupload_required_at))) ->sortByDesc('created_at') ->values() ?? collect(); }; $submittedAtFor = function (string $documentKey, bool $hasDocument) use ($documentHistories, $kelayakan) { if (! $hasDocument) { return null; } return $documentHistories($documentKey)->first()?->created_at ?: ($kelayakan?->submitted_at ?: $kelayakan?->updated_at); }; $statusSeminar = $pengajuan->status_seminar ?? 'belum'; $scheduleStatus = ucwords(str_replace('_', ' ', $statusSeminar)); $sudahDiajukan = $kelayakan?->hasActiveSeminarSubmissionAfterReupload() ?? (in_array($statusSeminar, ['menunggu_jadwal', 'terjadwal', 'selesai'], true) || filled($pengajuan->seminar_tanggal)); $readOnlyKelayakan = $sudahDiajukan; $statusRingkas = $kelayakan?->statusRingkas(); $missingMessages = $kelayakan ? $kelayakan->missingDocumentMessages() : []; $canAjukanSeminar = $kelayakan && $kelayakan->dokumenWajibTersedia() && $kelayakan->semuaDokumenDisetujui() && ! $sudahDiajukan; @endphp @if(session('success'))
{{ session('success') }}
@endif @if(session('warning'))
{{ session('warning') }}
@endif @if(session('error'))
{{ session('error') }}
@endif @if($errors->any())
Pengiriman kelayakan belum berhasil.
@endif
Form Kelayakan Seminar
{{ $pengajuan->mitra->nama_instansi ?? $pengajuan->nama_instansi_manual ?? '-' }}
{{ $pengajuan->tanggal_mulai }} s/d {{ $pengajuan->tanggal_selesai }}
Kembali
@if(! $kelayakanTerkirim)
Kirim Kelayakan Seminar
@csrf
@error('judul_laporan')
{{ $message }}
@enderror
Format file: PDF. Maksimal 50 MB.
@error('laporan_hasil_magang')
{{ $message }}
@enderror
Format file: PDF. Maksimal 50 MB.
@error('draft_jurnal')
{{ $message }}
@enderror
Format file: PDF, ZIP, RAR, JPG, JPEG, PNG, PPT, PPTX, XLS, XLSX. Maksimal 50 MB. Produk Magang dapat diisi dengan file, link, atau keduanya.
@error('produk_magang_file')
{{ $message }}
@enderror @error('produk_magang')
{{ $message }}
@enderror @error('produk_magang_link')
{{ $message }}
@enderror
Deskripsi ini tidak divalidasi oleh pembimbing.
@error('output_magang')
{{ $message }}
@enderror
@error('catatan_mahasiswa')
{{ $message }}
@enderror
@else
Ringkasan Kelayakan Seminar
Tanggal Pengiriman: {{ optional($kelayakan->submitted_at ?: $kelayakan->created_at)->timezone(config('app.timezone'))->format('d/m/Y H:i') }}
Status Kelayakan: {{ $statusRingkas }}
@if($missingMessages !== [])
@foreach($missingMessages as $message)
{{ $message }}
@endforeach
@endif @if($readOnlyKelayakan)
Seminar sudah diajukan. Dokumen kelayakan tidak dapat diubah.
@endif
@csrf
Informasi Laporan dan Output
Judul Laporan Magang
{{ $pengajuan->judul_laporan ?: 'Belum ada judul laporan.' }}
@unless($readOnlyKelayakan) @endunless
@error('judul_laporan')
{{ $message }}
@enderror
Uraian Output Magang
{{ $kelayakan->output_magang ?: 'Belum ada uraian output magang.' }}
@unless($readOnlyKelayakan) @endunless
Deskripsi ini tidak divalidasi oleh pembimbing.
@error('output_magang')
{{ $message }}
@enderror
Catatan Tambahan
{{ $kelayakan->catatan_mahasiswa ?: 'Belum ada catatan tambahan.' }}
@unless($readOnlyKelayakan) @endunless
@error('catatan_mahasiswa')
{{ $message }}
@enderror
Dokumen Kelayakan
@foreach($documents as $documentKey => $document) @php $hasDocument = $kelayakan->documentAvailable($documentKey); $documentStatus = $kelayakan->documentValidationStatus($documentKey); $dosenStatus = $validationFor($documentKey, 'dosen')?->status ?? 'menunggu'; $pembimbingStatus = $validationFor($documentKey, 'pembimbing_lapangan')?->status ?? 'menunggu'; $hasRevision = in_array('revisi', [$dosenStatus, $pembimbingStatus], true); $hasApproval = in_array('disetujui', [$dosenStatus, $pembimbingStatus], true); $canEditDocument = ! $hasDocument || $hasRevision || ! $hasApproval; $submittedAt = $submittedAtFor($documentKey, $hasDocument); $uploadId = 'upload-' . $documentKey; @endphp
{{ $document['title'] }}
Submitted: {{ $submittedAt ? $submittedAt->timezone(config('app.timezone'))->format('d/m/Y H:i') : '-' }}
{{ $statusLabel[$documentStatus] ?? 'Belum Dikirim' }}
@if($hasDocument) @if(!empty($document['path']))
File: {{ $document['original_name'] ?: basename($document['path']) }}
@endif
@if(!empty($document['path'])) {{ $document['preview'] }} {{ $document['download'] }} @endif @if(!empty($document['link'])) Buka Link Produk @endif
@else
Belum Dikirim
@endif @if($hasDocument) @foreach(['dosen' => 'Dosen Pembimbing', 'pembimbing_lapangan' => 'Pembimbing Lapangan'] as $role => $label) @php $validation = $validationFor($documentKey, $role); @endphp
{{ $label }} {{ $reviewerStatusLabel[$validation->status ?? 'menunggu'] ?? 'Menunggu' }}
@endforeach @endif @if($canEditDocument && ! $readOnlyKelayakan)
@if($documentKey === 'produk_magang') @endif
{{ $document['helper'] }}
@error($document['input'])
{{ $message }}
@enderror @if($documentKey === 'produk_magang') @error('produk_magang')
{{ $message }}
@enderror @error('produk_magang_link')
{{ $message }}
@enderror @endif
@elseif($readOnlyKelayakan)
Seminar sudah diajukan. Dokumen kelayakan tidak dapat diubah.
@else
Dokumen sedang/telah disetujui pembimbing dan tidak dapat diubah, kecuali terdapat catatan revisi.
@endif
@endforeach @unless($readOnlyKelayakan)
@endunless
Riwayat Validasi Pembimbing
@foreach($documents as $documentKey => $document) @php $histories = $validationHistories($documentKey); @endphp

@forelse($histories as $history)
{{ $document['title'] }} {{ $statusLabel[$history->status_tindakan] ?? ucwords(str_replace('_', ' ', $history->status_tindakan)) }}
{{ $history->nama_pemberi ?: $history->role_pemberi }}
{{ optional($history->created_at)->timezone(config('app.timezone'))->format('d/m/Y H:i') }}
Catatan: {{ $history->catatan ?: '-' }}
@empty
Belum ada riwayat validasi pembimbing untuk dokumen ini.
@endforelse
@endforeach
Ajukan Seminar
@if($sudahDiajukan)
Seminar sudah diajukan dan menunggu proses Admin.
@elseif($canAjukanSeminar)
@csrf
@else
Ajukan Seminar belum tersedia karena masih ada dokumen yang belum dikirim atau belum disetujui oleh kedua pembimbing.
@endif
@endif
@endsection