Fix resident aid saving bug and implement Bantuan Darurat status

This commit is contained in:
fananazril
2026-06-13 13:06:30 +07:00
parent bd95f5581d
commit ac5fbeb72e
14 changed files with 55 additions and 20 deletions
+1 -1
View File
@@ -76,7 +76,7 @@ $ibadahList = $db->query("SELECT id, nama, jenis FROM rumah_ibadah ORDER BY nama
</code>
</div>
<div style="margin-top:10px;font-size:11px;color:var(--text3);">
⚠️ status_bantuan: belum / sudah / menunggu &nbsp;|&nbsp; Baris pertama bisa berupa header (akan dideteksi otomatis)
⚠️ status_bantuan: belum / sudah / menunggu / darurat &nbsp;|&nbsp; Baris pertama bisa berupa header (akan dideteksi otomatis)
</div>
<a href="<?= BASE_URL ?>/admin/template_penduduk.csv" class="btn btn-ghost btn-sm" style="margin-top:12px;" onclick="downloadTemplate('penduduk');return false;">
<i class="bi bi-download"></i> Download Template CSV
+11 -4
View File
@@ -21,8 +21,9 @@ $stats = [
'sudah' => (int)$db->query("SELECT COUNT(*) FROM penduduk_miskin WHERE status_bantuan='sudah'")->fetchColumn(),
'belum' => (int)$db->query("SELECT COUNT(*) FROM penduduk_miskin WHERE status_bantuan='belum'")->fetchColumn(),
'menunggu' => (int)$db->query("SELECT COUNT(*) FROM penduduk_miskin WHERE status_bantuan='menunggu'")->fetchColumn(),
'darurat' => (int)$db->query("SELECT COUNT(*) FROM penduduk_miskin WHERE status_bantuan='darurat'")->fetchColumn(),
'anggota' => (int)$db->query("SELECT SUM(jumlah_anggota) FROM penduduk_miskin")->fetchColumn(),
'nominal' => (float)$db->query("SELECT COALESCE(SUM(nominal_bantuan),0) FROM penduduk_miskin WHERE status_bantuan='sudah' AND nominal_bantuan IS NOT NULL")->fetchColumn(),
'nominal' => (float)$db->query("SELECT COALESCE(SUM(nominal_bantuan),0) FROM penduduk_miskin WHERE status_bantuan IN ('sudah','darurat') AND nominal_bantuan IS NOT NULL")->fetchColumn(),
];
// Per jenis ibadah
@@ -103,6 +104,11 @@ $trenBulan = $db->query("
<div class="stat-value"><?= $stats['menunggu'] ?></div>
<div class="stat-label">Menunggu Verif.</div>
</div>
<div class="stat-card purple" style="--purple:#a855f7">
<div class="stat-icon">🚨</div>
<div class="stat-value"><?= $stats['darurat'] ?></div>
<div class="stat-label">Bantuan Darurat (Musibah)</div>
</div>
<div class="stat-card blue">
<div class="stat-icon">👤</div>
<div class="stat-value"><?= number_format($stats['anggota'], 0, ',', '.') ?></div>
@@ -133,6 +139,7 @@ $trenBulan = $db->query("
<span style="color:#22c55e">● Sudah: <?= $stats['sudah'] ?></span>
<span style="color:#ef4444">● Belum: <?= $stats['belum'] ?></span>
<span style="color:#f59e0b">● Menunggu: <?= $stats['menunggu'] ?></span>
<span style="color:#a855f7">● Darurat: <?= $stats['darurat'] ?></span>
</div>
</div>
</div>
@@ -223,9 +230,9 @@ const cOpts = { responsive: true, maintainAspectRatio: false,
new Chart(document.getElementById('chart-status').getContext('2d'), {
type: 'doughnut',
data: {
labels: ['Sudah Dibantu','Belum Dibantu','Menunggu'],
datasets: [{ data: [<?= $stats['sudah'] ?>,<?= $stats['belum'] ?>,<?= $stats['menunggu'] ?>],
backgroundColor: ['rgba(34,197,94,0.8)','rgba(239,68,68,0.8)','rgba(245,158,11,0.8)'],
labels: ['Sudah Dibantu','Belum Dibantu','Menunggu','Bantuan Darurat'],
datasets: [{ data: [<?= $stats['sudah'] ?>,<?= $stats['belum'] ?>,<?= $stats['menunggu'] ?>,<?= $stats['darurat'] ?>],
backgroundColor: ['rgba(34,197,94,0.8)','rgba(239,68,68,0.8)','rgba(245,158,11,0.8)','rgba(168,85,247,0.8)'],
borderColor: ['#161b27'], borderWidth: 2 }]
},
options: { ...cOpts, cutout:'65%' }
+4 -2
View File
@@ -79,6 +79,7 @@ $ibadahList = $db->query("SELECT id, nama, jenis FROM rumah_ibadah ORDER BY nama
<option value="belum" <?= $filterSt==='belum'?'selected':'' ?>>❌ Belum Dibantu</option>
<option value="menunggu" <?= $filterSt==='menunggu'?'selected':'' ?>>⏳ Menunggu</option>
<option value="sudah" <?= $filterSt==='sudah'?'selected':'' ?>>✅ Sudah Dibantu</option>
<option value="darurat" <?= $filterSt==='darurat'?'selected':'' ?>>🚨 Bantuan Darurat</option>
</select>
</div>
<div>
@@ -223,6 +224,7 @@ $ibadahList = $db->query("SELECT id, nama, jenis FROM rumah_ibadah ORDER BY nama
<option value="belum">❌ Belum Dibantu</option>
<option value="menunggu">⏳ Menunggu Verifikasi</option>
<option value="sudah">✅ Sudah Dibantu</option>
<option value="darurat">🚨 Bantuan Darurat (Musibah)</option>
</select>
</div>
<div id="m-bantuan-fields" style="display:none;">
@@ -321,7 +323,7 @@ function fillMModal(data) {
function toggleMBantuan() {
const statusVal = document.getElementById('m-status').value;
document.getElementById('m-bantuan-fields').style.display =
(statusVal === 'sudah' || statusVal === 'menunggu') ? 'block' : 'none';
(statusVal === 'sudah' || statusVal === 'menunggu' || statusVal === 'darurat') ? 'block' : 'none';
}
async function loadMAnggota(pid) {
@@ -400,7 +402,7 @@ document.getElementById('btn-save-m').addEventListener('click', async function()
this.disabled = true; this.textContent = '⏳ Menyimpan...';
try {
const url = editId ? `${BASE}/api/penduduk_miskin.php?id=${editId}` : `${BASE}/api/penduduk_miskin.php`;
const resp = await fetch(url, { method: editId?'PUT':'POST', body: fd });
const resp = await fetch(url, { method: 'POST', body: fd });
const json = await resp.json();
if (json.success) { location.reload(); } else { Swal.fire('Error', json.message, 'error'); }
} catch { Swal.fire('Error','Gagal menyimpan','error'); }