Upload files to "/"

This commit is contained in:
2026-06-03 05:09:24 +00:00
parent c34be3fcff
commit 87a62be146
5 changed files with 1101 additions and 0 deletions
+259
View File
@@ -0,0 +1,259 @@
<?php
require_once 'koneksi.php';
cekLogin();
$page = 'laporan';
$pageTitle = 'Laporan & Statistik';
$pageSubtitle= 'Analisis Data Kemiskinan';
$totalKpm = $conn->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';
?>
<style>
.lp-grid4 { display:grid; grid-template-columns:repeat(4,1fr); gap:12px; margin-bottom:16px; }
.lp-grid21 { display:grid; grid-template-columns:2fr 1fr; gap:14px; margin-bottom:14px; }
.lp-grid11 { display:grid; grid-template-columns:1fr 1fr; gap:14px; margin-bottom:14px; }
/* Stat box sederhana */
.lp-stat {
background:#fff; border:1px solid var(--gray-md); border-radius:var(--radius);
padding:16px 18px;
}
.lp-stat .lp-num { font-size:26px; font-weight:800; line-height:1; margin-bottom:3px; }
.lp-stat .lp-lbl { font-size:11px; color:var(--gray); font-weight:500; }
.lp-stat .lp-sub { font-size:11px; font-weight:600; margin-top:3px; }
.lp-stat .lp-line { height:2px; border-radius:99px; margin-top:12px; }
/* Bar label */
.bar-row { margin-bottom:11px; }
.bar-row-top { display:flex; justify-content:space-between; font-size:12px; font-weight:600; margin-bottom:4px; }
.bar-track { height:8px; background:var(--gray-lt); border-radius:99px; overflow:hidden; }
.bar-fill { height:100%; border-radius:99px; transition:.5s; }
/* Kondisi kotak */
.kond-box { text-align:center; padding:12px 8px; background:var(--gray-lt); border-radius:var(--radius-sm); }
.kond-box .knum { font-size:22px; font-weight:800; line-height:1; }
.kond-box .klbl { font-size:10px; color:var(--gray); margin-top:3px; }
/* Avg box */
.avg-box {
text-align:center; padding:12px; background:var(--yellow-lt);
border-radius:var(--radius-sm); margin-top:12px;
}
.avg-box .a-lbl { font-size:11px; color:var(--yellow); font-weight:600; }
.avg-box .a-num { font-size:18px; font-weight:800; color:var(--yellow); margin-top:2px; }
.avg-box .a-sub { font-size:10px; color:var(--yellow); margin-top:1px; }
@media(max-width:900px){
.lp-grid4 { grid-template-columns:repeat(2,1fr); }
.lp-grid21 { grid-template-columns:1fr; }
.lp-grid11 { grid-template-columns:1fr; }
}
@media print{
#sidebar,#topbar,.btn { display:none!important; }
#main-wrap { margin-left:0!important; }
.card { break-inside:avoid; }
}
</style>
<!-- Header -->
<div class="page-head" style="margin-bottom:16px">
<div>
<h2>Laporan & Statistik</h2>
<p>Data per <?= date('d F Y') ?></p>
</div>
<button class="btn btn-ghost btn-sm" onclick="window.print()">
<i class="fa fa-print"></i> Cetak
</button>
</div>
<!-- BARIS 1 — 4 stat cards, semua clickable -->
<div class="lp-grid4">
<a href="data-warga.php" class="lp-stat" style="text-decoration:none;color:inherit">
<div class="lp-num" style="color:var(--orange)"><?= $totalKpm ?></div>
<div class="lp-lbl">Total KPM Terdata</div>
<div class="lp-sub" style="color:var(--orange)"><?= $totalTanggungan ?> jiwa</div>
<div class="lp-line" style="background:var(--orange)"></div>
</a>
<a href="data-warga.php?status=Terjangkau" class="lp-stat" style="text-decoration:none;color:inherit">
<div class="lp-num" style="color:var(--green)"><?= $pct ?>%</div>
<div class="lp-lbl">Cakupan Bantuan</div>
<div class="lp-sub" style="color:var(--green)"><?= $terjangkau + $sudahTerima ?> KK</div>
<div class="lp-line" style="background:var(--green)"></div>
</a>
<a href="data-warga.php?status=Belum+Terbantu" class="lp-stat" style="text-decoration:none;color:inherit">
<div class="lp-num" style="color:var(--red)"><?= $blankSpot ?></div>
<div class="lp-lbl">Blank Spot</div>
<div class="lp-sub" style="color:var(--red)">Belum terjangkau</div>
<div class="lp-line" style="background:var(--red)"></div>
</a>
<a href="bantuan.php" class="lp-stat" style="text-decoration:none;color:inherit">
<div class="lp-num" style="color:var(--purple)"><?= $totalBantuan ?></div>
<div class="lp-lbl">Bantuan Tersalur</div>
<div class="lp-sub" style="color:var(--purple)">Transaksi tercatat</div>
<div class="lp-line" style="background:var(--purple)"></div>
</a>
</div>
<!-- BARIS 2 — Distribusi status + Pendapatan -->
<div class="lp-grid21">
<!-- Distribusi status -->
<div class="card">
<div class="card-hd"><h3>Distribusi Status KPM</h3></div>
<div class="card-bd">
<?php
$statusArr = [
'Belum Terbantu' => [$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;
?>
<div class="bar-row">
<div class="bar-row-top">
<span style="color:var(--dark)"><?= $label ?></span>
<span style="color:<?= $color ?>"><?= $val ?> KK &nbsp;<?= $p ?>%</span>
</div>
<div class="bar-track">
<div class="bar-fill" style="width:<?= $p ?>%;background:<?= $color ?>"></div>
</div>
</div>
<?php endforeach; ?>
<div style="border-top:1px solid var(--gray-md);margin-top:14px;padding-top:14px;display:grid;grid-template-columns:repeat(3,1fr);gap:10px">
<?php foreach(['Sangat Tidak Layak'=>'#dc2626','Tidak Layak'=>'#ea580c','Layak'=>'#16a34a'] as $k=>$c): ?>
<div class="kond-box">
<div class="knum" style="color:<?= $c ?>"><?= $kondisiData[$k] ?? 0 ?></div>
<div class="klbl"><?= $k ?></div>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
<!-- Distribusi pendapatan -->
<div class="card">
<div class="card-hd"><h3>Distribusi Pendapatan</h3></div>
<div class="card-bd">
<?php
$pendArr = [
'< Rp500 rb' => [$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;
?>
<div class="bar-row">
<div class="bar-row-top">
<span style="color:var(--gray);font-size:11px"><?= $label ?></span>
<span style="color:<?= $color ?>"><?= $val ?></span>
</div>
<div class="bar-track">
<div class="bar-fill" style="width:<?= $pp ?>%;background:<?= $color ?>"></div>
</div>
</div>
<?php endforeach; ?>
<div class="avg-box">
<div class="a-lbl">Rata-rata Pendapatan</div>
<div class="a-num"><?= rupiah(round($avgPendapatan)) ?></div>
<div class="a-sub">per bulan / KK</div>
</div>
</div>
</div>
</div>
<!-- BARIS 3 — Sebaran kecamatan + Performa ibadah -->
<div class="lp-grid11">
<!-- Sebaran kecamatan -->
<div class="card">
<div class="card-hd"><h3>Sebaran per Kecamatan</h3></div>
<div class="tbl-w">
<table>
<thead>
<tr><th>Kecamatan</th><th style="text-align:right">KPM</th><th>Proporsi</th></tr>
</thead>
<tbody>
<?php if ($byKec->num_rows === 0): ?>
<tr><td colspan="3" style="text-align:center;padding:24px;color:var(--gray)">Data wilayah belum diisi</td></tr>
<?php else: while ($r = $byKec->fetch_assoc()):
$p2 = $totalKpm > 0 ? round($r['c'] / $totalKpm * 100) : 0;
?>
<tr>
<td style="font-weight:600"><?= htmlspecialchars($r['kecamatan']) ?></td>
<td style="text-align:right;font-weight:700;color:var(--purple)"><?= $r['c'] ?></td>
<td style="width:120px">
<div style="display:flex;align-items:center;gap:6px">
<div class="bar-track" style="flex:1;height:6px">
<div class="bar-fill" style="width:<?= $p2 ?>%;background:var(--purple)"></div>
</div>
<span style="font-size:11px;font-weight:600;color:var(--purple);min-width:28px"><?= $p2 ?>%</span>
</div>
</td>
</tr>
<?php endwhile; endif; ?>
</tbody>
</table>
</div>
</div>
<!-- Performa ibadah -->
<div class="card">
<div class="card-hd">
<h3>Performa Rumah Ibadah</h3>
<a href="data-ibadah.php" style="font-size:12px;color:var(--blue);text-decoration:none;font-weight:600">Lihat semua</a>
</div>
<div class="tbl-w">
<table>
<thead>
<tr><th>Nama</th><th style="text-align:center">Kuota</th><th style="text-align:center">Radius</th><th style="text-align:center">Bantuan</th></tr>
</thead>
<tbody>
<?php if ($ibadahPerf->num_rows === 0): ?>
<tr><td colspan="4" style="text-align:center;padding:24px;color:var(--gray)">Belum ada data</td></tr>
<?php else: while ($r = $ibadahPerf->fetch_assoc()): ?>
<tr>
<td style="font-weight:600;font-size:12px"><?= htmlspecialchars($r['nama_ibadah']) ?></td>
<td style="text-align:center;font-size:12px"><?= $r['kuota_bantuan'] ?> KK</td>
<td style="text-align:center;font-size:12px"><?= $r['radius_m'] ?> m</td>
<td style="text-align:center"><span class="badge badge-green"><?= $r['total_salur'] ?>x</span></td>
</tr>
<?php endwhile; endif; ?>
</tbody>
</table>
</div>
</div>
</div>
<?php include 'includes/footer.php'; ?>