Skip to content

Commit 2380481

Browse files
fix: Prioritize file status over signer status in parallel flow
When file status is ABLE_TO_SIGN (1) in parallel flow, all signers should be set to ABLE_TO_SIGN regardless of individual signer status sent by frontend. This fixes the issue where signers remained in DRAFT status (0) even after clicking 'Request signatures'. The logic now: 1. Check file status DRAFT first - keep all signers as DRAFT 2. Check file status ABLE_TO_SIGN - apply flow-based logic: - Parallel: All signers get ABLE_TO_SIGN - Ordered: Only first signer gets ABLE_TO_SIGN 3. Fallback to individual signer status for other cases Resolves issue where sign_request records stayed at status 0 while libresign_file was updated to status 1. Signed-off-by: Vitor Mattos <[email protected]>
1 parent ac9796a commit 2380481

1 file changed

Lines changed: 18 additions & 15 deletions

File tree

lib/Service/RequestSignatureService.php

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -333,26 +333,13 @@ private function determineInitialStatus(
333333
?\OCA\Libresign\Enum\SignRequestStatus $currentStatus = null,
334334
?int $fileId = null,
335335
): \OCA\Libresign\Enum\SignRequestStatus {
336-
if ($signerStatus !== null) {
337-
$desiredStatus = \OCA\Libresign\Enum\SignRequestStatus::from($signerStatus);
338-
if ($currentStatus !== null && !$this->sequentialSigningService->isStatusUpgrade($currentStatus, $desiredStatus)) {
339-
return $currentStatus;
340-
}
341-
342-
// Validate status transition based on signing order
343-
if ($fileId !== null) {
344-
return $this->sequentialSigningService->validateStatusByOrder($desiredStatus, $signingOrder, $fileId);
345-
}
346-
347-
return $desiredStatus;
348-
}
349-
350336
// If fileStatus is explicitly DRAFT (0), keep signer as DRAFT
351337
// This allows adding new signers in DRAFT mode even when file is not in DRAFT status
352338
if ($fileStatus === FileEntity::STATUS_DRAFT) {
353339
return \OCA\Libresign\Enum\SignRequestStatus::DRAFT;
354340
}
355341

342+
// If file status is ABLE_TO_SIGN, apply flow-based logic
356343
if ($fileStatus === FileEntity::STATUS_ABLE_TO_SIGN) {
357344
if ($this->sequentialSigningService->isOrderedNumericFlow()) {
358345
// In ordered flow, only first signer (order 1) should be ABLE_TO_SIGN
@@ -361,10 +348,26 @@ private function determineInitialStatus(
361348
? \OCA\Libresign\Enum\SignRequestStatus::ABLE_TO_SIGN
362349
: \OCA\Libresign\Enum\SignRequestStatus::DRAFT;
363350
}
364-
// In parallel flow, all can sign
351+
// In parallel flow, all can sign - ignore individual signer status if file is ABLE_TO_SIGN
365352
return \OCA\Libresign\Enum\SignRequestStatus::ABLE_TO_SIGN;
366353
}
367354

355+
// Handle explicit signer status when file status is not DRAFT or ABLE_TO_SIGN
356+
if ($signerStatus !== null) {
357+
$desiredStatus = \OCA\Libresign\Enum\SignRequestStatus::from($signerStatus);
358+
if ($currentStatus !== null && !$this->sequentialSigningService->isStatusUpgrade($currentStatus, $desiredStatus)) {
359+
return $currentStatus;
360+
}
361+
362+
// Validate status transition based on signing order
363+
if ($fileId !== null) {
364+
return $this->sequentialSigningService->validateStatusByOrder($desiredStatus, $signingOrder, $fileId);
365+
}
366+
367+
return $desiredStatus;
368+
}
369+
370+
// Default fallback based on flow type
368371
if (!$this->sequentialSigningService->isOrderedNumericFlow()) {
369372
return \OCA\Libresign\Enum\SignRequestStatus::ABLE_TO_SIGN;
370373
}

0 commit comments

Comments
 (0)