Skip to content

Commit 960ee2b

Browse files
authored
Merge pull request Expensify#75513 from nkdengineer/fix/74697
2 parents 9b152f0 + 50e8256 commit 960ee2b

2 files changed

Lines changed: 29 additions & 2 deletions

File tree

src/libs/ReportSecondaryActionUtils.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,10 @@ function isHoldActionForTransaction(report: Report, reportTransaction: Transacti
437437
const isSubmitter = isCurrentUserSubmitter(report);
438438
const isReportManager = isReportManagerUtils(report);
439439

440+
if (isIOUReport) {
441+
return (isSubmitter || isReportManager) && !isSettled(report);
442+
}
443+
440444
if (isOpenReport && (isSubmitter || isReportManager)) {
441445
return true;
442446
}
@@ -452,6 +456,13 @@ function isChangeWorkspaceAction(report: Report, policies: OnyxCollection<Policy
452456
return false;
453457
}
454458

459+
const isSubmitter = isCurrentUserSubmitter(report);
460+
const isManager = isReportManagerUtils(report);
461+
462+
if (isIOUReportUtils(report) && !isSubmitter && !isManager) {
463+
return false;
464+
}
465+
455466
const submitterEmail = getLoginByAccountID(report?.ownerAccountID ?? CONST.DEFAULT_NUMBER_ID);
456467
const availablePolicies = Object.values(policies ?? {}).filter((newPolicy) => isWorkspaceEligibleForReportChange(submitterEmail, newPolicy));
457468
let hasAvailablePolicies = availablePolicies.length > 1;

src/libs/ReportUtils.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4783,6 +4783,21 @@ function canEditReportAction(reportAction: OnyxInputOrEntry<ReportAction>): bool
47834783
);
47844784
}
47854785

4786+
function canModifyHoldStatus(report: Report, reportAction: ReportAction): boolean {
4787+
if (!isMoneyRequestReport(report) || isTrackExpenseReport(report)) {
4788+
return false;
4789+
}
4790+
const isAdmin = isPolicyAdmin(report.policyID, allPolicies);
4791+
const isActionOwner = isActionCreator(reportAction);
4792+
const isManager = isMoneyRequestReport(report) && report?.managerID !== null && currentUserPersonalDetails?.accountID === report?.managerID;
4793+
4794+
if (isIOUReport(report)) {
4795+
return isActionOwner || isManager;
4796+
}
4797+
4798+
return isAdmin || isActionOwner || isManager;
4799+
}
4800+
47864801
function canHoldUnholdReportAction(
47874802
report: OnyxEntry<Report>,
47884803
reportAction: OnyxEntry<ReportAction>,
@@ -4806,11 +4821,12 @@ function canHoldUnholdReportAction(
48064821
const isClosed = isClosedReport(report);
48074822
const isSubmitted = isProcessingReport(report);
48084823

4809-
const canModifyStatus = !isTrackExpenseMoneyReport && (isAdmin || isActionOwner || isApprover);
4824+
const canModifyStatus = canModifyHoldStatus(report, reportAction);
48104825
const canModifyUnholdStatus = !isTrackExpenseMoneyReport && (isAdmin || (isActionOwner && isHoldActionCreator) || isApprover);
48114826

48124827
const canHoldOrUnholdRequest = !isRequestSettled && !isApproved && !isClosed && !isDeletedParentAction(reportAction);
4813-
const canHoldRequest = canHoldOrUnholdRequest && !isOnHold && (isRequestIOU || canModifyStatus) && !isScanning(transaction) && (isSubmitted || isActionOwner);
4828+
const canHoldRequest = canHoldOrUnholdRequest && !isOnHold && canModifyStatus && !isScanning(transaction) && (isSubmitted || isActionOwner);
4829+
48144830
const canUnholdRequest = !!(canHoldOrUnholdRequest && isOnHold && (isRequestIOU ? isHoldActionCreator : canModifyUnholdStatus));
48154831

48164832
return {canHoldRequest, canUnholdRequest};

0 commit comments

Comments
 (0)