feat: add transfer stock and view stock mutations permissions for products

This commit is contained in:
Yoga Pangestu 2026-08-06 22:19:58 +07:00
parent a10a1700b0
commit d2d10ea63a
4 changed files with 9 additions and 14 deletions

View File

@ -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';

View File

@ -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',

View File

@ -124,7 +124,7 @@ export function VariantSubRow({
icon: (
<ArrowRightLeft className="h-4 w-4" />
),
show: can('stocks.view'),
show: can('products.transfer_stock'),
onClick: () =>
setTransferVariant({
product,
@ -136,7 +136,7 @@ export function VariantSubRow({
icon: (
<ScrollText className="h-4 w-4" />
),
show: can('stocks.view'),
show: can('products.view_stock_mutations'),
onClick: () => {
router.visit(
stockMutations.url({

View File

@ -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');