46 lines
1.6 KiB
PHP
46 lines
1.6 KiB
PHP
<?php
|
|
/**
|
|
* api/tren.php — Tren waktu jumlah warga & cakupan bantuan (KF-23).
|
|
* GET → seri bulanan (12 bulan terakhir): warga baru, kumulatif warga, bantuan baru.
|
|
*/
|
|
require_once __DIR__ . '/../config/db.php';
|
|
require_once __DIR__ . '/helpers.php';
|
|
|
|
$pdo = Database::getConnection();
|
|
requireApiAnyRole(['operator', 'pimpinan']);
|
|
if ($_SERVER['REQUEST_METHOD'] !== 'GET') sendError('Method not allowed', 405);
|
|
|
|
// Bangun 12 bulan terakhir
|
|
$months = [];
|
|
for ($i = 11; $i >= 0; $i--) {
|
|
$months[date('Y-m', strtotime("-$i month"))] = ['warga' => 0, 'bantuan' => 0];
|
|
}
|
|
|
|
foreach ($pdo->query("SELECT DATE_FORMAT(created_at,'%Y-%m') ym, COUNT(*) c FROM warga_miskin GROUP BY ym") as $r) {
|
|
if (isset($months[$r['ym']])) $months[$r['ym']]['warga'] = (int)$r['c'];
|
|
}
|
|
foreach ($pdo->query("SELECT DATE_FORMAT(created_at,'%Y-%m') ym, COUNT(*) c FROM bantuan_sosial GROUP BY ym") as $r) {
|
|
if (isset($months[$r['ym']])) $months[$r['ym']]['bantuan'] = (int)$r['c'];
|
|
}
|
|
|
|
// warga sebelum jendela 12 bulan (untuk basis kumulatif)
|
|
$firstMonth = array_key_first($months);
|
|
$base = (int)$pdo->query("SELECT COUNT(*) FROM warga_miskin WHERE DATE_FORMAT(created_at,'%Y-%m') < '$firstMonth'")->fetchColumn();
|
|
|
|
$labels = []; $wargaBaru = []; $kumulatif = []; $bantuanBaru = [];
|
|
$run = $base;
|
|
foreach ($months as $ym => $v) {
|
|
$labels[] = $ym;
|
|
$wargaBaru[] = $v['warga'];
|
|
$run += $v['warga'];
|
|
$kumulatif[] = $run;
|
|
$bantuanBaru[] = $v['bantuan'];
|
|
}
|
|
|
|
sendSuccess([
|
|
'labels' => $labels,
|
|
'warga_baru' => $wargaBaru,
|
|
'kumulatif' => $kumulatif,
|
|
'bantuan_baru' => $bantuanBaru,
|
|
], 'Tren Waktu');
|