@php $base64_mts = ''; $path_mts = public_path('asset/KOP-MTS.png'); if (file_exists($path_mts)) { $base64_mts = 'data:image/' . pathinfo($path_mts, PATHINFO_EXTENSION) . ';base64,' . base64_encode(file_get_contents($path_mts)); } $base64_ma = ''; $path_ma = public_path('asset/KOP-MA.png'); if (file_exists($path_ma)) { $base64_ma = 'data:image/' . pathinfo($path_ma, PATHINFO_EXTENSION) . ';base64,' . base64_encode(file_get_contents($path_ma)); } @endphp @foreach($classes as $kelas) @foreach($jenisPresensis as $jenis)
@php $isMts = str_contains(strtolower($kelas->madrasah->nama ?? ''), 'mts'); $current_kop = $isMts ? $base64_mts : $base64_ma; @endphp @if($current_kop) @endif
Laporan : Presensi {{ $jenis->nama }} Kelas : {{ $kelas->nama }}
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 Kelas : {{ $kelas->waliKelas->name ?? '-' }}
@php $no = 1; $hasData = false; @endphp @foreach($kelas->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; $cabut = $studentStats['cabut'] ?? 0; $terlambat = $studentStats['terlambat'] ?? 0; $total = $hadir + $sakit + $izin + $alpha + $cabut + $terlambat; 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, C, T $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 Siswa H S I A C T % Keterangan
{{ $no++ }} {{ $siswa->nisn }} {{ $siswa->nama }} {{ $hadir }} {{ $sakit }} {{ $izin }} {{ $alpha }} {{ $cabut }} {{ $terlambat }} {{ $percent }}% {{ $keteranganText ?: '-' }}

Mengetahui,
Kepala Madrasah

{{ $kelas->madrasah->nama_kepala ?? '.........................' }}

{{ $kelas->madrasah->nip_kepala ?? '.........................' }}

Padang Panjang, {{ date('d F Y') }}
Waka Bid. Kesiswaan

{{ $kelas->madrasah->nama_waka_kesiswaan ?? '.........................' }}

@endforeach @endforeach