diff --git a/app/Http/Controllers/AnalysisController.php b/app/Http/Controllers/AnalysisController.php index 69220e9..0c428a2 100644 --- a/app/Http/Controllers/AnalysisController.php +++ b/app/Http/Controllers/AnalysisController.php @@ -43,9 +43,10 @@ public function __invoke(Request $request) 'cogs' => $this->getStats(fn () => $applyFilter(Order::query())->sum('cogs')), 'total_discount' => $this->getStats(fn () => $applyFilter(Order::query())->sum('discount')), 'total_purchases' => $this->getStats(fn () => $applyFilter(Purchase::query())->sum('total')), - 'products_sold' => $this->getStats(fn () => $applyFilter(OrderItem::query())->sum('qty')), + 'products_sold' => $this->getStats(fn () => $applyFilter(OrderItem::query())->whereHas('order')->sum('qty')), 'total_customers' => $this->getStats(fn () => $applyFilter(Order::query())->whereNotNull('customer_name')->distinct('customer_name')->count('customer_name')), 'repeat_customers' => $this->getStats(fn () => $applyFilter(DB::table('orders')) + ->whereNull('deleted_at') ->whereNotNull('customer_name') ->select('customer_name') ->groupBy('customer_name') @@ -76,6 +77,7 @@ public function __invoke(Request $request) // Revenue vs Purchases per month $revenueByMonth = $applyFilter(DB::table('orders')) + ->whereNull('deleted_at') ->select( DB::raw("$monthSelect as month"), DB::raw('SUM(total) as total') @@ -84,6 +86,7 @@ public function __invoke(Request $request) ->get(); $purchasesByMonth = $applyFilter(DB::table('purchases')) + ->whereNull('deleted_at') ->select( DB::raw("$monthSelect as month"), DB::raw('SUM(total) as total') @@ -105,6 +108,7 @@ public function __invoke(Request $request) }); $paymentMethods = $applyFilter(DB::table('orders')) + ->whereNull('deleted_at') ->select('payment_method as name', DB::raw('COUNT(*) as total')) ->groupBy('payment_method') ->get() @@ -117,6 +121,7 @@ public function __invoke(Request $request) }); $orderStatuses = $applyFilter(DB::table('orders')) + ->whereNull('deleted_at') ->select('order_status as name', DB::raw('COUNT(*) as total')) ->groupBy('order_status') ->get() @@ -129,6 +134,7 @@ public function __invoke(Request $request) }); $orderChannels = $applyFilter(DB::table('orders')) + ->whereNull('deleted_at') ->select('order_channel as name', DB::raw('COUNT(*) as total')) ->groupBy('order_channel') ->get() @@ -142,13 +148,17 @@ public function __invoke(Request $request) $topProducts = $applyFilter(DB::table('order_items'), 'order_items.created_at') ->join('products', 'order_items.product_id', '=', 'products.id') + ->join('orders', 'order_items.order_id', '=', 'orders.id') ->select('products.name as name', DB::raw('SUM(order_items.qty) as total')) + ->whereNull('orders.deleted_at') + ->whereNull('order_items.deleted_at') ->groupBy('products.name') ->orderByDesc('total') ->limit(5) ->get(); $topCustomers = $applyFilter(DB::table('orders'), 'orders.created_at') + ->whereNull('orders.deleted_at') ->select('customer_name as name', DB::raw('SUM(total) as total')) ->whereNotNull('customer_name') ->groupBy('customer_name') @@ -159,6 +169,7 @@ public function __invoke(Request $request) $hourSelect = $isSqlite ? "CAST(strftime('%H', created_at) AS INTEGER)" : 'HOUR(created_at)'; $salesByHourRaw = $applyFilter(DB::table('orders')) + ->whereNull('deleted_at') ->select( DB::raw("$hourSelect as hour"), DB::raw('COUNT(*) as total') @@ -177,6 +188,7 @@ public function __invoke(Request $request) // Revenue & Profit & Volume per month $ordersByMonth = $applyFilter(DB::table('orders')) + ->whereNull('deleted_at') ->select( DB::raw("$monthSelect as month"), DB::raw('SUM(total) as revenue'), @@ -239,7 +251,9 @@ public function __invoke(Request $request) ->join('products', 'order_items.product_id', '=', 'products.id') ->join('category_product', 'products.id', '=', 'category_product.product_id') ->join('categories', 'category_product.category_id', '=', 'categories.id') + ->join('orders', 'order_items.order_id', '=', 'orders.id') ->select('categories.name', DB::raw('SUM(order_items.qty) as total')) + ->whereNull('orders.deleted_at') ->whereNull('order_items.deleted_at') ->groupBy('categories.id', 'categories.name') ->orderByDesc('total') diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php index e3806fa..b4a430a 100644 --- a/app/Http/Controllers/DashboardController.php +++ b/app/Http/Controllers/DashboardController.php @@ -42,6 +42,7 @@ public function __invoke() // Get sales by hour $todayOrders = DB::table('orders') + ->whereNull('deleted_at') ->whereDate('created_at', $today) ->select( DB::raw("$hourSelect as hour"), @@ -51,6 +52,7 @@ public function __invoke() ->get(); $yesterdayOrders = DB::table('orders') + ->whereNull('deleted_at') ->whereDate('created_at', $yesterday) ->select( DB::raw("$hourSelect as hour"), @@ -71,6 +73,7 @@ public function __invoke() }); $paymentMethods = DB::table('orders') + ->whereNull('deleted_at') ->select('payment_method as name', DB::raw('COUNT(*) as total')) ->whereDate('created_at', $today) ->groupBy('payment_method') @@ -84,6 +87,7 @@ public function __invoke() }); $orderStatuses = DB::table('orders') + ->whereNull('deleted_at') ->select('order_status as name', DB::raw('COUNT(*) as total')) ->whereDate('created_at', $today) ->groupBy('order_status') @@ -97,6 +101,7 @@ public function __invoke() }); $orderChannels = DB::table('orders') + ->whereNull('deleted_at') ->select('order_channel as name', DB::raw('COUNT(*) as total')) ->whereDate('created_at', $today) ->groupBy('order_channel') @@ -113,6 +118,8 @@ public function __invoke() ->join('products', 'order_items.product_id', '=', 'products.id') ->join('orders', 'order_items.order_id', '=', 'orders.id') ->select('products.name as name', DB::raw('SUM(order_items.qty) as total')) + ->whereNull('orders.deleted_at') + ->whereNull('order_items.deleted_at') ->whereDate('orders.created_at', $today) ->groupBy('products.name') ->orderByDesc('total') @@ -120,6 +127,7 @@ public function __invoke() ->get(); $topCustomers = DB::table('orders') + ->whereNull('deleted_at') ->select('customer_name as name', DB::raw('SUM(total) as total')) ->whereDate('created_at', $today) ->whereNotNull('customer_name')