commit9
tests / ci (push) Canceled after 0s

This commit is contained in:
2026-10-30 20:02:30 +02:00
parent 6d14b4e6f0
commit c6373365bf
225 changed files with 15365 additions and 285 deletions
+9 -1
View File
@@ -139,7 +139,14 @@ class PurchaseWorkflow
if (! is_string($validUntil) || ! is_string($deliveryDate)) {
throw ValidationException::withMessages(['delivery_date' => 'As datas da proposta e da entrega devem estar completas antes da emissão.']);
}
$catalogueSources = [];
foreach ($requested as $sourceLine) {
if ($sourceLine->catalogue_snapshot !== null) {
$catalogueSources[$sourceLine->id] = $sourceLine->catalogue_snapshot;
}
}
$snapshot = [
...($catalogueSources === [] ? [] : ['catalogue_sources' => $catalogueSources]),
'development_only' => true, 'budget_checked' => false,
'budget_control' => app(BudgetWorkflow::class)->record($user, $requisition, 'commit', $quote->total_minor, $quote->subtotal_minor),
'investment_rules' => $award->investment_snapshot,
@@ -158,6 +165,7 @@ class PurchaseWorkflow
'estimate_approvals' => $requisition->steps()->get()->toArray(),
'final_approvals' => $award->approvals()->get()->toArray(),
'decision_matrix' => $this->comparison->inspect($requisition)['rows'], 'items' => $lines,
'comparison_policy' => app(ComparisonPolicy::class)->forRequest($requisition),
'equipment_context' => $requisition->items()->whereNotNull('equipment_id')->get()->map(fn ($line) => ['requisition_item_id' => $line->id, 'equipment' => Equipment::query()->findOrFail($line->equipment_id)->toArray(), 'spare_part' => SparePart::query()->findOrFail($line->spare_part_id)->toArray(), 'downtime_started_at' => $line->downtime_started_at])->all(),
];
$order = PurchaseOrder::query()->create([
@@ -214,7 +222,7 @@ class PurchaseWorkflow
$this->guard->assertProcess($requisition, $quote->supplier_id, $user);
$result = $this->comparison->inspect($requisition);
if (! $result['ready']) {
throw ValidationException::withMessages(['comparison' => 'São exigidas três propostas elegíveis de fornecedores distintos, com pelo menos duas avaliações elegíveis cada. Excepções sem política aprovada estão bloqueadas.']);
throw ValidationException::withMessages(['comparison' => 'A regra preservada neste processo exige '.$result['policy']['minimum_proposals'].' propostas elegíveis de fornecedores distintos e '.$result['policy']['minimum_evaluators'].' avaliações independentes por proposta.']);
}
if (! in_array($quote->id, $result['top_ids'], true)) {
throw ValidationException::withMessages(['quotation_id' => 'Escolha uma proposta de maior pontuação. A escolha fora do topo exige política de escalão superior ainda não aprovada.']);