Initial commit

This commit is contained in:
cw
2026-06-11 12:30:23 +07:00
commit 2676f3a61c
70 changed files with 9867 additions and 0 deletions
+277
View File
@@ -0,0 +1,277 @@
<?php $umur = $warga['tanggal_lahir'] ? hitungUmur($warga['tanggal_lahir']) : 0; ?>
<?php ob_start(); ?>
<script>
document.addEventListener('DOMContentLoaded', () => {
const lat = <?= (float)$warga['lat'] ?>;
const lng = <?= (float)$warga['lng'] ?>;
if (lat && lng) {
const map = L.map('warga-detail-map').setView([lat,lng],16);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',{maxZoom:19}).addTo(map);
const color = '<?= warnaMiskin($warga['status_kemiskinan']) ?>';
L.circleMarker([lat,lng],{radius:12,fillColor:color,color:'#fff',weight:3,fillOpacity:0.9})
.bindPopup('<strong><?= addslashes($warga['nama']) ?></strong>').addTo(map).openPopup();
<?php if($warga['ri_lat'] && $warga['ri_lng']): ?>
GISMap.map = map;
GISMap.createRIMarker({lat:<?= (float)$warga['ri_lat'] ?>,lng:<?= (float)$warga['ri_lng'] ?>})
.bindPopup('<?= addslashes($warga['rumah_ibadah_nama']??'Rumah Ibadah') ?>').addTo(map);
<?php endif; ?>
}
});
</script>
<?php $extraJs = ob_get_clean(); ?>
<div style="display:flex;align-items:center;gap:12px;margin-bottom:20px">
<a href="<?= APP_URL ?>/verifikator/warga" class="btn btn-ghost btn-sm">← Kembali</a>
<h2 style="font-size:1.1rem;font-weight:700"><?= e($warga['nama']) ?></h2>
<?php $sc=['Miskin Ekstrem'=>'badge-red','Miskin'=>'badge-orange','Rentan Miskin'=>'badge-yellow']; ?>
<span class="badge <?= $sc[$warga['status_kemiskinan']]??'badge-gray' ?>"><?= e($warga['status_kemiskinan']) ?></span>
<?php if($warga['is_blind_spot']): ?><span class="badge badge-purple">⚠ Blind Spot</span><?php endif; ?>
<div style="margin-left:auto;display:flex;gap:8px">
<button class="btn btn-primary btn-sm" onclick="App.showModal('modal-edit')">✏️ Edit Data</button>
</div>
</div>
<div style="display:grid;grid-template-columns:1fr 340px;gap:20px">
<!-- KIRI -->
<div style="display:flex;flex-direction:column;gap:16px">
<!-- Skor Prioritas Card -->
<div class="card" style="border-left:4px solid <?= ['Tinggi'=>'#dc2626','Sedang'=>'#d97706','Rendah'=>'#16a34a'][$warga['level_prioritas']]??'#6b7280' ?>">
<div class="card-body">
<div style="display:flex;align-items:center;gap:20px">
<div style="text-align:center;min-width:90px">
<div style="font-size:2.5rem;font-weight:900;color:<?= ['Tinggi'=>'#dc2626','Sedang'=>'#d97706','Rendah'=>'#16a34a'][$warga['level_prioritas']]??'#6b7280' ?>"><?= $warga['skor_prioritas'] ?></div>
<div class="text-xs text-muted">Skor / 100</div>
</div>
<div style="flex:1">
<div class="priority-bar" style="height:10px;margin-bottom:8px">
<div class="priority-bar-fill <?= strtolower($warga['level_prioritas'])==='tinggi'?'high':(strtolower($warga['level_prioritas'])==='sedang'?'medium':'low') ?>"
style="width:<?= min(100,$warga['skor_prioritas']) ?>%"></div>
</div>
<div style="font-size:1rem;font-weight:700">Prioritas <?= e($warga['level_prioritas']) ?></div>
<div class="text-sm text-muted">Diperbarui otomatis berdasarkan data sosial ekonomi</div>
</div>
</div>
</div>
</div>
<!-- Data Pribadi -->
<div class="card">
<div class="card-header"><span class="card-icon">👤</span><h3>Data Pribadi</h3></div>
<div class="card-body">
<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:16px">
<?php $items = [
['NIK', $warga['nik']??'—'],
['Tempat Lahir', $warga['tempat_lahir']??'—'],
['Tanggal Lahir', $warga['tanggal_lahir'] ? formatTanggal($warga['tanggal_lahir'])." ($umur thn)" : '—'],
['Jenis Kelamin', $warga['jenis_kelamin']==='L'?'Laki-laki':'Perempuan'],
['Agama', $warga['agama']??'—'],
['No HP', $warga['no_hp']??'—'],
]; foreach($items as [$l,$v]): ?>
<div>
<div class="text-xs text-muted"><?= $l ?></div>
<div style="font-weight:500;font-size:0.875rem;margin-top:2px"><?= e($v) ?></div>
</div>
<?php endforeach; ?>
</div>
<hr class="divider">
<div>
<div class="text-xs text-muted">Alamat</div>
<div style="font-weight:500;margin-top:2px"><?= e($warga['alamat']) ?></div>
<div class="text-xs text-muted" style="margin-top:2px"><?= e($warga['kelurahan']) ?>, <?= e($warga['kecamatan']) ?></div>
</div>
<?php if($warga['foto']): ?>
<hr class="divider">
<img src="<?= uploadUrl($warga['foto']) ?>" style="width:100px;height:100px;object-fit:cover;border-radius:8px;border:1px solid var(--clr-border)">
<?php endif; ?>
</div>
</div>
<!-- Sosial Ekonomi -->
<div class="card">
<div class="card-header"><span class="card-icon">💼</span><h3>Data Sosial Ekonomi</h3></div>
<div class="card-body">
<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:16px">
<?php $items2 = [
['Pendidikan', $warga['pendidikan_terakhir']??'—'],
['Pekerjaan', $warga['pekerjaan']??'—'],
['Penghasilan', formatRupiah($warga['penghasilan_bulanan']??0).'/bln'],
['Tanggungan', ($warga['jumlah_tanggungan']??0).' orang'],
['Kondisi Rumah', $warga['kondisi_rumah']??'—'],
['Riwayat Penyakit', $warga['riwayat_penyakit']??'—'],
]; foreach($items2 as [$l,$v]): ?>
<div>
<div class="text-xs text-muted"><?= $l ?></div>
<div style="font-weight:500;font-size:0.875rem;margin-top:2px"><?= e($v) ?></div>
</div>
<?php endforeach; ?>
</div>
<hr class="divider">
<div style="display:flex;gap:12px;flex-wrap:wrap">
<?php if($warga['is_lansia']): ?>
<span class="badge badge-orange" style="font-size:0.8rem;padding:4px 10px">👴 Lansia</span>
<?php endif; ?>
<?php if($warga['is_disabilitas']): ?>
<span class="badge badge-blue" style="font-size:0.8rem;padding:4px 10px">♿ Disabilitas: <?= e($warga['disabilitas_jenis']??'') ?></span>
<?php endif; ?>
<?php if($warga['is_blind_spot']): ?>
<span class="badge badge-purple" style="font-size:0.8rem;padding:4px 10px">⚠ Blind Spot</span>
<?php endif; ?>
</div>
</div>
</div>
<!-- Histori Bantuan -->
<div class="card">
<div class="card-header"><span class="card-icon">📦</span><h3>Histori Bantuan (<?= count($bantuan) ?>)</h3></div>
<div class="card-body no-pad">
<?php if($bantuan): ?>
<div class="table-wrap">
<table>
<thead><tr><th>Tanggal</th><th>Kategori</th><th>Jumlah</th><th>Rumah Ibadah</th></tr></thead>
<tbody>
<?php foreach($bantuan as $b): ?>
<tr>
<td class="text-sm"><?= formatTanggal($b['tanggal_penyaluran']) ?></td>
<td><span class="badge badge-green"><?= e($b['kategori']) ?></span></td>
<td class="text-sm"><?= $b['jumlah'] ? ($b['satuan']==='rupiah'?formatRupiah($b['jumlah']):(number_format($b['jumlah']).' '.$b['satuan'])) : '—' ?></td>
<td class="text-sm"><?= e($b['rumah_ibadah']) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php else: ?>
<div class="empty-state" style="padding:24px"><div class="empty-state-icon">📭</div><p>Belum ada bantuan</p></div>
<?php endif; ?>
</div>
</div>
</div>
<!-- KANAN: Peta + RI Info -->
<div style="display:flex;flex-direction:column;gap:16px">
<div class="card">
<div class="card-header"><span class="card-icon">📍</span><h3>Lokasi</h3></div>
<div class="card-body no-pad">
<div id="warga-detail-map" style="height:260px"></div>
</div>
<div class="card-body">
<div class="text-xs text-muted">Koordinat</div>
<div style="font-family:monospace;font-size:0.8rem"><?= $warga['lat'] ?>, <?= $warga['lng'] ?></div>
</div>
</div>
<?php if($warga['rumah_ibadah_nama']): ?>
<div class="card" style="border:1px solid #bbf7d0">
<div class="card-header" style="background:#f0fdf4">
<span class="card-icon">⛪</span><h3>Rumah Ibadah Penanggung Jawab</h3>
</div>
<div class="card-body">
<div style="font-weight:700;font-size:1rem;color:var(--clr-success)"><?= e($warga['rumah_ibadah_nama']) ?></div>
<div class="text-sm text-muted" style="margin-top:4px">Ditetapkan otomatis berdasarkan Haversine Formula</div>
</div>
</div>
<?php endif; ?>
<div class="card">
<div class="card-header"><span class="card-icon">️</span><h3>Info Verifikasi</h3></div>
<div class="card-body">
<div class="text-xs text-muted">Tanggal Verifikasi</div>
<div class="text-sm"><?= $warga['tanggal_verifikasi'] ? formatTanggal($warga['tanggal_verifikasi']) : '—' ?></div>
</div>
</div>
</div>
</div>
<!-- MODAL EDIT (sederhana) -->
<div class="modal-overlay" id="modal-edit">
<div class="modal" style="max-width:680px">
<div class="modal-header">
<h3>✏️ Edit Data Warga</h3>
<button class="modal-close" onclick="App.hideModal('modal-edit')">✕</button>
</div>
<form method="POST" action="<?= APP_URL ?>/verifikator/warga/<?= $warga['id'] ?>/update" enctype="multipart/form-data">
<?= csrfField() ?>
<div class="modal-body">
<div class="form-row cols-2">
<div class="form-group"><label class="form-label">Nama <span class="required">*</span></label>
<input type="text" name="nama" class="form-control" value="<?= e($warga['nama']) ?>" required></div>
<div class="form-group"><label class="form-label">NIK</label>
<input type="text" name="nik" class="form-control" value="<?= e($warga['nik']??'') ?>" maxlength="16"></div>
</div>
<div class="form-row cols-2">
<div class="form-group"><label class="form-label">Tempat Lahir</label>
<input type="text" name="tempat_lahir" class="form-control" value="<?= e($warga['tempat_lahir']??'') ?>"></div>
<div class="form-group"><label class="form-label">Tgl Lahir</label>
<input type="date" name="tanggal_lahir" class="form-control" value="<?= $warga['tanggal_lahir']??'' ?>"></div>
</div>
<div class="form-row cols-3">
<div class="form-group"><label class="form-label">JK</label>
<select name="jenis_kelamin" class="form-control">
<option value="L" <?= $warga['jenis_kelamin']==='L'?'selected':'' ?>>Laki-laki</option>
<option value="P" <?= $warga['jenis_kelamin']==='P'?'selected':'' ?>>Perempuan</option>
</select></div>
<div class="form-group"><label class="form-label">Agama</label>
<select name="agama" class="form-control">
<?php foreach(['Islam','Kristen','Katolik','Hindu','Buddha','Konghucu','Lainnya'] as $ag): ?>
<option value="<?= $ag ?>" <?= ($warga['agama']??'')===$ag?'selected':'' ?>><?= $ag ?></option>
<?php endforeach; ?>
</select></div>
<div class="form-group"><label class="form-label">No HP</label>
<input type="text" name="no_hp" class="form-control" value="<?= e($warga['no_hp']??'') ?>"></div>
</div>
<div class="form-group"><label class="form-label">Alamat</label>
<input type="text" name="alamat" class="form-control" value="<?= e($warga['alamat']) ?>"></div>
<div class="form-row cols-2">
<div class="form-group"><label class="form-label">Penghasilan/Bln</label>
<input type="number" name="penghasilan_bulanan" class="form-control" value="<?= $warga['penghasilan_bulanan']??0 ?>"></div>
<div class="form-group"><label class="form-label">Tanggungan</label>
<input type="number" name="jumlah_tanggungan" class="form-control" value="<?= $warga['jumlah_tanggungan']??0 ?>"></div>
</div>
<div class="form-row cols-2">
<div class="form-group"><label class="form-label">Pendidikan</label>
<select name="pendidikan_terakhir" class="form-control">
<?php foreach(['Tidak Sekolah','SD','SMP','SMA','D3','S1','S2','S3'] as $p): ?>
<option value="<?= $p ?>" <?= $warga['pendidikan_terakhir']===$p?'selected':'' ?>><?= $p ?></option>
<?php endforeach; ?>
</select></div>
<div class="form-group"><label class="form-label">Pekerjaan</label>
<input type="text" name="pekerjaan" class="form-control" value="<?= e($warga['pekerjaan']??'') ?>" placeholder="Buruh, Petani, dll"></div>
</div>
<div class="form-row cols-2">
<div class="form-group"><label class="form-label">Kondisi Rumah</label>
<select name="kondisi_rumah" class="form-control">
<?php foreach(['Sangat Tidak Layak','Tidak Layak','Cukup Layak','Layak'] as $k): ?>
<option value="<?= $k ?>" <?= $warga['kondisi_rumah']===$k?'selected':'' ?>><?= $k ?></option>
<?php endforeach; ?>
</select></div>
</div>
<div class="form-group"><label class="form-label">Riwayat Penyakit</label>
<input type="text" name="riwayat_penyakit" class="form-control" value="<?= e($warga['riwayat_penyakit']??'') ?>"></div>
<div style="display:flex;gap:20px">
<label style="display:flex;align-items:center;gap:6px;cursor:pointer">
<input type="checkbox" name="is_lansia" value="1" <?= $warga['is_lansia']?'checked':'' ?>> Lansia</label>
<label style="display:flex;align-items:center;gap:6px;cursor:pointer">
<input type="checkbox" name="is_disabilitas" id="edit-is-dis" value="1" <?= $warga['is_disabilitas']?'checked':'' ?>
onchange="document.getElementById('edit-jenis-dis').style.display=this.checked?'block':'none'"> Disabilitas</label>
</div>
<div id="edit-jenis-dis" style="margin-top:10px;<?= $warga['is_disabilitas']?'':'display:none' ?>">
<div class="form-group"><label class="form-label">Jenis Disabilitas</label>
<input type="text" name="disabilitas_jenis" class="form-control" value="<?= e($warga['disabilitas_jenis']??'') ?>" placeholder="Tuna netra, tuna daksa, dll"></div>
</div>
<div class="form-row cols-2" style="margin-top:12px">
<div class="form-group"><label class="form-label">Latitude</label>
<input type="number" name="lat" class="form-control" value="<?= $warga['lat'] ?>" step="0.0000001"></div>
<div class="form-group"><label class="form-label">Longitude</label>
<input type="number" name="lng" class="form-control" value="<?= $warga['lng'] ?>" step="0.0000001"></div>
</div>
<div class="form-group"><label class="form-label">Foto Baru</label>
<input type="file" name="foto" class="form-control" accept="image/*"></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-ghost" onclick="App.hideModal('modal-edit')">Batal</button>
<button type="submit" class="btn btn-primary">Simpan Perubahan</button>
</div>
</form>
</div>
</div>