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_VERIFY = 'cuttings.verify';
case CUTTINGS_REJECT = 'cuttings.reject'; 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_VIEW = 'cash.view';
case CASH_DEPOSIT = 'cash.deposit'; case CASH_DEPOSIT = 'cash.deposit';
case CASH_WITHDRAW = 'cash.withdraw'; case CASH_WITHDRAW = 'cash.withdraw';
@ -178,6 +184,12 @@ public function label(): string
self::CUTTINGS_VERIFY => 'Verifikasi Cutting', self::CUTTINGS_VERIFY => 'Verifikasi Cutting',
self::CUTTINGS_REJECT => 'Tolak 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_VIEW => 'Lihat Kas',
self::CASH_DEPOSIT => 'Setor Kas', self::CASH_DEPOSIT => 'Setor Kas',
self::CASH_WITHDRAW => 'Tarik 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_VIEW, self::CUTTINGS_CREATE, self::CUTTINGS_UPDATE,
self::CUTTINGS_DELETE, self::CUTTINGS_COMPLETE, self::CUTTINGS_VERIFY, self::CUTTINGS_DELETE, self::CUTTINGS_COMPLETE, self::CUTTINGS_VERIFY,
self::CUTTINGS_REJECT => 'Cutting', 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::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_VIEW, self::EXPENSES_CREATE, self::EXPENSES_UPDATE,
self::EXPENSES_DELETE => 'Pengeluaran', self::EXPENSES_DELETE => 'Pengeluaran',

View File

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

View File

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

View File

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

View File

@ -76,7 +76,7 @@ function submitReject() {
</script> </script>
<template> <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> <Tooltip>
<TooltipTrigger as-child> <TooltipTrigger as-child>
<Button <Button

View File

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