ensureCrmSubscription(); $scope = CustomerMaintenanceScopeService::forCurrentUser(); if (! $scope->failureReportsAvailable()) { return view('portal::customer.service_requests.index', ['requests' => collect()]); } $requests = FailureReport::where('business_id', $this->businessId()) ->whereIn('equipment_id', $scope->equipmentIds()) ->with(['equipment:id,name,code']) ->orderByDesc('reported_at') ->paginate(20); return view('portal::customer.service_requests.index', compact('requests')); } public function create() { $this->ensureCrmSubscription(); $scope = CustomerMaintenanceScopeService::forCurrentUser(); $equipment = $scope->equipmentQuery() ->select('id', 'name', 'code', 'project_id', 'production_line_id') ->with(['project:id,name', 'productionLine:id,name']) ->orderBy('name') ->get(); $selectedEquipmentId = request()->get('equipment_id'); return view('portal::customer.service_requests.create', compact('equipment', 'selectedEquipmentId')); } public function store(Request $request) { $this->ensureCrmSubscription(); $scope = CustomerMaintenanceScopeService::forCurrentUser(); if (! $scope->failureReportsAvailable()) { abort(404); } $data = $request->validate([ 'equipment_id' => 'required|integer', 'failure_type' => 'nullable|string|max:255', 'root_cause' => 'required|string|max:2000', ]); if (! $scope->ownsEquipment((int) $data['equipment_id'])) { abort(403); } $equipment = $scope->equipmentQuery()->findOrFail($data['equipment_id']); $report = FailureReport::create([ 'business_id' => $this->businessId(), 'equipment_id' => $equipment->id, 'project_id' => $equipment->project_id, 'production_line_id' => $equipment->production_line_id, 'failure_type' => $data['failure_type'] ?? __('portal::lang.service_request'), 'root_cause' => $data['root_cause'], 'reported_by' => auth()->id(), 'reported_at' => now(), ]); if ($scope->workOrdersAvailable()) { WorkOrder::create([ 'business_id' => $this->businessId(), 'equipment_id' => $equipment->id, 'project_id' => $equipment->project_id, 'production_line_id' => $equipment->production_line_id, 'work_order_number' => 'SR-'.now()->format('ymd').'-'.$report->id, 'requester_id' => auth()->id(), 'priority' => 'medium', 'description' => $data['root_cause'], 'status' => 'open', ]); } return redirect() ->action([self::class, 'index']) ->with('status', ['success' => 1, 'msg' => __('portal::lang.service_request_submitted')]); } }