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
|
||||
", $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 = [];
|
||||
$total_revenue = 0;
|
||||
$total_orders = 0;
|
||||
|
||||
foreach ($salesChart as $row) {
|
||||
$revenue = round(floatval($row->revenue), 2);
|
||||
$orders = intval($row->orders);
|
||||
for ($i = $days - 1; $i >= 0; $i--) {
|
||||
$date = date('Y-m-d', strtotime("-{$i} days"));
|
||||
|
||||
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_orders += $orders;
|
||||
|
||||
$formatted_sales[] = [
|
||||
'date' => $row->date,
|
||||
'date' => $date,
|
||||
'revenue' => $revenue,
|
||||
'orders' => $orders,
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user