38 lines
1.9 KiB
PHP
38 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Models\PeopleProcess;
|
|
use App\Models\User;
|
|
|
|
class PeopleSelectionReport
|
|
{
|
|
/** @return array<string,string|null> */
|
|
public function facts(PeopleProcess $process, User $actor): array
|
|
{
|
|
$access = app(PeopleAccess::class);
|
|
$contract = $access->can($actor, $process, 'contract') || $access->can($actor, $process, 'contract_view');
|
|
$selection = $process->selection ?? [];
|
|
$state = match ($process->status) {
|
|
'selection_review' => 'Proposta por conferir',
|
|
'selected', 'contract_draft' => 'Selecção aprovada',
|
|
default => ($selection['outcome'] ?? null) === 'returned' ? 'Proposta devolvida' : 'Sem proposta de selecção',
|
|
};
|
|
$pending = match ($process->status) {
|
|
'draft' => 'Conferir abertura', 'open' => 'Concluir recepção e triagem de candidaturas',
|
|
'assessment' => ($selection['outcome'] ?? null) === 'returned' ? 'Rever avaliação e proposta devolvida' : 'Concluir avaliação e preparar proposta',
|
|
'selection_review' => 'Conferir proposta por pessoa independente',
|
|
'selected' => 'Preparar minuta contratual',
|
|
'contract_draft' => 'Minuta preparada; formalização não registada neste percurso',
|
|
default => 'Consultar processo',
|
|
};
|
|
|
|
return ['selection_state' => $state, 'proposed_at' => $selection['created_at'] ?? null,
|
|
'decided_at' => $selection['decision_at'] ?? null, 'pending' => $pending,
|
|
'contract_visibility' => $contract ? 'Consulta autorizada' : 'Sem acesso aos dados da minuta',
|
|
'contract_reference' => $contract ? ($process->contract['reference'] ?? null) : 'Sem acesso',
|
|
'contract_prepared_at' => $contract ? ($process->contract['prepared_at'] ?? null) : 'Sem acesso',
|
|
'contract_starts_on' => $contract ? ($process->contract['starts_on'] ?? null) : 'Sem acesso'];
|
|
}
|
|
}
|