user()->can('qms.ncr.view')) { abort(403); } $business_id = $request->session()->get('user.business_id'); $ncrs = NcrReport::forBusiness($business_id)->with(['reportedBy', 'assignedTo'])->latest('id')->paginate(20); return view('qualitymanagement::ncr.index', compact('ncrs')); } public function create() { if (! auth()->user()->can('qms.ncr.create')) { abort(403); } return view('qualitymanagement::ncr.create'); } public function store(Request $request, NcrWorkflowService $workflow, QmsIntegrationService $integration) { if (! auth()->user()->can('qms.ncr.create')) { abort(403); } $business_id = $request->session()->get('user.business_id'); $validated = $request->validate([ 'title' => 'required|string|max:255', 'description' => 'nullable|string', 'severity' => 'required|in:minor,major,critical', 'source' => 'required|in:internal,customer,supplier,audit,inspection,production', 'ie_bom_id' => 'nullable|integer', 'maintenance_equipment_id' => 'nullable|integer', ]); $workflow->createNcr($business_id, $validated, $integration); return redirect()->action([self::class, 'index'])->with('status', ['success' => 1, 'msg' => __('qualitymanagement::lang.ncr_created')]); } public function show($id) { if (! auth()->user()->can('qms.ncr.view')) { abort(403); } $business_id = request()->session()->get('user.business_id'); $ncr = NcrReport::forBusiness($business_id)->with('capaActions.owner')->findOrFail($id); return view('qualitymanagement::ncr.show', compact('ncr')); } public function createCapa($id, Request $request, NcrWorkflowService $workflow, QmsIntegrationService $integration) { if (! auth()->user()->can('qms.capa.create')) { abort(403); } $business_id = $request->session()->get('user.business_id'); $ncr = NcrReport::forBusiness($business_id)->findOrFail($id); $validated = $request->validate([ 'type' => 'required|in:corrective,preventive', 'title' => 'required|string|max:255', 'root_cause' => 'nullable|string', 'action_plan' => 'nullable|string', 'due_date' => 'nullable|date', ]); $workflow->escalateToCapa($ncr, $validated, $integration); return redirect()->back()->with('status', ['success' => 1, 'msg' => __('qualitymanagement::lang.capa_created')]); } public function close($id, NcrWorkflowService $workflow) { if (! auth()->user()->can('qms.ncr.update')) { abort(403); } $business_id = request()->session()->get('user.business_id'); $ncr = NcrReport::forBusiness($business_id)->findOrFail($id); try { $workflow->closeNcr($ncr); } catch (\RuntimeException $e) { return redirect()->back()->with('status', ['success' => 0, 'msg' => $e->getMessage()]); } return redirect()->back()->with('status', ['success' => 1, 'msg' => __('qualitymanagement::lang.ncr_closed')]); } }