TIF_NGANJUK_E41212020/admin/laporan/tahunan.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';
?>