@php $weekdays = ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu', 'Minggu']; $weekdayShort = ['Senin' => 'Sen', 'Selasa' => 'Sel', 'Rabu' => 'Rab', 'Kamis' => 'Kam', 'Jumat' => 'Jum', 'Sabtu' => 'Sab', 'Minggu' => 'Min']; $activeDay = in_array($pkbmDashboard['today'], $weekdays, true) ? $pkbmDashboard['today'] : 'Senin'; $demographics = $pkbmDashboard['demographics']; $maxClassCount = max(1, (int) $pkbmDashboard['classDistribution']->max('jumlah_siswa')); $schoolAgePercent = $demographics['total'] > 0 ? (int) round($demographics['schoolAge'] / $demographics['total'] * 100) : 0; $malePercent = $demographics['total'] > 0 ? $demographics['male'] / $demographics['total'] * 100 : 0; $femalePercent = $demographics['total'] > 0 ? $demographics['female'] / $demographics['total'] * 100 : 0; $unknownGenderPercent = max(0, 100 - $malePercent - $femalePercent); @endphp

BerandaDashboard {{ $role }}

Selamat datang, {{ $name }}.

Ringkasan aktivitas {{ $pkbmDashboard['organization']->nama_pkbm }}.

Periode aktif @if ($pkbmDashboard['period']) {{ $pkbmDashboard['period']->tahun_pelajaran }} · {{ $pkbmDashboard['period']->semester }} @else Atur periode akademik @endif
@if ($pkbmDashboard['pendingJobs']->isNotEmpty())
@endif

Statistik lembaga

Data ringkasan SmartPenF

{{ $pkbmDashboard['period'] ? $pkbmDashboard['period']->tahun_pelajaran.' · '.$pkbmDashboard['period']->semester : 'Periode belum diatur' }}
@foreach ([ ['label' => 'Total Siswa (Aktif)', 'value' => $pkbmDashboard['studentCount'], 'detail' => 'Terdaftar pada periode aktif', 'icon' => 'bi-people-fill', 'tone' => 'blue'], ['label' => 'Tenaga Pengajar', 'value' => $pkbmDashboard['teacherCount'], 'detail' => 'Pengajar di lembaga', 'icon' => 'bi-person-workspace', 'tone' => 'emerald'], ['label' => 'Rombongan Belajar', 'value' => $pkbmDashboard['classCount'], 'detail' => 'Kelas terdaftar', 'icon' => 'bi-building-fill', 'tone' => 'amber'], ['label' => 'Mata Pelajaran', 'value' => $pkbmDashboard['subjectCount'], 'detail' => 'Mapel terdaftar', 'icon' => 'bi-journal-bookmark-fill', 'tone' => 'violet'], ] as $stat)
$stat['tone'] === 'blue', 'pkbm-stat-card--emerald' => $stat['tone'] === 'emerald', 'pkbm-stat-card--amber' => $stat['tone'] === 'amber', 'pkbm-stat-card--violet' => $stat['tone'] === 'violet', ])>

{{ $stat['label'] }}

{{ number_format($stat['value'], 0, ',', '.') }}

{{ $stat['detail'] }}

@endforeach
@php $chartData = [ 'gender' => [ 'male' => (int) $demographics['male'], 'female' => (int) $demographics['female'], 'unknown' => max(0, (int) $demographics['total'] - (int) $demographics['male'] - (int) $demographics['female']), ], 'classes' => $pkbmDashboard['classDistribution'] ->map(fn ($class): array => [ 'label' => $class->nama_kelas ?: 'Kelas tanpa nama', 'male' => (int) $class->jumlah_laki_laki, 'female' => (int) $class->jumlah_perempuan, 'unknown' => max(0, (int) $class->jumlah_siswa - (int) $class->jumlah_laki_laki - (int) $class->jumlah_perempuan), ]) ->values() ->all(), 'trend' => $pkbmDashboard['enrollmentTrend'] ?? [], ]; @endphp

Komposisi gender

{{ number_format($demographics['total'], 0, ',', '.') }} peserta didik aktif

Sebaran siswa per kelas

{{ $pkbmDashboard['classDistribution']->count() }} kelas pada periode aktif

Tren peserta didik aktif

Jumlah siswa terdaftar per periode akademik

Identitas satuan pendidikan

Informasi lembaga PKBM

Nama PKBM
{{ $pkbmDashboard['organization']->nama_pkbm ?: '-' }}
NPSN
{{ $pkbmDashboard['organization']->npsn ?: '-' }}
Kepala PKBM
{{ $pkbmDashboard['period']->kepala_sekolah ?? 'Belum diatur' }}
Akreditasi
{{ $pkbmDashboard['organization']->akreditasi ?: 'Belum ada' }}
Alamat
{{ $pkbmDashboard['organization']->alamat ?: '-' }}
Kec. {{ $pkbmDashboard['organization']->kecamatan ?: '-' }}, Kab. {{ $pkbmDashboard['organization']->kabupaten ?: '-' }}
Email
{{ $pkbmDashboard['organization']->email ?: '-' }}
No. Telepon
{{ $pkbmDashboard['organization']->kontak ?: '-' }}
Website
@if ($pkbmDashboard['organization']->website) @php $website = $pkbmDashboard['organization']->website; $websiteUrl = \Illuminate\Support\Str::startsWith($website, ['http://', 'https://']) ? $website : 'https://'.$website; @endphp
{{ $website }}
@else
-
@endif

Jadwal pelajaran

Hari ini: {{ $activeDay }} · {{ $pkbmDashboard['period'] ? $pkbmDashboard['period']->tahun_pelajaran.' · '.$pkbmDashboard['period']->semester : 'Periode belum diatur' }}

@if (request()->filled('filter_rekap_kelas')) @endif
Hari ini: {{ $activeDay }}
@foreach ($weekdays as $day) @php $dayItems = $pkbmDashboard['scheduleByDay']->get($day, []); $isActiveDay = $day === $activeDay; @endphp @endforeach
@foreach ($weekdays as $day) @php $dayItems = $pkbmDashboard['scheduleByDay']->get($day, []); @endphp @endforeach

Data siswa per kelas

{{ $pkbmDashboard['period'] ? 'Sebaran siswa pada '.$pkbmDashboard['period']->tahun_pelajaran.' · '.$pkbmDashboard['period']->semester : 'Periode akademik belum diatur' }}

{{ $pkbmDashboard['classDistribution']->count() }} kelas · {{ number_format($pkbmDashboard['classDistribution']->sum('jumlah_siswa'), 0, ',', '.') }} siswa 100% = kelas dengan siswa terbanyak
Laki-laki Perempuan Belum diisi
@forelse ($pkbmDashboard['classDistribution'] as $class) @php $classTotal = (int) $class->jumlah_siswa; $maleCount = (int) $class->jumlah_laki_laki; $femaleCount = (int) $class->jumlah_perempuan; $unknownGenderCount = max(0, $classTotal - $maleCount - $femaleCount); $maleWidth = $maleCount / $maxClassCount * 100; $femaleWidth = $femaleCount / $maxClassCount * 100; $unknownGenderWidth = $unknownGenderCount / $maxClassCount * 100; @endphp @empty @endforelse @if ($pkbmDashboard['classDistribution']->isNotEmpty()) @endif
Kelas Sebaran siswa Laki-laki Perempuan Total
{{ $class->nama_kelas ?: 'Kelas tanpa nama' }}
{{ $maxClassCount > 0 ? (int) round($classTotal / $maxClassCount * 100) : 0 }}%
{{ number_format($class->jumlah_laki_laki, 0, ',', '.') }} {{ number_format($class->jumlah_perempuan, 0, ',', '.') }} {{ number_format($classTotal, 0, ',', '.') }}
@if ($pkbmDashboard['period']) Belum ada kelas terdaftar. @else Atur periode akademik aktif untuk melihat data siswa per kelas. @endif
Total {{ number_format($pkbmDashboard['classDistribution']->sum('jumlah_laki_laki'), 0, ',', '.') }} {{ number_format($pkbmDashboard['classDistribution']->sum('jumlah_perempuan'), 0, ',', '.') }} {{ number_format($pkbmDashboard['classDistribution']->sum('jumlah_siswa'), 0, ',', '.') }}

Rekapitulasi karakteristik peserta didik

{{ $pkbmDashboard['filteredClass']->nama_kelas ?? 'Semua kelas' }} · periode aktif

Berdasarkan gender

Laki-laki
{{ number_format($demographics['male'], 0, ',', '.') }}
Perempuan
{{ number_format($demographics['female'], 0, ',', '.') }}
Total
{{ number_format($demographics['total'], 0, ',', '.') }}

Usia sekolah (7–18 tahun)

{{ number_format($demographics['schoolAge'], 0, ',', '.') }}

{{ $schoolAgePercent }}%

Peserta didik

Rentang usia lainnya

Usia ≤ 23 tahun
{{ number_format($demographics['upTo23'], 0, ',', '.') }}
Usia > 23 tahun
{{ number_format($demographics['over23'], 0, ',', '.') }}

Data berdasarkan tanggal lahir peserta didik yang terdaftar.

Kunjungan website

Statistik situs lembaga

Total kunjungan

{{ number_format($pkbmDashboard['organization']->total_pengunjung ?? 0, 0, ',', '.') }}

Sejak website aktif

Pengunjung hari ini

{{ number_format($pkbmDashboard['organization']->kunjungan_hari_ini ?? 0, 0, ',', '.') }}

{{ now()->locale('id')->translatedFormat('d M Y') }}

@if ($pkbmDashboard['announcement'])

{{ $pkbmDashboard['announcement']->judul }}

{{ $pkbmDashboard['announcement']->isi }}
@if ($pkbmDashboard['announcement']->lampiran) Lihat lampiran dokumen @endif
Lihat semua
@endif @if ($pkbmDashboard['pendingJobs']->isNotEmpty())

Daftar pekerjaan PKBM

{{ $pkbmDashboard['pendingJobs']->count() }} pekerjaan yang masih memerlukan perhatian Anda.

@foreach ($pkbmDashboard['pendingJobs'] as $job) @php $deadline = $job->deadline && $job->deadline !== '0000-00-00' ? \Illuminate\Support\Carbon::parse($job->deadline)->startOfDay() : null; $daysToDeadline = $deadline ? (int) \Illuminate\Support\Carbon::today()->diffInDays($deadline, false) : null; $statusTone = match ($job->status) { 'Sedang Dikerjakan' => 'bg-blue-50 text-blue-700', 'Belum Dimulai' => 'bg-slate-100 text-slate-700', default => 'bg-amber-50 text-amber-700', }; $priorityTone = $job->prioritas === 'Tinggi' ? 'bg-rose-50 text-rose-700' : ($job->prioritas === 'Sedang' ? 'bg-amber-50 text-amber-700' : 'bg-slate-100 text-slate-600'); @endphp

{{ $job->nama_pekerjaan }}

@if ($job->deskripsi)

{{ $job->deskripsi }}

@endif
{{ $job->status ?: 'Status belum ditentukan' }}
@if ($deadline) Batas: {{ $deadline->locale('id')->translatedFormat('d M Y') }} @if ($daysToDeadline < 0) Terlewat {{ abs($daysToDeadline) }} hari @elseif ($daysToDeadline === 0) Hari ini @elseif ($daysToDeadline === 1) Besok @else {{ $daysToDeadline }} hari lagi @endif @endif @if ($job->penanggung_jawab) PJB: {{ $job->penanggung_jawab }} @endif @if ($job->prioritas) Prioritas {{ $job->prioritas }} @endif
@endforeach
@endif @push('scripts') @endpush