status, [BidPackageStatus::Open, BidPackageStatus::Evaluating]), 403, 'Award can only be made from an open or evaluating package.' ); $validated = $request->validate([ 'submission_id' => 'required|string', 'notes' => 'nullable|string|max:1000', ]); $submission = BidSubmission::findByUlid($validated['submission_id']); abort_if(!$submission, 404, 'Submission not found.'); abort_unless( $submission->invitation->bid_package_id === $bid->id, 422, 'Submission does not belong to this bid package.' ); $award = BidAward::createAward( $bid, $submission, Auth::user(), $validated['notes'] ?? null ); BidAwarded::dispatch($award); return redirect() ->route('bids.show', $bid) ->with('success', 'Contract awarded successfully. Project contractor has been updated.'); } }