Implementa revisao de adjudicacoes e navegacao partilhada do SGC
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
namespace App\Services;
|
||||
|
||||
use App\Enums\PurchasingRole;
|
||||
use App\Models\AwardCancellation;
|
||||
use App\Models\Equipment;
|
||||
use App\Models\ProposalEvaluation;
|
||||
use App\Models\PurchaseAward;
|
||||
@@ -77,6 +78,7 @@ class PurchaseWorkflow
|
||||
$user = app(CurrentActor::class)->lock($user);
|
||||
$requisition = Requisition::query()->lockForUpdate()->findOrFail($award->requisition_id);
|
||||
$award = PurchaseAward::query()->lockForUpdate()->findOrFail($award->id);
|
||||
$this->assertNoPendingCancellation($award);
|
||||
abort_unless($this->canDecide($user, $award, $requisition), 403);
|
||||
if ($decision === 'approved') {
|
||||
$this->currentBasis($user, $award, $requisition);
|
||||
@@ -105,6 +107,7 @@ class PurchaseWorkflow
|
||||
if ($existing) {
|
||||
return $existing;
|
||||
}
|
||||
$this->assertNoPendingCancellation($award);
|
||||
if ($award->status !== 'approved') {
|
||||
throw ValidationException::withMessages(['approvals' => 'Conclua as aprovações do valor adjudicado antes de emitir a ordem.']);
|
||||
}
|
||||
@@ -287,4 +290,11 @@ class PurchaseWorkflow
|
||||
app(EquipmentWorkflow::class)->line($line->toArray(), $requisition->department_id, $requisition->priority);
|
||||
}
|
||||
}
|
||||
|
||||
private function assertNoPendingCancellation(PurchaseAward $award): void
|
||||
{
|
||||
if (AwardCancellation::query()->where('purchase_award_id', $award->id)->where('status', 'pending')->exists()) {
|
||||
throw ValidationException::withMessages(['cancellation' => 'Existe pedido de cancelamento pendente. Aguarde a decisão antes de aprovar ou emitir.']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user