diff --git a/app/Livewire/Studio/Dashboard/Analysis.php b/app/Livewire/Studio/Dashboard/Analysis.php index 162db7d..65ae97e 100644 --- a/app/Livewire/Studio/Dashboard/Analysis.php +++ b/app/Livewire/Studio/Dashboard/Analysis.php @@ -168,50 +168,60 @@ protected function loadData() ], ]; + $orderQuery = Order::when(! empty($outletIds), fn ($q) => $q->whereIn('outlet_id', $outletIds)) + ->when($dateQuery || ($startDate && $endDate), $filterDate); + + $totalIncome = (clone $orderQuery)->sum('total'); + $totalCogs = (clone $orderQuery)->sum('cogs'); + $totalDiscount = (clone $orderQuery)->sum('discount'); + + $expenseQuery = Expense::when(! empty($outletIds), fn ($q) => $q->whereIn('outlet_id', $outletIds)) + ->when($dateQuery || ($startDate && $endDate), $filterDate); + $totalExpense = $expenseQuery->sum('amount'); + + $payrollQuery = Payroll::when(! empty($outletIds), fn ($q) => $q->whereHas('user.outlets', fn ($q2) => $q2->whereIn('outlets.id', $outletIds))) + ->when($dateQuery || ($startDate && $endDate), $filterDate) + ->paid(); + $totalPayroll = $payrollQuery->sum('total_salary'); + + $grossProfit = $totalIncome - $totalCogs - $totalDiscount; + $netProfit = $grossProfit - $totalExpense - $totalPayroll; + $this->orders = array_filter([ [ 'title' => 'Total Order', 'value' => formatCurrencyNumber( - Order::when(! empty($outletIds), fn ($q) => $q->whereIn('outlet_id', $outletIds)) - ->when($dateQuery || ($startDate && $endDate), $filterDate) - ->count() + (clone $orderQuery)->count() ), ], [ 'title' => 'Pendapatan', - 'value' => formatCurrencyNumber( - Order::when(! empty($outletIds), fn ($q) => $q->whereIn('outlet_id', $outletIds)) - ->when($dateQuery || ($startDate && $endDate), $filterDate) - ->sum('total'), - 'Rp' - ), + 'value' => formatCurrencyNumber($totalIncome, 'Rp'), ], auth()->user()->hasRole(['Developer', 'Owner']) ? [ 'title' => 'HPP', - 'value' => formatCurrencyNumber( - Order::when(! empty($outletIds), fn ($q) => $q->whereIn('outlet_id', $outletIds)) - ->when($dateQuery || ($startDate && $endDate), $filterDate) - ->sum('cogs'), - 'Rp' - ), + 'value' => formatCurrencyNumber($totalCogs, 'Rp'), + ] : null, + + auth()->user()->hasRole(['Developer', 'Owner']) ? [ + 'title' => 'Laba Kotor', + 'value' => formatCurrencyNumber($grossProfit, 'Rp'), + ] : null, + + auth()->user()->hasRole(['Developer', 'Owner']) ? [ + 'title' => 'Laba Bersih', + 'value' => formatCurrencyNumber($netProfit, 'Rp'), ] : null, [ 'title' => 'Diskon', - 'value' => formatCurrencyNumber( - Order::when(! empty($outletIds), fn ($q) => $q->whereIn('outlet_id', $outletIds)) - ->when($dateQuery || ($startDate && $endDate), $filterDate) - ->sum('discount'), - 'Rp' - ), + 'value' => formatCurrencyNumber($totalDiscount, 'Rp'), ], [ 'title' => 'Voucher Terpakai', 'value' => formatCurrencyNumber( - Order::when(! empty($outletIds), fn ($q) => $q->whereIn('outlet_id', $outletIds)) - ->when($dateQuery || ($startDate && $endDate), $filterDate) - ->whereNotNull('voucher_id')->count() + (clone $orderQuery)->whereNotNull('voucher_id')->count() ), ], [