From d2d10ea63a5e9777a74a9ee8e23f8dc7c0311677 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Thu, 6 Aug 2026 22:19:58 +0700 Subject: [PATCH] feat: add transfer stock and view stock mutations permissions for products --- app/Enums/Permission.php | 5 ++--- database/seeders/RolePermissionSeeder.php | 10 +++------- .../js/pages/admin/master/product/variant/sub-row.tsx | 4 ++-- routes/web.php | 4 ++-- 4 files changed, 9 insertions(+), 14 deletions(-) diff --git a/app/Enums/Permission.php b/app/Enums/Permission.php index 5131b9d..89b4997 100644 --- a/app/Enums/Permission.php +++ b/app/Enums/Permission.php @@ -71,9 +71,8 @@ enum Permission: string case PRODUCTS_UPDATE = 'products.update'; case PRODUCTS_DELETE = 'products.delete'; case PRODUCTS_TOGGLE_STATUS = 'products.toggle_status'; - - // Stocks - case STOCKS_VIEW = 'stocks.view'; + case PRODUCTS_TRANSFER_STOCK = 'products.transfer_stock'; + case PRODUCTS_VIEW_STOCK_MUTATIONS = 'products.view_stock_mutations'; // Orders case ORDERS_VIEW = 'orders.view'; diff --git a/database/seeders/RolePermissionSeeder.php b/database/seeders/RolePermissionSeeder.php index f754601..0c77041 100644 --- a/database/seeders/RolePermissionSeeder.php +++ b/database/seeders/RolePermissionSeeder.php @@ -21,7 +21,7 @@ public function run(): void 'leave_requests' => ['view', 'create', 'update', 'delete', 'verify'], 'categories' => ['view', 'create', 'update', 'delete'], 'customers' => ['view', 'create', 'update', 'delete'], - 'products' => ['view', 'create', 'update', 'delete', 'toggle_status'], + 'products' => ['view', 'create', 'update', 'delete', 'toggle_status', 'transfer_stock', 'view_stock_mutations'], 'stocks' => ['view'], 'orders' => ['view', 'create', 'update', 'delete', 'send', 'complete', 'cancel'], 'cuttings' => ['view', 'create', 'update', 'delete', 'complete'], @@ -92,7 +92,6 @@ public function run(): void 'analysis.top_products', 'analysis.marketing_sales', - 'stocks.view', 'stok_opnames.view', 'attendances.view', @@ -124,6 +123,8 @@ public function run(): void 'products.update', 'products.delete', 'products.toggle_status', + 'products.transfer_stock', + 'products.view_stock_mutations', 'owner_verifications.view', @@ -251,7 +252,6 @@ public function run(): void 'raw_materials.create', 'raw_materials.update', 'raw_materials.toggle_status', - 'stocks.view', 'owner_verifications.view', @@ -396,8 +396,6 @@ public function run(): void 'products.view', - 'stocks.view', - 'orders.view', 'cuttings.view', @@ -455,8 +453,6 @@ public function run(): void 'products.view', - 'stocks.view', - 'stok_opnames.view', 'stok_opnames.create', 'stok_opnames.update', diff --git a/resources/js/pages/admin/master/product/variant/sub-row.tsx b/resources/js/pages/admin/master/product/variant/sub-row.tsx index 6377be6..1042938 100644 --- a/resources/js/pages/admin/master/product/variant/sub-row.tsx +++ b/resources/js/pages/admin/master/product/variant/sub-row.tsx @@ -124,7 +124,7 @@ export function VariantSubRow({ icon: ( ), - show: can('stocks.view'), + show: can('products.transfer_stock'), onClick: () => setTransferVariant({ product, @@ -136,7 +136,7 @@ export function VariantSubRow({ icon: ( ), - show: can('stocks.view'), + show: can('products.view_stock_mutations'), onClick: () => { router.visit( stockMutations.url({ diff --git a/routes/web.php b/routes/web.php index 6657c1d..4b4ca00 100644 --- a/routes/web.php +++ b/routes/web.php @@ -45,8 +45,8 @@ Route::delete('products/{product}/variants/{variant}', [ProductVariantController::class, 'destroy'])->name('products.variants.destroy')->middleware('permission:products.delete'); Route::get('products/{product}/variants/{variant}/edit', [ProductVariantController::class, 'edit'])->name('products.variants.edit')->middleware('permission:products.update'); Route::put('products/{product}/variants/{variant}', [ProductVariantController::class, 'update'])->name('products.variants.update')->middleware('permission:products.update'); - Route::post('products/{product}/variants/{variant}/transfer-stock', [ProductVariantController::class, 'transferStock'])->name('products.variants.transfer-stock')->middleware('permission:products.update'); - Route::get('products/{product}/variants/{variant}/stock-mutations', [StockMutationController::class, 'index'])->name('products.variants.stock-mutations')->middleware('permission:products.view'); + Route::post('products/{product}/variants/{variant}/transfer-stock', [ProductVariantController::class, 'transferStock'])->name('products.variants.transfer-stock')->middleware('permission:products.transfer_stock'); + Route::get('products/{product}/variants/{variant}/stock-mutations', [StockMutationController::class, 'index'])->name('products.variants.stock-mutations')->middleware('permission:products.view_stock_mutations'); Route::resource('raw-materials', RawMaterialController::class)->except(['show'])->middleware('permission:raw_materials.view|raw_materials.create|raw_materials.update|raw_materials.delete'); Route::post('raw-materials/{rawMaterial}/toggle-status', [RawMaterialController::class, 'toggleStatus'])->name('raw-materials.toggle-status')->middleware('permission:raw_materials.toggle_status');