@@ -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.']);
|
||||
|
||||
Reference in New Issue
Block a user