ultimatepos/Modules/ShopFloor/Http/Controllers/WorkCenterController.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'),
];
}
}