UAS SIG Proyek WebGis
This commit is contained in:
@@ -0,0 +1,167 @@
|
||||
<?php
|
||||
// api/bantuan.php v2.0
|
||||
// ============================================================
|
||||
// API Bantuan Sosial – CRUD jenis bantuan & relasi penduduk
|
||||
// ============================================================
|
||||
require_once __DIR__ . '/../includes/config.php';
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
header('Access-Control-Allow-Origin: *');
|
||||
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
|
||||
header('Access-Control-Allow-Headers: Content-Type');
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') exit;
|
||||
|
||||
$method = $_SERVER['REQUEST_METHOD'];
|
||||
$db = getDB();
|
||||
$action = $_GET['action'] ?? 'pivot'; // 'jenis' | 'pivot'
|
||||
|
||||
switch ($method) {
|
||||
|
||||
// ════════════════════════════════════════════════════════
|
||||
// GET
|
||||
// ════════════════════════════════════════════════════════
|
||||
case 'GET':
|
||||
// GET jenis_bantuan (master)
|
||||
if ($action === 'jenis') {
|
||||
$rows = $db->query("SELECT * FROM jenis_bantuan ORDER BY kode")->fetchAll();
|
||||
jsonResponse(['success' => true, 'data' => $rows]);
|
||||
}
|
||||
|
||||
// GET bantuan per penduduk
|
||||
$pendudukId = $_GET['penduduk_id'] ?? null;
|
||||
if (!$pendudukId) jsonResponse(['success' => false, 'error' => 'penduduk_id diperlukan'], 400);
|
||||
|
||||
$stmt = $db->prepare("
|
||||
SELECT bp.*, jb.kode, jb.nama AS nama_bantuan, jb.warna_badge, jb.deskripsi
|
||||
FROM bantuan_penduduk bp
|
||||
JOIN jenis_bantuan jb ON jb.id = bp.bantuan_id
|
||||
WHERE bp.penduduk_id = ?
|
||||
ORDER BY jb.kode
|
||||
");
|
||||
$stmt->execute([$pendudukId]);
|
||||
jsonResponse(['success' => true, 'data' => $stmt->fetchAll()]);
|
||||
break;
|
||||
|
||||
// ════════════════════════════════════════════════════════
|
||||
// POST – Tambah/set bantuan untuk penduduk
|
||||
// ════════════════════════════════════════════════════════
|
||||
case 'POST':
|
||||
$in = getInput();
|
||||
|
||||
// Batch upsert – terima array bantuans[]
|
||||
if (isset($in['bantuans']) && is_array($in['bantuans'])) {
|
||||
$pendudukId = (int)($in['penduduk_id'] ?? 0);
|
||||
if (!$pendudukId) jsonResponse(['success' => false, 'error' => 'penduduk_id diperlukan'], 400);
|
||||
|
||||
// Nonaktifkan semua bantuan lama dulu
|
||||
$db->prepare("UPDATE bantuan_penduduk SET status = 'tidak_aktif' WHERE penduduk_id = ?")
|
||||
->execute([$pendudukId]);
|
||||
|
||||
foreach ($in['bantuans'] as $b) {
|
||||
$bantuanId = (int)($b['bantuan_id'] ?? 0);
|
||||
if (!$bantuanId) continue;
|
||||
|
||||
// Cek sudah ada?
|
||||
$cek = $db->prepare("SELECT id FROM bantuan_penduduk WHERE penduduk_id = ? AND bantuan_id = ?");
|
||||
$cek->execute([$pendudukId, $bantuanId]);
|
||||
$existing = $cek->fetch();
|
||||
|
||||
if ($existing) {
|
||||
$db->prepare("
|
||||
UPDATE bantuan_penduduk
|
||||
SET status = 'aktif', tanggal_mulai = ?, nominal_bulanan = ?,
|
||||
nomor_kpj = ?, keterangan = ?, diinput_oleh = ?
|
||||
WHERE penduduk_id = ? AND bantuan_id = ?
|
||||
")->execute([
|
||||
$b['tanggal_mulai'] ?? null,
|
||||
$b['nominal_bulanan'] ?? null,
|
||||
$b['nomor_kpj'] ?? null,
|
||||
$b['keterangan'] ?? null,
|
||||
$b['diinput_oleh'] ?? 1,
|
||||
$pendudukId, $bantuanId,
|
||||
]);
|
||||
} else {
|
||||
$db->prepare("
|
||||
INSERT INTO bantuan_penduduk
|
||||
(penduduk_id, bantuan_id, status, tanggal_mulai, nominal_bulanan, nomor_kpj, keterangan, diinput_oleh)
|
||||
VALUES (?,?,'aktif',?,?,?,?,?)
|
||||
")->execute([
|
||||
$pendudukId, $bantuanId,
|
||||
$b['tanggal_mulai'] ?? null,
|
||||
$b['nominal_bulanan'] ?? null,
|
||||
$b['nomor_kpj'] ?? null,
|
||||
$b['keterangan'] ?? null,
|
||||
$b['diinput_oleh'] ?? 1,
|
||||
]);
|
||||
}
|
||||
}
|
||||
jsonResponse(['success' => true, 'message' => 'Data bantuan berhasil disimpan']);
|
||||
}
|
||||
|
||||
// Single insert
|
||||
$required = ['penduduk_id','bantuan_id'];
|
||||
foreach ($required as $f) {
|
||||
if (empty($in[$f])) jsonResponse(['success' => false, 'error' => "Field '$f' wajib diisi"], 400);
|
||||
}
|
||||
|
||||
// Upsert
|
||||
$cek = $db->prepare("SELECT id FROM bantuan_penduduk WHERE penduduk_id = ? AND bantuan_id = ?");
|
||||
$cek->execute([(int)$in['penduduk_id'], (int)$in['bantuan_id']]);
|
||||
if ($cek->fetch()) {
|
||||
jsonResponse(['success' => false, 'error' => 'Bantuan ini sudah tercatat untuk penduduk tersebut. Gunakan PUT untuk update.'], 409);
|
||||
}
|
||||
|
||||
$db->prepare("
|
||||
INSERT INTO bantuan_penduduk (penduduk_id, bantuan_id, status, tanggal_mulai, nominal_bulanan, nomor_kpj, keterangan, diinput_oleh)
|
||||
VALUES (?,?,?,?,?,?,?,?)
|
||||
")->execute([
|
||||
(int)$in['penduduk_id'],
|
||||
(int)$in['bantuan_id'],
|
||||
$in['status'] ?? 'aktif',
|
||||
$in['tanggal_mulai'] ?? null,
|
||||
$in['nominal_bulanan'] ?? null,
|
||||
$in['nomor_kpj'] ?? null,
|
||||
$in['keterangan'] ?? null,
|
||||
$in['diinput_oleh'] ?? 1,
|
||||
]);
|
||||
jsonResponse(['success' => true, 'id' => $db->lastInsertId(), 'message' => 'Bantuan berhasil ditambahkan']);
|
||||
break;
|
||||
|
||||
// ════════════════════════════════════════════════════════
|
||||
// PUT – Update status bantuan
|
||||
// ════════════════════════════════════════════════════════
|
||||
case 'PUT':
|
||||
$in = getInput();
|
||||
$id = (int)($in['id'] ?? $_GET['id'] ?? 0);
|
||||
if (!$id) jsonResponse(['success' => false, 'error' => 'ID diperlukan'], 400);
|
||||
|
||||
$db->prepare("
|
||||
UPDATE bantuan_penduduk
|
||||
SET status = ?, tanggal_mulai = ?, tanggal_selesai = ?,
|
||||
nominal_bulanan = ?, nomor_kpj = ?, keterangan = ?
|
||||
WHERE id = ?
|
||||
")->execute([
|
||||
$in['status'] ?? 'aktif',
|
||||
$in['tanggal_mulai'] ?? null,
|
||||
$in['tanggal_selesai'] ?? null,
|
||||
$in['nominal_bulanan'] ?? null,
|
||||
$in['nomor_kpj'] ?? null,
|
||||
$in['keterangan'] ?? null,
|
||||
$id,
|
||||
]);
|
||||
jsonResponse(['success' => true, 'message' => 'Status bantuan diperbarui']);
|
||||
break;
|
||||
|
||||
// ════════════════════════════════════════════════════════
|
||||
// DELETE – Hapus relasi bantuan
|
||||
// ════════════════════════════════════════════════════════
|
||||
case 'DELETE':
|
||||
$id = (int)($_GET['id'] ?? getInput()['id'] ?? 0);
|
||||
if (!$id) jsonResponse(['success' => false, 'error' => 'ID diperlukan'], 400);
|
||||
$db->prepare("DELETE FROM bantuan_penduduk WHERE id = ?")->execute([$id]);
|
||||
jsonResponse(['success' => true, 'message' => 'Bantuan dihapus']);
|
||||
break;
|
||||
|
||||
default:
|
||||
jsonResponse(['success' => false, 'error' => 'Method tidak diizinkan'], 405);
|
||||
}
|
||||
Reference in New Issue
Block a user