commit de armazens
tests / ci (push) Canceled after 0s

This commit is contained in:
2026-11-04 09:40:26 +02:00
parent e753f7a0a4
commit 63d20b10fc
245 changed files with 10847 additions and 230 deletions
+23 -15
View File
@@ -15,9 +15,11 @@ use App\Services\PeopleEvidenceBrief;
use App\Services\PeopleForms;
use App\Services\PeopleHiring;
use App\Services\PeopleOperationalInsights;
use App\Services\PeopleProcessProjection;
use App\Services\PeopleRegistry;
use App\Services\PeopleWorkdesk;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use Illuminate\Validation\Rule;
@@ -89,21 +91,9 @@ class PeopleHiringController extends Controller
$access = app(PeopleAccess::class);
abort_unless($access->can($this->actor($request), $record, 'view'), 403);
$registrySearch = $request->validate(['cadastro' => 'nullable|string|max:100'])['cadastro'] ?? '';
$snapshot = $workflow->snapshot($record);
$rows = $workflow->matrix($record);
if (! $access->can($this->actor($request), $record, 'financial')) {
unset($snapshot['rules']['annex']['fields']['financial']);
unset($snapshot['selection']['rules']['annex']['fields']['financial']);
}
if (! $access->can($this->actor($request), $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($this->actor($request), $record, 'contract') && ! $access->can($this->actor($request), $record, 'contract_view')) {
$snapshot['contract'] = null;
}
$projection = app(PeopleProcessProjection::class)->read($this->actor($request), $record);
$snapshot = $projection['process'];
$rows = $projection['candidates'];
$clarifications = app(PeopleClarifications::class)->page($this->actor($request), $record);
$company = Tenant::query()->findOrFail($this->actor($request)->tenant_id);
$policy = app(IntelligencePolicy::class)->company($company);
@@ -127,6 +117,24 @@ class PeopleHiringController extends Controller
});
}
public function dossier(Request $request, int $process, PeopleProcessProjection $projection): Response
{
return DB::transaction(function () use ($request, $process, $projection) {
if (DB::getDriverName() === 'pgsql' && DB::transactionLevel() === 1) {
DB::statement('SET TRANSACTION ISOLATION LEVEL REPEATABLE READ READ ONLY');
}
$record = PeopleProcess::query()->findOrFail($process);
$data = $projection->read($this->actor($request), $record);
return response()->json(['schema' => 'sgc.people.process-dossier.v1', 'exported_at' => now()->toIso8601String(),
'effect' => 'preparation_only',
'process' => Arr::only($data['process'], ['id', 'kind', 'title', 'purpose', 'closes_on', 'status', 'version', 'selected_application_id', 'rules', 'selection', 'contract']),
'candidates' => $data['candidates']])
->header('Content-Disposition', 'attachment; filename="PES-'.$record->id.'-dossier-v'.$record->version.'.json"')
->header('Cache-Control', 'private, no-store, max-age=0')->header('X-Content-Type-Options', 'nosniff');
});
}
public function access(Request $request, int $process, PeopleAccess $access): Response
{
$record = PeopleProcess::query()->findOrFail($process);