@php $base64_kop = ''; $path = public_path('asset/KOP-PONTREN.png'); if (file_exists($path)) { $type = pathinfo($path, PATHINFO_EXTENSION); $data = file_get_contents($path); $base64_kop = 'data:image/' . $type . ';base64,' . base64_encode($data); } @endphp @foreach($kamars as $kamar) @foreach($jenisPresensis as $jenis)
@if($base64_kop) @endif
Laporan : Presensi {{ $jenis->nama }} Kamar : {{ $kamar->nama_kamar }}
Tanggal : @if(!empty($filters['dari'])) {{ \Carbon\Carbon::parse($filters['dari'])->format('d M Y') }} @else Awal @endif s/d @if(!empty($filters['sampai'])) {{ \Carbon\Carbon::parse($filters['sampai'])->format('d M Y') }} @else Akhir @endif Wali Kamar : {{ $kamar->waliKamar->name ?? '-' }}
@php $no = 1; $hasData = false; @endphp @foreach($kamar->siswas as $siswa) @php // Optimized: Use the pre-calculated aggregate array // Structure: $attendanceData[siswa_id][jenis_id][status] = count $studentStats = $attendanceData[$siswa->id][$jenis->id] ?? []; $hadir = $studentStats['hadir'] ?? 0; $sakit = $studentStats['sakit'] ?? 0; $izin = $studentStats['izin'] ?? 0; $alpha = $studentStats['alpha'] ?? 0; $total = $hadir + $sakit + $izin + $alpha; if ($total > 0) $hasData = true; $percent = $total > 0 ? round(($hadir / $total) * 100, 1) : 0; // Get keterangan summary $keteranganList = $keteranganData[$siswa->id][$jenis->id] ?? []; $keteranganText = ''; if (!empty($keteranganList)) { // Group by status and show count $grouped = []; foreach ($keteranganList as $ket) { $status = $ket['status']; if (!isset($grouped[$status])) { $grouped[$status] = []; } $grouped[$status][] = $ket['keterangan']; } $parts = []; foreach ($grouped as $status => $keterangans) { $statusLabel = strtoupper(substr($status, 0, 1)); // S, I, A $count = count($keterangans); // Show first keterangan as sample $sample = mb_substr($keterangans[0], 0, 30); if (mb_strlen($keterangans[0]) > 30) $sample .= '...'; $parts[] = "{$statusLabel}: {$sample}" . ($count > 1 ? " (+".($count-1).")" : ""); } $keteranganText = implode('; ', $parts); } @endphp @endforeach
No NISN Nama Santri B/H S B/I T/A % Keterangan
{{ $no++ }} {{ $siswa->nisn }} {{ $siswa->nama }} {{ $hadir }} {{ $sakit }} {{ $izin }} {{ $alpha }} {{ $percent }}% {{ $keteranganText ?: '-' }}

Koordinator Asrama {{ $kamar->jenis_kelamin === 'L' ? 'Putra' : 'Putri' }}

{{ ($kamar->jenis_kelamin === 'L' ? $kamar->madrasah->nama_koordinator_asrama_putra : $kamar->madrasah->nama_koordinator_asrama_putri) ?? '.........................' }}

Padang Panjang, {{ date('d F Y') }}
Wali Kamar

{{ $kamar->waliKamar->name ?? '.........................' }}

Mudir

{{ $kamar->madrasah->nama_mudir ?? '.........................' }}

Wadir III Bidang Pengasuhan

{{ $kamar->madrasah->nama_wadir_pengasuhan ?? '.........................' }}

@endforeach @endforeach