feat: Implement Age Report, Dynamic Headers, KK Auto-Link, and Rebranding

- Added Age Classification Report (admin/laporan/laporan_klasifikasi.php)
- Updated Reports to use Dynamic Village Profile (tb_profil)
- Use 'nama_desa' column for village name
- Enhanced KK Scan to auto-link existing members by NIK
- Updated Index menu for Age Report (Admin & Kaur scope)
- Rebranded Footer to Wartana 2026
- Removed legacy 'Versi 2020' text
This commit is contained in:
2026-01-18 21:51:20 +08:00
parent 3935519d02
commit 7c71bdc1f9
10 changed files with 206 additions and 17 deletions

View File

@@ -166,7 +166,18 @@ window.addEventListener('load', function() {
<tr><td>Kabupaten</td><td>${d.kabupaten || '-'}</td></tr>
<tr><td>Provinsi</td><td>${d.provinsi || '-'}</td></tr>
</table>
<p class="mb-0 text-muted">Gunakan data ini?</p>
<hr>
<strong>Ditemukan ${d.anggota ? d.anggota.length : 0} Anggota:</strong>
<div style="max-height: 150px; overflow-y: auto; background: #f8f9fa; border: 1px solid #ddd; padding: 5px;">
${d.anggota && d.anggota.length > 0 ?
'<ul style="padding-left: 20px; margin-bottom: 0;">' +
d.anggota.map(m => `<li><b>${m.nama}</b><br><small>${m.nik} (${m.hubungan})</small></li>`).join('') +
'</ul>'
: '<i class="text-muted">Tidak ada anggota terdeteksi</i>'}
</div>
<p class="mb-0 text-muted mt-2">Gunakan data ini?</p>
</div>
`,
icon: 'question',
@@ -262,6 +273,9 @@ window.addEventListener('load', function() {
$query_simpan = mysqli_query($koneksi, $sql_simpan);
// Process Auto-Linking Members
$linked_count = 0;
$failed_count = 0;
if ($query_simpan && !empty($_POST['anggota_json'])) {
$id_kk_baru = mysqli_insert_id($koneksi);
$anggota_list = json_decode($_POST['anggota_json'], true);
@@ -280,6 +294,9 @@ window.addEventListener('load', function() {
// Insert into tb_anggota
$sql_add_ang = "INSERT INTO tb_anggota (id_kk, id_pend, hubungan) VALUES ('$id_kk_baru', '$id_pend_found', '$hub_mem')";
mysqli_query($koneksi, $sql_add_ang);
$linked_count++;
} else {
$failed_count++;
}
}
}
@@ -288,8 +305,13 @@ window.addEventListener('load', function() {
mysqli_close($koneksi);
if ($query_simpan) {
$msg_add = "";
if($linked_count > 0 || $failed_count > 0) {
$msg_add = "<br>Anggota Terhubung: <b>$linked_count</b><br>Tidak Ditemukan: <b>$failed_count</b>";
}
echo "<script>
Swal.fire({title: 'Tambah Data Berhasil',text: '',icon: 'success',confirmButtonText: 'OK'
Swal.fire({title: 'Tambah Data Berhasil',html: 'Data KK disimpan.$msg_add',icon: 'success',confirmButtonText: 'OK'
}).then((result) => {if (result.value){
window.location = 'index.php?page=data-kartu';
}

View File

@@ -0,0 +1,29 @@
<div class="card card-primary">
<div class="card-header">
<h3 class="card-title">
<i class="fa fa-file"></i> Laporan Klasifikasi Umur</h3>
</div>
<form action="./report/cetak_klasifikasi.php" method="post" enctype="multipart/form-data" target="_blank">
<div class="card-body">
<div class="form-group row">
<label class="col-sm-2 col-form-label">Kategori Umur</label>
<div class="col-sm-4">
<select name="kategori" id="kategori" class="form-control" required>
<option value="Semua">-- Semua Kategori --</option>
<option value="Balita">Balita (0-5 Tahun)</option>
<option value="Anak">Anak-anak (6-12 Tahun)</option>
<option value="Remaja">Remaja (13-17 Tahun)</option>
<option value="Dewasa">Dewasa (18-59 Tahun)</option>
<option value="Lansia">Lansia (> 60 Tahun)</option>
</select>
</div>
</div>
</div>
<div class="card-footer">
<button type="submit" class="btn btn-primary" name="Cetak">
<i class="fa fa-print"></i> Cetak Laporan</button>
</div>
</form>
</div>