Files
GSB-Construction/Modules/BiddingManagement/app/Http/Controllers/BidAwardController.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.');
}
}