@@ -0,0 +1,37 @@
|
||||
<?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];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user