200 lines
7.8 KiB
PHP
200 lines
7.8 KiB
PHP
<?php
|
|
include '../template/template1.php';
|
|
include '../template/header.php';
|
|
include '../template/sidebar.php';
|
|
|
|
function formatBulanIndonesia($bulan) {
|
|
$namaBulan = [
|
|
'01' => 'Januari', '02' => 'Februari', '03' => 'Maret', '04' => 'April',
|
|
'05' => 'Mei', '06' => 'Juni', '07' => 'Juli', '08' => 'Agustus',
|
|
'09' => 'September', '10' => 'Oktober', '11' => 'November', '12' => 'Desember'
|
|
];
|
|
return $namaBulan[$bulan] ?? "Tidak Diketahui";
|
|
}
|
|
|
|
function formatTanggalIndonesia($tanggal) {
|
|
return date('d-m-Y', strtotime($tanggal));
|
|
}
|
|
|
|
// Get year from form submission or default to current year
|
|
$tahun = isset($_GET['tahun']) ? $_GET['tahun'] : date('Y');
|
|
|
|
// Set tanggal awal dan akhir berdasarkan tahun yang dipilih
|
|
$tanggal_awal = "$tahun-01-01";
|
|
$tanggal_akhir = "$tahun-12-31";
|
|
|
|
$query_chart = "SELECT DATE_FORMAT(tanggal_order, '%m') as bulan,
|
|
COUNT(id_order) as total_transaksi,
|
|
COALESCE(SUM(total_harga), 0) as total_pendapatan
|
|
FROM orders
|
|
WHERE tanggal_order BETWEEN ? AND ? AND status_order = 'selesai'
|
|
GROUP BY bulan ORDER BY bulan";
|
|
|
|
$stmt_chart = $conn->prepare($query_chart);
|
|
$stmt_chart->bind_param("ss", $tanggal_awal, $tanggal_akhir);
|
|
$stmt_chart->execute();
|
|
$result_chart = $stmt_chart->get_result();
|
|
|
|
$data_chart = [];
|
|
$bulan_default = [
|
|
'01' => ['total_transaksi' => 0, 'total_pendapatan' => 0],
|
|
'02' => ['total_transaksi' => 0, 'total_pendapatan' => 0],
|
|
'03' => ['total_transaksi' => 0, 'total_pendapatan' => 0],
|
|
'04' => ['total_transaksi' => 0, 'total_pendapatan' => 0],
|
|
'05' => ['total_transaksi' => 0, 'total_pendapatan' => 0],
|
|
'06' => ['total_transaksi' => 0, 'total_pendapatan' => 0],
|
|
'07' => ['total_transaksi' => 0, 'total_pendapatan' => 0],
|
|
'08' => ['total_transaksi' => 0, 'total_pendapatan' => 0],
|
|
'09' => ['total_transaksi' => 0, 'total_pendapatan' => 0],
|
|
'10' => ['total_transaksi' => 0, 'total_pendapatan' => 0],
|
|
'11' => ['total_transaksi' => 0, 'total_pendapatan' => 0],
|
|
'12' => ['total_transaksi' => 0, 'total_pendapatan' => 0]
|
|
];
|
|
|
|
while ($row = $result_chart->fetch_assoc()) {
|
|
if (is_array($row)) {
|
|
$bulan_default[$row['bulan']] = [
|
|
'total_transaksi' => $row['total_transaksi'] ?? 0,
|
|
'total_pendapatan' => $row['total_pendapatan'] ?? 0
|
|
];
|
|
}
|
|
}
|
|
|
|
// Format data untuk grafik
|
|
$bulan_labels = [];
|
|
$total_transaksi = [];
|
|
$total_pendapatan = [];
|
|
|
|
foreach ($bulan_default as $bulan => $data) {
|
|
$bulan_labels[] = formatBulanIndonesia($bulan);
|
|
$total_transaksi[] = $data['total_transaksi'];
|
|
$total_pendapatan[] = $data['total_pendapatan'];
|
|
}
|
|
|
|
// Ambil data pesanan
|
|
$query = "SELECT id_order, id_pembeli, metode_pembayaran, total_harga, status_order, alamat, tanggal_order
|
|
FROM orders
|
|
WHERE tanggal_order BETWEEN ? AND ? AND status_order = 'selesai'
|
|
ORDER BY tanggal_order DESC";
|
|
$stmt = $conn->prepare($query);
|
|
$stmt->bind_param("ss", $tanggal_awal, $tanggal_akhir);
|
|
$stmt->execute();
|
|
$result = $stmt->get_result();
|
|
?>
|
|
|
|
<main id="main" class="main">
|
|
<div class="pagetitle">
|
|
<h1>Laporan Tahunan</h1>
|
|
<nav>
|
|
<ol class="breadcrumb">
|
|
<li class="breadcrumb-item"><a href="../index.php">Home</a></li>
|
|
<li class="breadcrumb-item active">Laporan Tahunan</li>
|
|
</ol>
|
|
</nav>
|
|
</div>
|
|
|
|
<div class="card mt-2">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Data Transaksi Tahunan</h5>
|
|
|
|
<!-- Form untuk memilih tahun -->
|
|
<form method="GET" class="row g-3 mb-4">
|
|
<div class="col-md-4">
|
|
<label for="tahun" class="form-label">Tahun</label>
|
|
<select class="form-select" id="tahun" name="tahun">
|
|
<?php
|
|
$tahun_sekarang = date('Y');
|
|
for ($i = $tahun_sekarang; $i >= $tahun_sekarang - 5; $i--) {
|
|
$selected = ($i == $tahun) ? 'selected' : '';
|
|
echo "<option value='$i' $selected>$i</option>";
|
|
}
|
|
?>
|
|
</select>
|
|
</div>
|
|
<div class="col-md-4 d-flex align-items-end gap-2">
|
|
<button type="submit" class="btn btn-primary">Tampilkan</button>
|
|
<a href="cetak_tahunan.php?tahun=<?php echo $tahun; ?>" target="_blank" class="btn btn-primary">Cetak</a>
|
|
</div>
|
|
</form>
|
|
|
|
<div class="mb-3">
|
|
<span class="badge bg-info">Tahun: <?php echo $tahun; ?></span>
|
|
</div>
|
|
|
|
<canvas id="chartLaporan" width="400" height="200"></canvas>
|
|
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
|
<script>
|
|
var ctx = document.getElementById('chartLaporan').getContext('2d');
|
|
var chartLaporan = new Chart(ctx, {
|
|
type: 'line',
|
|
data: {
|
|
labels: <?= json_encode($bulan_labels); ?>,
|
|
datasets: [
|
|
{
|
|
label: 'Total Transaksi',
|
|
data: <?= json_encode($total_transaksi); ?>,
|
|
backgroundColor: 'rgba(54, 162, 235, 0.6)',
|
|
borderColor: 'rgba(54, 162, 235, 1)',
|
|
borderWidth: 2,
|
|
pointRadius: 4
|
|
},
|
|
{
|
|
label: 'Total Pendapatan',
|
|
data: <?= json_encode($total_pendapatan); ?>,
|
|
backgroundColor: 'rgba(255, 99, 132, 0.6)',
|
|
borderColor: 'rgba(255, 99, 132, 1)',
|
|
borderWidth: 2,
|
|
pointRadius: 4
|
|
}
|
|
]
|
|
},
|
|
options: {
|
|
responsive: true,
|
|
scales: {
|
|
y: {
|
|
beginAtZero: true
|
|
}
|
|
}
|
|
}
|
|
});
|
|
</script>
|
|
|
|
<table class="table">
|
|
<thead>
|
|
<tr>
|
|
<th>No</th>
|
|
<th>ID Order</th>
|
|
<th>ID Pembeli</th>
|
|
<th>Metode Pembayaran</th>
|
|
<th>Total Harga</th>
|
|
<th>Alamat</th>
|
|
<th>Tanggal Order</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php $no = 1; while ($row = $result->fetch_assoc()) { ?>
|
|
<?php if (!is_array($row)) continue; ?> <!-- Tambahkan ini -->
|
|
<tr>
|
|
<td><?= $no++; ?></td>
|
|
<td><?= htmlspecialchars($row['id_order']); ?></td>
|
|
<td><?= htmlspecialchars($row['id_pembeli']); ?></td>
|
|
<td><?= htmlspecialchars($row['metode_pembayaran']); ?></td>
|
|
<td>Rp <?= number_format($row['total_harga'], 0, ',', '.'); ?></td>
|
|
<td><?= substr($row['alamat'], 0, 10); ?><?= strlen($row['alamat']) > 30 ? '...' : '' ?></td>
|
|
<td><?= date('d-m-Y', strtotime($row['tanggal_order'])); ?></td>
|
|
</tr>
|
|
<?php } ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</main>
|
|
|
|
<?php
|
|
$stmt->close();
|
|
$stmt_chart->close();
|
|
$conn->close();
|
|
include '../template/footer.php';
|
|
include '../template/template2.php';
|
|
?>
|