Files
WebGIS_PovertyMap/Leaflet2/api/penduduk_create.php
T

96 lines
3.4 KiB
PHP

<?php
require_once 'db_pdo.php';
require_once 'haversine_helper.php';
require_once 'penduduk_feature_helper.php';
require_once 'auth.php';
require_admin_login(true);
header('Content-Type: application/json');
$input = readPendudukInput();
if (!$input) {
echo json_encode(['success' => false, 'message' => 'Input tidak valid']);
exit;
}
try {
ensurePendudukDistanceColumns($pdo);
ensurePendudukFeatureSchema($pdo);
$input_lat = floatval($input['lat']);
$input_lng = floatval($input['lng']);
$coverage = calculatePendudukCoverage($pdo, $input_lat, $input_lng);
$buktiFile = saveUploadedEvidence('bukti_file');
$stmt = $pdo->prepare("
INSERT INTO penduduk_miskin
(kk_nama, kk_nik, alamat, lat, lng, ibadah_id, jarak_m, jarak_rute_m, is_blank_spot, status_bantuan, kategori_kebutuhan, deskripsi_kebutuhan, tindak_lanjut, kondisi_rumah, penghasilan, catatan_survei, bukti_file, jenis_bantuan, tanggal_bantuan)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
");
$stmt->execute([
$input['kk_nama'],
$input['kk_nik'] ?? null,
$input['alamat'],
$input['lat'],
$input['lng'],
$coverage['ibadah_id'],
$coverage['jarak_m'],
$coverage['jarak_rute_m'],
$coverage['is_blank_spot'],
$input['status_bantuan'] ?? 'Belum dibantu',
$input['kategori_kebutuhan'] ?? null,
$input['deskripsi_kebutuhan'] ?? null,
$input['tindak_lanjut'] ?? 'Belum disurvei',
$input['kondisi_rumah'] ?? null,
normalizeNonNegativeIntOrNull($input['penghasilan'] ?? '', 'Penghasilan'),
$input['catatan_survei'] ?? null,
$buktiFile,
$input['jenis_bantuan'] ?? null,
normalizeDateOrNull($input['tanggal_bantuan'] ?? null)
]);
$penduduk_id = $pdo->lastInsertId();
// 4. Insert anggota keluarga if exist
if (!empty($input['anggota']) && is_array($input['anggota'])) {
$stmtAnggota = $pdo->prepare("INSERT INTO anggota_keluarga (penduduk_id, nama, hubungan, umur, pekerjaan) VALUES (?, ?, ?, ?, ?)");
foreach ($input['anggota'] as $anggota) {
$stmtAnggota->execute([
$penduduk_id,
$anggota['nama'],
$anggota['hubungan'],
$anggota['umur'] ?? null,
$anggota['pekerjaan'] ?? null
]);
}
}
if (($input['status_bantuan'] ?? '') === 'Sudah dibantu' && !empty($input['jenis_bantuan'])) {
$stmtRiwayat = $pdo->prepare("
INSERT INTO riwayat_bantuan (penduduk_id, jenis_bantuan, tanggal_bantuan, pemberi_bantuan, catatan, bukti_file)
VALUES (?, ?, ?, ?, ?, ?)
");
$stmtRiwayat->execute([
$penduduk_id,
$input['jenis_bantuan'],
normalizeDateOrNull($input['tanggal_bantuan'] ?? null) ?? date('Y-m-d'),
'Admin',
'Dicatat dari form penduduk.',
$buktiFile,
]);
}
updatePendudukPriority($pdo, (int)$penduduk_id);
echo json_encode([
'success' => true,
'id' => $penduduk_id,
'ibadah_id' => $coverage['ibadah_id'],
'jarak_m' => $coverage['jarak_m'],
'jarak_rute_m' => $coverage['jarak_rute_m'],
'is_blank_spot' => $coverage['is_blank_spot']
]);
} catch (Exception $e) {
echo json_encode(['success' => false, 'message' => $e->getMessage()]);
}