Files
compras/app/Services/PeopleProcessProjection.php
nala 63d20b10fc
tests / ci (push) Canceled after 0s
commit de armazens
2026-11-04 09:40:26 +02:00

38 lines
1.5 KiB
PHP

<?php
namespace App\Services;
use App\Models\PeopleProcess;
use App\Models\User;
/** One permission-aware projection shared by consultation and portable process dossiers. */
class PeopleProcessProjection
{
/** @return array{process:array<string,mixed>,candidates:list<array<string,mixed>>} */
public function read(User $actor, PeopleProcess $record): array
{
$access = app(PeopleAccess::class);
abort_unless($access->can($actor, $record, 'view'), 403);
$workflow = app(PeopleHiring::class);
$snapshot = $workflow->snapshot($record);
$rows = $workflow->matrix($record);
if (! $access->can($actor, $record, 'financial')) {
unset($snapshot['rules']['annex']['fields']['financial']);
unset($snapshot['selection']['rules']['annex']['fields']['financial']);
}
if (! $access->can($actor, $record, 'interviews')) {
$rows = array_map(fn ($row) => [...$row, 'reviews' => []], $rows);
if (isset($snapshot['selection']['rows'])) {
$snapshot['selection']['rows'] = array_map(fn ($row) => [...$row, 'reviews' => []], $snapshot['selection']['rows']);
}
}
if (! $access->can($actor, $record, 'contract') && ! $access->can($actor, $record, 'contract_view')) {
$snapshot['contract'] = null;
}
$rows = app(ReceivedCandidateAvailability::class)->attach($actor, $record, $rows);
return ['process' => $snapshot, 'candidates' => $rows];
}
}