diff --git a/konfirmasi-bantuan.php b/konfirmasi-bantuan.php new file mode 100644 index 0000000..3b81e9a --- /dev/null +++ b/konfirmasi-bantuan.php @@ -0,0 +1,290 @@ +query(" + SELECT bt.*, rm.nama_kepala_keluarga, rm.kelurahan, rm.rt_rw, + rm.kondisi_rumah, rm.no_telp AS telp_warga, + u.nama_lengkap AS input_oleh + FROM bantuan_tersalur bt + LEFT JOIN rumah_miskin rm ON bt.warga_id = rm.id + LEFT JOIN users u ON bt.disalurkan_oleh = u.id + $where + ORDER BY bt.created_at DESC +"); +$total = $data->num_rows; + +// Count per tab +$cMenunggu = $conn->query("SELECT COUNT(*) AS c FROM bantuan_tersalur WHERE status_konfirmasi='Menunggu'") ->fetch_assoc()['c']; +$cDikonfirmasi = $conn->query("SELECT COUNT(*) AS c FROM bantuan_tersalur WHERE status_konfirmasi='Dikonfirmasi'") ->fetch_assoc()['c']; +$cDitolak = $conn->query("SELECT COUNT(*) AS c FROM bantuan_tersalur WHERE status_konfirmasi='Ditolak'") ->fetch_assoc()['c']; + +include 'includes/sidebar.php'; +?> + + + +
+
+

+ 📋 Konfirmasi Penerimaan Bantuan +

+

+ Halaman khusus Relawan & Pengurus untuk verifikasi logistik di lapangan +

+
+
+ +
+ + ⏳ Menunggu + + + + ✅ Dikonfirmasi + + + + ❌ Ditolak / Masalah + + +
+ +
+
+

Penyaluran Status:

+ Transaksi +
+
+ + + + + + + + + + + + + + + + + + + + + + fetch_assoc()): ?> + + + + + + + + + + + + + + + + + +
#Penerima (KPM) & AlamatDetail Item BantuanTanggal InputDibuat OlehInfo VerifikasiVerifikasi Lapangan
+ + Tidak ada data bantuan dalam kategori ini +
+
+
+ , Kel. +
+ +
+ +
+ +
Jml:
+ +
Note:
+ +
+
+ Status: + + + +
+ +
+ Ket: +
+ +
+ Waktu: +
+
+
+ + +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/laporan.php b/laporan.php new file mode 100644 index 0000000..f6c3ec3 --- /dev/null +++ b/laporan.php @@ -0,0 +1,259 @@ +query("SELECT COUNT(*) AS c FROM rumah_miskin")->fetch_assoc()['c']; +$terjangkau = $conn->query("SELECT COUNT(*) AS c FROM rumah_miskin WHERE status_bantuan='Terjangkau'")->fetch_assoc()['c']; +$sudahTerima = $conn->query("SELECT COUNT(*) AS c FROM rumah_miskin WHERE status_bantuan='Sudah Menerima'")->fetch_assoc()['c']; +$blankSpot = $conn->query("SELECT COUNT(*) AS c FROM rumah_miskin WHERE status_bantuan='Belum Terbantu'")->fetch_assoc()['c']; +$prioritas = $conn->query("SELECT COUNT(*) AS c FROM rumah_miskin WHERE prioritas=1")->fetch_assoc()['c']; +$totalBantuan = $conn->query("SELECT COUNT(*) AS c FROM bantuan_tersalur")->fetch_assoc()['c']; +$totalIbadah = $conn->query("SELECT COUNT(*) AS c FROM rumah_ibadah")->fetch_assoc()['c']; +$totalTanggungan = $conn->query("SELECT SUM(jumlah_tanggungan) AS c FROM rumah_miskin")->fetch_assoc()['c'] ?? 0; +$avgPendapatan = $conn->query("SELECT AVG(pendapatan_bulanan) AS c FROM rumah_miskin")->fetch_assoc()['c'] ?? 0; +$pct = $totalKpm > 0 ? round(($terjangkau + $sudahTerima) / $totalKpm * 100) : 0; + +$byKondisi = $conn->query("SELECT kondisi_rumah, COUNT(*) AS c FROM rumah_miskin GROUP BY kondisi_rumah"); +$kondisiData = []; +while ($r = $byKondisi->fetch_assoc()) $kondisiData[$r['kondisi_rumah']] = $r['c']; + +$byKec = $conn->query("SELECT kecamatan, COUNT(*) AS c FROM rumah_miskin WHERE kecamatan IS NOT NULL AND kecamatan!='' GROUP BY kecamatan ORDER BY c DESC LIMIT 10"); + +$ibadahPerf = $conn->query("SELECT ri.nama_ibadah, ri.kuota_bantuan, ri.radius_m, COUNT(bt.id) AS total_salur FROM rumah_ibadah ri LEFT JOIN bantuan_tersalur bt ON ri.id=bt.ibadah_id GROUP BY ri.id ORDER BY total_salur DESC"); + +$pendDist = $conn->query("SELECT + SUM(CASE WHEN pendapatan_bulanan < 500000 THEN 1 ELSE 0 END) AS sangat_rendah, + SUM(CASE WHEN pendapatan_bulanan BETWEEN 500000 AND 1000000 THEN 1 ELSE 0 END) AS rendah, + SUM(CASE WHEN pendapatan_bulanan BETWEEN 1000001 AND 2000000 THEN 1 ELSE 0 END) AS menengah, + SUM(CASE WHEN pendapatan_bulanan > 2000000 THEN 1 ELSE 0 END) AS atas + FROM rumah_miskin")->fetch_assoc(); + +include 'includes/sidebar.php'; +?> + + + + +
+
+

Laporan & Statistik

+

Data per

+
+ +
+ + +
+ +
+
Total KPM Terdata
+
jiwa
+
+
+ +
%
+
Cakupan Bantuan
+
KK
+
+
+ +
+
Blank Spot
+
Belum terjangkau
+
+
+ +
+
Bantuan Tersalur
+
Transaksi tercatat
+
+
+
+ + +
+ + +
+

Distribusi Status KPM

+
+ [$blankSpot, '#dc2626'], + 'Terjangkau' => [$terjangkau, '#16a34a'], + 'Sudah Menerima' => [$sudahTerima, '#2563eb'], + 'Prioritas Bencana' => [$prioritas, '#ea580c'], + ]; + foreach ($statusArr as $label => [$val, $color]): + $p = $totalKpm > 0 ? round($val / $totalKpm * 100) : 0; + ?> +
+
+ + KK  % +
+
+
+
+
+ + +
+ '#dc2626','Tidak Layak'=>'#ea580c','Layak'=>'#16a34a'] as $k=>$c): ?> +
+
+
+
+ +
+
+
+ + +
+

Distribusi Pendapatan

+
+ [$pendDist['sangat_rendah'], '#dc2626'], + 'Rp500rb – 1jt' => [$pendDist['rendah'], '#ea580c'], + 'Rp1jt – 2jt' => [$pendDist['menengah'], '#d97706'], + '> Rp2 jt' => [$pendDist['atas'], '#16a34a'], + ]; + foreach ($pendArr as $label => [$val, $color]): + $pp = $totalKpm > 0 ? round($val / $totalKpm * 100) : 0; + ?> +
+
+ + +
+
+
+
+
+ + +
+
Rata-rata Pendapatan
+
+
per bulan / KK
+
+
+
+
+ + +
+ + +
+

Sebaran per Kecamatan

+
+ + + + + + num_rows === 0): ?> + + fetch_assoc()): + $p2 = $totalKpm > 0 ? round($r['c'] / $totalKpm * 100) : 0; + ?> + + + + + + + +
KecamatanKPMProporsi
Data wilayah belum diisi
+
+
+
+
+ % +
+
+
+
+ + +
+
+

Performa Rumah Ibadah

+ Lihat semua +
+
+ + + + + + num_rows === 0): ?> + + fetch_assoc()): ?> + + + + + + + + +
NamaKuotaRadiusBantuan
Belum ada data
KK mx
+
+
+
+ + \ No newline at end of file diff --git a/login.php b/login.php new file mode 100644 index 0000000..856ec1d --- /dev/null +++ b/login.php @@ -0,0 +1,182 @@ +query($query); + $user = $result->fetch_assoc(); + + // Menggunakan pencocokan plain-text / teks biasa sesuai permintaan Anda + if ($user && $password === $user['password']) { + $_SESSION['user_id'] = $user['id']; + $_SESSION['nama'] = $user['nama_lengkap']; + $_SESSION['role'] = $user['role']; + $_SESSION['username'] = $user['username']; + + $conn->query("UPDATE users SET last_login=NOW() WHERE id={$user['id']}"); + + // PENGALIHAN OTOMATIS KE 4 DASHBOARD BERBEDA + if ($_SESSION['role'] === 'admin') { + header('Location: dashboard-admin.php'); + } elseif ($_SESSION['role'] === 'pemerintah') { + header('Location: dashboard-pemerintah.php'); + } elseif ($_SESSION['role'] === 'pengurus') { + header('Location: dashboard-pengurus.php'); + } elseif ($_SESSION['role'] === 'relawan') { + header('Location: dashboard-relawan.php'); + } else { + header('Location: login.php'); + } + exit; + } else { + $error = 'Username/password salah atau akun Anda tidak aktif.'; + } + } else { + $error = 'Semua kolom formulir wajib diisi.'; + } +} +?> + + + + + + Login - WebGIS Poverty Mapping + + + + + + +
+
+ +
+

Sistem Pemetaan Terpadu Penanggulangan Kemiskinan

+

Akses masuk terbatas khusus bagi jajaran Aparatur Pemerintahan, Pengurus Internal Rumah Ibadah, serta Mitra Relawan Lapangan terverifikasi.

+
+ +
+ +
+ +
+
+ + + + \ No newline at end of file diff --git a/logout.php b/logout.php new file mode 100644 index 0000000..ba0c9e2 --- /dev/null +++ b/logout.php @@ -0,0 +1,6 @@ +query("SELECT * FROM users ORDER BY role ASC, nama_lengkap ASC"); +$total = $users->num_rows; + +include 'includes/sidebar.php'; +?> + + + +
+
+

+ 👥 Manajemen User +

+

+ Total akun terdaftar dalam sistem +

+
+ +
+ +query("SELECT role, COUNT(*) AS c FROM users GROUP BY role"); +while ($r = $rs->fetch_assoc()) $roleStats[$r['role']] = $r['c']; +?> +
+ ['🛡️','Administrator','#7c3aed','#ede9fe'], + 'relawan' => ['🙋','Relawan','#ea580c','#ffedd5'], + 'pengurus' => ['🕌','Pengurus Ibadah','#2563eb','#dbeafe'], + 'pemerintah' => ['🏛️','Pemerintah','#16a34a','#dcfce7'], + ]; + foreach ($roles as $key => [$ic, $lbl, $color, $bg]): + ?> +
+
+ +
+
+ + +
+
+ +
+ +
+

Daftar Akun

+
+ + + + + + data_seek(0); while ($r = $users->fetch_assoc()): ?> + 'Administrator','relawan'=>'Relawan','pengurus'=>'Pengurus Ibadah','pemerintah'=>'Pemerintah']; + $roleClass = ['admin'=>'badge-purple','relawan'=>'badge-orange','pengurus'=>'badge-blue','pemerintah'=>'badge-green']; + ?> + + + + + + + + + + + + +
#Nama LengkapUsernameEmailRoleStatusTerakhir LoginAksi
+
+
+ +
+ +
+
@ + + ● Aktif + + ● Nonaktif + + + Belum pernah' ?> + +
+ + + + + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file