54 lines
1.9 KiB
PHP
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');
|