360 lines
12 KiB
PHP
360 lines
12 KiB
PHP
<?php
|
|
session_start();
|
|
|
|
// Cek apakah pengguna sudah login
|
|
if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] !== true) {
|
|
header('Location: ../auth/login.php');
|
|
exit;
|
|
}
|
|
|
|
// Koneksi ke database
|
|
include '../config/database.php'; // Pastikan path ini benar
|
|
|
|
// Menangkap filter yang dipilih dari dropdown
|
|
$filter = isset($_GET['filter']) ? $_GET['filter'] : 'today';
|
|
|
|
// Query untuk mendapatkan data berdasarkan filter
|
|
if ($filter == 'today') {
|
|
$query = "SELECT kegiatan_gambar, kegiatan_nama, kegiatan_keterangan
|
|
FROM kegiatan
|
|
WHERE DATE(kegiatan_tglmulai) = CURDATE()";
|
|
} elseif ($filter == 'this_week') {
|
|
$query = "SELECT kegiatan_gambar, kegiatan_nama, kegiatan_keterangan
|
|
FROM kegiatan
|
|
WHERE WEEK(kegiatan_tglmulai) = WEEK(CURDATE())
|
|
AND YEAR(kegiatan_tglmulai) = YEAR(CURDATE())";
|
|
} elseif ($filter == 'this_month') {
|
|
$query = "SELECT kegiatan_gambar, kegiatan_nama, kegiatan_keterangan
|
|
FROM kegiatan
|
|
WHERE MONTH(kegiatan_tglmulai) = MONTH(CURDATE())
|
|
AND YEAR(kegiatan_tglmulai) = YEAR(CURDATE())";
|
|
} else {
|
|
$query = "SELECT kegiatan_gambar, kegiatan_nama, kegiatan_keterangan FROM kegiatan";
|
|
}
|
|
|
|
$result = $conn->query($query);
|
|
|
|
if (!$result) {
|
|
die("Query gagal: " . $conn->error);
|
|
}
|
|
|
|
function limitCharacters($text, $limit = 100) {
|
|
$text = strip_tags($text); // Hilangkan tag HTML jika ada
|
|
if (strlen($text) > $limit) {
|
|
$text = substr($text, 0, $limit) . '...';
|
|
}
|
|
return $text;
|
|
}
|
|
|
|
// Fungsi untuk membatasi jumlah kata
|
|
function limitWords($text, $wordLimit) {
|
|
$words = explode(' ', $text);
|
|
if (count($words) > $wordLimit) {
|
|
$words = array_slice($words, 0, $wordLimit);
|
|
$text = implode(' ', $words) . '...';
|
|
}
|
|
return $text;
|
|
}
|
|
|
|
// Fungsi untuk membatasi jumlah kalimat
|
|
function limitSentences($text, $sentenceLimit) {
|
|
$sentences = explode('.', $text);
|
|
if (count($sentences) > $sentenceLimit) {
|
|
$sentences = array_slice($sentences, 0, $sentenceLimit);
|
|
$text = implode('.', $sentences) . '.';
|
|
}
|
|
return $text;
|
|
}
|
|
|
|
// Query untuk mendapatkan total kas pemasukan bulan ini
|
|
$queryKasMasuk = "SELECT SUM(kas_pemasukan) AS total_masuk FROM dana_kas WHERE MONTH(kas_tanggal) = MONTH(CURDATE()) AND YEAR(kas_tanggal) = YEAR(CURDATE())";
|
|
$resultKasMasuk = $conn->query($queryKasMasuk);
|
|
$rowKasMasuk = $resultKasMasuk->fetch_assoc();
|
|
$totalKasMasuk = $rowKasMasuk['total_masuk'] ?? 0;
|
|
|
|
// Query untuk mendapatkan total kas pengeluaran bulan ini
|
|
$queryKasKeluar = "SELECT SUM(kas_pengeluaran) AS total_keluar FROM dana_kas WHERE MONTH(kas_tanggal) = MONTH(CURDATE()) AND YEAR(kas_tanggal) = YEAR(CURDATE())";
|
|
$resultKasKeluar = $conn->query($queryKasKeluar);
|
|
$rowKasKeluar = $resultKasKeluar->fetch_assoc();
|
|
$totalKasKeluar = $rowKasKeluar['total_keluar'] ?? 0;
|
|
|
|
// Query untuk mendapatkan total saldo dari semua transaksi
|
|
$queryTotalSaldo = "SELECT (SUM(kas_pemasukan) - SUM(kas_pengeluaran)) AS total_saldo FROM dana_kas";
|
|
$resultTotalSaldo = $conn->query($queryTotalSaldo);
|
|
$rowTotalSaldo = $resultTotalSaldo->fetch_assoc();
|
|
$totalSaldo = $rowTotalSaldo['total_saldo'] ?? 0;
|
|
|
|
// Ambil data kas masuk dan kas keluar per bulan selama 1 tahun terakhir
|
|
$queryKas = "SELECT
|
|
DATE_FORMAT(kas_tanggal, '%Y-%m') AS bulan,
|
|
SUM(kas_pemasukan) AS total_pemasukan,
|
|
SUM(kas_pengeluaran) AS total_pengeluaran
|
|
FROM dana_kas
|
|
WHERE kas_tanggal >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)
|
|
GROUP BY bulan
|
|
ORDER BY bulan ASC";
|
|
|
|
$resultKas = $conn->query($queryKas);
|
|
|
|
// Inisialisasi array data
|
|
$bulanKategori = [];
|
|
$pemasukanData = [];
|
|
$pengeluaranData = [];
|
|
|
|
// Masukkan data dari query ke dalam array
|
|
while ($row = $resultKas->fetch_assoc()) {
|
|
$bulanKategori[] = date("M Y", strtotime($row['bulan'] . "-01")); // Format: Jan 2024, Feb 2024, dst.
|
|
$pemasukanData[] = $row['total_pemasukan'] ?? 0;
|
|
$pengeluaranData[] = $row['total_pengeluaran'] ?? 0;
|
|
}
|
|
|
|
// Konversi data ke format JSON agar bisa digunakan di JavaScript
|
|
$bulanKategoriJSON = json_encode($bulanKategori);
|
|
$pemasukanDataJSON = json_encode($pemasukanData);
|
|
$pengeluaranDataJSON = json_encode($pengeluaranData);
|
|
|
|
?>
|
|
|
|
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
|
|
|
<title>Dashboard - Masjid-E</title>
|
|
<meta content="" name="description">
|
|
<meta content="" name="keywords">
|
|
|
|
<!-- Favicons -->
|
|
<link href="../assets/img/favicon.png" rel="icon">
|
|
<link href="../assets/img/apple-touch-icon.png" rel="apple-touch-icon">
|
|
|
|
<!-- Google Fonts -->
|
|
<link href="https://fonts.gstatic.com" rel="preconnect">
|
|
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i|Nunito:300,300i,400,400i,600,600i,700,700i|Poppins:300,300i,400,400i,500,500i,600,600i,700,700i" rel="stylesheet">
|
|
|
|
<!-- Vendor CSS Files -->
|
|
<link href="../assets/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
|
<link href="../assets/vendor/bootstrap-icons/bootstrap-icons.css" rel="stylesheet">
|
|
<link href="../assets/vendor/boxicons/css/boxicons.min.css" rel="stylesheet">
|
|
<link href="../assets/vendor/quill/quill.snow.css" rel="stylesheet">
|
|
<link href="../assets/vendor/quill/quill.bubble.css" rel="stylesheet">
|
|
<link href="../assets/vendor/remixicon/remixicon.css" rel="stylesheet">
|
|
<link href="../assets/vendor/simple-datatables/style.css" rel="stylesheet">
|
|
|
|
<!-- Template Main CSS File -->
|
|
<link href="../assets/css/admin.css" rel="stylesheet">
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<?php
|
|
include '../forms/section/header.php';
|
|
include '../forms/section/sidebar.php';
|
|
?>
|
|
|
|
<main id="main" class="main">
|
|
|
|
<div class="pagetitle">
|
|
<h1>Dashboard</h1>
|
|
<nav>
|
|
<ol class="breadcrumb">
|
|
<li class="breadcrumb-item"><a href="index.html">Home</a></li>
|
|
<li class="breadcrumb-item active">Dashboard</li>
|
|
</ol>
|
|
</nav>
|
|
</div><!-- End Page Title -->
|
|
|
|
<section class="section dashboard">
|
|
<div class="row">
|
|
|
|
<!-- Left side columns -->
|
|
<div class="col-lg-8">
|
|
<div class="row">
|
|
|
|
<!-- Sales Card -->
|
|
<div class="col-xxl-4 col-md-6">
|
|
<div class="card info-card sales-card">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Kas Masuk <span>/ Bulan</span></h5>
|
|
<div class="d-flex align-items-center">
|
|
<div class="card-icon rounded-circle d-flex align-items-center justify-content-center">
|
|
<i class="bi bi-arrow-down-circle"></i>
|
|
</div>
|
|
<div class="ps-3">
|
|
<h6>Rp <?php echo number_format($totalKasMasuk, 0, ',', '.'); ?></h6>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- End Sales Card -->
|
|
|
|
<!-- Revenue Card -->
|
|
<div class="col-xxl-4 col-md-6">
|
|
<div class="card info-card revenue-card">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Kas Keluar <span>/ Bulan</span></h5>
|
|
<div class="d-flex align-items-center">
|
|
<div class="card-icon rounded-circle d-flex align-items-center justify-content-center">
|
|
<i class="bi bi-arrow-up-circle"></i>
|
|
</div>
|
|
<div class="ps-3">
|
|
<h6>Rp <?php echo number_format($totalKasKeluar, 0, ',', '.'); ?></h6>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div><!-- End Revenue Card -->
|
|
|
|
<!-- Customers Card -->
|
|
<div class="col-xxl-4 col-xl-12">
|
|
<div class="card info-card customers-card">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Sisa Saldo <span>(Total)</span></h5>
|
|
<div class="d-flex align-items-center">
|
|
<div class="card-icon rounded-circle d-flex align-items-center justify-content-center">
|
|
<i class="bi bi-wallet2"></i>
|
|
</div>
|
|
<div class="ps-3">
|
|
<h6>Rp <?php echo number_format($totalSaldo, 0, ',', '.'); ?></h6>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div><!-- End Customers Card -->
|
|
|
|
<!-- Reports -->
|
|
<div class="col-12">
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Grafik Laporan Kas <span>/ 12 Bulan Terakhir</span></h5>
|
|
|
|
<!-- Line Chart -->
|
|
<div id="reportsChart"></div>
|
|
<script>
|
|
document.addEventListener("DOMContentLoaded", () => {
|
|
var options = {
|
|
series: [{
|
|
name: 'Kas Masuk',
|
|
data: <?php echo $pemasukanDataJSON; ?> // Data dari PHP
|
|
}, {
|
|
name: 'Kas Keluar',
|
|
data: <?php echo $pengeluaranDataJSON; ?> // Data dari PHP
|
|
}],
|
|
chart: {
|
|
height: 350,
|
|
type: 'area',
|
|
toolbar: {
|
|
show: false
|
|
},
|
|
},
|
|
markers: {
|
|
size: 4
|
|
},
|
|
colors: ['#2eca6a', '#ff4d4d'], // Warna hijau untuk pemasukan, merah untuk pengeluaran
|
|
fill: {
|
|
type: "gradient",
|
|
gradient: {
|
|
shadeIntensity: 1,
|
|
opacityFrom: 0.3,
|
|
opacityTo: 0.4,
|
|
stops: [0, 90, 100]
|
|
}
|
|
},
|
|
dataLabels: {
|
|
enabled: false
|
|
},
|
|
stroke: {
|
|
curve: 'smooth',
|
|
width: 2
|
|
},
|
|
xaxis: {
|
|
categories: <?php echo $bulanKategoriJSON; ?>, // Data bulan dari PHP
|
|
labels: {
|
|
style: {
|
|
fontSize: '12px'
|
|
}
|
|
}
|
|
},
|
|
tooltip: {
|
|
x: {
|
|
format: 'MMM yyyy' // Format tooltip (contoh: Jan 2024)
|
|
},
|
|
}
|
|
};
|
|
|
|
var chart = new ApexCharts(document.querySelector("#reportsChart"), options);
|
|
chart.render();
|
|
});
|
|
</script>
|
|
<!-- End Line Chart -->
|
|
|
|
</div>
|
|
</div>
|
|
</div><!-- End Reports -->
|
|
</div>
|
|
</div><!-- End Left side columns -->
|
|
|
|
<!-- Right side columns -->
|
|
<div class="col-lg-4">
|
|
|
|
<!-- News & Updates Traffic -->
|
|
<div class="card">
|
|
<div class="filter">
|
|
<a class="icon" href="#" data-bs-toggle="dropdown"><i class="bi bi-three-dots"></i></a>
|
|
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-arrow">
|
|
<li class="dropdown-header text-start">
|
|
<h6>Filter</h6>
|
|
</li>
|
|
<li><a class="dropdown-item" href="?filter=today">Hari ini</a></li>
|
|
<li><a class="dropdown-item" href="?filter=this_week">Minggu Ini</a></li>
|
|
<li><a class="dropdown-item" href="?filter=this_month">Bulan Ini</a></li>
|
|
</ul>
|
|
</div>
|
|
<?php
|
|
|
|
// Mapping filter ke dalam Bahasa Indonesia
|
|
$filterLabels = [
|
|
'today' => 'Hari ini',
|
|
'this_week' => 'Minggu Ini',
|
|
'this_month' => 'Bulan Ini'
|
|
];
|
|
|
|
$filterLabel = isset($filterLabels[$filter]) ? $filterLabels[$filter] : 'Semua';
|
|
?>
|
|
|
|
<div class="card-body pb-0">
|
|
<h5 class="card-title">Berita & Kegiatan <span>| <?php echo $filterLabel; ?></span></h5>
|
|
|
|
<?php if ($result->num_rows === 0): ?>
|
|
<p class="text-muted ps-1 mb-3">Tidak ada Berita untuk <?php echo $filterLabel; ?>.</p>
|
|
<?php endif; ?>
|
|
|
|
<div class="news">
|
|
<?php while ($row = $result->fetch_assoc()): ?>
|
|
<div class="post-item clearfix">
|
|
<img src="../assets/img/kegiatan/<?php echo htmlspecialchars($row['kegiatan_gambar']); ?>" alt="Gambar Kegiatan" style="max-width: 100%; height: auto;">
|
|
<h4><a href="#"><?php echo limitWords(htmlspecialchars($row['kegiatan_nama']), 10); ?></a></h4>
|
|
<p><?php echo limitCharacters(htmlspecialchars($row['kegiatan_keterangan']), 100); ?></p>
|
|
</div>
|
|
<?php endwhile; ?>
|
|
</div><!-- End sidebar recent posts-->
|
|
</div>
|
|
</div>
|
|
</div><!-- End News & Updates -->
|
|
|
|
</div><!-- End Right side columns -->
|
|
</div>
|
|
</section>
|
|
|
|
</main><!-- End #main -->
|
|
|
|
<!-- ======= Footer ======= -->
|
|
<?php include('../forms/section/footer.php'); ?>
|
|
<!-- End Footer -->
|