From 50e825643aea60fe057b6102a3908552c4a887a5 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Wed, 19 Nov 2025 16:09:47 +0700 Subject: [PATCH] Invited to chat user have Hold option when there is expenses --- src/libs/ReportSecondaryActionUtils.ts | 11 +++++++++++ src/libs/ReportUtils.ts | 20 ++++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/libs/ReportSecondaryActionUtils.ts b/src/libs/ReportSecondaryActionUtils.ts index bd65de780785..0a55d6972014 100644 --- a/src/libs/ReportSecondaryActionUtils.ts +++ b/src/libs/ReportSecondaryActionUtils.ts @@ -437,6 +437,10 @@ function isHoldActionForTransaction(report: Report, reportTransaction: Transacti const isSubmitter = isCurrentUserSubmitter(report); const isReportManager = isReportManagerUtils(report); + if (isIOUReport) { + return (isSubmitter || isReportManager) && !isSettled(report); + } + if (isOpenReport && (isSubmitter || isReportManager)) { return true; } @@ -452,6 +456,13 @@ function isChangeWorkspaceAction(report: Report, policies: OnyxCollection isWorkspaceEligibleForReportChange(submitterEmail, newPolicy)); let hasAvailablePolicies = availablePolicies.length > 1; diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index 37b9a27dc267..717518620b66 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -4781,6 +4781,21 @@ function canEditReportAction(reportAction: OnyxInputOrEntry): bool ); } +function canModifyHoldStatus(report: Report, reportAction: ReportAction): boolean { + if (!isMoneyRequestReport(report) || isTrackExpenseReport(report)) { + return false; + } + const isAdmin = isPolicyAdmin(report.policyID, allPolicies); + const isActionOwner = isActionCreator(reportAction); + const isManager = isMoneyRequestReport(report) && report?.managerID !== null && currentUserPersonalDetails?.accountID === report?.managerID; + + if (isIOUReport(report)) { + return isActionOwner || isManager; + } + + return isAdmin || isActionOwner || isManager; +} + function canHoldUnholdReportAction( report: OnyxEntry, reportAction: OnyxEntry, @@ -4804,11 +4819,12 @@ function canHoldUnholdReportAction( const isClosed = isClosedReport(report); const isSubmitted = isProcessingReport(report); - const canModifyStatus = !isTrackExpenseMoneyReport && (isAdmin || isActionOwner || isApprover); + const canModifyStatus = canModifyHoldStatus(report, reportAction); const canModifyUnholdStatus = !isTrackExpenseMoneyReport && (isAdmin || (isActionOwner && isHoldActionCreator) || isApprover); const canHoldOrUnholdRequest = !isRequestSettled && !isApproved && !isClosed && !isDeletedParentAction(reportAction); - const canHoldRequest = canHoldOrUnholdRequest && !isOnHold && (isRequestIOU || canModifyStatus) && !isScanning(transaction) && (isSubmitted || isActionOwner); + const canHoldRequest = canHoldOrUnholdRequest && !isOnHold && canModifyStatus && !isScanning(transaction) && (isSubmitted || isActionOwner); + const canUnholdRequest = !!(canHoldOrUnholdRequest && isOnHold && (isRequestIOU ? isHoldActionCreator : canModifyUnholdStatus)); return {canHoldRequest, canUnholdRequest};