prepare("SELECT id, nama_pelapor, nik, no_wa, deskripsi, latitude, longitude, status, alasan_tolak, created_at, tanggal_lahir, pendidikan, riwayat_penyakit, skor_penghasilan, skor_rumah, skor_makan, jumlah_kk FROM laporan_masyarakat WHERE id = ?"); $stmt->bind_param('i', $id); $stmt->execute(); $result = $stmt->get_result()->fetch_assoc(); if ($result) { $result['latitude'] = (float)$result['latitude']; $result['longitude'] = (float)$result['longitude']; echo json_encode($result); } else { http_response_code(404); echo json_encode(['error' => 'Laporan tidak ditemukan']); } } else { $result = $db->query("SELECT id, nama_pelapor, nik, no_wa, deskripsi, latitude, longitude, status, alasan_tolak, created_at, tanggal_lahir, pendidikan, riwayat_penyakit, skor_penghasilan, skor_rumah, skor_makan, jumlah_kk FROM laporan_masyarakat ORDER BY id DESC"); $rows = []; while ($row = $result->fetch_assoc()) { $row['latitude'] = (float)$row['latitude']; $row['longitude'] = (float)$row['longitude']; $rows[] = $row; } echo json_encode($rows); } $db->close(); exit(); } // ---- POST: Tambah laporan baru ---- if ($method === 'POST') { $input = json_decode(file_get_contents('php://input'), true); if (empty($input['nama_pelapor']) || empty($input['deskripsi']) || !isset($input['latitude']) || !isset($input['longitude'])) { http_response_code(400); echo json_encode(['error' => 'Data tidak lengkap. Field wajib: nama_pelapor, deskripsi, latitude, longitude']); exit(); } $nama = trim($input['nama_pelapor']); $nik = isset($input['nik']) && $input['nik'] ? trim($input['nik']) : null; $no_wa = isset($input['no_wa']) && $input['no_wa'] ? trim($input['no_wa']) : null; $desk = trim($input['deskripsi']); $lat = (float)$input['latitude']; $lng = (float)$input['longitude']; // New Fields $tgl_lahir = isset($input['tanggal_lahir']) && $input['tanggal_lahir'] ? $input['tanggal_lahir'] : null; $pdd = isset($input['pendidikan']) && $input['pendidikan'] ? $input['pendidikan'] : null; $pny = isset($input['riwayat_penyakit']) && $input['riwayat_penyakit'] ? $input['riwayat_penyakit'] : null; $sp = isset($input['skor_penghasilan']) ? (int)$input['skor_penghasilan'] : null; $sr = isset($input['skor_rumah']) ? (int)$input['skor_rumah'] : null; $sm = isset($input['skor_makan']) ? (int)$input['skor_makan'] : null; $jml = isset($input['jumlah_kk']) ? (int)$input['jumlah_kk'] : 1; // Validasi NIK 16 digit jika diisi if ($nik && strlen($nik) !== 16) { http_response_code(400); echo json_encode(['error' => 'NIK harus 16 digit']); exit(); } $db = getDB(); $stmt = $db->prepare("INSERT INTO laporan_masyarakat (nama_pelapor, nik, no_wa, deskripsi, latitude, longitude, tanggal_lahir, pendidikan, riwayat_penyakit, skor_penghasilan, skor_rumah, skor_makan, jumlah_kk) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); $stmt->bind_param('ssssddsssiiii', $nama, $nik, $no_wa, $desk, $lat, $lng, $tgl_lahir, $pdd, $pny, $sp, $sr, $sm, $jml); if ($stmt->execute()) { $new_id = $db->insert_id; http_response_code(201); echo json_encode([ 'message' => 'Laporan berhasil dikirim', 'id' => $new_id, 'status' => 'Pending' ]); } else { http_response_code(500); echo json_encode(['error' => 'Gagal menyimpan laporan: ' . $stmt->error]); } $db->close(); exit(); } // ---- PUT: Update status laporan ---- if ($method === 'PUT') { if (!$id) { http_response_code(400); echo json_encode(['error' => 'ID wajib disertakan untuk update']); exit(); } $input = json_decode(file_get_contents('php://input'), true); if (empty($input['status'])) { http_response_code(400); echo json_encode(['error' => 'Status wajib diisi (Pending/Diproses/Diverifikasi/Ditolak/Selesai)']); exit(); } $status = $input['status']; $action = isset($input['action']) ? $input['action'] : null; $alasan_tolak = isset($input['alasan_tolak']) ? trim($input['alasan_tolak']) : null; $db = getDB(); // === VERIFIKASI: Konversi laporan menjadi data kemiskinan resmi === if ($action === 'verify' && $status === 'Diverifikasi') { // Ambil data laporan dulu $stmtGet = $db->prepare("SELECT * FROM laporan_masyarakat WHERE id = ?"); $stmtGet->bind_param('i', $id); $stmtGet->execute(); $laporan = $stmtGet->get_result()->fetch_assoc(); if (!$laporan) { http_response_code(404); echo json_encode(['error' => 'Laporan tidak ditemukan']); $db->close(); exit(); } $db->begin_transaction(); try { // Hitung kategori dari skor (sama dengan logika frontend) $sp = (int)$laporan['skor_penghasilan']; $sr = (int)$laporan['skor_rumah']; $sm = (int)$laporan['skor_makan']; $total_skor = $sp + $sr + $sm; $kategori = 'Miskin'; if ($total_skor >= 7) { $kategori = 'Sangat Miskin'; } else if ($total_skor >= 4) { $kategori = 'Miskin'; } else { $kategori = 'Hampir Miskin'; } // 1. Masukkan ke data_kemiskinan sebagai data resmi $stmtInsert = $db->prepare( "INSERT INTO data_kemiskinan (nama_kk, nik, alamat, latitude, longitude, kategori, status_bantuan, tanggal_lahir, pendidikan, riwayat_penyakit, skor_penghasilan, skor_rumah, skor_makan, jumlah_kk) VALUES (?, ?, ?, ?, ?, ?, 'Belum', ?, ?, ?, ?, ?, ?, ?)" ); $alamat = $laporan['deskripsi']; // Use deskripsi directly as address/notes $stmtInsert->bind_param('sssddssssiiii', $laporan['nama_pelapor'], $laporan['nik'], $alamat, $laporan['latitude'], $laporan['longitude'], $kategori, $laporan['tanggal_lahir'], $laporan['pendidikan'], $laporan['riwayat_penyakit'], $laporan['skor_penghasilan'], $laporan['skor_rumah'], $laporan['skor_makan'], $laporan['jumlah_kk'] ); $stmtInsert->execute(); $new_kemiskinan_id = $db->insert_id; // 2. Update status laporan menjadi Diverifikasi $stmtUpdate = $db->prepare("UPDATE laporan_masyarakat SET status = 'Diverifikasi' WHERE id = ?"); $stmtUpdate->bind_param('i', $id); $stmtUpdate->execute(); $db->commit(); echo json_encode([ 'message' => 'Laporan diverifikasi dan data kemiskinan resmi telah dibuat', 'id_kemiskinan' => $new_kemiskinan_id ]); } catch (Exception $e) { $db->rollback(); http_response_code(500); echo json_encode(['error' => 'Gagal memverifikasi: ' . $e->getMessage()]); } $db->close(); exit(); } // === TOLAK: Update status + alasan === if ($status === 'Ditolak') { $stmt = $db->prepare("UPDATE laporan_masyarakat SET status = ?, alasan_tolak = ? WHERE id = ?"); $stmt->bind_param('ssi', $status, $alasan_tolak, $id); } else { // === Update status biasa === $stmt = $db->prepare("UPDATE laporan_masyarakat SET status = ? WHERE id = ?"); $stmt->bind_param('si', $status, $id); } if ($stmt->execute()) { if ($stmt->affected_rows > 0) { echo json_encode(['message' => 'Status laporan berhasil diupdate']); } else { http_response_code(404); echo json_encode(['error' => 'Laporan tidak ditemukan atau tidak ada perubahan']); } } else { http_response_code(500); echo json_encode(['error' => 'Gagal mengupdate laporan']); } $db->close(); exit(); } ?>