@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.
@foreach($errors->all() as $error)
- {{ $error }}
@endforeach
@endif
Form Kelayakan Seminar
{{ $pengajuan->mitra->nama_instansi ?? $pengajuan->nama_instansi_manual ?? '-' }}
{{ $pengajuan->tanggal_mulai }} s/d {{ $pengajuan->tanggal_selesai }}
Kembali
@if(! $kelayakanTerkirim)
@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
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)
@else
Ajukan Seminar belum tersedia karena masih ada dokumen yang belum dikirim atau belum disetujui oleh kedua pembimbing.
@endif
@endif
@endsection