diff --git a/app/Modules/Core/Controllers/ActivityLogController.php b/app/Modules/Core/Controllers/ActivityLogController.php
index 7358403..ac5ec6f 100644
--- a/app/Modules/Core/Controllers/ActivityLogController.php
+++ b/app/Modules/Core/Controllers/ActivityLogController.php
@@ -23,6 +23,11 @@ class ActivityLogController extends Controller
'App\Modules\Inventory\Models\Warehouse' => '倉庫',
'App\Modules\Inventory\Models\Inventory' => '庫存',
'App\Modules\Finance\Models\UtilityFee' => '公共事業費',
+ 'App\Modules\Inventory\Models\GoodsReceipt' => '進貨單',
+ 'App\Modules\Production\Models\ProductionOrder' => '生產工單',
+ 'App\Modules\Production\Models\Recipe' => '生產配方',
+ 'App\Modules\Production\Models\RecipeItem' => '配方品項',
+ 'App\Modules\Production\Models\ProductionOrderItem' => '工單品項',
];
}
diff --git a/app/Modules/Core/Controllers/RoleController.php b/app/Modules/Core/Controllers/RoleController.php
index 4942d0e..f54d214 100644
--- a/app/Modules/Core/Controllers/RoleController.php
+++ b/app/Modules/Core/Controllers/RoleController.php
@@ -178,8 +178,12 @@ class RoleController extends Controller
'inventory' => '庫存管理',
'vendors' => '廠商資料管理',
'purchase_orders' => '採購單管理',
+ 'goods_receipts' => '進貨單管理',
+ 'production_orders' => '生產工單管理',
+ 'recipes' => '配方管理',
'users' => '使用者管理',
'roles' => '角色與權限',
+ 'system' => '系統管理',
'utility_fees' => '公共事業費管理',
'accounting' => '會計報表',
];
diff --git a/app/Modules/Inventory/Controllers/GoodsReceiptController.php b/app/Modules/Inventory/Controllers/GoodsReceiptController.php
index 40d14c4..3e221b9 100644
--- a/app/Modules/Inventory/Controllers/GoodsReceiptController.php
+++ b/app/Modules/Inventory/Controllers/GoodsReceiptController.php
@@ -228,4 +228,21 @@ class GoodsReceiptController extends Controller
return response()->json($vendors);
}
+
+ /**
+ * 刪除進貨單
+ */
+ public function destroy(GoodsReceipt $goodsReceipt)
+ {
+ // 只有有權限的人可以刪除
+ if (!auth()->user()->can('goods_receipts.delete')) {
+ return redirect()->back()->with('error', '您沒有權限刪除進貨單');
+ }
+
+ // 簡單刪除邏輯:刪除進貨單(品項由資料庫級聯刪除或手動處理)
+ // 注意:實務上可能需要處理已入庫的庫存回滾,但在這個簡易 ERP 中通常是行政刪除
+ $goodsReceipt->delete();
+
+ return redirect()->route('goods-receipts.index')->with('success', '進貨單已刪除');
+ }
}
diff --git a/database/seeders/PermissionSeeder.php b/database/seeders/PermissionSeeder.php
index c3ea1b8..d07794a 100644
--- a/database/seeders/PermissionSeeder.php
+++ b/database/seeders/PermissionSeeder.php
@@ -37,10 +37,25 @@ class PermissionSeeder extends Seeder
'inventory.view_cost', // 查看成本與價值
'inventory.adjust',
'inventory.transfer',
+ 'inventory.delete',
// 進貨單管理
'goods_receipts.view',
'goods_receipts.create',
+ 'goods_receipts.edit',
+ 'goods_receipts.delete',
+
+ // 生產工單管理
+ 'production_orders.view',
+ 'production_orders.create',
+ 'production_orders.edit',
+ 'production_orders.delete',
+
+ // 配方管理
+ 'recipes.view',
+ 'recipes.create',
+ 'recipes.edit',
+ 'recipes.delete',
// 供應商管理
'vendors.view',
@@ -101,8 +116,10 @@ class PermissionSeeder extends Seeder
'products.view', 'products.create', 'products.edit', 'products.delete',
'purchase_orders.view', 'purchase_orders.create', 'purchase_orders.edit',
'purchase_orders.delete', 'purchase_orders.publish',
- 'inventory.view', 'inventory.view_cost', 'inventory.adjust', 'inventory.transfer',
- 'goods_receipts.view', 'goods_receipts.create',
+ 'inventory.view', 'inventory.view_cost', 'inventory.adjust', 'inventory.transfer', 'inventory.delete',
+ 'goods_receipts.view', 'goods_receipts.create', 'goods_receipts.edit', 'goods_receipts.delete',
+ 'production_orders.view', 'production_orders.create', 'production_orders.edit', 'production_orders.delete',
+ 'recipes.view', 'recipes.create', 'recipes.edit', 'recipes.delete',
'vendors.view', 'vendors.create', 'vendors.edit', 'vendors.delete',
'warehouses.view', 'warehouses.create', 'warehouses.edit', 'warehouses.delete',
'users.view', 'users.create', 'users.edit',
@@ -115,8 +132,9 @@ class PermissionSeeder extends Seeder
// warehouse-manager 管理庫存與倉庫
$warehouseManager->givePermissionTo([
'products.view',
- 'inventory.view', 'inventory.adjust', 'inventory.transfer',
- 'goods_receipts.view', 'goods_receipts.create',
+ 'inventory.view', 'inventory.adjust', 'inventory.transfer', 'inventory.delete',
+ 'goods_receipts.view', 'goods_receipts.create', 'goods_receipts.edit', 'goods_receipts.delete',
+ 'production_orders.view', 'production_orders.create', 'production_orders.edit',
'warehouses.view', 'warehouses.create', 'warehouses.edit',
]);
diff --git a/resources/js/Components/ActivityLog/ActivityDetailDialog.tsx b/resources/js/Components/ActivityLog/ActivityDetailDialog.tsx
index fba4884..6d7fca2 100644
--- a/resources/js/Components/ActivityLog/ActivityDetailDialog.tsx
+++ b/resources/js/Components/ActivityLog/ActivityDetailDialog.tsx
@@ -114,10 +114,24 @@ const fieldLabels: Record