First commit / commit pertama
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
<?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');
|
||||
Reference in New Issue
Block a user