From 088ae9240fae7ae5fae8e3f6b84da71db95d0c36 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Thu, 18 Dec 2025 12:04:50 +0700 Subject: [PATCH 1/3] fix: Currency un duplicate workspace unchanged after unselecting overview box --- src/libs/actions/Policy/Policy.ts | 11 +++++++++-- .../WorkspaceDuplicateSelectFeaturesForm.tsx | 15 ++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index 4f053035f3c0..bb1ecc25097d 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -204,6 +204,7 @@ type DuplicatePolicyDataOptions = { parts: Record; file?: File | CustomRNImageManipulatorResult; policyCategories?: PolicyCategories; + localCurrency: string; }; type SetWorkspaceReimbursementActionParams = { @@ -2701,7 +2702,7 @@ function createDraftWorkspace( } function buildDuplicatePolicyData(policy: Policy, options: DuplicatePolicyDataOptions) { - const {policyName = '', policyID = generatePolicyID(), file, welcomeNote, parts, targetPolicyID = generatePolicyID(), policyCategories} = options; + const {policyName = '', policyID = generatePolicyID(), file, welcomeNote, parts, targetPolicyID = generatePolicyID(), policyCategories, localCurrency} = options; const { adminsChatReportID, @@ -2725,8 +2726,12 @@ function buildDuplicatePolicyData(policy: Policy, options: DuplicatePolicyDataOp const isRulesOptionSelected = parts?.expenses; const isWorkflowsOptionSelected = parts?.exportLayouts; const isPerDiemOptionSelected = parts?.perDiem; + const isOverviewOptionSelected = parts?.overview; + + const outputCurrency = isOverviewOptionSelected ? localCurrency : policy?.outputCurrency; + const policyMemberAccountIDs = isMemberOptionSelected ? Object.values(getMemberAccountIDsForWorkspace(policy?.employeeList, false, false)) : []; - const {customUnitID, customUnitRateID} = buildOptimisticDistanceRateCustomUnits(policy?.outputCurrency); + const {customUnitID, customUnitRateID} = buildOptimisticDistanceRateCustomUnits(outputCurrency); const optimisticAnnounceChat = ReportUtils.buildOptimisticAnnounceChat(targetPolicyID, [...policyMemberAccountIDs]); const announceRoomChat = optimisticAnnounceChat.announceChatData; @@ -2777,6 +2782,8 @@ function buildDuplicatePolicyData(policy: Policy, options: DuplicatePolicyDataOp }, avatarURL: file?.uri, originalFileName: file?.name, + outputCurrency, + address: isOverviewOptionSelected ? policy?.address : undefined, }, }, { diff --git a/src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx b/src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx index c12b0b44acef..9bd83d8443df 100644 --- a/src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx +++ b/src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx @@ -8,6 +8,7 @@ import SelectionList from '@components/SelectionList'; import MultiSelectListItem from '@components/SelectionList/ListItem/MultiSelectListItem'; import type {ConfirmButtonOptions, ListItem} from '@components/SelectionList/types'; import Text from '@components/Text'; +import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; import usePolicy from '@hooks/usePolicy'; @@ -48,6 +49,7 @@ function WorkspaceDuplicateSelectFeaturesForm({policyID}: WorkspaceDuplicateForm const customUnitRates: Record = customUnits?.rates ?? {}; const allRates = Object.values(customUnitRates)?.length; const [bankAccountList] = useOnyx(ONYXKEYS.BANK_ACCOUNT_LIST, {canBeMissing: true}); + const currentUserPersonalDetails = useCurrentUserPersonalDetails(); const accountingIntegrations = Object.values(CONST.POLICY.CONNECTIONS.NAME); const connectedIntegration = getAllValidConnectedIntegration(policy, accountingIntegrations); @@ -225,11 +227,22 @@ function WorkspaceDuplicateSelectFeaturesForm({policyID}: WorkspaceDuplicateForm customUnits: selectedItems.includes('distanceRates'), invoices: selectedItems.includes('invoices'), exportLayouts: selectedItems.includes('workflows'), + overview: selectedItems.includes('overview'), }, file: duplicatedWorkspaceAvatar, + localCurrency: currentUserPersonalDetails?.localCurrencyCode ?? '', }); Navigation.closeRHPFlow(); - }, [duplicateWorkspace?.name, duplicateWorkspace?.policyID, policy, policyCategories, selectedItems, translate, duplicatedWorkspaceAvatar]); + }, [ + duplicateWorkspace?.name, + duplicateWorkspace?.policyID, + policy, + policyCategories, + selectedItems, + translate, + duplicatedWorkspaceAvatar, + currentUserPersonalDetails?.localCurrencyCode, + ]); const confirmDuplicateAndHideModal = useCallback(() => { setIsDuplicateModalOpen(false); From 98603d5956f99bf157b0aba5a321742ad0222704 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Thu, 18 Dec 2025 12:19:29 +0700 Subject: [PATCH 2/3] fix test --- tests/actions/PolicyTest.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/actions/PolicyTest.ts b/tests/actions/PolicyTest.ts index a784ca70919d..e367989ba79b 100644 --- a/tests/actions/PolicyTest.ts +++ b/tests/actions/PolicyTest.ts @@ -290,6 +290,7 @@ describe('actions/Policy', () => { invoices: true, exportLayouts: true, }, + localCurrency: 'USD', }; Policy.duplicateWorkspace(fakePolicy, options); From 05cd64d062c97a9068a2c39a98d80f759d103841 Mon Sep 17 00:00:00 2001 From: nkdengineer <161821005+nkdengineer@users.noreply.github.com> Date: Wed, 24 Dec 2025 09:37:09 +0700 Subject: [PATCH 3/3] Update src/libs/actions/Policy/Policy.ts Co-authored-by: Pujan Shah --- src/libs/actions/Policy/Policy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index bb1ecc25097d..a9b8dc6eb7c3 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -2728,7 +2728,7 @@ function buildDuplicatePolicyData(policy: Policy, options: DuplicatePolicyDataOp const isPerDiemOptionSelected = parts?.perDiem; const isOverviewOptionSelected = parts?.overview; - const outputCurrency = isOverviewOptionSelected ? localCurrency : policy?.outputCurrency; + const outputCurrency = isOverviewOptionSelected ? policy?.outputCurrency : localCurrency; const policyMemberAccountIDs = isMemberOptionSelected ? Object.values(getMemberAccountIDsForWorkspace(policy?.employeeList, false, false)) : []; const {customUnitID, customUnitRateID} = buildOptimisticDistanceRateCustomUnits(outputCurrency);