@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
Ekspor PDF Ekspor CSV
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')) @endif
Reset bulan ini
@foreach ($tabs as $key => $label) @endforeach
@if ($importTypes !== [])
KELOLA DATA

Impor data dari CSV

Tambahkan data dalam jumlah banyak. Data yang sudah ada tidak akan ditimpa.

CSV · Maks. 10 MB
@if (session('error'))@endif @if ($errors->has('jenis_import') || $errors->has('file_import'))@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
@csrf
Sebelum mengimpor

Isi 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

@forelse ($keluarByStatus as $st => $jml) @empty @endforelse
StatusJumlah
@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 }}
Tidak ada data.

Siswa PKL per Status

@forelse ($pklByStatus as $st => $jml) @empty @endforelse
StatusJumlah
@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 }}
Tidak ada data.
PKL selesai di periode ini: {{ $pklSelesai }} · Sedang aktif: {{ $pklAktif }}
@endif {{-- ========== SURAT MASUK ========== --}} @if ($jenis === 'surat-masuk')
Total
{{ $total }}
Menunggu disposisi
{{ $menunggu }}
Diproses
{{ $diproses }}
Selesai
{{ $selesai }}

Daftar Surat Masuk

{{ \Carbon\Carbon::parse($dari)->translatedFormat('d M Y') }} – {{ \Carbon\Carbon::parse($sampai)->translatedFormat('d M Y') }}
@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 @empty @endforelse
No. Agenda Pengirim Perihal Tgl Terima Sifat Status
{{ $s->no_agenda }} {{ $s->pengirim }} {{ $s->perihal }} {{ $s->tanggal_terima?->translatedFormat('d M Y') }} {{ $s->sifat ?? '—' }} {{ $statusLabel }}
Tidak ada surat masuk pada periode ini.
@endif {{-- ========== SURAT KELUAR ========== --}} @if ($jenis === 'surat-keluar')
Total
{{ $total }}
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') }}
@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 @empty @endforelse
No. Surat Tujuan Perihal Tanggal Jenis Status
{{ $s->no_surat }} {{ $s->tujuan }} {{ $s->perihal }} {{ $s->tanggal?->translatedFormat('d M Y') }} {{ str_replace('_', ' ', ucfirst($s->jenis_template ?? 'umum')) }} {{ $labelSt }}
Tidak ada surat keluar pada periode ini.
@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
@foreach ($akanKadaluarsa as $d) @endforeach
MitraJenisRuang LingkupBerlaku Selesai
{{ $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') }}
@endif

Dokumen Kerja Sama (periode)

Berdasarkan tanggal mulai / tanggal dibuat
@forelse ($documents as $d) @php $pill = match($d->status) { 'disetujui' => 'pill-success', 'ditolak', 'kadaluarsa' => 'pill-danger', 'diajukan', 'diverifikasi' => 'pill-warning', default => 'pill-neutral', }; @endphp @empty @endforelse
Mitra Jenis No. Dokumen Ruang Lingkup Berlaku Status
{{ $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) }}
Tidak ada dokumen pada periode ini.
@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

@foreach ($byJurusan as $jurusan => $jml) @endforeach
Program KeahlianJumlah
{{ $jurusan }} {{ $jml }}
@endif

Daftar Penempatan PKL

{{ \Carbon\Carbon::parse($dari)->translatedFormat('d M Y') }} – {{ \Carbon\Carbon::parse($sampai)->translatedFormat('d M Y') }}
@forelse ($items as $p) @php $pill = match($p->status) { 'berjalan' => 'pill-success', 'selesai' => 'pill-neutral', 'dibatalkan' => 'pill-danger', default => 'pill-warning', }; @endphp @empty @endforelse
Siswa Industri Periode Pembimbing Status Nilai
{{ $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) : '—' }}
Tidak ada data PKL pada periode ini.
@endif {{-- ========== SERTIFIKAT ========== --}} @if ($jenis === 'sertifikat')
Total Terbit
{{ $total }}

Daftar Sertifikat

{{ \Carbon\Carbon::parse($dari)->translatedFormat('d M Y') }} – {{ \Carbon\Carbon::parse($sampai)->translatedFormat('d M Y') }}
@forelse ($items as $c) @empty @endforelse
No. Sertifikat Siswa Industri Tgl Terbit
{{ $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') }}
Tidak ada sertifikat pada periode ini.
@endif
@endsection @section('scripts') @endsection