prepare(" SELECT pm.nik_kk, pm.nama_kk, pm.no_hp, pm.alamat, pm.rt, pm.rw, COALESCE(w.kelurahan,'–') AS kelurahan, pm.jumlah_anggota, pm.jumlah_anak_sekolah, pm.penghasilan_bulanan, pm.status_pekerjaan, pm.kategori_kemiskinan, pm.kondisi_rumah, CASE pm.punya_bpjs WHEN 1 THEN 'Ya' ELSE 'Tidak' END AS punya_bpjs, pm.status_verifikasi, (SELECT GROUP_CONCAT(jb.kode ORDER BY jb.kode SEPARATOR ', ') FROM bantuan_penduduk bp JOIN jenis_bantuan jb ON jb.id = bp.bantuan_id WHERE bp.penduduk_id = pm.id AND bp.status='aktif') AS bantuan FROM penduduk_miskin pm LEFT JOIN wilayah w ON w.id = pm.wilayah_id $where ORDER BY w.kelurahan, pm.kategori_kemiskinan, pm.nama_kk "); $stmt->execute($params); $rows = $stmt->fetchAll(); // Statistik ringkas $statsStmt = $db->prepare(" SELECT COUNT(*) AS total, SUM(pm.jumlah_anggota) AS jiwa, SUM(CASE WHEN pm.kategori_kemiskinan='sangat_miskin' THEN 1 ELSE 0 END) AS sangat_miskin, SUM(CASE WHEN pm.kategori_kemiskinan='miskin' THEN 1 ELSE 0 END) AS miskin, SUM(CASE WHEN pm.kategori_kemiskinan='hampir_miskin' THEN 1 ELSE 0 END) AS hampir_miskin, SUM(CASE WHEN pm.kategori_kemiskinan='mampu' THEN 1 ELSE 0 END) AS mampu, SUM(CASE WHEN EXISTS(SELECT 1 FROM bantuan_penduduk bp WHERE bp.penduduk_id=pm.id AND bp.status='aktif') THEN 1 ELSE 0 END) AS penerima FROM penduduk_miskin pm LEFT JOIN wilayah w ON w.id = pm.wilayah_id $where "); $statsStmt->execute($params); $stats = $statsStmt->fetch(); $judul = "LAPORAN DATA PENDUDUK MISKIN"; $filter = $kelurahan ? " – Kelurahan $kelurahan" : ($kecamatan ? " – Kec. $kecamatan" : " – Seluruh Wilayah"); $tgl = date('d F Y'); // Warna kategori function warnaBg(string $k): string { return match($k) { 'sangat_miskin' => '#fee2e2', 'miskin' => '#fef3c7', 'hampir_miskin' => '#dcfce7', 'mampu' => '#dbeafe', default => '#f3f4f6', }; } function labelKat(string $k): string { return match($k) { 'sangat_miskin' => 'Sangat Miskin', 'miskin' => 'Miskin', 'hampir_miskin' => 'Nyaris Miskin', 'mampu' => 'Mampu', default => $k, }; } ?>
Dicetak pada: = $tgl ?> | Total: = count($rows) ?> KK
| No | NIK / Nama KK | Kelurahan | RT/RW | Alamat | Angg. | Anak | Penghasilan | Pekerjaan | Kategori | Kondisi Rumah | BPJS | Bantuan Diterima | Status Verifikasi |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| = $no++ ?> |
= htmlspecialchars($r['nik_kk']) ?> = htmlspecialchars($r['nama_kk']) ?> = htmlspecialchars($r['no_hp'] ?? '–') ?> |
= htmlspecialchars($r['kelurahan']) ?> | = ($r['rt'] ? $r['rt'].'/'.$r['rw'] : '–') ?> | = htmlspecialchars($r['alamat'] ?? '–') ?> | = $r['jumlah_anggota'] ?> | = $r['jumlah_anak_sekolah'] ?> | = $r['penghasilan_bulanan'] ? 'Rp '.number_format($r['penghasilan_bulanan'],0,',','.') : '–' ?> | = htmlspecialchars(ucwords(str_replace('_',' ',$r['status_pekerjaan']))) ?> | = labelKat($r['kategori_kemiskinan']) ?> | = htmlspecialchars(ucwords(str_replace('_',' ',$r['kondisi_rumah']))) ?> | = $r['punya_bpjs'] ?> | = htmlspecialchars(trim($b)) ?> Belum Ada | '#dcfce7', 'belum_diverifikasi'=>'#fef3c7', default=>'#fee2e2' }; ?> = htmlspecialchars(ucwords(str_replace('_',' ',$sv))) ?> |