@extends('layouts.app')
@section('title', 'Laporan')
@section('page-title', 'Laporan')
@section('breadcrumb', 'Laporan / ' . match($jenis) {
'surat-masuk' => 'Surat Masuk',
'surat-keluar' => 'Surat Keluar',
'mitra' => 'Mitra & MoU/PKS',
'pkl' => 'Siswa PKL',
'sertifikat' => 'Sertifikat',
default => 'Ringkasan',
})
@section('no-error-banner', '1')
@section('content')
@php
$tabs = [
'ringkasan' => 'Ringkasan',
'surat-masuk' => 'Surat Masuk',
'surat-keluar' => 'Surat Keluar',
'mitra' => 'Mitra & MoU/PKS',
'pkl' => 'Siswa PKL',
'sertifikat' => 'Sertifikat',
];
$importTypes = match ($role) {
'Admin' => ['surat-masuk', 'surat-keluar', 'mitra', 'pkl'],
'Koordinator TU' => ['surat-masuk', 'surat-keluar'],
'Waka Humas' => ['mitra', 'pkl'],
default => [],
};
$importLabels = ['surat-masuk' => 'Surat Masuk', 'surat-keluar' => 'Surat Keluar', 'mitra' => 'Mitra dan Dokumen Kerja Sama', 'pkl' => 'Penempatan PKL'];
@endphp
{{-- ========== FILTER PERIODE + TAB ========== --}}
Filter Laporan
Pilih jenis laporan dan rentang tanggal
PDF cocok untuk laporan hingga 2.000 baris. Gunakan CSV untuk data lebih banyak.
@if ($errors->has('pdf') || $errors->has('jenis') || $errors->has('dari') || $errors->has('sampai'))
{{ $errors->first() }}
@endif
@if ($importTypes !== [])
@if (session('error')){{ session('error') }}
@endif
@if ($errors->has('jenis_import') || $errors->has('file_import')){{ $errors->first() }}
@endif
@if (session('import_issues'))
Baris yang perlu diperbaiki:
@foreach (session('import_issues') as $issue)- {{ $issue }}
@endforeach
@endif
01
Unduh template
Mulai dari format yang sesuai
02
Unggah data
Maks. 1.000 baris
i
Sebelum mengimporIsi tanggal dengan format YYYY-MM-DD dan pertahankan nama kolom template. Pratinjau menampilkan jumlah baris dan lima baris pertama; pemeriksaan lengkap dilakukan saat impor. Jika ada satu baris tidak valid, seluruh file ditolak. Surat keluar dibuat sebagai draf; impor mitra membuat pengajuan dengan alur persetujuan.
@endif
{{-- ========== RINGKASAN ========== --}}
@if ($jenis === 'ringkasan')
Surat Masuk
{{ $suratMasuk }}
periode terpilih
Surat Keluar
{{ $suratKeluar }}
periode terpilih
Mitra Aktif
{{ $mitraAktif }}
{{ $dokumenAktif }} dokumen berlaku
Sertifikat Terbit
{{ $sertifikat }}
periode terpilih
Surat Keluar per Status
| Status | Jumlah |
@forelse ($keluarByStatus as $st => $jml)
|
@php
$pill = match($st) {
'terkirim' => 'pill-success',
'menunggu_ttd' => 'pill-warning',
default => 'pill-neutral',
};
$labelSt = match($st) {
'draf' => 'Draf',
'menunggu_ttd' => 'Menunggu TTD',
'terkirim' => 'Terkirim',
default => $st,
};
@endphp
{{ $labelSt }}
|
{{ $jml }} |
@empty
| Tidak ada data. |
@endforelse
Siswa PKL per Status
| Status | Jumlah |
@forelse ($pklByStatus as $st => $jml)
|
@php
$pill = match($st) {
'berjalan' => 'pill-success',
'selesai' => 'pill-neutral',
'dibatalkan' => 'pill-danger',
default => 'pill-warning',
};
$labelPkl = match($st) { 'berjalan' => 'Berjalan', 'selesai' => 'Selesai', 'dibatalkan' => 'Dibatalkan', default => $st };
@endphp
{{ $labelPkl }}
|
{{ $jml }} |
@empty
| Tidak ada data. |
@endforelse
PKL selesai di periode ini: {{ $pklSelesai }} · Sedang aktif: {{ $pklAktif }}
@endif
{{-- ========== SURAT MASUK ========== --}}
@if ($jenis === 'surat-masuk')
Menunggu disposisi
{{ $menunggu }}
Daftar Surat Masuk
{{ \Carbon\Carbon::parse($dari)->translatedFormat('d M Y') }} – {{ \Carbon\Carbon::parse($sampai)->translatedFormat('d M Y') }}
| No. Agenda |
Pengirim |
Perihal |
Tgl Terima |
Sifat |
Status |
@forelse ($items as $s)
@php
$belumAda = $s->dispositions->isEmpty();
$semuaSelesai = ! $belumAda && $s->dispositions->every(fn($d) => $d->status === 'selesai');
$statusLabel = $belumAda ? 'Menunggu' : ($semuaSelesai ? 'Selesai' : 'Diproses');
$pillClass = $statusLabel === 'Selesai' ? 'pill-success' : ($statusLabel === 'Menunggu' ? 'pill-warning' : 'pill-neutral');
@endphp
| {{ $s->no_agenda }} |
{{ $s->pengirim }} |
{{ $s->perihal }} |
{{ $s->tanggal_terima?->translatedFormat('d M Y') }} |
{{ $s->sifat ?? '—' }} |
{{ $statusLabel }} |
@empty
| Tidak ada surat masuk pada periode ini. |
@endforelse
@endif
{{-- ========== SURAT KELUAR ========== --}}
@if ($jenis === 'surat-keluar')
Draf
{{ $byStatus['draf'] ?? 0 }}
Menunggu TTD
{{ $byStatus['menunggu_ttd'] ?? 0 }}
Terkirim
{{ $byStatus['terkirim'] ?? 0 }}
@if ($byJenis->isNotEmpty())
Per Jenis Template
@foreach ($byJenis as $jenisTpl => $jml)
{{ str_replace('_', ' ', ucfirst($jenisTpl ?? 'umum')) }}
{{ $jml }}
@endforeach
@endif
Daftar Surat Keluar
{{ \Carbon\Carbon::parse($dari)->translatedFormat('d M Y') }} – {{ \Carbon\Carbon::parse($sampai)->translatedFormat('d M Y') }}
| No. Surat |
Tujuan |
Perihal |
Tanggal |
Jenis |
Status |
@forelse ($items as $s)
@php
$pill = match($s->status) {
'terkirim' => 'pill-success',
'menunggu_ttd' => 'pill-warning',
default => 'pill-neutral',
};
$labelSt = match($s->status) {
'draf' => 'Draf',
'menunggu_ttd' => 'Menunggu TTD',
'terkirim' => 'Terkirim',
default => $s->status,
};
@endphp
| {{ $s->no_surat }} |
{{ $s->tujuan }} |
{{ $s->perihal }} |
{{ $s->tanggal?->translatedFormat('d M Y') }} |
{{ str_replace('_', ' ', ucfirst($s->jenis_template ?? 'umum')) }} |
{{ $labelSt }} |
@empty
| Tidak ada surat keluar pada periode ini. |
@endforelse
@endif
{{-- ========== MITRA ========== --}}
@if ($jenis === 'mitra')
Total Mitra
{{ $totalMitra }}
Mitra Aktif
{{ $mitraAktif }}
Dok. Disetujui
{{ $dokumenByStatus['disetujui'] ?? 0 }}
Akan Kadaluarsa (60 hr)
{{ $akanKadaluarsa->count() }}
@if ($akanKadaluarsa->isNotEmpty())
Dokumen Akan Kadaluarsa
Berlaku selesai dalam 60 hari ke depan
| Mitra | Jenis | Ruang Lingkup | Berlaku Selesai |
@foreach ($akanKadaluarsa as $d)
| {{ $d->partner->nama_perusahaan ?? '—' }} |
{{ $d->jenis_dokumen }}@if($d->nomor_dokumen) ({{ $d->nomor_dokumen }})@endif |
{{ $d->ruang_lingkup ?? '—' }} |
{{ $d->berlaku_selesai?->translatedFormat('d M Y') }} |
@endforeach
@endif
Dokumen Kerja Sama (periode)
Berdasarkan tanggal mulai / tanggal dibuat
| Mitra |
Jenis |
No. Dokumen |
Ruang Lingkup |
Berlaku |
Status |
@forelse ($documents as $d)
@php
$pill = match($d->status) {
'disetujui' => 'pill-success',
'ditolak', 'kadaluarsa' => 'pill-danger',
'diajukan', 'diverifikasi' => 'pill-warning',
default => 'pill-neutral',
};
@endphp
| {{ $d->partner->nama_perusahaan ?? '—' }} |
{{ $d->jenis_dokumen }} |
{{ $d->nomor_dokumen ?? '—' }} |
{{ $d->ruang_lingkup ?? '—' }} |
{{ $d->berlaku_mulai?->translatedFormat('d M Y') }}
– {{ $d->berlaku_selesai?->translatedFormat('d M Y') }}
|
{{ ucfirst($d->status) }} |
@empty
| Tidak ada dokumen pada periode ini. |
@endforelse
@endif
{{-- ========== PKL ========== --}}
@if ($jenis === 'pkl')
Total (periode)
{{ $total }}
Berjalan
{{ $byStatus['berjalan'] ?? 0 }}
Selesai
{{ $byStatus['selesai'] ?? 0 }}
Dibatalkan
{{ $byStatus['dibatalkan'] ?? 0 }}
Total siswa terdaftar: {{ $siswaTotal }}
@if ($byJurusan->isNotEmpty())
Per Program Keahlian
| Program Keahlian | Jumlah |
@foreach ($byJurusan as $jurusan => $jml)
| {{ $jurusan }} |
{{ $jml }} |
@endforeach
@endif
Daftar Penempatan PKL
{{ \Carbon\Carbon::parse($dari)->translatedFormat('d M Y') }} – {{ \Carbon\Carbon::parse($sampai)->translatedFormat('d M Y') }}
| Siswa |
Industri |
Periode |
Pembimbing |
Status |
Nilai |
@forelse ($items as $p)
@php
$pill = match($p->status) {
'berjalan' => 'pill-success',
'selesai' => 'pill-neutral',
'dibatalkan' => 'pill-danger',
default => 'pill-warning',
};
@endphp
|
{{ $p->student->nama ?? '—' }}
NIS {{ $p->student->nis ?? '—' }} · {{ $p->student->programKeahlian->nama_jurusan ?? '—' }}
|
{{ $p->partner->nama_perusahaan ?? '—' }} |
{{ $p->periodeText() }} |
{{ $p->pembimbing->name ?? '—' }} |
{{ ucfirst($p->status) }} |
{{ $p->nilai !== null ? number_format($p->nilai, 1) : '—' }} |
@empty
| Tidak ada data PKL pada periode ini. |
@endforelse
@endif
{{-- ========== SERTIFIKAT ========== --}}
@if ($jenis === 'sertifikat')
Daftar Sertifikat
{{ \Carbon\Carbon::parse($dari)->translatedFormat('d M Y') }} – {{ \Carbon\Carbon::parse($sampai)->translatedFormat('d M Y') }}
| No. Sertifikat |
Siswa |
Industri |
Tgl Terbit |
@forelse ($items as $c)
| {{ $c->nomor_sertifikat }} |
{{ $c->placement->student->nama ?? '—' }}
{{ $c->placement->student->programKeahlian->nama_jurusan ?? '—' }}
|
{{ $c->placement->partner->nama_perusahaan ?? '—' }} |
{{ $c->tanggal_terbit?->translatedFormat('d M Y') }} |
@empty
| Tidak ada sertifikat pada periode ini. |
@endforelse
@endif
@endsection
@section('scripts')
@endsection