@@ -204,10 +204,10 @@ class VirtualDesk
|
||||
});
|
||||
}
|
||||
|
||||
/** @return array<string,mixed> */
|
||||
public function requestToolPrefill(User $actor, \stdClass $request): ?array
|
||||
/** @return array<string,mixed>|null */
|
||||
public function requestToolPrefill(User $actor, \stdClass $request, bool $lock = false): ?array
|
||||
{
|
||||
$case = $this->case($actor, $request->case_id);
|
||||
$case = $this->case($actor, $request->case_id, false, $lock);
|
||||
$payload = $this->decode($request->payload);
|
||||
if (! config('investor-path.enabled') || (int) $case->user_id !== $actor->id || ! $case->simulation_id || $case->closed_at
|
||||
|| ! in_array($request->status, ['draft', 'returned'], true) || trim((string) ($payload['description'] ?? '')) !== ''
|
||||
@@ -218,6 +218,9 @@ class VirtualDesk
|
||||
$draftRequest = Request::create('/');
|
||||
$draftRequest->setUserResolver(fn () => $actor);
|
||||
$draft = app(SimulationFormDrafts::class)->find($case->simulation_id, $draftRequest);
|
||||
if ($lock) {
|
||||
$draft = SimulationFormDraft::query()->whereKey($draft->id)->lockForUpdate()->firstOrFail();
|
||||
}
|
||||
$economic = SimulationFormDraft::decryptSnapshot($draft->economic_snapshot);
|
||||
$description = (string) ($economic['project_summary'] ?? '');
|
||||
if (trim($description) === '') {
|
||||
@@ -313,7 +316,7 @@ class VirtualDesk
|
||||
abort_unless(in_array($request->status, ['draft', 'returned'], true) && $request->version === (int) $data['version'], 409, 'Pedido alterado ou já submetido.');
|
||||
$prefill = null;
|
||||
if (! empty($data['tool_prefill'])) {
|
||||
$prefill = $this->requestToolPrefill($actor, $request);
|
||||
$prefill = $this->requestToolPrefill($actor, $request, true);
|
||||
$source = $data['tool_prefill'];
|
||||
if ($submit || ! $prefill || $source['draft_id'] !== $prefill['draft_id'] || (int) $source['draft_version'] !== $prefill['draft_version']
|
||||
|| ! hash_equals($prefill['snapshot_sha256'], $source['snapshot_sha256'])
|
||||
|
||||
Reference in New Issue
Block a user