fix: exclude soft-deleted records and validate relations in analytics queries
This commit is contained in:
parent
f8529b2459
commit
30fcfb4f20
@ -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')
|
||||
|
||||
@ -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')
|
||||
|
||||
Loading…
Reference in New Issue
Block a user