+
+

Aplikasi SiWarga

+ +
diff --git a/login.php b/login.php new file mode 100644 index 0000000..73614e0 --- /dev/null +++ b/login.php @@ -0,0 +1,122 @@ +prepare("SELECT * FROM users WHERE username = ?"); + $stmt->execute([$username]); + $user = $stmt->fetch(); + + if ($user && password_verify($password, $user['password'])) { + $_SESSION['user_id'] = $user['id']; + $_SESSION['username'] = $user['username']; + $_SESSION['nama_lengkap'] = $user['nama_lengkap']; + $_SESSION['role'] = $user['role']; + + header('Location: index.php'); + exit; + } else { + $error = 'Username atau password salah.'; + } + } catch (PDOException $e) { + $error = 'Terjadi kesalahan sistem.'; + } + } else { + $error = 'Silakan isi username dan password.'; + } +} +?> + + + + + + Login SiWarga - Aplikasi Administrasi RT/RW + + + + + +
+ + + + + + +
+
+ + +
+
+ + +
+
+
+ Gunakan admin / password123 untuk demo. +
+
+ +
+
+ + diff --git a/logout.php b/logout.php new file mode 100644 index 0000000..37bc5ab --- /dev/null +++ b/logout.php @@ -0,0 +1,5 @@ +prepare("DELETE FROM pembayaran WHERE id = ?")->execute([$id]); + $message = '
Catatan pembayaran berhasil dihapus.
'; +} + +// Handle Add +if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['save_pembayaran'])) { + $warga_id = $_POST['warga_id']; + $jenis_iuran_id = $_POST['jenis_iuran_id']; + $periode_awal = $_POST['periode_awal']; // Format YYYY-MM + $jumlah_bulan = (int)$_POST['jumlah_bulan']; + $nominal = (float)$_POST['nominal']; + $tanggal_bayar = $_POST['tanggal_bayar']; + $catatan = $_POST['catatan']; + + try { + $db->beginTransaction(); + + $current_periode = $periode_awal; + for ($i = 0; $i < $jumlah_bulan; $i++) { + // Check if already paid + $check = $db->prepare("SELECT id FROM pembayaran WHERE warga_id=? AND jenis_iuran_id=? AND periode=?"); + $check->execute([$warga_id, $jenis_iuran_id, $current_periode]); + + if ($check->fetch()) { + throw new Exception("Periode $current_periode sudah pernah dibayar untuk warga ini."); + } + + $stmt = $db->prepare("INSERT INTO pembayaran (warga_id, jenis_iuran_id, periode, jumlah, tanggal_bayar, catatan) VALUES (?, ?, ?, ?, ?, ?)"); + $stmt->execute([$warga_id, $jenis_iuran_id, $current_periode, $nominal, $tanggal_bayar, $catatan]); + + // Advance to next month + $current_periode = date('Y-m', strtotime($current_periode . " +1 month")); + } + + $db->commit(); + $message = '
Pembayaran untuk '.$jumlah_bulan.' periode berhasil dicatat.
'; + } catch (Exception $e) { + $db->rollBack(); + $message = '
Gagal: ' . $e->getMessage() . '
'; + } +} + +// Fetch lists +$warga_list = $db->query("SELECT id, nama, blok, nomor_rumah FROM warga WHERE status='aktif' ORDER BY nama ASC")->fetchAll(); +$iuran_list = $db->query("SELECT * FROM jenis_iuran ORDER BY nama ASC")->fetchAll(); + +// Pagination or Limit for history +$history = $db->query(" + SELECT p.*, w.nama as nama_warga, w.blok, w.nomor_rumah, j.nama as nama_iuran + FROM pembayaran p + JOIN warga w ON p.warga_id = w.id + JOIN jenis_iuran j ON p.jenis_iuran_id = j.id + ORDER BY p.tanggal_bayar DESC, p.id DESC + LIMIT 100 +")->fetchAll(); +?> + +
+

Pembayaran Iuran

+ +
+ + + +
+
+

Riwayat Pembayaran Terbaru

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TanggalWargaIuranPeriodeJumlahAksi
+
+
Blok /
+
Rp + + + +
Belum ada riwayat pembayaran.
+
+
+ + + + + + + diff --git a/pengeluaran.php b/pengeluaran.php new file mode 100644 index 0000000..6e3fd43 --- /dev/null +++ b/pengeluaran.php @@ -0,0 +1,134 @@ +prepare("DELETE FROM pengeluaran WHERE id = ?")->execute([$id]); + $message = '
Catatan pengeluaran berhasil dihapus.
'; +} + +// Handle Add +if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['save_pengeluaran'])) { + $jenis_iuran_id = $_POST['jenis_iuran_id'] ?: null; + $kategori = $_POST['kategori']; + $jumlah = $_POST['jumlah']; + $tanggal = $_POST['tanggal']; + $keterangan = $_POST['keterangan']; + + $stmt = $db->prepare("INSERT INTO pengeluaran (jenis_iuran_id, kategori, jumlah, tanggal, keterangan) VALUES (?, ?, ?, ?, ?)"); + $stmt->execute([$jenis_iuran_id, $kategori, $jumlah, $tanggal, $keterangan]); + $message = '
Pengeluaran berhasil dicatat.
'; +} + +// Fetch lists +$iuran_list = $db->query("SELECT * FROM jenis_iuran ORDER BY nama ASC")->fetchAll(); +$pengeluaran_list = $db->query(" + SELECT e.*, j.nama as nama_iuran + FROM pengeluaran e + LEFT JOIN jenis_iuran j ON e.jenis_iuran_id = j.id + ORDER BY e.tanggal DESC, e.id DESC +")->fetchAll(); +?> + +
+

Pengeluaran Kas

+ +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
TanggalKategori / KeteranganSumber DanaJumlahAksi
+
+
+
+ + Iuran: + + Kas Umum + + -Rp + + + +
Belum ada data pengeluaran.
+
+
+ + + + + diff --git a/pengurus.php b/pengurus.php new file mode 100644 index 0000000..0aea76c --- /dev/null +++ b/pengurus.php @@ -0,0 +1,151 @@ +prepare("DELETE FROM pengurus WHERE id = ?")->execute([$id]); + $message = '
Data pengurus berhasil dihapus.
'; +} + +// Handle Add/Edit +if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['save_pengurus'])) { + $id = $_POST['id'] ?? null; + $nama = $_POST['nama']; + $jabatan = $_POST['jabatan']; + $telepon = $_POST['telepon']; + $urutan = (int)$_POST['urutan']; + + if ($id) { + $stmt = $db->prepare("UPDATE pengurus SET nama=?, jabatan=?, telepon=?, urutan=? WHERE id=?"); + $stmt->execute([$nama, $jabatan, $telepon, $urutan, $id]); + $message = '
Data pengurus berhasil diperbarui.
'; + } else { + $stmt = $db->prepare("INSERT INTO pengurus (nama, jabatan, telepon, urutan) VALUES (?, ?, ?, ?)"); + $stmt->execute([$nama, $jabatan, $telepon, $urutan]); + $message = '
Pengurus baru berhasil ditambahkan.
'; + } +} + +$pengurus_list = $db->query("SELECT * FROM pengurus ORDER BY urutan ASC")->fetchAll(); +?> + +
+

Struktur Kepengurusan RT

+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
UrutanJabatanNamaTeleponAksi
+ + + + +
Belum ada data pengurus.
+
+
+
+
+
+
Informasi
+

Gunakan urutan untuk mengatur tampilan pengurus di Dashboard. Angka lebih kecil akan muncul lebih atas.

+

Contoh: Ketua RT (1), Sekretaris (2), Bendahara (3).

+
+
+
+ + + + + + + diff --git a/users.php b/users.php new file mode 100644 index 0000000..bed14c2 --- /dev/null +++ b/users.php @@ -0,0 +1,172 @@ +Akses ditolak. Hanya Administrator yang dapat mengakses halaman ini.