24 KiB
Santri.kelas Usage Mapping
Generated: 2026-02-12 16:30:36
This document maps all usage of $santri->kelas and related patterns in the codebase to guide refactoring to the new kelas system.
📊 Summary
- Total files with kelas usage: 40
- Total matches found: 115
🎯 Priority Levels
🔴 HIGH Priority (Break functionality)
-
app/Http/Controllers/Admin/CapaianController.php
- Issue: Query filtering by kelas column
- Action Required: Update to use kelasSantri relationship
-
app/Http/Controllers/Admin/SantriController.php
- Issue: Query filtering by kelas column
- Action Required: Update to use kelasSantri relationship
-
database/migrations/2025_09_29_033444_create_santris_table.php
- Issue: Database schema definition
- Action Required: Review but DO NOT modify old migrations
-
database/migrations/2025_10_31_064743_create_materi_table.php
- Issue: Database schema definition
- Action Required: Review but DO NOT modify old migrations
🟡 MEDIUM Priority (UI/Display)
-
app/Models/Materi.php
- Issue: Model attribute or accessor
- Action Required: Review accessor implementation
-
app/Models/Santri.php
- Issue: Model attribute or accessor
- Action Required: Review accessor implementation
-
resources/views/admin/berita/show.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/capaian/create.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/capaian/export-rapor.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/capaian/index.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/capaian/riwayat-santri.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/kegiatan/absensi/input.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/kegiatan/kartu/cetak.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/kegiatan/kartu/daftar.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/kegiatan/kartu/index.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/kegiatan/riwayat/detail-santri.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/kepulangan/create.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/kepulangan/over-limit.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/kepulangan/surat-pdf.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/kesehatan-santri/riwayat.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/pembayaran-spp/create.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/pembayaran-spp/edit.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/riwayat_pelanggaran/riwayat_santri.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/santri/form.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/santri/index.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/santri/show.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/admin/users/wali_accounts.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/santri/berita/index.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/santri/capaian/index.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
-
resources/views/santri/kegiatan/index.blade.php
- Issue: Display kelas in UI
- Action Required: Change to use $santri->kelas_name accessor
🟢 LOW Priority (Backward compatible)
-
app/Http/Controllers/Admin/AbsensiKegiatanController.php
- Note: Other usage
-
app/Http/Controllers/Admin/BeritaController.php
- Note: Other usage
-
app/Http/Controllers/Admin/MateriController.php
- Note: Other usage
-
app/Http/Controllers/Admin/PembayaranSppController.php
- Note: Other usage
-
app/Http/Controllers/Api/ApiAuthController.php
- Note: Other usage
-
app/Http/Controllers/Api/ApiBeritaController.php
- Note: Other usage
-
app/Http/Controllers/Api/ApiCapaianController.php
- Note: Other usage
-
app/Http/Controllers/DashboardController.php
- Note: Other usage
-
app/Http/Controllers/Santri/SantriBeritaController.php
- Note: Other usage
-
database/seeders/KelasSeeder.php
- Note: Other usage
📂 Detailed Listing by Directory
App / Http / Controllers
📄 app/Http/Controllers/Admin/AbsensiKegiatanController.php
Pattern: property_access
- Line 179:
'kelas' => $santri->kelas,
Pattern: kelas_column
- Line 179:
'kelas' => $santri->kelas,
💡 Suggested Action: Review usage and update as needed based on context.
📄 app/Http/Controllers/Admin/BeritaController.php
Pattern: enum_values
- Line 51:
$kelasOptions = ['PB', 'Lambatan', 'Cepatan']; - Line 127:
$kelasOptions = ['PB', 'Lambatan', 'Cepatan'];
💡 Suggested Action: Review usage and update as needed based on context.
📄 app/Http/Controllers/Admin/CapaianController.php
Pattern: where_kelas
- Line 35:
$query->where('kelas', $selectedKelas); - Line 344:
->when($kelas, fn($q) => $q->where('kelas', $kelas)) - Line 347:
->when($kelas, fn($q) => $q->where('kelas', $kelas)) - Line 352:
->when($kelas, fn($q) => $q->whereHas('santri', fn($sq) => $sq->where('kelas', $kelas))) - Line 393:
$kelasMateris = $materis->where('kelas', $k); - Line 463:
$filteredMateris = $kelas ? $materis->where('kelas', $kelas) : $materis; - Line 480:
$heatmapMateris = $kelas ? $materis->where('kelas', $kelas)->values() : $materis->take(15)->values(); - Line 835:
$q->where('kelas', $kelas); - Line 896:
$query->where('kelas', $kelas);
Pattern: property_access
- Line 116:
$materis = Materi::where('kelas', $santri->kelas) - Line 123:
'kelas' => $santri->kelas, - Line 453:
'kelas' => $santri->kelas, - Line 484:
$row = ['nama' => $santri->nama_lengkap, 'id_santri' => $santri->id_santri, 'kelas' => $santri->kelas];
Pattern: kelas_column
- Line 123:
'kelas' => $santri->kelas, - Line 453:
'kelas' => $santri->kelas, - Line 484:
$row = ['nama' => $santri->nama_lengkap, 'id_santri' => $santri->id_santri, 'kelas' => $santri->kelas];
Pattern: enum_values
- Line 341:
$kelasList = ['Lambatan', 'Cepatan', 'PB']; - Line 708:
$kelas = $request->input('kelas', 'Lambatan');
💡 Suggested Action:
- Replace
where('kelas')withwhereHas('kelasSantri') - Update query to use kelas ID instead of name
- Test filter functionality thoroughly
📄 app/Http/Controllers/Admin/MateriController.php
Pattern: kelas_column
- Line 82:
'kelas' => 'required|in:Lambatan,Cepatan,PB', - Line 156:
'kelas' => 'required|in:Lambatan,Cepatan,PB',
💡 Suggested Action: Review usage and update as needed based on context.
📄 app/Http/Controllers/Admin/PembayaranSppController.php
Pattern: property_access
- Line 54:
'kelas' => $santri->kelas,
Pattern: kelas_column
- Line 54:
'kelas' => $santri->kelas,
💡 Suggested Action: Review usage and update as needed based on context.
📄 app/Http/Controllers/Admin/SantriController.php
Pattern: where_kelas
- Line 38:
$query->where('kelas', $request->kelas);
Pattern: kelas_column
- Line 86:
'kelas' => 'required|in:PB,Lambatan,Cepatan', - Line 154:
'kelas' => 'required|in:PB,Lambatan,Cepatan',
💡 Suggested Action:
- Replace
where('kelas')withwhereHas('kelasSantri') - Update query to use kelas ID instead of name
- Test filter functionality thoroughly
📄 app/Http/Controllers/Api/ApiAuthController.php
Pattern: property_access
- Line 158:
'kelas' => $santri->kelas,
Pattern: kelas_column
- Line 158:
'kelas' => $santri->kelas,
💡 Suggested Action: Review usage and update as needed based on context.
📄 app/Http/Controllers/Api/ApiBeritaController.php
Pattern: property_access
- Line 42:
->whereJsonContains('target_kelas', $santri->kelas); - Line 146:
$bolehAkses = in_array($santri->kelas, $berita->target_kelas ?? []);
💡 Suggested Action: Review usage and update as needed based on context.
📄 app/Http/Controllers/Api/ApiCapaianController.php
Pattern: property_access
- Line 125:
'kelas' => $santri->kelas, - Line 490:
->where('santris.kelas', $santri->kelas) - Line 523:
->where('santris.kelas', $santri->kelas) - Line 591:
'kelas' => $santri->kelas,
Pattern: kelas_column
- Line 125:
'kelas' => $santri->kelas, - Line 295:
'kelas' => $capaian->materi->kelas, - Line 591:
'kelas' => $santri->kelas,
💡 Suggested Action: Review usage and update as needed based on context.
📄 app/Http/Controllers/DashboardController.php
Pattern: property_access
- Line 204:
'kelas' => $santri->kelas, - Line 251:
->whereJsonContains('target_kelas', $santri->kelas);
Pattern: kelas_column
- Line 204:
'kelas' => $santri->kelas,
💡 Suggested Action: Review usage and update as needed based on context.
📄 app/Http/Controllers/Santri/SantriBeritaController.php
Pattern: property_access
- Line 44:
->whereJsonContains('target_kelas', $santri->kelas); - Line 89:
->whereJsonContains('target_kelas', $santri->kelas);
💡 Suggested Action: Review usage and update as needed based on context.
App / Models
📄 app/Models/Materi.php
Pattern: where_kelas
- Line 80:
return $query->where('kelas', $kelas);
💡 Suggested Action:
- Review model methods and accessors
- Ensure backward compatibility
- Add tests for new relations
📄 app/Models/Santri.php
Pattern: enum_values
- Line 177:
'Lambatan' => 'Lambatan', - Line 178:
'Cepatan' => 'Cepatan',
Pattern: where_kelas
- Line 306:
return $query->where('kelas', $kelas);
💡 Suggested Action:
- Review model methods and accessors
- Ensure backward compatibility
- Add tests for new relations
Resources / views
📄 resources/views/admin/berita/show.blade.php
Pattern: property_access
- Line 130:
<i class="fas fa-graduation-cap"></i> {{ $santri->kelas }}
Pattern: blade_kelas
- Line 130:
<i class="fas fa-graduation-cap"></i> {{ $santri->kelas }}
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/admin/capaian/create.blade.php
Pattern: property_access
- Line 25:
data-kelas="{{ $santri->kelas }}" - Line 27:
{{ $santri->nama_lengkap }} ({{ $santri->nis }}) - Kelas: {{ $santri->kelas }}
Pattern: blade_kelas
- Line 25:
data-kelas="{{ $santri->kelas }}" - Line 27:
{{ $santri->nama_lengkap }} ({{ $santri->nis }}) - Kelas: {{ $santri->kelas }}
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/admin/capaian/export-rapor.blade.php
Pattern: property_access
- Line 96:
<div class="info-item"><span class="label">Kelas</span> <span class="value">{{ $santri->kelas }}</span></div>
Pattern: blade_kelas
- Line 96:
<div class="info-item"><span class="label">Kelas</span> <span class="value">{{ $santri->kelas }}</span></div>
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/admin/capaian/index.blade.php
Pattern: enum_values
- Line 38:
<a href="{{ route('admin.capaian.index', array_merge(request()->except('kelas'), ['kelas' => 'PB'])) }}" - Line 43:
<a href="{{ route('admin.capaian.index', array_merge(request()->except('kelas'), ['kelas' => 'Lambatan'])) }}" - Line 48:
<a href="{{ route('admin.capaian.index', array_merge(request()->except('kelas'), ['kelas' => 'Cepatan'])) }}" - Line 112:
@if($data['santri']->kelas == 'PB') - Line 114:
@elseif($data['santri']->kelas == 'Lambatan')
Pattern: kelas_column
- Line 38:
<a href="{{ route('admin.capaian.index', array_merge(request()->except('kelas'), ['kelas' => 'PB'])) }}" - Line 43:
<a href="{{ route('admin.capaian.index', array_merge(request()->except('kelas'), ['kelas' => 'Lambatan'])) }}" - Line 48:
<a href="{{ route('admin.capaian.index', array_merge(request()->except('kelas'), ['kelas' => 'Cepatan'])) }}"
💡 Suggested Action: Review usage and update as needed based on context.
📄 resources/views/admin/capaian/riwayat-santri.blade.php
Pattern: property_access
- Line 18:
<strong>Kelas:</strong> <span class="badge badge-secondary">{{ $santri->kelas }}</span>
Pattern: blade_kelas
- Line 18:
<strong>Kelas:</strong> <span class="badge badge-secondary">{{ $santri->kelas }}</span>
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/admin/kegiatan/absensi/input.blade.php
Pattern: property_access
- Line 63:
<td><span class="badge badge-secondary">{{ $santri->kelas }}</span></td>
Pattern: blade_kelas
- Line 63:
<td><span class="badge badge-secondary">{{ $santri->kelas }}</span></td>
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/admin/kegiatan/kartu/cetak.blade.php
Pattern: property_access
- Line 423:
<span class="value">: @if(isset($santri)){{ $santri->kelas }}@else Lambatan @endif</span>
Pattern: blade_kelas
- Line 423:
<span class="value">: @if(isset($santri)){{ $santri->kelas }}@else Lambatan @endif</span>
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/admin/kegiatan/kartu/daftar.blade.php
Pattern: property_access
- Line 29:
<td><span class="badge badge-secondary">{{ $santri->kelas }}</span></td>
Pattern: blade_kelas
- Line 29:
<td><span class="badge badge-secondary">{{ $santri->kelas }}</span></td>
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/admin/kegiatan/kartu/index.blade.php
Pattern: property_access
- Line 60:
<td><span class="badge badge-secondary">{{ $santri->kelas }}</span></td>
Pattern: blade_kelas
- Line 60:
<td><span class="badge badge-secondary">{{ $santri->kelas }}</span></td>
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/admin/kegiatan/riwayat/detail-santri.blade.php
Pattern: property_access
- Line 15:
Kelas: <strong>{{ $santri->kelas }}</strong> |
Pattern: blade_kelas
- Line 15:
Kelas: <strong>{{ $santri->kelas }}</strong> |
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/admin/kepulangan/create.blade.php
Pattern: property_access
- Line 49:
{{ $santri->nama_lengkap }} ({{ $santri->id_santri }} - {{ $santri->kelas }})
Pattern: blade_kelas
- Line 49:
{{ $santri->nama_lengkap }} ({{ $santri->id_santri }} - {{ $santri->kelas }})
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/admin/kepulangan/over-limit.blade.php
Pattern: property_access
- Line 78:
<td>{{ $santri->kelas }}</td>
Pattern: blade_kelas
- Line 78:
<td>{{ $santri->kelas }}</td>
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/admin/kepulangan/surat-pdf.blade.php
Pattern: property_access
- Line 269:
<div class="data-value">{{ $santri->kelas }}</div> - Line 394:
<td style="padding: 5px;">: {{ $santri->kelas }}</td>
Pattern: blade_kelas
- Line 269:
<div class="data-value">{{ $santri->kelas }}</div> - Line 394:
<td style="padding: 5px;">: {{ $santri->kelas }}</td>
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/admin/kesehatan-santri/riwayat.blade.php
Pattern: property_access
- Line 21:
<strong>Kelas:</strong> {{ $santri->kelas }}<br>
Pattern: blade_kelas
- Line 21:
<strong>Kelas:</strong> {{ $santri->kelas }}<br>
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/admin/pembayaran-spp/create.blade.php
Pattern: property_access
- Line 35:
{{ $santri->id_santri }} - {{ $santri->nama_lengkap }} ({{ $santri->kelas }})
Pattern: blade_kelas
- Line 35:
{{ $santri->id_santri }} - {{ $santri->nama_lengkap }} ({{ $santri->kelas }})
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/admin/pembayaran-spp/edit.blade.php
Pattern: property_access
- Line 36:
{{ $santri->id_santri }} - {{ $santri->nama_lengkap }} ({{ $santri->kelas }})
Pattern: blade_kelas
- Line 36:
{{ $santri->id_santri }} - {{ $santri->nama_lengkap }} ({{ $santri->kelas }})
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/admin/riwayat_pelanggaran/riwayat_santri.blade.php
Pattern: property_access
- Line 33:
{{ $santri->id_santri }} | {{ $santri->kelas }}
Pattern: blade_kelas
- Line 33:
{{ $santri->id_santri }} | {{ $santri->kelas }}
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/admin/santri/form.blade.php
Pattern: property_access
- Line 87:
<option value="PB" {{ old('kelas', $isEdit ? $santri->kelas : '') == 'PB' ? 'selected' : '' }}>PB (Pembinaan)</option> - Line 88:
<option value="Lambatan" {{ old('kelas', $isEdit ? $santri->kelas : '') == 'Lambatan' ? 'selected' : '' }}>Lambatan</option> - Line 89:
<option value="Cepatan" {{ old('kelas', $isEdit ? $santri->kelas : '') == 'Cepatan' ? 'selected' : '' }}>Cepatan</option>
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/admin/santri/index.blade.php
Pattern: property_access
- Line 89:
<td><strong>{{ $santri->kelas }}</strong></td>
Pattern: blade_kelas
- Line 89:
<td><strong>{{ $santri->kelas }}</strong></td>
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/admin/santri/show.blade.php
Pattern: property_access
- Line 75:
<strong style="color: #6FBA9D; font-size: 1.1rem;">{{ $santri->kelas }}</strong> - Line 76:
@if($santri->kelas == 'PB')
Pattern: blade_kelas
- Line 75:
<strong style="color: #6FBA9D; font-size: 1.1rem;">{{ $santri->kelas }}</strong>
Pattern: enum_values
- Line 76:
@if($santri->kelas == 'PB')
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/admin/users/wali_accounts.blade.php
Pattern: property_access
- Line 95:
<td>{{ $santri->kelas }}</td>
Pattern: blade_kelas
- Line 95:
<td>{{ $santri->kelas }}</td>
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/santri/berita/index.blade.php
Pattern: property_access
- Line 10:
Informasi terbaru untuk <strong>{{ $santri->kelas }}</strong>
Pattern: blade_kelas
- Line 10:
Informasi terbaru untuk <strong>{{ $santri->kelas }}</strong>
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/santri/capaian/index.blade.php
Pattern: property_access
- Line 56:
<div class="card-value-small">{{ $santri->kelas }}</div>
Pattern: blade_kelas
- Line 56:
<div class="card-value-small">{{ $santri->kelas }}</div>
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
📄 resources/views/santri/kegiatan/index.blade.php
Pattern: property_access
- Line 9:
{{ $santri->nama_lengkap }} - Kelas {{ $santri->kelas }}
Pattern: blade_kelas
- Line 9:
{{ $santri->nama_lengkap }} - Kelas {{ $santri->kelas }}
💡 Suggested Action:
- Replace
{{ $santri->kelas }}with{{ $santri->kelas_name }} - Test display in browser
Database / migrations
📄 database/migrations/2025_09_29_033444_create_santris_table.php
Pattern: enum_values
- Line 25:
$table->enum('kelas', ['PB', 'Lambatan', 'Cepatan']); // PB = Pembinaan
💡 Suggested Action: Review usage and update as needed based on context.
📄 database/migrations/2025_10_31_064743_create_materi_table.php
Pattern: enum_values
- Line 18:
$table->enum('kelas', ['Lambatan', 'Cepatan', 'PB'])->index();
💡 Suggested Action: Review usage and update as needed based on context.
Database / seeders
📄 database/seeders/KelasSeeder.php
Pattern: enum_values
- Line 29:
'nama_kelas' => 'PB', - Line 38:
'nama_kelas' => 'Lambatan', - Line 47:
'nama_kelas' => 'Cepatan',
💡 Suggested Action: Review usage and update as needed based on context.
📖 Refactoring Guide
General Patterns
1. Display in Views (Blade)
// OLD:
{{ $santri->kelas }}
// NEW (backward compatible):
{{ $santri->kelas_name }}
2. Filter in Controllers
// OLD:
$santris = Santri::where('kelas', 'PB')->get();
// NEW:
$santris = Santri::whereHas('kelasSantri', function($q) {
$q->where('id_kelas', 1); // PB = 1
})->get();
3. Kegiatan-Kelas Relation
// OLD: Filter santri by kelas for kegiatan
$santris = Santri::whereIn('kelas', ['PB', 'Lambatan'])->get();
// NEW: Use kegiatan relation
$santris = $kegiatan->getEligibleSantris();
Testing Checklist
- Santri detail page displays correct kelas
- Santri list filter by kelas works
- Dashboard statistics by kelas accurate
- Kegiatan filtering by kelas works
- Absensi shows correct santri per kegiatan
- Reports include correct kelas information
- Mobile API returns kelas data correctly