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

Tanggal Warga Iuran Periode Jumlah Aksi
Blok /
Rp
Belum ada riwayat pembayaran.