Files
2026-06-10 19:26:40 +07:00

169 lines
7.1 KiB
PHP

<?php
include 'koneksi.php';
header('Content-Type: application/json');
$tipe = $_POST['tipe'] ?? '';
// ===== RUMAH IBADAH =====
if ($tipe === 'ibadah') {
$nama = trim($_POST['nama'] ?? '');
$jenis = $_POST['jenis'] ?? 'lainnya';
$kontak = $_POST['kontak'] ?? '';
$alamat = $_POST['alamat'] ?? '';
$lat = (float)($_POST['lat'] ?? 0);
$lng = (float)($_POST['lng'] ?? 0);
$radius = (float)($_POST['radius'] ?? 500);
if (!$nama) { echo json_encode(["status"=>"error","msg"=>"Nama tidak boleh kosong"]); exit; }
$stmt = $conn->prepare("INSERT INTO rumah_ibadah (nama,jenis,kontak,alamat,lat,lng,radius) VALUES (?,?,?,?,?,?,?)");
$stmt->bind_param("ssssddd", $nama,$jenis,$kontak,$alamat,$lat,$lng,$radius);
if ($stmt->execute()) {
echo json_encode(["status"=>"success","id"=>(int)$conn->insert_id]);
} else {
echo json_encode(["status"=>"error","msg"=>$stmt->error]);
}
$stmt->close();
}
// ===== PENDUDUK =====
elseif ($tipe === 'penduduk') {
$nik = trim($_POST['nik'] ?? '');
$nama = trim($_POST['nama'] ?? '');
$jk = $_POST['jenis_kelamin'] ?? 'L';
$tgl_lahir = !empty($_POST['tanggal_lahir']) ? $_POST['tanggal_lahir'] : null;
$status_kel = $_POST['status_keluarga'] ?? 'lainnya';
$status_kawin = $_POST['status_perkawinan'] ?? 'belum_kawin';
$alamat = $_POST['alamat'] ?? '';
$no_hp = $_POST['no_hp'] ?? '';
$pekerjaan = $_POST['pekerjaan'] ?? '';
$penghasilan = (float)($_POST['penghasilan'] ?? 0);
$status_ekonomi = $_POST['status_ekonomi'] ?? 'rentan';
$pend_terakhir = $_POST['pendidikan_terakhir'] ?? 'tidak_sekolah';
$status_pend = $_POST['status_pendidikan'] ?? 'tidak_sekolah';
$lat = (float)($_POST['lat'] ?? 0);
$lng = (float)($_POST['lng'] ?? 0);
if (!$nik || !$nama) {
echo json_encode(["status"=>"error","msg"=>"NIK dan Nama wajib diisi"]);
exit;
}
// Cari rumah ibadah terdekat otomatis
$rumah_ibadah_id = null;
if ($lat && $lng) {
$s = $conn->prepare("SELECT id FROM rumah_ibadah ORDER BY (6371*acos(cos(radians(?))*cos(radians(lat))*cos(radians(lng)-radians(?))+sin(radians(?))*sin(radians(lat)))) ASC LIMIT 1");
$s->bind_param("ddd", $lat, $lng, $lat);
$s->execute();
$row = $s->get_result()->fetch_assoc();
$rumah_ibadah_id = $row ? (int)$row['id'] : null;
$s->close();
}
// INSERT — semua 16 kolom, tipe dijaga ketat
// Gunakan query langsung dengan escape untuk menghindari masalah nullable
$nik_e = $conn->real_escape_string($nik);
$nama_e = $conn->real_escape_string($nama);
$jk_e = $conn->real_escape_string($jk);
$tgl_e = $tgl_lahir ? "'".$conn->real_escape_string($tgl_lahir)."'" : 'NULL';
$stkel_e = $conn->real_escape_string($status_kel);
$stkaw_e = $conn->real_escape_string($status_kawin);
$almt_e = $conn->real_escape_string($alamat);
$hp_e = $conn->real_escape_string($no_hp);
$pkrj_e = $conn->real_escape_string($pekerjaan);
$ekn_e = $conn->real_escape_string($status_ekonomi);
$pend_e = $conn->real_escape_string($pend_terakhir);
$spnd_e = $conn->real_escape_string($status_pend);
$rid_e = $rumah_ibadah_id ? (int)$rumah_ibadah_id : 'NULL';
$sql = "INSERT INTO penduduk
(nik,nama,jenis_kelamin,tanggal_lahir,status_keluarga,status_perkawinan,
alamat,no_hp,pekerjaan,penghasilan,status_ekonomi,
pendidikan_terakhir,status_pendidikan,lat,lng,rumah_ibadah_id)
VALUES
('{$nik_e}','{$nama_e}','{$jk_e}',{$tgl_e},'{$stkel_e}','{$stkaw_e}',
'{$almt_e}','{$hp_e}','{$pkrj_e}',{$penghasilan},'{$ekn_e}',
'{$pend_e}','{$spnd_e}',{$lat},{$lng},{$rid_e})";
$stmt = $conn; // dummy untuk cek execute
if ($conn->query($sql)) {
$new_id = (int)$conn->insert_id;
// Log
$uid = (int)($_POST['user_id'] ?? 0);
if ($uid) {
$l = $conn->prepare("INSERT INTO log_aktivitas (user_id,aksi,tabel,record_id,detail,ip) VALUES (?,?,?,?,?,?)");
$aksi='tambah_penduduk'; $tbl='penduduk'; $det="Tambah penduduk: $nama"; $ip=$_SERVER['REMOTE_ADDR']??'';
$l->bind_param("ississ",$uid,$aksi,$tbl,$new_id,$det,$ip);
$l->execute();
}
echo json_encode(["status"=>"success","id"=>$new_id]);
} else {
echo json_encode(["status"=>"error","msg"=>$conn->error]);
}
}
// ===== LAPORAN =====
elseif ($tipe === 'laporan') {
$nama_pelapor = trim($_POST['nama_pelapor'] ?? 'Anonim') ?: 'Anonim';
$deskripsi = trim($_POST['deskripsi'] ?? '');
$urgensi = $_POST['urgensi'] ?? 'sedang';
$lat = (float)($_POST['lat'] ?? 0);
$lng = (float)($_POST['lng'] ?? 0);
if (!$deskripsi) { echo json_encode(["status"=>"error","msg"=>"Deskripsi wajib diisi"]); exit; }
$stmt = $conn->prepare("INSERT INTO laporan (nama_pelapor,deskripsi,lat,lng,urgensi) VALUES (?,?,?,?,?)");
$stmt->bind_param("ssdds", $nama_pelapor,$deskripsi,$lat,$lng,$urgensi);
if ($stmt->execute()) {
echo json_encode(["status"=>"success","id"=>(int)$conn->insert_id]);
} else {
echo json_encode(["status"=>"error","msg"=>$stmt->error]);
}
$stmt->close();
}
// ===== BANTUAN =====
elseif ($tipe === 'bantuan') {
$pid = (int)($_POST['penduduk_id'] ?? 0);
$jid = (int)($_POST['jenis_bantuan_id'] ?? 0);
$src = $_POST['sumber_bantuan'] ?? '';
$tgl = $_POST['tanggal'] ?? date('Y-m-d');
$jml = (float)($_POST['jumlah'] ?? 0);
$cat = $_POST['catatan'] ?? '';
$stat = $_POST['status'] ?? 'direncanakan';
$stmt = $conn->prepare("INSERT INTO histori_bantuan (penduduk_id,jenis_bantuan_id,sumber_bantuan,tanggal,jumlah,catatan,status) VALUES (?,?,?,?,?,?,?)");
$stmt->bind_param("iissdss",$pid,$jid,$src,$tgl,$jml,$cat,$stat);
if ($stmt->execute()) {
echo json_encode(["status"=>"success","id"=>(int)$conn->insert_id]);
} else {
echo json_encode(["status"=>"error","msg"=>$stmt->error]);
}
$stmt->close();
}
// ===== KELUARGA =====
elseif ($tipe === 'keluarga') {
$no_kk = trim($_POST['no_kk'] ?? '');
$alamat = $_POST['alamat'] ?? '';
$lat = (float)($_POST['lat'] ?? 0);
$lng = (float)($_POST['lng'] ?? 0);
if (!$no_kk) { echo json_encode(["status"=>"error","msg"=>"No. KK wajib diisi"]); exit; }
$stmt = $conn->prepare("INSERT INTO keluarga (no_kk,alamat,lat,lng) VALUES (?,?,?,?)");
$stmt->bind_param("ssdd",$no_kk,$alamat,$lat,$lng);
if ($stmt->execute()) {
echo json_encode(["status"=>"success","id"=>(int)$conn->insert_id]);
} else {
echo json_encode(["status"=>"error","msg"=>$stmt->error]);
}
$stmt->close();
}
else {
http_response_code(400);
echo json_encode(["status"=>"error","msg"=>"Tipe tidak dikenal: $tipe"]);
}