TIF_NGANJUK_E41212035/forms/dashboard.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 &amp; 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 -->