Files
WebGis_Final_Project/05/api/bantuan.php
T
2026-06-10 18:32:52 +07:00

115 lines
5.5 KiB
PHP

<?php
require_once __DIR__ . '/../config.php';
$user = requireLogin();
$method = $_SERVER['REQUEST_METHOD'];
$action = $_GET['action'] ?? '';
$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
$db = getDB();
// ── HISTORI BANTUAN ──
if ($action === 'histori') {
if ($method === 'GET') {
$pid = (int)($_GET['penduduk_id'] ?? 0);
if (!$pid) jsonErr('penduduk_id wajib.');
$st = $db->prepare("SELECT hb.*, b.nama as bantuan_nama, b.jenis, b.satuan, b.sumber,
u.nama_lengkap as disalurkan_nama
FROM histori_bantuan hb
JOIN bantuan b ON b.id=hb.bantuan_id
LEFT JOIN user u ON u.id=hb.disalurkan_oleh
WHERE hb.penduduk_id=? ORDER BY hb.tanggal DESC");
$st->execute([$pid]);
jsonOk($st->fetchAll());
}
if ($method === 'POST') {
requireRole(['superadmin','pengurus']);
$b = json_decode(file_get_contents('php://input'), true);
$pid = (int)($b['penduduk_id'] ?? 0);
$bid = (int)($b['bantuan_id'] ?? 0);
if (!$pid || !$bid) jsonErr('penduduk_id dan bantuan_id wajib.');
$db->prepare("INSERT INTO histori_bantuan (penduduk_id,bantuan_id,disalurkan_oleh,tanggal,jumlah,status,catatan) VALUES (?,?,?,?,?,?,?)")
->execute([$pid,$bid,$user['id'],$b['tanggal']??date('Y-m-d'),(float)($b['jumlah']??1),$b['status']??'disalurkan',sanitize($b['catatan']??'')]);
$newId=(int)$db->lastInsertId();
log_aksi($user['id'],'CREATE','histori_bantuan',$newId,"Catat bantuan penduduk_id:$pid bantuan_id:$bid");
jsonOk(['id'=>$newId],'Histori bantuan dicatat.');
}
if ($method === 'PUT') {
requireRole(['superadmin','pengurus']);
if (!$id) jsonErr('ID tidak valid.');
$b = json_decode(file_get_contents('php://input'), true);
$db->prepare("UPDATE histori_bantuan SET status=?,catatan=? WHERE id=?")
->execute([$b['status']??'disalurkan',sanitize($b['catatan']??''),$id]);
jsonOk(null,'Status bantuan diperbarui.');
}
jsonErr('Method tidak didukung.', 405);
}
// ── PRIORITAS OTOMATIS ──
if ($action === 'prioritas') {
$st = $db->query("
SELECT p.id, p.nik, p.nama, p.umur, p.profil_umur, p.kondisi_kesehatan,
p.status_ekonomi, p.penghasilan, p.status_perkawinan,
k.alamat, k.kelurahan, k.lat, k.lng,
(SELECT COUNT(*) FROM histori_bantuan hb WHERE hb.penduduk_id=p.id AND hb.status='disalurkan') as total_bantuan,
CASE
WHEN p.status_ekonomi='miskin' AND p.kondisi_kesehatan IN ('sakit_berat','disabilitas') THEN 'SANGAT TINGGI'
WHEN p.profil_umur='Lansia' AND p.status_perkawinan IN ('cerai_mati','cerai_hidup') THEN 'SANGAT TINGGI'
WHEN p.status_ekonomi='miskin' AND p.kondisi_kesehatan='sakit_ringan' THEN 'TINGGI'
WHEN p.status_ekonomi='miskin' AND p.profil_umur='Lansia' THEN 'TINGGI'
WHEN p.status_ekonomi='miskin' THEN 'SEDANG'
WHEN p.status_ekonomi='rentan' AND p.kondisi_kesehatan != 'sehat' THEN 'SEDANG'
ELSE 'RENDAH'
END as prioritas
FROM v_penduduk p
JOIN keluarga k ON k.id=p.keluarga_id
WHERE p.status_hidup='hidup'
ORDER BY FIELD(prioritas,'SANGAT TINGGI','TINGGI','SEDANG','RENDAH'), total_bantuan ASC
LIMIT 100
");
jsonOk($st->fetchAll());
}
// ── BELUM TERIMA BANTUAN ──
if ($action === 'belum_terima') {
$st = $db->query("
SELECT p.id, p.nik, p.nama, p.umur, p.profil_umur, p.status_ekonomi,
p.kondisi_kesehatan, k.kelurahan, k.alamat, k.lat, k.lng
FROM v_penduduk p
JOIN keluarga k ON k.id=p.keluarga_id
WHERE p.status_hidup='hidup'
AND p.status_ekonomi IN ('miskin','rentan')
AND p.id NOT IN (SELECT DISTINCT penduduk_id FROM histori_bantuan WHERE status='disalurkan')
ORDER BY p.status_ekonomi DESC, p.umur DESC
");
jsonOk($st->fetchAll());
}
// ── CRUD MASTER BANTUAN ──
switch ($method) {
case 'GET':
if ($id) {
$st = $db->prepare("SELECT * FROM bantuan WHERE id=?"); $st->execute([$id]);
jsonOk($st->fetch());
}
jsonOk($db->query("SELECT * FROM bantuan ORDER BY nama")->fetchAll());
break;
case 'POST':
requireRole(['superadmin','pengurus']);
$b = json_decode(file_get_contents('php://input'), true);
$db->prepare("INSERT INTO bantuan (nama,jenis,sumber,satuan,nilai_per_satuan,periode) VALUES (?,?,?,?,?,?)")
->execute([sanitize($b['nama']??''),$b['jenis']??'lainnya',sanitize($b['sumber']??''),sanitize($b['satuan']??''),(float)($b['nilai_per_satuan']??0),$b['periode']??'sekali']);
jsonOk(['id'=>(int)$db->lastInsertId()],'Bantuan ditambahkan.');
break;
case 'PUT':
requireRole(['superadmin','pengurus']);
if (!$id) jsonErr('ID tidak valid.');
$b = json_decode(file_get_contents('php://input'), true);
$db->prepare("UPDATE bantuan SET nama=?,jenis=?,sumber=?,satuan=?,nilai_per_satuan=?,periode=?,aktif=? WHERE id=?")
->execute([sanitize($b['nama']??''),$b['jenis']??'lainnya',sanitize($b['sumber']??''),sanitize($b['satuan']??''),(float)($b['nilai_per_satuan']??0),$b['periode']??'sekali',(int)($b['aktif']??1),$id]);
jsonOk(null,'Bantuan diperbarui.');
break;
default: jsonErr('Method tidak didukung.', 405);
}