52 lines
1.6 KiB
PHP
52 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace Modules\BiddingManagement\Http\Controllers;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Modules\BiddingManagement\Enums\BidPackageStatus;
|
|
use Modules\BiddingManagement\Events\BidAwarded;
|
|
use Modules\BiddingManagement\Models\BidAward;
|
|
use Modules\BiddingManagement\Models\BidPackage;
|
|
use Modules\BiddingManagement\Models\BidSubmission;
|
|
|
|
class BidAwardController extends Controller
|
|
{
|
|
public function store(Request $request, BidPackage $bid)
|
|
{
|
|
abort_unless(
|
|
in_array($bid->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.');
|
|
}
|
|
}
|