invitation->package; abort_unless($package->status === BidPackageStatus::Evaluating, 403, 'Package is not in evaluation phase.'); $validated = $request->validate([ 'scores' => 'required|array', 'scores.*.criteria_id' => 'required|integer|exists:bid_criteria,id', 'scores.*.score' => 'required|numeric|min:0|max:100', 'scores.*.notes' => 'nullable|string|max:500', ]); foreach ($validated['scores'] as $entry) { BidScore::updateOrCreate( [ 'bid_submission_id' => $submission->id, 'bid_criteria_id' => $entry['criteria_id'], ], [ 'evaluated_by' => Auth::id(), 'score' => $entry['score'], 'notes' => $entry['notes'] ?? null, ] ); } return back()->with('success', 'Scores saved.'); } }