diff --git a/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx b/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx index 142e592bbf49..03760b684d6b 100644 --- a/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx +++ b/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx @@ -449,8 +449,8 @@ function MoneyRequestReportPreviewContent({ if (isPaidAnimationRunning) { return CONST.REPORT.REPORT_PREVIEW_ACTIONS.PAY; } - return getReportPreviewAction(violations, iouReport, policy, transactions, isIouReportArchived, reportActions); - }, [isPaidAnimationRunning, violations, iouReport, policy, transactions, isIouReportArchived, reportActions]); + return getReportPreviewAction(violations, iouReport, policy, transactions, isIouReportArchived, reportActions, invoiceReceiverPolicy); + }, [isPaidAnimationRunning, violations, iouReport, policy, transactions, isIouReportArchived, reportActions, invoiceReceiverPolicy]); const addExpenseDropdownOptions = useMemo( () => [ diff --git a/src/components/ReportActionItem/ReportPreview.tsx b/src/components/ReportActionItem/ReportPreview.tsx index 8abb8b93a58f..d46ba96a483f 100644 --- a/src/components/ReportActionItem/ReportPreview.tsx +++ b/src/components/ReportActionItem/ReportPreview.tsx @@ -529,8 +529,8 @@ function ReportPreview({ if (isPaidAnimationRunning) { return CONST.REPORT.REPORT_PREVIEW_ACTIONS.PAY; } - return getReportPreviewAction(violations, iouReport, policy, transactions, isIouReportArchived); - }, [isPaidAnimationRunning, violations, iouReport, policy, transactions, isIouReportArchived]); + return getReportPreviewAction(violations, iouReport, policy, transactions, isIouReportArchived, undefined, invoiceReceiverPolicy); + }, [isPaidAnimationRunning, violations, iouReport, policy, transactions, isIouReportArchived, invoiceReceiverPolicy]); const reportPreviewActions = { [CONST.REPORT.REPORT_PREVIEW_ACTIONS.SUBMIT]: ( diff --git a/src/libs/ReportPreviewActionUtils.ts b/src/libs/ReportPreviewActionUtils.ts index 01b7ea7cecd4..7d4c4b53a803 100644 --- a/src/libs/ReportPreviewActionUtils.ts +++ b/src/libs/ReportPreviewActionUtils.ts @@ -88,7 +88,7 @@ function canApprove(report: Report, violations: OnyxCollection 0 && isCurrentUserManager; } -function canPay(report: Report, violations: OnyxCollection, policy?: Policy, isReportArchived = false) { +function canPay(report: Report, violations: OnyxCollection, policy?: Policy, isReportArchived = false, invoiceReceiverPolicy?: Policy) { if (isReportArchived) { return false; } @@ -133,7 +133,7 @@ function canPay(report: Report, violations: OnyxCollection, policy?: Policy, reportActions?: OnyxEntry | ReportAction[]) { @@ -203,6 +203,7 @@ function getReportPreviewAction( transactions?: Transaction[], isReportArchived = false, reportActions?: OnyxEntry | ReportAction[], + invoiceReceiverPolicy?: Policy, ): ValueOf { if (!report) { return CONST.REPORT.REPORT_PREVIEW_ACTIONS.VIEW; @@ -216,7 +217,7 @@ function getReportPreviewAction( if (canApprove(report, violations, policy, transactions)) { return CONST.REPORT.REPORT_PREVIEW_ACTIONS.APPROVE; } - if (canPay(report, violations, policy, isReportArchived)) { + if (canPay(report, violations, policy, isReportArchived, invoiceReceiverPolicy)) { return CONST.REPORT.REPORT_PREVIEW_ACTIONS.PAY; } if (canExport(report, violations, policy, reportActions)) { diff --git a/tests/actions/ReportPreviewActionUtilsTest.ts b/tests/actions/ReportPreviewActionUtilsTest.ts index 712eb4f5c2de..b6eedf3ad28e 100644 --- a/tests/actions/ReportPreviewActionUtilsTest.ts +++ b/tests/actions/ReportPreviewActionUtilsTest.ts @@ -158,13 +158,16 @@ describe('getReportPreviewAction', () => { policy.type = CONST.POLICY.TYPE.CORPORATE; policy.reimbursementChoice = CONST.POLICY.REIMBURSEMENT_CHOICES.REIMBURSEMENT_NO; + const invoiceReceiverPolicy = createRandomPolicy(0); + invoiceReceiverPolicy.role = CONST.POLICY.ROLE.ADMIN; + await Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}${REPORT_ID}`, report); const transaction = { reportID: `${REPORT_ID}`, } as unknown as Transaction; const {result: isReportArchived} = renderHook(() => useReportIsArchived(report?.parentReportID)); - expect(getReportPreviewAction(VIOLATIONS, report, policy, [transaction], isReportArchived.current)).toBe(CONST.REPORT.REPORT_PREVIEW_ACTIONS.PAY); + expect(getReportPreviewAction(VIOLATIONS, report, policy, [transaction], isReportArchived.current, undefined, invoiceReceiverPolicy)).toBe(CONST.REPORT.REPORT_PREVIEW_ACTIONS.PAY); }); it('canPay should return false for archived invoice', async () => { @@ -181,6 +184,9 @@ describe('getReportPreviewAction', () => { policy.type = CONST.POLICY.TYPE.CORPORATE; policy.reimbursementChoice = CONST.POLICY.REIMBURSEMENT_CHOICES.REIMBURSEMENT_NO; + const invoiceReceiverPolicy = createRandomPolicy(0); + invoiceReceiverPolicy.role = CONST.POLICY.ROLE.ADMIN; + await Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}${REPORT_ID}`, report); // This is what indicates that a report is archived (see ReportUtils.isArchivedReport()) @@ -190,9 +196,8 @@ describe('getReportPreviewAction', () => { const transaction = { reportID: `${REPORT_ID}`, } as unknown as Transaction; - const {result: isReportArchived} = renderHook(() => useReportIsArchived(report?.parentReportID)); - expect(getReportPreviewAction(VIOLATIONS, report, policy, [transaction], isReportArchived.current)).toBe(CONST.REPORT.REPORT_PREVIEW_ACTIONS.PAY); + expect(getReportPreviewAction(VIOLATIONS, report, policy, [transaction], isReportArchived.current, undefined, invoiceReceiverPolicy)).toBe(CONST.REPORT.REPORT_PREVIEW_ACTIONS.PAY); }); it('canExport should return true for finished reports', async () => {