Files
UAS_WEBGIS_IhyaUlumuddinHar…/project_final/api/cakupan_bantuan.php
T
2026-06-13 11:24:58 +07:00

54 lines
1.9 KiB
PHP

<?php
/**
* api/cakupan_bantuan.php — Analisis cakupan bantuan (KF-22).
* GET → ringkasan cakupan keseluruhan + per jenis bantuan + per kelurahan.
*/
require_once __DIR__ . '/../config/db.php';
require_once __DIR__ . '/helpers.php';
$pdo = Database::getConnection();
requireApiAnyRole(['operator', 'pimpinan']);
if ($_SERVER['REQUEST_METHOD'] !== 'GET') sendError('Method not allowed', 405);
$total = (int)$pdo->query("SELECT COUNT(*) FROM warga_miskin")->fetchColumn();
$dibantu = (int)$pdo->query("SELECT COUNT(DISTINCT warga_id) FROM bantuan_sosial WHERE is_aktif=1")->fetchColumn();
// Per jenis bantuan
$perJenis = $pdo->query("
SELECT jb.kode, jb.nama,
COUNT(DISTINCT CASE WHEN bs.is_aktif=1 THEN bs.warga_id END) AS penerima
FROM jenis_bantuan jb
LEFT JOIN bantuan_sosial bs ON bs.jenis_bantuan_id = jb.id
GROUP BY jb.id ORDER BY jb.id
")->fetchAll();
foreach ($perJenis as &$j) {
$j['penerima'] = (int)$j['penerima'];
$j['persen'] = $total > 0 ? round($j['penerima'] / $total * 100, 1) : 0;
}
unset($j);
// Per kelurahan
$perWilayah = $pdo->query("
SELECT w.nama,
COUNT(DISTINCT wm.id) AS miskin,
COUNT(DISTINCT CASE WHEN bs.id IS NOT NULL THEN wm.id END) AS dibantu
FROM wilayah w
LEFT JOIN warga_miskin wm ON ST_Contains(w.geom, wm.geom)
LEFT JOIN bantuan_sosial bs ON bs.warga_id = wm.id AND bs.is_aktif=1
GROUP BY w.id ORDER BY w.nama
")->fetchAll();
foreach ($perWilayah as &$w) {
$w['miskin'] = (int)$w['miskin']; $w['dibantu'] = (int)$w['dibantu'];
$w['cakupan'] = $w['miskin'] > 0 ? round($w['dibantu'] / $w['miskin'] * 100, 1) : 0;
}
unset($w);
sendSuccess([
'total_warga' => $total,
'dibantu' => $dibantu,
'belum_dibantu' => $total - $dibantu,
'cakupan_persen' => $total > 0 ? round($dibantu / $total * 100, 1) : 0,
'per_jenis' => $perJenis,
'per_wilayah' => $perWilayah,
], 'Cakupan Bantuan');