38457-vm/index.php
Flatlogic Bot 4e3818aac9 SiWarga
2026-02-15 18:49:39 +00:00

153 lines
6.5 KiB
PHP

<?php
require_once __DIR__ . '/layout_header.php';
// Fetch stats
$db = db();
$total_warga = $db->query("SELECT COUNT(*) FROM warga WHERE status = 'aktif'")->fetchColumn();
$total_jenis_iuran = $db->query("SELECT COUNT(*) FROM jenis_iuran")->fetchColumn();
$total_pemasukan = $db->query("SELECT SUM(jumlah) FROM pembayaran")->fetchColumn() ?: 0;
$total_pengeluaran = $db->query("SELECT SUM(jumlah) FROM pengeluaran")->fetchColumn() ?: 0;
$saldo = $total_pemasukan - $total_pengeluaran;
// Recent payments
$recent_payments = $db->query("
SELECT p.*, w.nama as nama_warga, 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 LIMIT 5
")->fetchAll();
// Get Pengurus
$pengurus = $db->query("SELECT * FROM pengurus ORDER BY urutan ASC")->fetchAll();
?>
<div class="top-bar">
<h1 class="h3 fw-bold m-0">Dashboard</h1>
<div class="text-muted"><?= date('d F Y') ?></div>
</div>
<div class="row g-4 mb-4">
<div class="col-md-3">
<div class="card stats-card">
<span class="label">Total Warga Aktif</span>
<span class="value"><?= number_format($total_warga) ?></span>
</div>
</div>
<div class="col-md-3">
<div class="card stats-card">
<span class="label">Saldo Kas (Total)</span>
<span class="value text-success">Rp <?= number_format($saldo, 0, ',', '.') ?></span>
</div>
</div>
<div class="col-md-3">
<div class="card stats-card">
<span class="label">Total Pemasukan</span>
<span class="value text-primary">Rp <?= number_format($total_pemasukan, 0, ',', '.') ?></span>
</div>
</div>
<div class="col-md-3">
<div class="card stats-card">
<span class="label">Total Pengeluaran</span>
<span class="value text-danger">Rp <?= number_format($total_pengeluaran, 0, ',', '.') ?></span>
</div>
</div>
</div>
<div class="row g-4">
<div class="col-md-8">
<div class="card">
<div class="d-flex justify-content-between align-items-center mb-4">
<h2 class="h5 fw-bold m-0">Pembayaran Terbaru</h2>
<a href="/pembayaran.php" class="btn btn-sm btn-outline-primary">Lihat Semua</a>
</div>
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Warga</th>
<th>Iuran</th>
<th>Periode</th>
<th>Jumlah</th>
<th>Tanggal</th>
</tr>
</thead>
<tbody>
<?php if (empty($recent_payments)): ?>
<tr>
<td colspan="5" class="text-center py-4 text-muted">Belum ada data pembayaran.</td>
</tr>
<?php else: ?>
<?php foreach ($recent_payments as $p): ?>
<tr>
<td><?= htmlspecialchars($p['nama_warga']) ?></td>
<td><?= htmlspecialchars($p['nama_iuran']) ?></td>
<td><?= $p['periode'] ?></td>
<td>Rp <?= number_format($p['jumlah'], 0, ',', '.') ?></td>
<td><?= date('d/m/Y', strtotime($p['tanggal_bayar'])) ?></td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card mb-4">
<h2 class="h5 fw-bold mb-4">Struktur Pengurus</h2>
<?php if (empty($pengurus)): ?>
<p class="text-muted small">Belum ada data pengurus.</p>
<?php else: ?>
<ul class="list-unstyled mb-0">
<?php foreach ($pengurus as $pg): ?>
<li class="mb-3 d-flex align-items-center gap-3">
<div class="bg-light rounded-circle p-2" style="width: 40px; height: 40px; display: flex; align-items: center; justify-content: center;">
<i class="bi bi-person"></i>
</div>
<div>
<div class="fw-bold"><?= htmlspecialchars($pg['jabatan']) ?></div>
<div class="text-muted small"><?= htmlspecialchars($pg['nama']) ?></div>
</div>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</div>
<div class="card">
<h2 class="h5 fw-bold mb-4">Ringkasan per Iuran</h2>
<?php
$iuran_stats = $db->query("
SELECT j.nama, j.id,
(SELECT SUM(p.jumlah) FROM pembayaran p WHERE p.jenis_iuran_id = j.id) as masuk,
(SELECT SUM(e.jumlah) FROM pengeluaran e WHERE e.jenis_iuran_id = j.id) as keluar
FROM jenis_iuran j
")->fetchAll();
?>
<?php foreach ($iuran_stats as $is): ?>
<?php
$masuk = $is['masuk'] ?: 0;
$keluar = $is['keluar'] ?: 0;
$saldo_iuran = $masuk - $keluar;
?>
<div class="mb-3 pb-3 border-bottom last-child-no-border">
<div class="d-flex justify-content-between mb-1">
<span class="fw-medium small"><?= htmlspecialchars($is['nama']) ?></span>
<span class="fw-bold small">Rp <?= number_format($saldo_iuran, 0, ',', '.') ?></span>
</div>
<div class="progress mb-1" style="height: 4px;">
<?php
$percent = $masuk > 0 ? min(100, ($saldo_iuran / $masuk) * 100) : 0;
if ($saldo_iuran < 0) $percent = 0;
?>
<div class="progress-bar bg-primary" role="progressbar" style="width: <?= $percent ?>%"></div>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
<?php require_once __DIR__ . '/layout_footer.php'; ?>