First commit / commit pertama
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
<?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');
|
||||
Reference in New Issue
Block a user