Files
2026-06-09 19:36:57 +07:00

149 lines
5.6 KiB
PHP

<?php
// ============================================================
// API: Dashboard Walikota — Data agregasi read-only
// GET: walikota + admin only
// ============================================================
require_once __DIR__ . '/config.php';
$method = $_SERVER['REQUEST_METHOD'];
if ($method !== 'GET') {
jsonResponse(null, 'Hanya metode GET yang didukung.', false, 405);
}
$user = requireRole(['admin', 'walikota']);
$tahun = isset($_GET['tahun']) ? (int)$_GET['tahun'] : (int)date('Y');
// ── 1. Total KK per kecamatan ─────────────────────────────────
$stmt = $pdo->query("
SELECT kecamatan, COUNT(*) AS jumlah
FROM keluarga_miskin
GROUP BY kecamatan
ORDER BY FIELD(kecamatan,
'Pontianak Utara','Pontianak Selatan','Pontianak Timur',
'Pontianak Barat','Pontianak Tenggara','Pontianak Kota')
");
$kkPerKecamatan = $stmt->fetchAll();
// ── 2. KK yang SUDAH dapat bantuan tahun ini (dari histori_bantuan) ──
$stmt = $pdo->prepare("
SELECT COUNT(DISTINCT kk_id) AS jumlah
FROM histori_bantuan
WHERE YEAR(tanggal_penyaluran) = ?
");
$stmt->execute([$tahun]);
$kkSudahBantuan = (int)$stmt->fetch()['jumlah'];
// ── 3. Total KK ───────────────────────────────────────────────
$stmt = $pdo->query("SELECT COUNT(*) AS jumlah FROM keluarga_miskin");
$totalKK = (int)$stmt->fetch()['jumlah'];
$kkBelumBantuan = $totalKK - $kkSudahBantuan;
// ── 4. Distribusi status DTKS ────────────────────────────────
$stmt = $pdo->query("
SELECT status_dtks, COUNT(*) AS jumlah
FROM keluarga_miskin
GROUP BY status_dtks
");
$distribusiDtks = $stmt->fetchAll();
// ── 5. Distribusi riwayat penyakit ───────────────────────────
$stmt = $pdo->query("SELECT riwayat_penyakit FROM keluarga_miskin WHERE riwayat_penyakit IS NOT NULL AND riwayat_penyakit != '[]'");
$penyakitRows = $stmt->fetchAll();
$penyakitCount = [];
foreach ($penyakitRows as $row) {
$arr = json_decode($row['riwayat_penyakit'], true) ?? [];
foreach ($arr as $p) {
$penyakitCount[$p] = ($penyakitCount[$p] ?? 0) + 1;
}
}
arsort($penyakitCount);
// Format jadi array [{ penyakit, jumlah }]
$distribusiPenyakit = array_map(
fn($k, $v) => ['penyakit' => $k, 'jumlah' => $v],
array_keys($penyakitCount),
array_values($penyakitCount)
);
// ── 6. Laporan belum ditangani ────────────────────────────────
$stmt = $pdo->query("SELECT COUNT(*) AS jumlah FROM laporan_masyarakat WHERE status = 'Baru'");
$laporanBaru = (int)$stmt->fetch()['jumlah'];
// ── 7. Bantuan tersalurkan tahun ini per sumber dana ─────────
$stmt = $pdo->prepare("
SELECT sumber_dana,
COUNT(*) AS jumlah_entri,
COUNT(DISTINCT kk_id) AS jumlah_kk,
COALESCE(SUM(nominal), 0) AS total_nominal
FROM histori_bantuan
WHERE YEAR(tanggal_penyaluran) = ?
GROUP BY sumber_dana
ORDER BY total_nominal DESC
");
$stmt->execute([$tahun]);
$bantuanPerSumber = $stmt->fetchAll();
// Format nominal di setiap baris
foreach ($bantuanPerSumber as &$b) {
$b['total_nominal_formatted'] = 'Rp ' . number_format((int)$b['total_nominal'], 0, ',', '.');
}
unset($b);
// ── 8. Bantuan tersalurkan tahun ini per jenis ───────────────
$stmt = $pdo->prepare("
SELECT jenis_bantuan,
COUNT(*) AS jumlah_entri,
COUNT(DISTINCT kk_id) AS jumlah_kk,
COALESCE(SUM(nominal), 0) AS total_nominal
FROM histori_bantuan
WHERE YEAR(tanggal_penyaluran) = ?
GROUP BY jenis_bantuan
ORDER BY total_nominal DESC
");
$stmt->execute([$tahun]);
$bantuanPerJenis = $stmt->fetchAll();
foreach ($bantuanPerJenis as &$b) {
$b['total_nominal_formatted'] = 'Rp ' . number_format((int)$b['total_nominal'], 0, ',', '.');
}
unset($b);
// ── 9. Total entri bantuan + total nominal tahun ini ─────────
$stmt = $pdo->prepare("
SELECT COUNT(*) AS jumlah, COALESCE(SUM(nominal), 0) AS total_nominal
FROM histori_bantuan WHERE YEAR(tanggal_penyaluran) = ?
");
$stmt->execute([$tahun]);
$totalRow = $stmt->fetch();
$totalEntri = (int)$totalRow['jumlah'];
$totalNominal = (int)$totalRow['total_nominal'];
$totalNominalFormatted = 'Rp ' . number_format($totalNominal, 0, ',', '.');
// ── 10. Distribusi tingkat kemiskinan ────────────────────────
$stmt = $pdo->query("
SELECT tingkat_kemiskinan, COUNT(*) AS jumlah
FROM keluarga_miskin
GROUP BY tingkat_kemiskinan
");
$distribusiKemiskinan = $stmt->fetchAll();
// ── Kirim semua data ──────────────────────────────────────────
jsonResponse([
'tahun' => $tahun,
'total_kk' => $totalKK,
'kk_per_kecamatan' => $kkPerKecamatan,
'kk_sudah_bantuan' => $kkSudahBantuan,
'kk_belum_bantuan' => $kkBelumBantuan,
'distribusi_dtks' => $distribusiDtks,
'distribusi_penyakit' => $distribusiPenyakit,
'distribusi_kemiskinan' => $distribusiKemiskinan,
'laporan_baru' => $laporanBaru,
'bantuan_per_sumber' => $bantuanPerSumber,
'bantuan_per_jenis' => $bantuanPerJenis,
'total_entri_bantuan' => $totalEntri,
'total_nominal_bantuan' => $totalNominal,
'total_nominal_formatted'=> $totalNominalFormatted,
], "Data dashboard tahun $tahun.");