feat: Fill all dates in sales chart including dates with no data (industry best practice)
This commit is contained in:
@@ -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,
|
||||||
];
|
];
|
||||||
|
|||||||
Reference in New Issue
Block a user