feat: Add gross and net profit calculations to dashboard analysis and refactor metric retrieval.

This commit is contained in:
Yoga Pangestu 2025-12-16 21:16:48 +07:00
parent 14e79054c0
commit 4b1566c1a2

View File

@ -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()
),
],
[