209 lines
8.8 KiB
PHP
209 lines
8.8 KiB
PHP
<?php
|
|
include '../template/template1.php';
|
|
include '../template/header.php';
|
|
include '../template/sidebar.php';
|
|
|
|
function formatTanggalIndonesia($tanggal) {
|
|
return date('d-m-Y', strtotime($tanggal));
|
|
}
|
|
|
|
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";
|
|
}
|
|
|
|
// Get month and year from form submission or default to current month
|
|
$bulan = isset($_GET['bulan']) ? $_GET['bulan'] : date('m');
|
|
$tahun = isset($_GET['tahun']) ? $_GET['tahun'] : date('Y');
|
|
|
|
// Set tanggal awal dan akhir berdasarkan bulan dan tahun yang dipilih
|
|
$tanggal_awal = "$tahun-$bulan-01";
|
|
$tanggal_akhir = date('Y-m-t', strtotime($tanggal_awal));
|
|
|
|
// Query untuk mengambil jumlah transaksi dan total pendapatan per hari dalam periode yang dipilih
|
|
$query_chart = "SELECT DATE(tanggal_order) as tanggal, COUNT(id_order) as total_transaksi, SUM(total_harga) as total_pendapatan
|
|
FROM orders
|
|
WHERE tanggal_order BETWEEN ? AND ? AND status_order = 'selesai'
|
|
GROUP BY DATE(tanggal_order)
|
|
ORDER BY DATE(tanggal_order)";
|
|
$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 = [];
|
|
while ($row = $result_chart->fetch_assoc()) {
|
|
$data_chart[] = [
|
|
'tanggal' => formatTanggalIndonesia($row['tanggal']),
|
|
'total_transaksi' => $row['total_transaksi'],
|
|
'total_pendapatan' => $row['total_pendapatan']
|
|
];
|
|
}
|
|
|
|
$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 Bulanan</h1>
|
|
<nav>
|
|
<ol class="breadcrumb">
|
|
<li class="breadcrumb-item"><a href="../index.php">Home</a></li>
|
|
<li class="breadcrumb-item active">Laporan Bulanan</li>
|
|
</ol>
|
|
</nav>
|
|
</div>
|
|
|
|
<div class="card mt-2">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Data Transaksi Bulanan</h5>
|
|
|
|
<!-- Form untuk memilih bulan dan tahun -->
|
|
<form method="GET" class="row g-3 mb-4">
|
|
<div class="col-md-4">
|
|
<label for="bulan" class="form-label">Bulan</label>
|
|
<select class="form-select" id="bulan" name="bulan">
|
|
<?php
|
|
$bulan_list = [
|
|
'01' => 'Januari', '02' => 'Februari', '03' => 'Maret', '04' => 'April',
|
|
'05' => 'Mei', '06' => 'Juni', '07' => 'Juli', '08' => 'Agustus',
|
|
'09' => 'September', '10' => 'Oktober', '11' => 'November', '12' => 'Desember'
|
|
];
|
|
foreach ($bulan_list as $key => $value) {
|
|
$selected = ($key == $bulan) ? 'selected' : '';
|
|
echo "<option value='$key' $selected>$value</option>";
|
|
}
|
|
?>
|
|
</select>
|
|
</div>
|
|
<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_bulanan.php?bulan=<?php echo $bulan; ?>&tahun=<?php echo $tahun; ?>" target="_blank" class="btn btn-primary">Cetak</a>
|
|
</div>
|
|
</form>
|
|
|
|
<div class="mb-3">
|
|
<span class="badge bg-info">Periode: <?php echo formatBulanIndonesia($bulan) . " " . $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: <?php echo json_encode(array_column($data_chart, 'tanggal')); ?>,
|
|
datasets: [
|
|
{
|
|
label: 'Total Transaksi',
|
|
data: <?php echo json_encode(array_column($data_chart, 'total_transaksi')); ?>,
|
|
backgroundColor: 'rgba(54, 162, 235, 0.2)',
|
|
borderColor: 'rgba(54, 162, 235, 1)',
|
|
borderWidth: 2,
|
|
fill: false,
|
|
tension: 0.3
|
|
},
|
|
{
|
|
label: 'Total Pendapatan',
|
|
data: <?php echo json_encode(array_column($data_chart, 'total_pendapatan')); ?>,
|
|
backgroundColor: 'rgba(255, 99, 132, 0.2)',
|
|
borderColor: 'rgba(255, 99, 132, 1)',
|
|
borderWidth: 2,
|
|
fill: false,
|
|
tension: 0.3
|
|
}
|
|
]
|
|
},
|
|
options: {
|
|
responsive: true,
|
|
plugins: {
|
|
tooltip: {
|
|
callbacks: {
|
|
label: function(context) {
|
|
let label = context.dataset.label || '';
|
|
if (label) {
|
|
label += ': ';
|
|
}
|
|
label += context.raw.toLocaleString();
|
|
return label;
|
|
}
|
|
}
|
|
}
|
|
},
|
|
scales: {
|
|
x: {
|
|
ticks: {
|
|
autoSkip: true,
|
|
maxTicksLimit: 10
|
|
}
|
|
},
|
|
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()) { ?>
|
|
<tr>
|
|
<td><?= $no++; ?></td>
|
|
<td><?= $row['id_order']; ?></td>
|
|
<td><?= $row['id_pembeli']; ?></td>
|
|
<td><?= $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><?= formatTanggalIndonesia($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';
|
|
?>
|