edit files
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
// api/controllers/DashboardController.php
|
||||
class DashboardController {
|
||||
public function index(): void {
|
||||
requireAuth([ROLE_ADMIN, ROLE_PENGURUS, ROLE_PIMPINAN]);
|
||||
$db = getDB();
|
||||
|
||||
// Ringkasan utama
|
||||
$stat = $db->query(
|
||||
"SELECT
|
||||
(SELECT COUNT(*) FROM penduduk WHERE status_hidup='hidup') AS total_penduduk,
|
||||
(SELECT COUNT(*) FROM penduduk WHERE status_hidup='hidup' AND status_ekonomi='miskin') AS total_miskin,
|
||||
(SELECT COUNT(*) FROM penduduk WHERE status_hidup='hidup' AND status_ekonomi='rentan') AS total_rentan,
|
||||
(SELECT COUNT(*) FROM penduduk WHERE status_hidup='hidup' AND status_ekonomi='mampu') AS total_mampu,
|
||||
(SELECT COUNT(*) FROM keluarga) AS total_kk,
|
||||
(SELECT COUNT(*) FROM rumah_ibadah WHERE aktif=1) AS total_ri,
|
||||
(SELECT COUNT(*) FROM laporan WHERE status='pending') AS laporan_pending,
|
||||
(SELECT COUNT(*) FROM laporan WHERE urgensi='darurat' AND status NOT IN('selesai')) AS laporan_darurat,
|
||||
(SELECT COUNT(DISTINCT nik) FROM histori_bantuan WHERE status_penyaluran='disalurkan') AS sudah_dibantu,
|
||||
(SELECT COUNT(*) FROM histori_bantuan WHERE MONTH(tanggal)=MONTH(CURDATE()) AND YEAR(tanggal)=YEAR(CURDATE())) AS bantuan_bulan_ini"
|
||||
)->fetch();
|
||||
|
||||
// Sebaran per kecamatan
|
||||
$kec = $db->query(
|
||||
"SELECT k.kecamatan,
|
||||
COUNT(DISTINCT k.id) AS jumlah_kk,
|
||||
SUM(CASE WHEN k.status_ekonomi='miskin' THEN 1 ELSE 0 END) AS miskin,
|
||||
SUM(CASE WHEN k.status_ekonomi='rentan' THEN 1 ELSE 0 END) AS rentan
|
||||
FROM keluarga k GROUP BY k.kecamatan ORDER BY miskin DESC"
|
||||
)->fetchAll();
|
||||
|
||||
// Trend bantuan 6 bulan
|
||||
$trend = $db->query(
|
||||
"SELECT DATE_FORMAT(tanggal,'%Y-%m') AS bulan, COUNT(*) AS jumlah
|
||||
FROM histori_bantuan
|
||||
WHERE tanggal >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH)
|
||||
GROUP BY bulan ORDER BY bulan"
|
||||
)->fetchAll();
|
||||
|
||||
// Belum pernah dibantu (miskin)
|
||||
$belum = $db->query(
|
||||
"SELECT COUNT(*) AS c FROM penduduk p
|
||||
WHERE p.status_ekonomi IN ('miskin','rentan')
|
||||
AND p.status_hidup='hidup'
|
||||
AND NOT EXISTS (SELECT 1 FROM histori_bantuan hb WHERE hb.nik=p.nik AND hb.status_penyaluran='disalurkan')"
|
||||
)->fetch()['c'];
|
||||
|
||||
// Prioritas darurat
|
||||
$prioritas = $db->query(
|
||||
"SELECT * FROM v_prioritas_bantuan
|
||||
WHERE level_prioritas IN ('SANGAT TINGGI','TINGGI')
|
||||
LIMIT 10"
|
||||
)->fetchAll();
|
||||
|
||||
// Beban per RI
|
||||
$bebanRI = $db->query(
|
||||
"SELECT ri.nama, ri.jenis,
|
||||
COUNT(DISTINCT k.id) AS jumlah_kk,
|
||||
SUM(CASE WHEN k.status_ekonomi='miskin' THEN 1 ELSE 0 END) AS kk_miskin
|
||||
FROM rumah_ibadah ri
|
||||
LEFT JOIN keluarga k ON k.id_rumah_ibadah=ri.id
|
||||
WHERE ri.aktif=1
|
||||
GROUP BY ri.id ORDER BY kk_miskin DESC"
|
||||
)->fetchAll();
|
||||
|
||||
jsonSuccess([
|
||||
'statistik' => $stat,
|
||||
'sebaran_kecamatan' => $kec,
|
||||
'trend_bantuan' => $trend,
|
||||
'belum_dibantu' => (int)$belum,
|
||||
'prioritas_darurat' => $prioritas,
|
||||
'beban_per_ri' => $bebanRI,
|
||||
]);
|
||||
}
|
||||
|
||||
public function show(string $id): void { jsonError('Not implemented', 501); }
|
||||
public function store(): void { jsonError('Not implemented', 501); }
|
||||
public function update(string $id): void { jsonError('Not implemented', 501); }
|
||||
public function destroy(string $id): void { jsonError('Not implemented', 501); }
|
||||
}
|
||||
Reference in New Issue
Block a user