74 lines
2.8 KiB
PHP
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);
|