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

108 lines
5.5 KiB
PHP

<?php
require_once __DIR__ . '/../config.php';
$user = requireLogin();
$method = $_SERVER['REQUEST_METHOD'];
$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
$db = getDB();
switch ($method) {
case 'GET':
if ($id) {
$st = $db->prepare("SELECT k.*, ri.nama as ri_nama, ri.jenis as ri_jenis
FROM keluarga k LEFT JOIN rumah_ibadah ri ON ri.id=k.rumah_ibadah_id
WHERE k.id=?");
$st->execute([$id]);
$row = $st->fetch();
if (!$row) jsonErr('Tidak ditemukan.', 404);
// anggota keluarga
$an = $db->prepare("SELECT id,nik,nama,jenis_kelamin,umur,profil_umur,
status_keluarga,status_perkawinan,status_ekonomi,
kondisi_kesehatan,pekerjaan,penghasilan,
status_pendidikan,pendidikan_terakhir
FROM penduduk WHERE keluarga_id=? AND status_hidup='hidup' ORDER BY
FIELD(status_keluarga,'kepala','istri','anak','orang_tua','lainnya')");
$an->execute([$id]);
$row['anggota'] = $an->fetchAll();
jsonOk($row);
break;
}
$where = []; $params = [];
if (!empty($_GET['status_ekonomi'])) { $where[] = "k.status_ekonomi=?"; $params[] = $_GET['status_ekonomi']; }
if (!empty($_GET['kelurahan'])) { $where[] = "k.kelurahan=?"; $params[] = $_GET['kelurahan']; }
if (!empty($_GET['rumah_ibadah_id'])) { $where[] = "k.rumah_ibadah_id=?"; $params[] = (int)$_GET['rumah_ibadah_id']; }
if (!empty($_GET['q'])) { $where[] = "(k.nama_kk LIKE ? OR k.no_kk LIKE ?)"; $params[] = '%'.$_GET['q'].'%'; $params[] = '%'.$_GET['q'].'%'; }
$wStr = $where ? 'WHERE '.implode(' AND ',$where) : '';
$st = $db->prepare("SELECT k.id, k.no_kk, k.nama_kk, k.alamat, k.rt, k.rw,
k.kelurahan, k.kecamatan, k.lat, k.lng, k.status_ekonomi,
ri.nama as ri_nama,
(SELECT COUNT(*) FROM penduduk p WHERE p.keluarga_id=k.id AND p.status_hidup='hidup') as jumlah_jiwa,
(SELECT COUNT(*) FROM histori_bantuan hb JOIN penduduk p ON p.id=hb.penduduk_id WHERE p.keluarga_id=k.id AND hb.status='disalurkan') as total_bantuan_diterima
FROM keluarga k LEFT JOIN rumah_ibadah ri ON ri.id=k.rumah_ibadah_id
$wStr ORDER BY k.nama_kk ASC LIMIT 500");
$st->execute($params);
jsonOk($st->fetchAll());
break;
case 'POST':
requireRole(['superadmin','pengurus','relawan']);
$b = json_decode(file_get_contents('php://input'), true);
$no_kk = sanitize($b['no_kk'] ?? '');
$nama_kk = sanitize($b['nama_kk'] ?? '');
if (!$no_kk || !$nama_kk) jsonErr('No KK dan nama KK wajib diisi.');
if (strlen($no_kk) !== 16) jsonErr('No KK harus 16 digit.');
$chk = $db->prepare("SELECT id FROM keluarga WHERE no_kk=?"); $chk->execute([$no_kk]);
if ($chk->fetch()) jsonErr('No KK sudah terdaftar.');
$db->prepare("INSERT INTO keluarga (no_kk,nama_kk,alamat,rt,rw,kelurahan,kecamatan,lat,lng,rumah_ibadah_id,status_ekonomi,created_by)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?)")
->execute([
$no_kk, $nama_kk,
sanitize($b['alamat'] ?? ''),
sanitize($b['rt'] ?? ''), sanitize($b['rw'] ?? ''),
sanitize($b['kelurahan'] ?? ''), sanitize($b['kecamatan'] ?? ''),
isset($b['lat']) ? (float)$b['lat'] : null,
isset($b['lng']) ? (float)$b['lng'] : null,
!empty($b['rumah_ibadah_id']) ? (int)$b['rumah_ibadah_id'] : null,
$b['status_ekonomi'] ?? 'rentan',
$user['id']
]);
$newId = (int)$db->lastInsertId();
log_aksi($user['id'], 'CREATE', 'keluarga', $newId, "Tambah KK: $nama_kk");
jsonOk(['id'=>$newId], 'Keluarga berhasil ditambahkan.');
break;
case 'PUT':
requireRole(['superadmin','pengurus','relawan']);
if (!$id) jsonErr('ID tidak valid.');
$b = json_decode(file_get_contents('php://input'), true);
$db->prepare("UPDATE keluarga SET nama_kk=?,alamat=?,rt=?,rw=?,kelurahan=?,kecamatan=?,
lat=?,lng=?,rumah_ibadah_id=?,status_ekonomi=?,updated_at=NOW() WHERE id=?")
->execute([
sanitize($b['nama_kk'] ?? ''), sanitize($b['alamat'] ?? ''),
sanitize($b['rt'] ?? ''), sanitize($b['rw'] ?? ''),
sanitize($b['kelurahan'] ?? ''), sanitize($b['kecamatan'] ?? ''),
isset($b['lat']) ? (float)$b['lat'] : null,
isset($b['lng']) ? (float)$b['lng'] : null,
!empty($b['rumah_ibadah_id']) ? (int)$b['rumah_ibadah_id'] : null,
$b['status_ekonomi'] ?? 'rentan',
$id
]);
log_aksi($user['id'], 'UPDATE', 'keluarga', $id, "Edit KK ID: $id");
jsonOk(null, 'Data keluarga diperbarui.');
break;
case 'DELETE':
requireRole(['superadmin']);
if (!$id) jsonErr('ID tidak valid.');
$db->prepare("DELETE FROM keluarga WHERE id=?")->execute([$id]);
log_aksi($user['id'], 'DELETE', 'keluarga', $id, "Hapus KK ID: $id");
jsonOk(null, 'Data keluarga dihapus.');
break;
default: jsonErr('Method tidak didukung.', 405);
}