From 3c76d571ccbcba2bf3d3accda07ad807267aa402 Mon Sep 17 00:00:00 2001 From: dwindown Date: Tue, 4 Nov 2025 18:10:25 +0700 Subject: [PATCH] feat: Fill all dates in sales chart including dates with no data (industry best practice) --- includes/Api/AnalyticsController.php | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/includes/Api/AnalyticsController.php b/includes/Api/AnalyticsController.php index 625cfc8..7a6f132 100644 --- a/includes/Api/AnalyticsController.php +++ b/includes/Api/AnalyticsController.php @@ -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, ];