feat: Adjust role permissions for warehouse management, analysis, and member vouchers, while refining customer table actions, warehouse column visibility, and dashboard statistics.

This commit is contained in:
Yoga Pangestu 2026-01-05 22:36:29 +07:00
parent 754b65259e
commit 10934a2aba
4 changed files with 25 additions and 18 deletions

View File

@ -71,6 +71,10 @@ public function columns(): array
Column::make('Aksi') Column::make('Aksi')
->label(function ($row) { ->label(function ($row) {
if ($row->user) {
return '';
}
$actions = ''; $actions = '';
if (auth()->user()->can('update customer')) { if (auth()->user()->can('update customer')) {
@ -96,6 +100,7 @@ public function columns(): array
public function builder(): Builder public function builder(): Builder
{ {
return Customer::select('customers.id', 'name', 'phone_number', 'gender', 'customers.created_at')->with('user', 'orders'); return Customer::select('customers.id', 'name', 'phone_number', 'gender', 'customers.created_at', 'user_id')
->with('user', 'orders');
} }
} }

View File

@ -48,7 +48,7 @@ public function columns(): array
return $actions; return $actions;
}) })
->html() ->html()
->hideIf(auth()->user()->cannot('view warehouse') && auth()->user()->cannot('update warehouse') && auth()->user()->cannot('delete warehouse')), ->hideIf(auth()->user()->cannot('show warehouse') && auth()->user()->cannot('update warehouse') && auth()->user()->cannot('delete warehouse')),
]; ];
} }

View File

@ -202,7 +202,7 @@ public function render(): View
->get()->keyBy('orderable_type'); ->get()->keyBy('orderable_type');
$this->todayCategoryChart = [ $this->todayCategoryChart = [
'labels' => ['Parfum', 'Produk Jadi', 'Botol'], 'labels' => ['Parfum', 'Produk', 'Botol'],
'data' => [ 'data' => [
(int) ($categorySales->get(Perfume::class)?->total ?? 0), (int) ($categorySales->get(Perfume::class)?->total ?? 0),
(int) ($categorySales->get(Product::class)?->total ?? 0), (int) ($categorySales->get(Product::class)?->total ?? 0),
@ -287,7 +287,7 @@ public function render(): View
]; ];
$this->stats = array_values(array_filter([ $this->stats = array_values(array_filter([
[ auth()->user()->hasRole(['Developer', 'Owner']) ? [
'title' => 'Average Order Value (AOV)', 'title' => 'Average Order Value (AOV)',
'value' => formatCurrencyNumber($todayAov, 'Rp'), 'value' => formatCurrencyNumber($todayAov, 'Rp'),
'previous' => formatCurrencyNumber($yesterdayAov, 'Rp'), 'previous' => formatCurrencyNumber($yesterdayAov, 'Rp'),
@ -295,8 +295,9 @@ public function render(): View
? round((($todayAov - $yesterdayAov) / $yesterdayAov) * 100, 1).'%' ? round((($todayAov - $yesterdayAov) / $yesterdayAov) * 100, 1).'%'
: '∞%', : '∞%',
'trendUp' => $todayAov > $yesterdayAov, 'trendUp' => $todayAov > $yesterdayAov,
], ] : null,
[
auth()->user()->hasRole(['Developer', 'Owner']) ? [
'title' => 'Profit Margin', 'title' => 'Profit Margin',
'value' => round($todayProfitMargin, 1).'%', 'value' => round($todayProfitMargin, 1).'%',
'previous' => round($yesterdayProfitMargin, 1).'%', 'previous' => round($yesterdayProfitMargin, 1).'%',
@ -304,7 +305,8 @@ public function render(): View
? round($todayProfitMargin - $yesterdayProfitMargin, 1).'%' ? round($todayProfitMargin - $yesterdayProfitMargin, 1).'%'
: '∞%', : '∞%',
'trendUp' => $todayProfitMargin > $yesterdayProfitMargin, 'trendUp' => $todayProfitMargin > $yesterdayProfitMargin,
], ] : null,
[ [
'title' => 'Total Order', 'title' => 'Total Order',
'value' => $todayOrder, 'value' => $todayOrder,
@ -314,6 +316,7 @@ public function render(): View
: '∞%', : '∞%',
'trendUp' => $todayOrder > $yesterdayOrder, 'trendUp' => $todayOrder > $yesterdayOrder,
], ],
[ [
'title' => 'Pendapatan', 'title' => 'Pendapatan',
'value' => formatCurrencyNumber($todayIncome, 'Rp'), 'value' => formatCurrencyNumber($todayIncome, 'Rp'),
@ -345,6 +348,7 @@ public function render(): View
: '∞%', : '∞%',
'trendUp' => $todayNewMembers > $yesterdayNewMembers, 'trendUp' => $todayNewMembers > $yesterdayNewMembers,
], ],
[ [
'title' => 'Diskon', 'title' => 'Diskon',
'value' => formatCurrencyNumber($todayDiscount, 'Rp'), 'value' => formatCurrencyNumber($todayDiscount, 'Rp'),
@ -355,6 +359,7 @@ public function render(): View
'trendUp' => $todayDiscount > $yesterdayDiscount, 'trendUp' => $todayDiscount > $yesterdayDiscount,
'formatted' => formatCurrencyNumber($todayDiscount, 'Rp'), 'formatted' => formatCurrencyNumber($todayDiscount, 'Rp'),
], ],
[ [
'title' => 'Voucher Terpakai', 'title' => 'Voucher Terpakai',
'value' => $todayVoucher, 'value' => $todayVoucher,
@ -364,6 +369,7 @@ public function render(): View
: '∞%', : '∞%',
'trendUp' => $todayVoucher > $yesterdayVoucher, 'trendUp' => $todayVoucher > $yesterdayVoucher,
], ],
[ [
'title' => 'Beban Toko', 'title' => 'Beban Toko',
'value' => formatCurrencyNumber($todayExpense, 'Rp'), 'value' => formatCurrencyNumber($todayExpense, 'Rp'),
@ -413,6 +419,7 @@ public function render(): View
: '∞%', : '∞%',
'trendUp' => $todaySoldPerfume > $yesterdaySoldPerfume, 'trendUp' => $todaySoldPerfume > $yesterdaySoldPerfume,
], ],
[ [
'title' => 'Top Parfum', 'title' => 'Top Parfum',
'value' => optional($todayTopPerfume?->orderable)->name.' ('.$todayTopPerfume?->total_sold.'ml)' ?? '-', 'value' => optional($todayTopPerfume?->orderable)->name.' ('.$todayTopPerfume?->total_sold.'ml)' ?? '-',

View File

@ -183,8 +183,6 @@ public function run(): void
// member // member
'view member overview', 'view member overview',
'view member voucher',
'view member membership', 'view member membership',
'view member reward', 'view member reward',
@ -200,16 +198,12 @@ public function run(): void
$developer->syncPermissions($permissions, array_diff($permissions, [ $developer->syncPermissions($permissions, array_diff($permissions, [
'view member overview', 'view member overview',
'view partner overview', 'view partner overview',
'view member voucher',
'view member membership', 'view member membership',
])); ]));
$owner->syncPermissions($permissions, array_diff($permissions, [ $owner->syncPermissions($permissions, array_diff($permissions, [
'view member overview', 'view member overview',
'view partner overview', 'view partner overview',
'view member voucher',
'view member membership', 'view member membership',
'view member reward', 'view member reward',
])); ]));
@ -218,7 +212,7 @@ public function run(): void
'view member overview', 'view member overview',
'view partner overview', 'view partner overview',
'view member voucher', 'view analysis',
'view member membership', 'view member membership',
'view member reward', 'view member reward',
@ -226,6 +220,11 @@ public function run(): void
'update outlet', 'update outlet',
'delete outlet', 'delete outlet',
'show warehouse',
'create warehouse',
'update warehouse',
'delete warehouse',
'view user', 'view user',
'create user', 'create user',
'update user', 'update user',
@ -314,8 +313,6 @@ public function run(): void
'view partner overview', 'view partner overview',
'view analysis', 'view analysis',
'view member voucher',
'view member membership', 'view member membership',
'view member reward', 'view member reward',
@ -457,8 +454,6 @@ public function run(): void
'view member overview', 'view member overview',
'view member voucher',
'view member membership', 'view member membership',
'view member reward', 'view member reward',