feat: Fill all dates in sales chart including dates with no data (industry best practice)

This commit is contained in:
dwindown
2025-11-04 18:10:25 +07:00
parent 7c0d9639b6
commit 3c76d571cc

View File

@@ -321,20 +321,37 @@ class AnalyticsController {
ORDER BY date ASC ORDER BY date ASC
", $days)); ", $days));
// Format sales chart // Create a map of existing data
$data_map = [];
foreach ($salesChart as $row) {
$data_map[$row->date] = [
'revenue' => round(floatval($row->revenue), 2),
'orders' => intval($row->orders),
];
}
// Fill in ALL dates in the range (including dates with no data)
$formatted_sales = []; $formatted_sales = [];
$total_revenue = 0; $total_revenue = 0;
$total_orders = 0; $total_orders = 0;
foreach ($salesChart as $row) { for ($i = $days - 1; $i >= 0; $i--) {
$revenue = round(floatval($row->revenue), 2); $date = date('Y-m-d', strtotime("-{$i} days"));
$orders = intval($row->orders);
if (isset($data_map[$date])) {
$revenue = $data_map[$date]['revenue'];
$orders = $data_map[$date]['orders'];
} else {
// No data for this date, fill with zeros
$revenue = 0.00;
$orders = 0;
}
$total_revenue += $revenue; $total_revenue += $revenue;
$total_orders += $orders; $total_orders += $orders;
$formatted_sales[] = [ $formatted_sales[] = [
'date' => $row->date, 'date' => $date,
'revenue' => $revenue, 'revenue' => $revenue,
'orders' => $orders, 'orders' => $orders,
]; ];