88 lines
3.3 KiB
PHP
88 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace Modules\ShopFloor\Http\Controllers;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Modules\IndustrialEngineering\Models\LineTemplate;
|
|
use Modules\Maintenance\Models\Equipment;
|
|
use Modules\ShopFloor\Models\WorkCenter;
|
|
|
|
class WorkCenterController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
if (! auth()->user()->can('shopfloor.view')) {
|
|
abort(403);
|
|
}
|
|
|
|
$business_id = $request->session()->get('user.business_id');
|
|
$workCenters = WorkCenter::forBusiness($business_id)
|
|
->with(['lineTemplate', 'maintenanceEquipment'])
|
|
->orderBy('name')
|
|
->paginate(20);
|
|
|
|
$lineTemplates = LineTemplate::where('business_id', $business_id)->orderBy('template_code')->pluck('template_code', 'id');
|
|
$equipment = Equipment::where('business_id', $business_id)->orderBy('name')->pluck('name', 'id');
|
|
|
|
return view('shopfloor::work_centers.index', compact('workCenters', 'lineTemplates', 'equipment'));
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
if (! auth()->user()->can('shopfloor.view')) {
|
|
abort(403);
|
|
}
|
|
|
|
$business_id = $request->session()->get('user.business_id');
|
|
$validated = $request->validate([
|
|
'name' => 'required|string|max:255',
|
|
'code' => 'required|string|max:50',
|
|
'ie_line_template_id' => 'nullable|integer|exists:ie_line_templates,id',
|
|
'maintenance_equipment_id' => 'nullable|integer|exists:maintenance_equipment,id',
|
|
'capacity_per_hour' => 'nullable|numeric|min:0',
|
|
'status' => 'required|in:active,inactive,maintenance',
|
|
]);
|
|
|
|
WorkCenter::create(array_merge($validated, [
|
|
'business_id' => $business_id,
|
|
'capacity_per_hour' => $validated['capacity_per_hour'] ?? 0,
|
|
]));
|
|
|
|
return redirect()->action([self::class, 'index'])->with('status', ['success' => 1, 'msg' => __('shopfloor::lang.work_center_created')]);
|
|
}
|
|
|
|
public function update(Request $request, $id)
|
|
{
|
|
if (! auth()->user()->can('shopfloor.view')) {
|
|
abort(403);
|
|
}
|
|
|
|
$business_id = $request->session()->get('user.business_id');
|
|
$workCenter = WorkCenter::forBusiness($business_id)->findOrFail($id);
|
|
|
|
$validated = $request->validate([
|
|
'name' => 'required|string|max:255',
|
|
'code' => 'required|string|max:50',
|
|
'ie_line_template_id' => 'nullable|integer|exists:ie_line_templates,id',
|
|
'maintenance_equipment_id' => 'nullable|integer|exists:maintenance_equipment,id',
|
|
'capacity_per_hour' => 'nullable|numeric|min:0',
|
|
'status' => 'required|in:active,inactive,maintenance',
|
|
]);
|
|
|
|
$workCenter->update($validated);
|
|
|
|
return redirect()->action([self::class, 'index'])->with('status', ['success' => 1, 'msg' => __('shopfloor::lang.work_center_updated')]);
|
|
}
|
|
|
|
public function formOptions(Request $request): array
|
|
{
|
|
$business_id = $request->session()->get('user.business_id');
|
|
|
|
return [
|
|
'lineTemplates' => LineTemplate::where('business_id', $business_id)->orderBy('template_code')->pluck('template_code', 'id'),
|
|
'equipment' => Equipment::where('business_id', $business_id)->orderBy('name')->pluck('name', 'id'),
|
|
];
|
|
}
|
|
}
|