diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index 376826723b13..aa5efe10dc6c 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -3403,6 +3403,7 @@ function buildOptimisticDuplicatePolicy( arePerDiemRatesEnabled: isPerDiemFeatureSelected, isTravelEnabled: isTravelFeatureSelected ? sourcePolicy?.isTravelEnabled : undefined, travelSettings: undefined, + invoice: undefined, policyAccountID: undefined, tax: isTaxesFeatureSelected ? sourcePolicy?.tax : undefined, employeeList: isMemberFeatureSelected ? employeeListWithoutPendingDelete : {[sourcePolicy.owner]: sourcePolicy?.employeeList?.[sourcePolicy.owner]}, diff --git a/src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx b/src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx index ea064da56a47..d44461ee0c68 100644 --- a/src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx +++ b/src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx @@ -64,8 +64,8 @@ function WorkspaceDuplicateSelectFeaturesForm({policyID}: WorkspaceDuplicateForm const [totalMembers = 0] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, { selector: totalMembersSelector, }); - const invoiceCompany = [policy?.invoice?.companyName, policy?.invoice?.companyWebsite].filter(Boolean).join(', '); - const invoiceConfigurationTextSelector = useMemo(() => createInvoiceConfigurationTextSelector(translate, invoiceCompany), [translate, invoiceCompany]); + // The invoicing company details are provisioned per workspace, so they aren't copied over to the duplicate and shouldn't be advertised here. + const invoiceConfigurationTextSelector = useMemo(() => createInvoiceConfigurationTextSelector(translate, ''), [translate]); const [invoiceConfigurationText = ''] = useOnyx(ONYXKEYS.BANK_ACCOUNT_LIST, { selector: invoiceConfigurationTextSelector, }); @@ -178,11 +178,11 @@ function WorkspaceDuplicateSelectFeaturesForm({policyID}: WorkspaceDuplicateForm } : undefined, - policy?.areInvoicesEnabled && !!invoiceConfigurationText + policy?.areInvoicesEnabled ? { translation: translate('workspace.common.invoices'), value: 'invoices', - alternateText: invoiceConfigurationText, + alternateText: invoiceConfigurationText || undefined, } : undefined, policy?.isTravelEnabled diff --git a/tests/actions/PolicyTest.ts b/tests/actions/PolicyTest.ts index e3de6541c7ca..96751833c8e6 100644 --- a/tests/actions/PolicyTest.ts +++ b/tests/actions/PolicyTest.ts @@ -314,6 +314,12 @@ describe('actions/Policy', () => { const fakePolicy = { ...createRandomPolicy(10, CONST.POLICY.TYPE.PERSONAL), employeeList: {}, + areInvoicesEnabled: true, + invoice: { + companyName: 'Source company', + companyWebsite: 'https://source.company', + bankAccount: {stripeConnectAccountID: 'acct_123'}, + }, }; await Onyx.set(`${ONYXKEYS.COLLECTION.POLICY}${fakePolicy.id}`, fakePolicy); await Onyx.set(`${ONYXKEYS.NVP_ACTIVE_POLICY_ID}`, fakePolicy.id); @@ -373,6 +379,8 @@ describe('actions/Policy', () => { expect(policy?.areWorkflowsEnabled).toBe(true); expect(policy?.areDistanceRatesEnabled).toBe(true); expect(policy?.areInvoicesEnabled).toBe(true); + // The invoicing details are provisioned per workspace, so they must not be copied from the source policy + expect(policy?.invoice).toBeUndefined(); expect(policy?.arePerDiemRatesEnabled).toBe(true); expect(policy?.approvalMode).toBe(fakePolicy.approvalMode); expect(policy?.approver).toBe(fakePolicy.approver);