Implementa recomendação formal com adopção e conferência independente
This commit is contained in:
@@ -7,13 +7,16 @@ use App\Models\AuditLog;
|
||||
use App\Models\AwardCancellation;
|
||||
use App\Models\PurchaseAward;
|
||||
use App\Models\PurchaseOrder;
|
||||
use App\Models\RecommendationAttempt;
|
||||
use App\Models\Requisition;
|
||||
use App\Services\FormalRecommendation;
|
||||
use App\Services\ProposalComparison;
|
||||
use App\Services\PurchaseWorkflow;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Inertia\Inertia;
|
||||
use Inertia\Response;
|
||||
|
||||
@@ -30,10 +33,25 @@ class PurchaseController extends Controller
|
||||
Requisition::query()->visibleTo($request->user())->findOrFail($requisition->id);
|
||||
$award = PurchaseAward::query()->where('requisition_id', $requisition->id)->with('approvals')->first();
|
||||
$frozen = $award && AwardCancellation::query()->where('purchase_award_id', $award->id)->where('status', 'pending')->exists();
|
||||
$recommendation = app(FormalRecommendation::class);
|
||||
$adoption = $recommendation->adoption($requisition);
|
||||
$candidate = null;
|
||||
if ($adoption) {
|
||||
$latest = RecommendationAttempt::query()->where('recommendation_adoption_id', $adoption->id)->latest('revision')->first();
|
||||
if ($latest) {
|
||||
try {
|
||||
$recommendation->selection($requisition, $latest->quotation_id);
|
||||
$candidate = $latest->quotation_id;
|
||||
} catch (ValidationException) {
|
||||
// The POST revalidates again; stale recommendations cannot enable the form.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Inertia::render('purchases/award', [
|
||||
'requisition' => $requisition, 'comparison' => $comparison->inspect($requisition), 'award' => $award,
|
||||
'canSelect' => $request->user()->purchasing_role === PurchasingRole::Procurement && $award === null && $request->user()->id !== $requisition->requester_id,
|
||||
'canSelect' => $request->user()->purchasing_role === PurchasingRole::Procurement && $award === null && $request->user()->id !== $requisition->requester_id && (! $adoption || $candidate !== null),
|
||||
'recommendation' => ['adopted' => $adoption !== null, 'quotation_id' => $candidate],
|
||||
'canDecide' => ! $frozen && $award !== null && $workflow->canDecide($request->user(), $award, $requisition),
|
||||
'canIssue' => ! $frozen && $award?->status === 'approved' && $request->user()->purchasing_role === PurchasingRole::Procurement,
|
||||
'order' => PurchaseOrder::query()->where('requisition_id', $requisition->id)->first(['id', 'number']),
|
||||
|
||||
Reference in New Issue
Block a user