feat: add new permissions and update related functionality for owner verifications and stock management

This commit is contained in:
Yoga Pangestu 2026-06-21 15:44:03 +07:00
parent 245127c921
commit 60e87803d8
6 changed files with 31 additions and 7 deletions

View File

@ -76,6 +76,12 @@ enum Permission: string
case CUTTINGS_VERIFY = 'cuttings.verify';
case CUTTINGS_REJECT = 'cuttings.reject';
case OWNER_VERIFICATIONS_VIEW = 'owner-verifications.view';
case OWNER_VERIFICATIONS_VERIFY = 'owner-verifications.verify';
case OWNER_VERIFICATIONS_REJECT = 'owner-verifications.reject';
case STOCKS_VIEW = 'stocks.view';
case CASH_VIEW = 'cash.view';
case CASH_DEPOSIT = 'cash.deposit';
case CASH_WITHDRAW = 'cash.withdraw';
@ -178,6 +184,12 @@ public function label(): string
self::CUTTINGS_VERIFY => 'Verifikasi Cutting',
self::CUTTINGS_REJECT => 'Tolak Cutting',
self::OWNER_VERIFICATIONS_VIEW => 'Lihat Verifikasi Owner',
self::OWNER_VERIFICATIONS_VERIFY => 'Setujui Verifikasi Owner',
self::OWNER_VERIFICATIONS_REJECT => 'Tolak Verifikasi Owner',
self::STOCKS_VIEW => 'Lihat Stok',
self::CASH_VIEW => 'Lihat Kas',
self::CASH_DEPOSIT => 'Setor Kas',
self::CASH_WITHDRAW => 'Tarik Kas',
@ -239,6 +251,9 @@ public function group(): string
self::CUTTINGS_VIEW, self::CUTTINGS_CREATE, self::CUTTINGS_UPDATE,
self::CUTTINGS_DELETE, self::CUTTINGS_COMPLETE, self::CUTTINGS_VERIFY,
self::CUTTINGS_REJECT => 'Cutting',
self::OWNER_VERIFICATIONS_VIEW, self::OWNER_VERIFICATIONS_VERIFY,
self::OWNER_VERIFICATIONS_REJECT => 'Verifikasi Owner',
self::STOCKS_VIEW => 'Stok',
self::CASH_VIEW, self::CASH_DEPOSIT, self::CASH_WITHDRAW, self::CASH_UPDATE, self::CASH_DELETE => 'Kas',
self::EXPENSES_VIEW, self::EXPENSES_CREATE, self::EXPENSES_UPDATE,
self::EXPENSES_DELETE => 'Pengeluaran',

View File

@ -50,6 +50,8 @@ public function permissions(): array
Permission::EMPLOYEES_VIEW,
Permission::STOCKS_VIEW,
Permission::ATTENDANCES_VIEW,
Permission::ATTENDANCES_CREATE,
Permission::ATTENDANCES_DELETE,
@ -92,6 +94,8 @@ public function permissions(): array
self::ADMIN_TOKO => [
Permission::DASHBOARD_VIEW,
Permission::STOCKS_VIEW,
Permission::CUTTINGS_VERIFY,
Permission::ATTENDANCES_VIEW,
@ -193,6 +197,8 @@ public function permissions(): array
self::ADMIN_BAHAN_BAKU => [
Permission::DASHBOARD_VIEW,
Permission::STOCKS_VIEW,
Permission::ATTENDANCES_VIEW,
Permission::ATTENDANCES_CREATE,
@ -219,6 +225,7 @@ public function permissions(): array
Permission::CUTTINGS_UPDATE,
Permission::CUTTINGS_DELETE,
Permission::CUTTINGS_COMPLETE,
Permission::CUTTINGS_VERIFY,
Permission::PURCHASES_VIEW,
Permission::PURCHASES_CREATE,

View File

@ -107,7 +107,7 @@ private function pendingCuttings(Request $request): int
{
$user = $request->user();
if ($user === null || ! $user->can('cuttings.view')) {
if ($user === null || ! $user->can('stocks.view')) {
return 0;
}
@ -120,7 +120,7 @@ private function pendingOwnerVerifications(Request $request): int
{
$user = $request->user();
if ($user === null || ! $user->can('cuttings.verify')) {
if ($user === null || ! $user->can('owner-verifications.view')) {
return 0;
}

View File

@ -54,8 +54,8 @@ const menuGroups: MenuGroup[] = [
items: [
{ title: 'Belanja', href: '/admin/manage/purchases', icon: ShoppingBag, permission: 'purchases.view' },
{ title: 'Cutting', href: '/admin/manage/cuttings', icon: Scissors, permission: 'cuttings.view' },
{ title: 'Stok', href: '/admin/manage/stocks', icon: Warehouse, permission: 'cuttings.view', badgeKey: 'pendingCuttings' },
{ title: 'Verifikasi Owner', href: '/admin/manage/owner-verifications', icon: CheckCircle, permission: 'cuttings.verify', badgeKey: 'pendingOwnerVerifications' },
{ title: 'Stok', href: '/admin/manage/stocks', icon: Warehouse, permission: 'stocks.view', badgeKey: 'pendingCuttings' },
{ title: 'Verifikasi Owner', href: '/admin/manage/owner-verifications', icon: CheckCircle, permission: 'owner-verifications.view', badgeKey: 'pendingOwnerVerifications' },
{ title: 'Pesanan', href: '/admin/manage/orders', icon: ShoppingCart, permission: 'orders.view' },
],
},

View File

@ -76,7 +76,7 @@ function submitReject() {
</script>
<template>
<div v-if="can('cuttings.verify')" class="flex items-center gap-1">
<div v-if="can('owner-verifications.verify')" class="flex items-center gap-1">
<Tooltip>
<TooltipTrigger as-child>
<Button

View File

@ -299,7 +299,7 @@
});
Route::prefix('stocks')->name('stocks.')
->middleware('permission:'.Permission::CUTTINGS_VIEW->value)
->middleware('permission:'.Permission::STOCKS_VIEW->value)
->group(function () {
Route::get('/', [StockController::class, 'index'])->name('index');
@ -309,14 +309,16 @@
});
Route::prefix('owner-verifications')->name('owner-verifications.')
->middleware('permission:'.Permission::CUTTINGS_VERIFY->value)
->middleware('permission:'.Permission::OWNER_VERIFICATIONS_VIEW->value)
->group(function () {
Route::get('/', [OwnerVerificationController::class, 'index'])->name('index');
Route::post('{cutting}/approve', [OwnerVerificationController::class, 'approve'])
->middleware('permission:'.Permission::OWNER_VERIFICATIONS_VERIFY->value)
->name('approve');
Route::post('{cutting}/reject', [OwnerVerificationController::class, 'reject'])
->middleware('permission:'.Permission::OWNER_VERIFICATIONS_REJECT->value)
->name('reject');
});
});