first commit
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
<?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.");
|
||||
Reference in New Issue
Block a user