authorizeMaintenanceAccess('maintenance.lines.view'); $business_id = $this->maintenanceUtil->getBusinessId(); if ($request->ajax()) { $lines = ProductionLine::where('business_id', $business_id) ->with('project:id,name') ->withCount('equipment') ->orderBy('name'); if ($project_id = $request->get('project_id')) { $lines->where('project_id', $project_id); } return DataTables::of($lines) ->addColumn('project_name', fn ($row) => $row->project?->name ?? '—') ->addColumn('status_label', fn ($row) => $this->maintenanceUtil->statusLabel($row->status)) ->addColumn('action', function ($row) { $html = '
'; if (auth()->user()->can('maintenance.lines.update')) { $html .= ''; } if (auth()->user()->can('maintenance.lines.delete')) { $html .= ' '; } $html .= '
'; return $html; }) ->rawColumns(['action']) ->make(true); } return view('maintenance::production_lines.index', [ 'projects' => $this->maintenanceUtil->getProjectsDropdown($business_id), ]); } public function create() { $this->authorizeMaintenanceAccess('maintenance.lines.create'); $business_id = $this->maintenanceUtil->getBusinessId(); return view('maintenance::production_lines.create', [ 'projects' => $this->maintenanceUtil->getProjectsDropdown($business_id), 'statuses' => ['active' => 'فعال', 'inactive' => 'غیرفعال'], ]); } public function store(Request $request) { $this->authorizeMaintenanceAccess('maintenance.lines.create'); $business_id = $this->maintenanceUtil->getBusinessId(); $data = $request->validate([ 'project_id' => 'nullable|exists:pjt_projects,id', 'code' => 'required|string|max:50', 'name' => 'required|string|max:255', 'description' => 'nullable|string', 'location' => 'nullable|string|max:255', 'status' => 'sometimes|in:active,inactive', ]); ProductionLine::create(array_merge($data, [ 'business_id' => $business_id, 'status' => $data['status'] ?? 'active', ])); return $this->maintenanceUtil->jsonOrRedirect($request, true, 'خط تولید ایجاد شد.'); } public function edit($id) { $this->authorizeMaintenanceAccess('maintenance.lines.update'); $business_id = $this->maintenanceUtil->getBusinessId(); $production_line = ProductionLine::where('business_id', $business_id)->findOrFail($id); return view('maintenance::production_lines.edit', [ 'production_line' => $production_line, 'projects' => $this->maintenanceUtil->getProjectsDropdown($business_id), 'statuses' => ['active' => 'فعال', 'inactive' => 'غیرفعال'], ]); } public function update(Request $request, $id) { $this->authorizeMaintenanceAccess('maintenance.lines.update'); $business_id = $this->maintenanceUtil->getBusinessId(); $production_line = ProductionLine::where('business_id', $business_id)->findOrFail($id); $data = $request->validate([ 'project_id' => 'nullable|exists:pjt_projects,id', 'code' => 'required|string|max:50', 'name' => 'required|string|max:255', 'description' => 'nullable|string', 'location' => 'nullable|string|max:255', 'status' => 'sometimes|in:active,inactive', ]); $production_line->update($data); return $this->maintenanceUtil->jsonOrRedirect($request, true, 'خط تولید به‌روزرسانی شد.'); } public function destroy(Request $request, $id) { $this->authorizeMaintenanceAccess('maintenance.lines.delete'); $business_id = $this->maintenanceUtil->getBusinessId(); $production_line = ProductionLine::where('business_id', $business_id)->withCount('equipment')->findOrFail($id); if ($production_line->equipment_count > 0) { return $this->maintenanceUtil->jsonOrRedirect($request, false, 'این خط تولید دارای تجهیز است و قابل حذف نیست.'); } $production_line->delete(); return $this->maintenanceUtil->jsonOrRedirect($request, true, 'خط تولید حذف شد.'); } }