From e28bf62b7917c3089b63aa94b5a9279ab390bacd Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Thu, 8 May 2025 14:22:55 +0700 Subject: [PATCH 1/4] fix: pay button appears in invoice preview for sender --- src/libs/ReportPreviewActionUtils.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/libs/ReportPreviewActionUtils.ts b/src/libs/ReportPreviewActionUtils.ts index 9660d57f3ef8..4ba50cfec94e 100644 --- a/src/libs/ReportPreviewActionUtils.ts +++ b/src/libs/ReportPreviewActionUtils.ts @@ -85,7 +85,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; } @@ -130,7 +130,7 @@ function canPay(report: Report, violations: OnyxCollection, policy?: Policy, reportActions?: OnyxEntry | ReportAction[]) { @@ -200,6 +200,7 @@ function getReportPreviewAction( transactions?: Transaction[], isReportArchived = false, reportActions?: OnyxEntry | ReportAction[], + invoiceReceiverPolicy?: Policy, ): ValueOf { if (!report) { return CONST.REPORT.REPORT_PREVIEW_ACTIONS.VIEW; @@ -210,7 +211,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)) { From 046f97484854cd5cd9d24e91f357fb05235713a1 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Fri, 9 May 2025 16:59:47 +0700 Subject: [PATCH 2/4] fix test 3 --- src/libs/ReportPreviewActionUtils.ts | 2 ++ tests/actions/ReportPreviewActionUtilsTest.ts | 11 ++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/libs/ReportPreviewActionUtils.ts b/src/libs/ReportPreviewActionUtils.ts index 4ba50cfec94e..f8163a00703a 100644 --- a/src/libs/ReportPreviewActionUtils.ts +++ b/src/libs/ReportPreviewActionUtils.ts @@ -86,6 +86,7 @@ function canApprove(report: Report, violations: OnyxCollection, policy?: Policy, isReportArchived = false, invoiceReceiverPolicy?: Policy) { + console.log('canPay', isReportArchived, invoiceReceiverPolicy); if (isReportArchived) { return false; } @@ -202,6 +203,7 @@ function getReportPreviewAction( reportActions?: OnyxEntry | ReportAction[], invoiceReceiverPolicy?: Policy, ): ValueOf { + console.log('invoiceReceiverPolicy :>> 2', invoiceReceiverPolicy); if (!report) { return CONST.REPORT.REPORT_PREVIEW_ACTIONS.VIEW; } diff --git a/tests/actions/ReportPreviewActionUtilsTest.ts b/tests/actions/ReportPreviewActionUtilsTest.ts index f60ed2464120..09c1cc1b265d 100644 --- a/tests/actions/ReportPreviewActionUtilsTest.ts +++ b/tests/actions/ReportPreviewActionUtilsTest.ts @@ -136,10 +136,13 @@ 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 {result: isReportArchived} = renderHook(() => useReportIsArchived(report?.parentReportID)); - expect(getReportPreviewAction(VIOLATIONS, report, policy, undefined, isReportArchived.current)).toBe(CONST.REPORT.REPORT_PREVIEW_ACTIONS.PAY); + expect(getReportPreviewAction(VIOLATIONS, report, policy, undefined, isReportArchived.current, undefined, invoiceReceiverPolicy)).toBe(CONST.REPORT.REPORT_PREVIEW_ACTIONS.PAY); }); it('canPay should return false for archived invoice', async () => { @@ -156,15 +159,17 @@ 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()) await Onyx.set(`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${report.reportID}`, { private_isArchived: new Date().toString(), }); - const {result: isReportArchived} = renderHook(() => useReportIsArchived(report?.parentReportID)); - expect(getReportPreviewAction(VIOLATIONS, report, policy, undefined, isReportArchived.current)).toBe(CONST.REPORT.REPORT_PREVIEW_ACTIONS.PAY); + expect(getReportPreviewAction(VIOLATIONS, report, policy, undefined, isReportArchived.current, undefined, invoiceReceiverPolicy)).toBe(CONST.REPORT.REPORT_PREVIEW_ACTIONS.PAY); }); it('canExport should return true for finished reports', async () => { From e012c17204cc50f9bc8da3ea56dd7b62328887e7 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Fri, 9 May 2025 17:03:20 +0700 Subject: [PATCH 3/4] remove useless console --- src/libs/ReportPreviewActionUtils.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/libs/ReportPreviewActionUtils.ts b/src/libs/ReportPreviewActionUtils.ts index f8163a00703a..4ba50cfec94e 100644 --- a/src/libs/ReportPreviewActionUtils.ts +++ b/src/libs/ReportPreviewActionUtils.ts @@ -86,7 +86,6 @@ function canApprove(report: Report, violations: OnyxCollection, policy?: Policy, isReportArchived = false, invoiceReceiverPolicy?: Policy) { - console.log('canPay', isReportArchived, invoiceReceiverPolicy); if (isReportArchived) { return false; } @@ -203,7 +202,6 @@ function getReportPreviewAction( reportActions?: OnyxEntry | ReportAction[], invoiceReceiverPolicy?: Policy, ): ValueOf { - console.log('invoiceReceiverPolicy :>> 2', invoiceReceiverPolicy); if (!report) { return CONST.REPORT.REPORT_PREVIEW_ACTIONS.VIEW; } From 01f68f7640e0a9733d1d5d614cee2ff40f8e66fa Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Mon, 12 May 2025 10:29:12 +0700 Subject: [PATCH 4/4] fix add invoice policy --- .../MoneyRequestReportPreviewContent.tsx | 4 ++-- src/components/ReportActionItem/ReportPreview.tsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx b/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx index e847ba71379a..1a83f8dae83a 100644 --- a/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx +++ b/src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx @@ -458,8 +458,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 reportPreviewActions = { [CONST.REPORT.REPORT_PREVIEW_ACTIONS.SUBMIT]: ( diff --git a/src/components/ReportActionItem/ReportPreview.tsx b/src/components/ReportActionItem/ReportPreview.tsx index 1159450e71dc..1cd69a0c36de 100644 --- a/src/components/ReportActionItem/ReportPreview.tsx +++ b/src/components/ReportActionItem/ReportPreview.tsx @@ -514,8 +514,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]: (