44 lines
1.5 KiB
PHP
44 lines
1.5 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\Models\BidScore;
|
|
use Modules\BiddingManagement\Models\BidSubmission;
|
|
|
|
class BidScoreController extends Controller
|
|
{
|
|
public function store(Request $request, BidSubmission $submission)
|
|
{
|
|
$package = $submission->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.');
|
|
}
|
|
}
|