Files
Webgis-Poverty/api/dashboard_stats.php
T
2026-06-11 01:50:37 +07:00

74 lines
2.8 KiB
PHP

<?php
// api/dashboard_stats.php
require_once __DIR__ . '/config/database.php';
require_once __DIR__ . '/helpers/response.php';
// CORS and RBAC are already processed globally in response.php
$db = getDB();
$stats = [];
// 1. Penduduk Miskin (Total KK & Total Jiwa)
$resPm = $db->query("SELECT COUNT(*) AS total_kk, IFNULL(SUM(jumlah_anggota), 0) AS total_jiwa FROM penduduk_miskin");
$stats['penduduk_miskin'] = $resPm->fetch_assoc();
// 2. Rumah Ibadah (Total)
$resRi = $db->query("SELECT COUNT(*) AS total FROM rumah_ibadah");
$stats['rumah_ibadah'] = $resRi->fetch_assoc();
// 6. Log Bantuan (Total log & Nilai total bantuan)
$resLb = $db->query("SELECT COUNT(*) AS total_count, IFNULL(SUM(nilai_bantuan), 0) AS total_nilai FROM log_bantuan");
$stats['log_bantuan'] = $resLb->fetch_assoc();
// 7. Proximity (Dalam vs Luar Radius)
$resProx = $db->query("SELECT status_proximity, COUNT(*) AS count FROM penduduk_miskin GROUP BY status_proximity");
$proximity = ['dalam_radius' => 0, 'luar_radius' => 0];
while ($row = $resProx->fetch_assoc()) {
$key = $row['status_proximity'] === 'dalam_radius' ? 'dalam_radius' : 'luar_radius';
$proximity[$key] += (int)$row['count'];
}
$stats['proximity'] = $proximity;
// 8. Tipe Bantuan (Pemberdayaan vs Konsumtif)
$resTipe = $db->query("SELECT tipe_bantuan, COUNT(*) AS count FROM log_bantuan GROUP BY tipe_bantuan");
$tipeBantuan = ['Pemberdayaan' => 0, 'Konsumtif' => 0];
while ($row = $resTipe->fetch_assoc()) {
$key = $row['tipe_bantuan'] === 'Pemberdayaan' ? 'Pemberdayaan' : 'Konsumtif';
$tipeBantuan[$key] = (int)$row['count'];
}
$stats['tipe_bantuan'] = $tipeBantuan;
// 9. Rumah Ibadah Teraktif (Top 5)
$resRiAktif = $db->query("
SELECT ri.nama, COUNT(lb.id) AS count, IFNULL(SUM(lb.nilai_bantuan), 0) AS nilai
FROM log_bantuan lb
JOIN rumah_ibadah ri ON ri.id = lb.rumah_ibadah_id
GROUP BY lb.rumah_ibadah_id
ORDER BY count DESC LIMIT 5
");
$riAktif = [];
while ($row = $resRiAktif->fetch_assoc()) {
$row['count'] = (int)$row['count'];
$row['nilai'] = (float)$row['nilai'];
$riAktif[] = $row;
}
$stats['ri_teraktif'] = $riAktif;
// 10. Bantuan Terbaru (Top 5)
$resBantuanBaru = $db->query("
SELECT lb.id, lb.tipe_bantuan, lb.sub_kategori, lb.keterangan, lb.tanggal_bantuan, lb.nilai_bantuan,
pm.nama AS nama_penduduk, ri.nama AS nama_rumah_ibadah
FROM log_bantuan lb
JOIN penduduk_miskin pm ON pm.id = lb.penduduk_miskin_id
JOIN rumah_ibadah ri ON ri.id = lb.rumah_ibadah_id
ORDER BY lb.tanggal_bantuan DESC, lb.id DESC LIMIT 5
");
$bantuanBaru = [];
while ($row = $resBantuanBaru->fetch_assoc()) {
$row['nilai_bantuan'] = $row['nilai_bantuan'] ? (float)$row['nilai_bantuan'] : 0;
$bantuanBaru[] = $row;
}
$stats['bantuan_terbaru'] = $bantuanBaru;
sendSuccess($stats);