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); }