Files
UAS_SIG/api/pemberdayaan.php
T
2026-06-02 03:14:08 +00:00

77 lines
3.8 KiB
PHP

<?php
require_once __DIR__ . '/_helpers.php';
api_require_login();
api_require_role(['admin','dinas','relawan','rumah_ibadah']);
$method = $_SERVER['REQUEST_METHOD'];
$user = current_user();
$role = current_role();
function allow_enum_value($value, array $allowed, string $default): string
{
$v = clean_string($value);
return in_array($v, $allowed, true) ? $v : $default;
}
if ($method === 'GET') {
$params = [];
$where = 'WHERE ka.mampu_bekerja = "Ya"';
if ($role === 'rumah_ibadah' && !empty($user['rumah_ibadah_id'])) {
$where .= ' AND k.rumah_ibadah_id = ?';
$params[] = (int)$user['rumah_ibadah_id'];
}
$sql = 'SELECT ka.*, k.nama_kk, k.alamat, k.kerentanan, k.status_bantuan, k.rumah_ibadah_id,
r.nama AS nama_rumah_ibadah,
p.id AS program_id, p.jenis_program, p.nama_program, p.penyelenggara, p.tanggal_mulai, p.status AS status_program, p.catatan AS catatan_program
FROM keluarga_anggota ka
JOIN keluarga k ON k.id = ka.keluarga_id
LEFT JOIN rumah_ibadah r ON r.id = k.rumah_ibadah_id
LEFT JOIN (
SELECT p1.* FROM pemberdayaan p1
JOIN (SELECT anggota_id, MAX(id) AS max_id FROM pemberdayaan GROUP BY anggota_id) latest ON latest.max_id = p1.id
) p ON p.anggota_id = ka.id
' . $where . '
ORDER BY FIELD(ka.status_pemberdayaan, "Layak Diberdayakan", "Belum Dinilai", "Dalam Program", "Mandiri", "Tidak Layak"), k.kerentanan ASC, ka.nama ASC';
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
json_response(['success' => true, 'data' => $stmt->fetchAll()]);
}
if ($method === 'POST') {
$data = get_json_input();
required_fields($data, ['anggota_id','jenis_program','nama_program']);
$anggotaId = clean_int($data['anggota_id']);
$stmtA = $pdo->prepare('SELECT ka.*, k.rumah_ibadah_id FROM keluarga_anggota ka JOIN keluarga k ON k.id = ka.keluarga_id WHERE ka.id = ? LIMIT 1');
$stmtA->execute([$anggotaId]);
$anggota = $stmtA->fetch();
if (!$anggota) json_response(['success' => false, 'message' => 'Anggota keluarga tidak ditemukan.'], 404);
if ($anggota['mampu_bekerja'] !== 'Ya') json_response(['success' => false, 'message' => 'Program pemberdayaan hanya untuk anggota yang masih mampu bekerja.'], 422);
if ($role === 'rumah_ibadah' && (int)$anggota['rumah_ibadah_id'] !== (int)($user['rumah_ibadah_id'] ?? 0)) {
json_response(['success' => false, 'message' => 'Pengurus hanya dapat menambah program untuk keluarga tanggungannya.'], 403);
}
$status = allow_enum_value($data['status'] ?? 'Direkomendasikan', ['Direkomendasikan','Berjalan','Selesai','Batal','Mandiri'], 'Direkomendasikan');
$stmt = $pdo->prepare('INSERT INTO pemberdayaan
(anggota_id, keluarga_id, jenis_program, nama_program, penyelenggara, tanggal_mulai, status, catatan, created_by)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)');
$stmt->execute([
$anggotaId,
(int)$anggota['keluarga_id'],
allow_enum_value($data['jenis_program'], ['Pelatihan Kerja','Modal Usaha','Pendampingan UMKM','Penempatan Kerja','Bantuan Alat Kerja','Lainnya'], 'Pelatihan Kerja'),
clean_string($data['nama_program']),
clean_string($data['penyelenggara'] ?? ''),
clean_string($data['tanggal_mulai'] ?? '') ?: null,
$status,
clean_string($data['catatan'] ?? ''),
$user['id']
]);
$statusAnggota = $status === 'Mandiri' ? 'Mandiri' : ($status === 'Berjalan' ? 'Dalam Program' : 'Layak Diberdayakan');
$pdo->prepare('UPDATE keluarga_anggota SET status_pemberdayaan = ? WHERE id = ?')->execute([$statusAnggota, $anggotaId]);
json_response(['success' => true, 'message' => 'Program pemberdayaan berhasil dicatat.'], 201);
}
json_response(['success' => false, 'message' => 'Method tidak didukung.'], 405);