UAS SIG Proyek WebGis

This commit is contained in:
L4zyL4mb
2026-06-10 21:46:56 +07:00
commit df18a7a99a
35 changed files with 8977 additions and 0 deletions
+167
View File
@@ -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);
}