Files
UAS_SIG/data-warga.php
T
2026-06-03 05:08:54 +00:00

458 lines
25 KiB
PHP

<?php
require_once 'koneksi.php';
cekLogin();
$page = 'warga';
$pageTitle = 'Data KPM';
$pageSubtitle = 'Keluarga Penerima Manfaat';
$filterStatus = $_GET['status'] ?? '';
$filterKondisi = $_GET['kondisi'] ?? '';
$filterPrioritas= $_GET['prioritas'] ?? '';
$cari = bersih($_GET['cari'] ?? '', $conn);
$where = "WHERE 1=1";
if ($filterStatus) $where .= " AND rm.status_bantuan='$filterStatus'";
if ($filterKondisi) $where .= " AND rm.kondisi_rumah='$filterKondisi'";
if ($filterPrioritas) $where .= " AND rm.prioritas=1";
if ($cari) $where .= " AND (rm.nama_kepala_keluarga LIKE '%$cari%' OR rm.nik LIKE '%$cari%' OR rm.kelurahan LIKE '%$cari%')";
$data = $conn->query("SELECT rm.*, u.nama_lengkap AS relawan FROM rumah_miskin rm LEFT JOIN users u ON rm.didata_oleh=u.id $where ORDER BY rm.prioritas DESC, rm.created_at DESC");
$total = $data->num_rows;
include 'includes/sidebar.php';
?>
<style>
.custom-header-wrapper {
display: flex !important;
justify-content: space-between !important;
align-items: center !important;
margin-bottom: 25px !important;
background: #ffffff !important;
padding: 20px 24px !important;
border-radius: 12px !important;
box-shadow: 0 1px 3px rgba(0,0,0,0.05) !important;
}
.detail-table {
width: 100%;
border-collapse: collapse;
margin-top: 10px;
}
.detail-table th, .detail-table td {
padding: 10px 12px;
text-align: left;
border-bottom: 1px solid #f1f5f9;
font-size: 13px;
}
.detail-table th {
color: #64748b;
font-weight: 600;
width: 40%;
background: #f8fafc;
}
.detail-table td {
color: #1e293b;
}
@media (max-width: 768px) {
.custom-header-wrapper {
flex-direction: column !important;
align-items: flex-start !important;
gap: 15px !important;
}
}
</style>
<div class="custom-header-wrapper">
<div>
<h2 style="margin: 0; font-size: 24px; color: #1e293b; font-weight: 700; display: flex; align-items: center; gap: 10px;">
Data KPM
</h2>
<p style="margin: 4px 0 0 0; color: #64748b; font-size: 14px;">
Ditemukan <strong style="color: var(--primary, #2563eb); font-weight: 600;"><?= $total ?></strong> data Keluarga Penerima Manfaat
</p>
</div>
<?php if (in_array($_SESSION['role'], ['admin','relawan'])): ?>
<button class="btn btn-primary" onclick="openModal('modalTambah')" style="display: flex; align-items: center; gap: 8px; padding: 10px 18px; font-weight: 600; border-radius: 8px; cursor: pointer;">
<i class="fa fa-plus"></i> Tambah KPM
</button>
<?php endif; ?>
</div>
<div class="card" style="margin-bottom:16px">
<div style="padding:14px 18px">
<form method="GET" style="display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end">
<div style="flex:2;min-width:180px">
<label style="font-size:11px;font-weight:600;color:var(--gray);display:block;margin-bottom:4px;text-transform:uppercase;letter-spacing:.5px">Cari</label>
<input class="form-control" name="cari" value="<?= htmlspecialchars($cari) ?>" placeholder="Nama, NIK, kelurahan...">
</div>
<div style="flex:1;min-width:130px">
<label style="font-size:11px;font-weight:600;color:var(--gray);display:block;margin-bottom:4px;text-transform:uppercase;letter-spacing:.5px">Status</label>
<select class="form-control" name="status">
<option value="">Semua</option>
<option value="Belum Terbantu" <?= $filterStatus==='Belum Terbantu'?'selected':'' ?>>Belum Terbantu</option>
<option value="Terjangkau" <?= $filterStatus==='Terjangkau'?'selected':'' ?>>Terjangkau</option>
<option value="Sudah Menerima" <?= $filterStatus==='Sudah Menerima'?'selected':'' ?>>Sudah Menerima</option>
</select>
</div>
<div style="flex:1;min-width:130px">
<label style="font-size:11px;font-weight:600;color:var(--gray);display:block;margin-bottom:4px;text-transform:uppercase;letter-spacing:.5px">Kondisi</label>
<select class="form-control" name="kondisi">
<option value="">Semua</option>
<option value="Layak" <?= $filterKondisi==='Layak'?'selected':'' ?>>Layak</option>
<option value="Tidak Layak" <?= $filterKondisi==='Tidak Layak'?'selected':'' ?>>Tidak Layak</option>
<option value="Sangat Tidak Layak" <?= $filterKondisi==='Sangat Tidak Layak'?'selected':'' ?>>Sangat Tidak Layak</option>
</select>
</div>
<div style="flex:1;min-width:120px">
<label style="font-size:11px;font-weight:600;color:var(--gray);display:block;margin-bottom:4px;text-transform:uppercase;letter-spacing:.5px">Prioritas</label>
<select class="form-control" name="prioritas">
<option value="">Semua</option>
<option value="1" <?= $filterPrioritas?'selected':'' ?>>Prioritas Bencana</option>
</select>
</div>
<div style="display:flex;gap:6px">
<button type="submit" class="btn btn-primary">Filter</button>
<a href="data-warga.php" class="btn btn-ghost"><i class="fa fa-rotate-left"></i></a>
</div>
</form>
</div>
</div>
<div class="card">
<div class="card-header">
<h3>Daftar KPM</h3>
<div style="display:flex;align-items:center;gap:8px">
<span class="badge badge-gray"><?= $total ?> data</span>
<a href="peta.php" class="btn btn-ghost btn-sm">Lihat di Peta</a>
</div>
</div>
<div class="tbl-wrap">
<table>
<thead>
<tr>
<th>#</th>
<th>Nama KK</th>
<th>Tgl Lahir / Usia</th>
<th>Tanggungan</th>
<th>Pendapatan</th>
<th>Kondisi Rumah</th>
<th>Wilayah</th>
<th>Status</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
<?php if ($total === 0): ?>
<tr>
<td colspan="9" style="text-align:center;padding:40px;color:var(--gray)">
<i class="fa fa-inbox" style="font-size:24px;display:block;margin-bottom:8px;color:var(--gray-md)"></i>
Tidak ada data ditemukan
</td>
</tr>
<?php else:
$no = 1;
while ($r = $data->fetch_assoc()):
$kc = ['Layak'=>'badge-green','Tidak Layak'=>'badge-orange','Sangat Tidak Layak'=>'badge-red'];
$sc = ['Terjangkau'=>'badge-green','Belum Terbantu'=>'badge-red','Sudah Menerima'=>'badge-blue'];
?>
<tr>
<td style="color:var(--gray);font-weight:600;font-size:12px"><?= $no++ ?></td>
<td>
<?php if ($r['prioritas']): ?>
<span class="badge badge-red" style="margin-bottom:4px;display:inline-block">Prioritas</span><br>
<?php endif; ?>
<div style="font-weight:600;font-size:13px"><?= htmlspecialchars($r['nama_kepala_keluarga']) ?></div>
<div style="font-size:11px;color:var(--gray)">NIK: <?= htmlspecialchars($r['nik'] ?: '-') ?></div>
</td>
<td>
<div style="font-size:13px"><?= $r['tanggal_lahir'] ? date('d/m/Y', strtotime($r['tanggal_lahir'])) : '-' ?></div>
<div style="font-size:11px;color:var(--gray)"><?= hitungUsia($r['tanggal_lahir']) ?></div>
</td>
<td style="text-align:center;font-weight:700"><?= $r['jumlah_tanggungan'] ?> jiwa</td>
<td>
<div style="font-weight:600;font-size:13px"><?= rupiah($r['pendapatan_bulanan']) ?></div>
<div style="font-size:11px;color:var(--gray)">/bulan</div>
</td>
<td><span class="badge <?= $kc[$r['kondisi_rumah']] ?? 'badge-gray' ?>"><?= $r['kondisi_rumah'] ?></span></td>
<td>
<div style="font-size:12px"><?= htmlspecialchars($r['rt_rw'] ?: '-') ?></div>
<div style="font-size:11px;color:var(--gray)"><?= htmlspecialchars($r['kelurahan'] ?: '') ?></div>
</td>
<td><span class="badge <?= $sc[$r['status_bantuan']] ?? 'badge-gray' ?>"><?= $r['status_bantuan'] ?></span></td>
<td>
<div style="display:flex;gap:4px">
<button class="btn btn-ghost btn-sm" onclick='lihatDetail(<?= json_encode($r) ?>)' title="Detail">
<i class="fa fa-eye" style="font-size:11px"></i>
</button>
<?php if (in_array($_SESSION['role'],['admin','relawan'])): ?>
<button class="btn btn-ghost btn-sm" onclick='editKpm(<?= json_encode($r) ?>)' title="Edit">
<i class="fa fa-pen" style="font-size:11px"></i>
</button>
<?php endif; ?>
<?php if (in_array($_SESSION['role'],['admin','pemerintah'])): ?>
<button class="btn btn-ghost btn-sm" onclick="tambahBantuan(<?= $r['id'] ?>, '<?= htmlspecialchars($r['nama_kepala_keluarga'],ENT_QUOTES) ?>')" title="Beri Bantuan" style="color:var(--green)">
<i class="fa fa-hand-holding-heart" style="font-size:11px"></i>
</button>
<?php endif; ?>
<?php if ($_SESSION['role']==='admin'): ?>
<button class="btn btn-ghost btn-sm" onclick="hapusKpm(<?= $r['id'] ?>)" title="Hapus" style="color:var(--red)">
<i class="fa fa-trash" style="font-size:11px"></i>
</button>
<?php endif; ?>
</div>
</td>
</tr>
<?php endwhile; endif; ?>
</tbody>
</table>
</div>
</div>
<div class="modal-overlay" id="modalTambah">
<div class="modal-box">
<div class="modal-head">
<h3>Tambah Data KPM</h3>
<button class="btn-close" onclick="closeModal('modalTambah')">&#x2715;</button>
</div>
<form method="POST" action="proses.php">
<input type="hidden" name="aksi" value="simpan_miskin_form">
<div class="modal-body">
<div class="form-grid-2">
<div class="form-group"><label>Nama Kepala Keluarga *</label><input class="form-control" name="nama_kk" required placeholder="Nama lengkap"></div>
<div class="form-group"><label>NIK</label><input class="form-control" name="nik" maxlength="16" placeholder="16 digit"></div>
</div>
<div class="form-grid-3">
<div class="form-group"><label>Tanggal Lahir</label><input class="form-control" type="date" name="tanggal_lahir"></div>
<div class="form-group"><label>Jenis Kelamin</label>
<select class="form-control" name="jenis_kelamin"><option>Laki-laki</option><option>Perempuan</option></select>
</div>
<div class="form-group"><label>Tanggungan (jiwa)</label><input class="form-control" type="number" name="jumlah_tanggungan" value="1" min="0"></div>
</div>
<div class="form-grid-2">
<div class="form-group"><label>Pendapatan/Bulan (Rp)</label><input class="form-control" type="number" name="pendapatan_bulanan" value="0" min="0"></div>
<div class="form-group"><label>Pekerjaan</label><input class="form-control" name="pekerjaan" placeholder="Buruh harian..."></div>
</div>
<div class="form-grid-2">
<div class="form-group"><label>Kondisi Rumah</label>
<select class="form-control" name="kondisi_rumah"><option>Tidak Layak</option><option>Sangat Tidak Layak</option><option>Layak</option></select>
</div>
<div class="form-group"><label>No. Telp</label><input class="form-control" name="no_telp" placeholder="08xx"></div>
</div>
<div class="form-grid-3">
<div class="form-group"><label>RT/RW</label><input class="form-control" name="rt_rw" placeholder="RT 01/RW 02"></div>
<div class="form-group"><label>Kelurahan</label><input class="form-control" name="kelurahan"></div>
<div class="form-group"><label>Kecamatan</label><input class="form-control" name="kecamatan"></div>
</div>
<div class="form-grid-2">
<div class="form-group"><label>Latitude *</label><input class="form-control" type="number" name="lat" step="any" required placeholder="-0.026300"></div>
<div class="form-group"><label>Longitude *</label><input class="form-control" type="number" name="lng" step="any" required placeholder="109.342500"></div>
</div>
<div class="form-group"><label>Keterangan</label><textarea class="form-control" name="keterangan" rows="2" placeholder="Catatan tambahan..."></textarea></div>
<div style="background:var(--yellow-lt);border-radius:var(--radius-sm);padding:9px 12px;font-size:12px;color:var(--yellow)">
Untuk koordinat lebih akurat, gunakan <strong>Peta Interaktif</strong>.
</div>
</div>
<div class="modal-foot">
<button type="button" class="btn btn-ghost" onclick="closeModal('modalTambah')">Batal</button>
<button type="submit" class="btn btn-primary">Simpan</button>
</div>
</form>
</div>
</div>
<div class="modal-overlay" id="modalEdit">
<div class="modal-box">
<div class="modal-head">
<h3>Edit Data KPM</h3>
<button class="btn-close" onclick="closeModal('modalEdit')">&#x2715;</button>
</div>
<form method="POST" action="proses.php">
<input type="hidden" name="aksi" value="edit_miskin">
<input type="hidden" name="id" id="e_id">
<div class="modal-body">
<div class="form-grid-2">
<div class="form-group"><label>Nama KK *</label><input class="form-control" name="nama_kk" id="e_nama" required></div>
<div class="form-group"><label>NIK</label><input class="form-control" name="nik" id="e_nik" maxlength="16"></div>
</div>
<div class="form-grid-3">
<div class="form-group"><label>Tanggal Lahir</label><input class="form-control" type="date" name="tanggal_lahir" id="e_tgl"></div>
<div class="form-group"><label>Jenis Kelamin</label>
<select class="form-control" name="jenis_kelamin" id="e_jk"><option>Laki-laki</option><option>Perempuan</option></select>
</div>
<div class="form-group"><label>Tanggungan</label><input class="form-control" type="number" name="jumlah_tanggungan" id="e_tang" min="0"></div>
</div>
<div class="form-grid-2">
<div class="form-group"><label>Pendapatan (Rp)</label><input class="form-control" type="number" name="pendapatan_bulanan" id="e_pend" min="0"></div>
<div class="form-group"><label>Pekerjaan</label><input class="form-control" name="pekerjaan" id="e_kerja"></div>
</div>
<div class="form-grid-2">
<div class="form-group"><label>Kondisi Rumah</label>
<select class="form-control" name="kondisi_rumah" id="e_kond"><option>Tidak Layak</option><option>Sangat Tidak Layak</option><option>Layak</option></select>
</div>
<div class="form-group"><label>Status Bantuan</label>
<select class="form-control" name="status_bantuan" id="e_stat"><option>Belum Terbantu</option><option>Terjangkau</option><option>Sudah Menerima</option></select>
</div>
</div>
<div class="form-grid-3">
<div class="form-group"><label>RT/RW</label><input class="form-control" name="rt_rw" id="e_rtrw"></div>
<div class="form-group"><label>Kelurahan</label><input class="form-control" name="kelurahan" id="e_kel"></div>
<div class="form-group"><label>Kecamatan</label><input class="form-control" name="kecamatan" id="e_kec"></div>
</div>
<div class="form-group"><label>No. Telp</label><input class="form-control" name="no_telp" id="e_telp"></div>
<div class="form-group"><label>Keterangan</label><textarea class="form-control" name="keterangan" id="e_ket" rows="2"></textarea></div>
</div>
<div class="modal-foot">
<button type="button" class="btn btn-ghost" onclick="closeModal('modalEdit')">Batal</button>
<button type="submit" class="btn btn-primary">Simpan Perubahan</button>
</div>
</form>
</div>
</div>
<div class="modal-overlay" id="modalDetail">
<div class="modal-box" style="max-width:500px">
<div class="modal-head">
<h3 id="d_judul">Detail KPM</h3>
<button class="btn-close" onclick="closeModal('modalDetail')">&#x2715;</button>
</div>
<div class="modal-body" id="d_body">
</div>
<div class="modal-foot">
<button type="button" class="btn btn-ghost" onclick="closeModal('modalDetail')">Tutup</button>
</div>
</div>
</div>
<div class="modal-overlay" id="modalBantuan">
<div class="modal-box" style="max-width:440px">
<div class="modal-head">
<h3>Catat Bantuan</h3>
<button class="btn-close" onclick="closeModal('modalBantuan')">&#x2715;</button>
</div>
<form method="POST" action="proses.php">
<input type="hidden" name="aksi" value="simpan_bantuan">
<input type="hidden" name="warga_id" id="b_warga_id">
<div class="modal-body">
<div id="b_nama_label" style="background:var(--green-lt, #dcfce7);border-radius:var(--radius-sm, 6px);padding:9px 12px;font-size:13px;font-weight:600;color:var(--green, #16a34a);margin-bottom:14px"></div>
<div class="form-group"><label>Jenis Bantuan *</label><input class="form-control" name="jenis_bantuan" required placeholder="Sembako, BPNT, Zakat..."></div>
<div class="form-grid-2">
<div class="form-group"><label>Jumlah / Nominal</label><input class="form-control" name="jumlah" placeholder="50kg beras / Rp500.000"></div>
<div class="form-group"><label>Tanggal *</label><input class="form-control" type="date" name="tanggal" required value="<?= date('Y-m-d') ?>"></div>
</div>
<div class="form-group"><label>Nama Petugas</label><input class="form-control" name="petugas" placeholder="Nama petugas penyalur"></div>
<div class="form-group"><label>Keterangan</label><textarea class="form-control" name="keterangan" rows="2" placeholder="Catatan tambahan..."></textarea></div>
</div>
<div class="modal-foot">
<button type="button" class="btn btn-ghost" onclick="closeModal('modalBantuan')">Batal</button>
<button type="submit" class="btn btn-success">Simpan</button>
</div>
</form>
</div>
</div>
<script>
function openModal(id) {
const modal = document.getElementById(id);
if(modal) {
modal.style.display = 'flex';
}
}
function closeModal(id) {
const modal = document.getElementById(id);
if(modal) {
modal.style.display = 'none';
}
}
// 1. Fungsi Tombol Lihat Detail (Membuat table rapi di dalam modal body)
function lihatDetail(data) {
document.getElementById('d_judul').innerText = "📋 Detail: " + data.nama_kepala_keluarga;
// Fungsi pembantu format rupiah sederhana di JS
const formatRupiah = (angka) => {
return 'Rp ' + parseInt(angka).toLocaleString('id-ID');
};
let html = `
<table class="detail-table">
<tr><th>Nama Kepala Keluarga</th><td>${data.nama_kepala_keluarga || '-'}</td></tr>
<tr><th>NIK</th><td>${data.nik || '-'}</td></tr>
<tr><th>Tanggal Lahir</th><td>${data.tanggal_lahir || '-'}</td></tr>
<tr><th>Jenis Kelamin</th><td>${data.jenis_kelamin || '-'}</td></tr>
<tr><th>Jumlah Tanggungan</th><td>${data.jumlah_tanggungan || 0} jiwa</td></tr>
<tr><th>Pendapatan Bulanan</th><td>${formatRupiah(data.pendapatan_bulanan || 0)}</td></tr>
<tr><th>Pekerjaan</th><td>${data.pekerjaan || '-'}</td></tr>
<tr><th>Kondisi Rumah</th><td><span class="badge">${data.kondisi_rumah || '-'}</span></td></tr>
<tr><th>Status Bantuan</th><td><span class="badge">${data.status_bantuan || '-'}</span></td></tr>
<tr><th>Alamat (RT/RW)</th><td>${data.rt_rw || '-'}</td></tr>
<tr><th>Kelurahan</th><td>${data.kelurahan || '-'}</td></tr>
<tr><th>Kecamatan</th><td>${data.kecamatan || '-'}</td></tr>
<tr><th>No. Telepon</th><td>${data.no_telp || '-'}</td></tr>
<tr><th>Koordinat</th><td>Lat: ${data.lat || '-'}, Lng: ${data.lng || '-'}</td></tr>
<tr><th>Didata Oleh</th><td>${data.relawan || 'Sistem / Admin'}</td></tr>
<tr><th>Keterangan</th><td>${data.keterangan || '-'}</td></tr>
</table>
`;
document.getElementById('d_body').innerHTML = html;
openModal('modalDetail');
}
// 2. Fungsi Tombol Edit (Mengisi form modal secara otomatis)
function editKpm(data) {
document.getElementById('e_id').value = data.id;
document.getElementById('e_nama').value = data.nama_kepala_keluarga;
document.getElementById('e_nik').value = data.nik;
document.getElementById('e_tgl').value = data.tanggal_lahir;
document.getElementById('e_jk').value = data.jenis_kelamin;
document.getElementById('e_tang').value = data.jumlah_tanggungan;
document.getElementById('e_pend').value = data.pendapatan_bulanan;
document.getElementById('e_kerja').value = data.pekerjaan;
document.getElementById('e_kond').value = data.kondisi_rumah;
document.getElementById('e_stat').value = data.status_bantuan;
document.getElementById('e_rtrw').value = data.rt_rw;
document.getElementById('e_kel').value = data.kelurahan;
document.getElementById('e_kec').value = data.kecamatan;
document.getElementById('e_telp').value = data.no_telp;
document.getElementById('e_ket').value = data.keterangan;
openModal('modalEdit');
}
// 3. Fungsi Tombol Beri Bantuan
function tambahBantuan(id, nama) {
document.getElementById('b_warga_id').value = id;
document.getElementById('b_nama_label').innerHTML = "<i class='fa fa-user'></i> Salurkan bantuan untuk: <strong>" + nama + "</strong>";
openModal('modalBantuan');
}
// 4. Fungsi Tombol Hapus KPM
function hapusKpm(id) {
if (confirm('Apakah Anda yakin ingin menghapus data Keluarga Penerima Manfaat (KPM) ini? Tindakan ini tidak bisa dibatalkan.')) {
const form = document.createElement('form');
form.method = 'POST';
form.action = 'proses.php';
form.innerHTML = `
<input type="hidden" name="aksi" value="hapus_miskin">
<input type="hidden" name="id" value="${id}">
`;
document.body.appendChild(form);
form.submit();
}
}
// Menutup modal otomatis jika area background gelap diklik
window.onclick = function(event) {
if (event.target.classList.contains('modal-overlay')) {
event.target.style.display = 'none';
}
}
</script>
<?php
include 'includes/footer.php';
?>