322 lines
13 KiB
PHP
322 lines
13 KiB
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">
|
|
<div class="row">
|
|
|
|
<?php
|
|
// Ambil filter dari URL atau default 'today'
|
|
$filter = isset($_GET['filter']) ? $_GET['filter'] : 'today';
|
|
|
|
// Mendapatkan tanggal hari ini, bulan ini, dan tahun ini
|
|
$tanggalHariIni = date('Y-m-d');
|
|
$bulanIni = date('m');
|
|
$tahunIni = date('Y');
|
|
|
|
// Mendapatkan tanggal, bulan, dan tahun sebelumnya
|
|
$tanggalKemarin = date('Y-m-d', strtotime('-1 day'));
|
|
$bulanSebelumnya = date('m', strtotime('-1 month'));
|
|
$tahunSebelumnya = date('Y', strtotime('-1 year'));
|
|
|
|
// Tentukan query berdasarkan filter yang dipilih
|
|
if ($filter == 'today') {
|
|
// Pesanan hari ini
|
|
$sqlNow = "SELECT COUNT(*) as total FROM orders WHERE DATE(tanggal_order) = '$tanggalHariIni' AND status_order = 'selesai'";
|
|
// Pesanan kemarin
|
|
$sqlPrev = "SELECT COUNT(*) as total FROM orders WHERE DATE(tanggal_order) = '$tanggalKemarin' AND status_order = 'selesai'";
|
|
$title = "Penjualan | Hari Ini";
|
|
} elseif ($filter == 'month') {
|
|
// Pesanan bulan ini
|
|
$sqlNow = "SELECT COUNT(*) as total FROM orders WHERE MONTH(tanggal_order) = '$bulanIni' AND YEAR(tanggal_order) = '$tahunIni' AND status_order = 'selesai'";
|
|
// Pesanan bulan sebelumnya
|
|
$sqlPrev = "SELECT COUNT(*) as total FROM orders WHERE MONTH(tanggal_order) = '$bulanSebelumnya' AND YEAR(tanggal_order) = '$tahunIni' AND status_order = 'selesai'";
|
|
$title = "Penjualan | Bulan Ini";
|
|
} elseif ($filter == 'year') {
|
|
// Pesanan tahun ini
|
|
$sqlNow = "SELECT COUNT(*) as total FROM orders WHERE YEAR(tanggal_order) = '$tahunIni' AND status_order = 'selesai'";
|
|
// Pesanan tahun sebelumnya
|
|
$sqlPrev = "SELECT COUNT(*) as total FROM orders WHERE YEAR(tanggal_order) = '$tahunSebelumnya' AND status_order = 'selesai'";
|
|
$title = "Penjualan | Tahun Ini";
|
|
}
|
|
|
|
// Eksekusi query
|
|
$resultNow = mysqli_query($conn, $sqlNow);
|
|
$resultPrev = mysqli_query($conn, $sqlPrev);
|
|
|
|
// Ambil hasil query
|
|
$totalNow = mysqli_fetch_assoc($resultNow)['total'];
|
|
$totalPrev = mysqli_fetch_assoc($resultPrev)['total'];
|
|
|
|
// Hitung persentase perubahan
|
|
if ($totalPrev > 0) {
|
|
$percentChange = (($totalNow - $totalPrev) / $totalPrev) * 100;
|
|
} else {
|
|
$percentChange = $totalNow > 0 ? 100 : 0;
|
|
}
|
|
|
|
// Tentukan warna teks untuk kenaikan/penurunan
|
|
if ($percentChange > 0) {
|
|
$changeText = '<span class="text-success small pt-1 fw-bold">' . round($percentChange, 1) . '%</span> <span class="text-muted small pt-2 ps-1">meningkat</span>';
|
|
} elseif ($percentChange < 0) {
|
|
$changeText = '<span class="text-danger small pt-1 fw-bold">' . round(abs($percentChange), 1) . '%</span> <span class="text-muted small pt-2 ps-1">menurun</span>';
|
|
} else {
|
|
$changeText = '<span class="text-muted small pt-1 fw-bold">0%</span> <span class="text-muted small pt-2 ps-1">tidak ada perubahan</span>';
|
|
}
|
|
?>
|
|
|
|
<!-- Sales Card -->
|
|
<div class="col-xxl-4 col-md-6">
|
|
<div class="card info-card sales-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=month">Bulan Ini</a></li>
|
|
<li><a class="dropdown-item" href="?filter=year">Tahun Ini</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="card-body">
|
|
<h5 class="card-title"><?php echo $title; ?></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-cart"></i>
|
|
</div>
|
|
<div class="ps-3">
|
|
<h6><?php echo $totalNow; ?></h6>
|
|
<?php echo $changeText; ?>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- End Sales Card -->
|
|
|
|
<!-- Revenue Card -->
|
|
<?php
|
|
// Ambil filter dari URL atau default 'today'
|
|
$filter = isset($_GET['filter']) ? $_GET['filter'] : 'today';
|
|
|
|
// Mendapatkan tanggal, bulan, dan tahun saat ini
|
|
$tanggalHariIni = date('Y-m-d');
|
|
$bulanIni = date('m');
|
|
$tahunIni = date('Y');
|
|
|
|
// Mendapatkan tanggal, bulan, dan tahun sebelumnya
|
|
$tanggalKemarin = date('Y-m-d', strtotime('-1 day'));
|
|
$bulanSebelumnya = date('m', strtotime('-1 month'));
|
|
$tahunSebelumnya = date('Y', strtotime('-1 year'));
|
|
|
|
// Tentukan query berdasarkan filter yang dipilih
|
|
if ($filter == 'today') {
|
|
// Pendapatan hari ini
|
|
$sqlNow = "SELECT SUM(total_harga) as total FROM orders WHERE DATE(tanggal_order) = '$tanggalHariIni' AND status_order = 'selesai'";
|
|
// Pendapatan kemarin
|
|
$sqlPrev = "SELECT SUM(total_harga) as total FROM orders WHERE DATE(tanggal_order) = '$tanggalKemarin' AND status_order = 'selesai'";
|
|
$title = "Pendapatan | Hari Ini";
|
|
} elseif ($filter == 'month') {
|
|
// Pendapatan bulan ini
|
|
$sqlNow = "SELECT SUM(total_harga) as total FROM orders WHERE MONTH(tanggal_order) = '$bulanIni' AND YEAR(tanggal_order) = '$tahunIni' AND status_order = 'selesai'";
|
|
// Pendapatan bulan sebelumnya
|
|
$sqlPrev = "SELECT SUM(total_harga) as total FROM orders WHERE MONTH(tanggal_order) = '$bulanSebelumnya' AND YEAR(tanggal_order) = '$tahunIni' AND status_order = 'selesai'";
|
|
$title = "Pendapatan | Bulan Ini";
|
|
} elseif ($filter == 'year') {
|
|
// Pendapatan tahun ini
|
|
$sqlNow = "SELECT SUM(total_harga) as total FROM orders WHERE YEAR(tanggal_order) = '$tahunIni' AND status_order = 'selesai'";
|
|
// Pendapatan tahun sebelumnya
|
|
$sqlPrev = "SELECT SUM(total_harga) as total FROM orders WHERE YEAR(tanggal_order) = '$tahunSebelumnya' AND status_order = 'selesai'";
|
|
$title = "Pendapatan | Tahun Ini";
|
|
}
|
|
|
|
// Eksekusi query
|
|
$resultNow = mysqli_query($conn, $sqlNow);
|
|
$resultPrev = mysqli_query($conn, $sqlPrev);
|
|
|
|
// Ambil hasil query
|
|
$totalNow = mysqli_fetch_assoc($resultNow)['total'];
|
|
$totalPrev = mysqli_fetch_assoc($resultPrev)['total'];
|
|
|
|
// Jika NULL, ubah jadi 0
|
|
$totalNow = $totalNow ? $totalNow : 0;
|
|
$totalPrev = $totalPrev ? $totalPrev : 0;
|
|
|
|
// Hitung persentase perubahan
|
|
if ($totalPrev > 0) {
|
|
$percentChange = (($totalNow - $totalPrev) / $totalPrev) * 100;
|
|
} else {
|
|
$percentChange = $totalNow > 0 ? 100 : 0;
|
|
}
|
|
|
|
// Tentukan warna teks untuk kenaikan/penurunan
|
|
if ($percentChange > 0) {
|
|
$changeText = '<span class="text-success small pt-1 fw-bold">' . round($percentChange, 1) . '%</span> <span class="text-muted small pt-2 ps-1">meningkat</span>';
|
|
} elseif ($percentChange < 0) {
|
|
$changeText = '<span class="text-danger small pt-1 fw-bold">' . round(abs($percentChange), 1) . '%</span> <span class="text-muted small pt-2 ps-1">menurun</span>';
|
|
} else {
|
|
$changeText = '<span class="text-muted small pt-1 fw-bold">0%</span> <span class="text-muted small pt-2 ps-1">tidak ada perubahan</span>';
|
|
}
|
|
|
|
// Format angka pendapatan agar lebih rapi
|
|
$formattedTotalNow = number_format($totalNow, 0, ',', '.');
|
|
?>
|
|
|
|
<!-- Revenue Card -->
|
|
<div class="col-xxl-4 col-md-6">
|
|
<div class="card info-card revenue-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=month">Bulan Ini</a></li>
|
|
<li><a class="dropdown-item" href="?filter=year">Tahun Ini</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="card-body">
|
|
<h5 class="card-title"><?php echo $title; ?></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-currency-dollar"></i>
|
|
</div>
|
|
<div class="ps-3">
|
|
<h6>Rp <?php echo $formattedTotalNow; ?></h6>
|
|
<?php echo $changeText; ?>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- End Revenue Card -->
|
|
|
|
<?php
|
|
// Ambil total pembeli terdaftar
|
|
$query_total_pembeli = "SELECT COUNT(id_pembeli) as total_pembeli FROM pembeli";
|
|
$result_total_pembeli = $conn->query($query_total_pembeli);
|
|
$row_total_pembeli = $result_total_pembeli->fetch_assoc();
|
|
$total_pembeli = $row_total_pembeli['total_pembeli'];
|
|
?>
|
|
|
|
|
|
<!-- 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">Pembeli Terdaftar</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-people"></i>
|
|
</div>
|
|
<div class="ps-3">
|
|
<h6><?php echo number_format($total_pembeli, 0, ',', '.'); ?></h6>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- End Customers Card -->
|
|
|
|
</div>
|
|
</div><!-- End Left side columns -->
|
|
|
|
<?php
|
|
// Ambil jumlah transaksi per jam untuk hari ini
|
|
$jamBuka = 08.00; // Ubah sesuai jam operasional
|
|
$jamTutup = 21.00; // Ubah sesuai jam operasional
|
|
$tanggalHariIni = date('Y-m-d');
|
|
|
|
// Inisialisasi array untuk menyimpan jumlah transaksi per jam
|
|
$dataTransaksi = array_fill($jamBuka, ($jamTutup - $jamBuka + 1), 0);
|
|
|
|
// Query untuk mendapatkan jumlah transaksi per jam
|
|
$query_transaksi = "SELECT HOUR(tanggal_order) as jam, COUNT(*) as total
|
|
FROM orders
|
|
WHERE DATE(tanggal_order) = '$tanggalHariIni'
|
|
GROUP BY HOUR(tanggal_order)";
|
|
$result_transaksi = mysqli_query($conn, $query_transaksi);
|
|
|
|
// Masukkan hasil query ke dalam array
|
|
while ($row = mysqli_fetch_assoc($result_transaksi)) {
|
|
$jam = (int) $row['jam'];
|
|
if (isset($dataTransaksi[$jam])) {
|
|
$dataTransaksi[$jam] = (int) $row['total'];
|
|
}
|
|
}
|
|
|
|
// Ubah data transaksi menjadi JSON untuk JavaScript
|
|
$labels = json_encode(array_keys($dataTransaksi));
|
|
$values = json_encode(array_values($dataTransaksi));
|
|
?>
|
|
|
|
<!-- Tambahkan elemen canvas untuk chart -->
|
|
<div class="col-lg-12">
|
|
<div class="card">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Grafik Transaksi Hari Ini</h5>
|
|
<canvas id="transaksiChart"></canvas>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Ambil data transaksi dari PHP ke JavaScript -->
|
|
<script>
|
|
document.addEventListener("DOMContentLoaded", function () {
|
|
var ctx = document.getElementById('transaksiChart').getContext('2d');
|
|
var transaksiChart = new Chart(ctx, {
|
|
type: 'line',
|
|
data: {
|
|
labels: [<?php foreach ($dataTransaksi as $jam => $total) { echo "'" . $jam . "',"; } ?>],
|
|
datasets: [{
|
|
label: 'Jumlah Transaksi',
|
|
data: [<?php foreach ($dataTransaksi as $jam => $total) { echo $total . ","; } ?>],
|
|
borderColor: 'rgba(75, 192, 192, 1)',
|
|
backgroundColor: 'rgba(75, 192, 192, 0.2)',
|
|
borderWidth: 2,
|
|
fill: false
|
|
}]
|
|
},
|
|
options: {
|
|
responsive: true,
|
|
scales: {
|
|
x: { title: { display: true, text: 'Jam' } },
|
|
y: { title: { display: true, text: 'Jumlah Transaksi' }, beginAtZero: true }
|
|
}
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
|
|
<!-- Tambahkan link ke Chart.js jika belum ada -->
|
|
|
|
|
|
|
|
|
|
</div>
|
|
</section>
|
|
|
|
</main><!-- End #main -->
|