179 lines
6.5 KiB
PHP
179 lines
6.5 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
require_once __DIR__ . '/includes/db_init.php';
|
|
require_once __DIR__ . '/includes/layout.php';
|
|
|
|
ensure_tables();
|
|
|
|
$pdo = db();
|
|
|
|
$statsMasuk = $pdo->query("SELECT status, COUNT(*) as total FROM surat_masuk GROUP BY status")->fetchAll();
|
|
$statsKeluar = $pdo->query("SELECT status, COUNT(*) as total FROM surat_keluar GROUP BY status")->fetchAll();
|
|
|
|
$totalMasuk = (int)$pdo->query("SELECT COUNT(*) FROM surat_masuk")->fetchColumn();
|
|
$totalKeluar = (int)$pdo->query("SELECT COUNT(*) FROM surat_keluar")->fetchColumn();
|
|
|
|
$latestMasuk = $pdo->query("SELECT id, tanggal_surat, pengirim, perihal, status FROM surat_masuk ORDER BY tanggal_surat DESC, id DESC LIMIT 5")->fetchAll();
|
|
$latestKeluar = $pdo->query("SELECT id, tanggal_surat, tujuan, perihal, nomor_surat, status FROM surat_keluar ORDER BY tanggal_surat DESC, id DESC LIMIT 5")->fetchAll();
|
|
|
|
render_header('Dashboard', 'dashboard');
|
|
?>
|
|
|
|
<section class="hero mb-4">
|
|
<div class="row g-3 align-items-center">
|
|
<div class="col-lg-8">
|
|
<h1 class="h4 mb-2">Aplikasi Tata Kelola Surat Internal</h1>
|
|
<p class="mb-3 text-muted">
|
|
Kelola surat masuk & surat keluar lintas departemen dengan nomor otomatis, status yang jelas,
|
|
dan arsip yang mudah ditelusuri.
|
|
</p>
|
|
<div class="d-flex flex-wrap gap-2">
|
|
<a href="/surat_masuk.php" class="btn btn-primary">Catat Surat Masuk</a>
|
|
<a href="/surat_keluar.php" class="btn btn-outline-secondary">Buat Surat Keluar</a>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-4">
|
|
<div class="card-muted">
|
|
<div class="section-title mb-2">Ringkasan</div>
|
|
<div class="d-flex justify-content-between">
|
|
<span class="text-muted">Total Surat Masuk</span>
|
|
<strong><?= h((string)$totalMasuk) ?></strong>
|
|
</div>
|
|
<div class="d-flex justify-content-between">
|
|
<span class="text-muted">Total Surat Keluar</span>
|
|
<strong><?= h((string)$totalKeluar) ?></strong>
|
|
</div>
|
|
<div class="mt-3 small text-muted">Nomor surat keluar otomatis: KODE/URUT/BULAN_ROMAWI/TAHUN.</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="mb-4">
|
|
<div class="row g-3">
|
|
<div class="col-lg-6">
|
|
<div class="card h-100">
|
|
<div class="card-header">Status Surat Masuk</div>
|
|
<div class="card-body">
|
|
<?php if (empty($statsMasuk)): ?>
|
|
<div class="empty-state">Belum ada data surat masuk.</div>
|
|
<?php else: ?>
|
|
<div class="d-flex flex-wrap gap-2">
|
|
<?php foreach ($statsMasuk as $row): ?>
|
|
<span class="<?= h(status_badge($row['status'], 'masuk')) ?>">
|
|
<?= h(ucfirst($row['status'])) ?> · <?= h((string)$row['total']) ?>
|
|
</span>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-lg-6">
|
|
<div class="card h-100">
|
|
<div class="card-header">Status Surat Keluar</div>
|
|
<div class="card-body">
|
|
<?php if (empty($statsKeluar)): ?>
|
|
<div class="empty-state">Belum ada data surat keluar.</div>
|
|
<?php else: ?>
|
|
<div class="d-flex flex-wrap gap-2">
|
|
<?php foreach ($statsKeluar as $row): ?>
|
|
<span class="<?= h(status_badge($row['status'], 'keluar')) ?>">
|
|
<?= h(ucfirst($row['status'])) ?> · <?= h((string)$row['total']) ?>
|
|
</span>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="row g-3">
|
|
<div class="col-lg-6">
|
|
<div class="card h-100">
|
|
<div class="card-header d-flex justify-content-between align-items-center">
|
|
<span>Surat Masuk Terbaru</span>
|
|
<a href="/surat_masuk.php" class="small text-muted">Lihat semua</a>
|
|
</div>
|
|
<div class="card-body">
|
|
<?php if (empty($latestMasuk)): ?>
|
|
<div class="empty-state">Belum ada surat masuk tercatat.</div>
|
|
<?php else: ?>
|
|
<div class="table-responsive">
|
|
<table class="table table-sm align-middle">
|
|
<thead>
|
|
<tr>
|
|
<th>Tanggal</th>
|
|
<th>Pengirim</th>
|
|
<th>Perihal</th>
|
|
<th>Status</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php foreach ($latestMasuk as $row): ?>
|
|
<tr>
|
|
<td><?= h($row['tanggal_surat']) ?></td>
|
|
<td><?= h($row['pengirim']) ?></td>
|
|
<td>
|
|
<a href="/surat_masuk_view.php?id=<?= h((string)$row['id']) ?>">
|
|
<?= h($row['perihal']) ?>
|
|
</a>
|
|
</td>
|
|
<td><span class="<?= h(status_badge($row['status'], 'masuk')) ?>"><?= h($row['status']) ?></span></td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-lg-6">
|
|
<div class="card h-100">
|
|
<div class="card-header d-flex justify-content-between align-items-center">
|
|
<span>Surat Keluar Terbaru</span>
|
|
<a href="/surat_keluar.php" class="small text-muted">Lihat semua</a>
|
|
</div>
|
|
<div class="card-body">
|
|
<?php if (empty($latestKeluar)): ?>
|
|
<div class="empty-state">Belum ada surat keluar tercatat.</div>
|
|
<?php else: ?>
|
|
<div class="table-responsive">
|
|
<table class="table table-sm align-middle">
|
|
<thead>
|
|
<tr>
|
|
<th>Tanggal</th>
|
|
<th>Nomor</th>
|
|
<th>Perihal</th>
|
|
<th>Status</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php foreach ($latestKeluar as $row): ?>
|
|
<tr>
|
|
<td><?= h($row['tanggal_surat']) ?></td>
|
|
<td>
|
|
<a href="/surat_keluar_view.php?id=<?= h((string)$row['id']) ?>">
|
|
<?= h($row['nomor_surat']) ?>
|
|
</a>
|
|
</td>
|
|
<td><?= h($row['perihal']) ?></td>
|
|
<td><span class="<?= h(status_badge($row['status'], 'keluar')) ?>"><?= h($row['status']) ?></span></td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<?php render_footer(); ?>
|