96 lines
3.4 KiB
PHP
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()]);
|
|
}
|