diff --git a/src/CONST/index.ts b/src/CONST/index.ts index b4cdef4a1df8..a54d82785c8a 100755 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -8577,6 +8577,7 @@ const CONST = { }, WORKSPACE: { TOGGLE_SETTINGS_ROW: 'Workspace-ToggleSettingsRow', + DUPLICATE_SELECT_FEATURES_SELECT_ALL: 'WorkspaceDuplicate-SelectFeaturesSelectAll', WORKSPACE_MENU_ITEM: 'Workspace-WorkspaceMenuItem', COMPANY_CARDS: { TABLE_ITEM: 'Workspace-CompanyCards-TableItem', diff --git a/src/languages/de.ts b/src/languages/de.ts index b1215fef4340..7ef9eda32b7a 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -5540,6 +5540,11 @@ _Für ausführlichere Anweisungen [besuchen Sie unsere Hilfeseite](${CONST.NETSU reimbursementAccount: 'Erstattungskonto', welcomeNote: 'Bitte verwende meinen neuen Arbeitsbereich', delayedSubmission: 'verspätete Einreichung', + merchantRules: 'Händlerregeln', + merchantRulesCount: () => ({ + one: '1 Händlerregel', + other: (count: number) => `${count} Händlerregeln`, + }), confirmTitle: ({newWorkspaceName, totalMembers}: {newWorkspaceName?: string; totalMembers?: number}) => `Sie sind dabei, ${newWorkspaceName ?? ''} mit ${totalMembers ?? 0} Mitgliedern aus dem ursprünglichen Workspace zu erstellen und zu teilen.`, error: 'Beim Duplizieren deines neuen Workspace ist ein Fehler aufgetreten. Bitte versuche es erneut.', diff --git a/src/languages/en.ts b/src/languages/en.ts index a41971094552..a9bd5117946f 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -5497,6 +5497,11 @@ const translations = { reimbursementAccount: 'reimbursement account', welcomeNote: 'Please start using my new workspace', delayedSubmission: 'delayed submission', + merchantRules: 'Merchant rules', + merchantRulesCount: () => ({ + one: '1 merchant rule', + other: (count: number) => `${count} merchant rules`, + }), confirmTitle: ({newWorkspaceName, totalMembers}: {newWorkspaceName?: string; totalMembers?: number}) => `You’re about to create and share ${newWorkspaceName ?? ''} with ${totalMembers ?? 0} members from the original workspace.`, error: 'An error occurred while duplicating your new workspace. Please try again.', diff --git a/src/languages/es.ts b/src/languages/es.ts index 5830f307657e..ded46a7b552c 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -5308,6 +5308,11 @@ ${amount} para ${merchant} - ${date}`, reimbursementAccount: 'cuenta de reembolso', delayedSubmission: 'presentación retrasada', welcomeNote: 'Por favor, comience a utilizar mi nuevo espacio de trabajo.', + merchantRules: 'Reglas de comerciante', + merchantRulesCount: () => ({ + one: '1 regla de comerciante', + other: (count: number) => `${count} reglas de comerciante`, + }), confirmTitle: ({newWorkspaceName, totalMembers}) => `Estás a punto de crear y compartir ${newWorkspaceName ?? ''} con ${totalMembers ?? 0} miembros del espacio de trabajo original.`, error: 'Se produjo un error al duplicar tu nuevo espacio de trabajo. Inténtalo de nuevo.', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index ec3f11ae1610..ecbf456deefc 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -5561,6 +5561,11 @@ _Pour des instructions plus détaillées, [visitez notre site d’aide](${CONST. reimbursementAccount: 'compte de remboursement', welcomeNote: 'Veuillez commencer à utiliser mon nouvel espace de travail', delayedSubmission: 'soumission retardée', + merchantRules: 'Règles de commerçant', + merchantRulesCount: () => ({ + one: '1 règle de commerçant', + other: (count: number) => `${count} règles de commerçant`, + }), confirmTitle: ({newWorkspaceName, totalMembers}: {newWorkspaceName?: string; totalMembers?: number}) => `Vous êtes sur le point de créer et de partager ${newWorkspaceName ?? ''} avec ${totalMembers ?? 0} membres de l’espace de travail d’origine.`, error: 'Une erreur s’est produite lors de la duplication de votre nouvel espace de travail. Veuillez réessayer.', diff --git a/src/languages/it.ts b/src/languages/it.ts index e09006ba912f..a7a736071147 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -5528,6 +5528,11 @@ _Per istruzioni più dettagliate, [visita il nostro sito di assistenza](${CONST. reimbursementAccount: 'conto di rimborso', welcomeNote: 'Inizia a usare il mio nuovo workspace', delayedSubmission: 'invio posticipato', + merchantRules: 'Regole del commerciante', + merchantRulesCount: () => ({ + one: '1 regola del commerciante', + other: (count: number) => `${count} regole del commerciante`, + }), confirmTitle: ({newWorkspaceName, totalMembers}: {newWorkspaceName?: string; totalMembers?: number}) => `Stai per creare e condividere ${newWorkspaceName ?? ''} con ${totalMembers ?? 0} membri dello spazio di lavoro originale.`, error: 'Si è verificato un errore durante la duplicazione del tuo nuovo workspace. Riprova.', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index a056b70d8469..8377ef2b2fee 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -5481,6 +5481,11 @@ _詳しい手順については、[ヘルプサイトをご覧ください](${CO reimbursementAccount: '精算口座', welcomeNote: '私の新しいワークスペースを使い始めてください', delayedSubmission: '遅延提出', + merchantRules: '販売者ルール', + merchantRulesCount: () => ({ + one: '1 販売者ルール', + other: (count: number) => `${count} 販売者ルール`, + }), confirmTitle: ({newWorkspaceName, totalMembers}: {newWorkspaceName?: string; totalMembers?: number}) => `元のワークスペースから ${totalMembers ?? 0} 人のメンバーと一緒に、${newWorkspaceName ?? ''} を作成して共有しようとしています。`, error: '新しいワークスペースの複製中にエラーが発生しました。もう一度お試しください。', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 1d884620bbc7..645a987803a4 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -5516,6 +5516,11 @@ _Voor meer gedetailleerde instructies, [bezoek onze help-site](${CONST.NETSUITE_ reimbursementAccount: 'vergoedingsrekening', welcomeNote: 'Begin alsjeblieft mijn nieuwe werkruimte te gebruiken', delayedSubmission: 'vertraagde indiening', + merchantRules: 'Handelaarsregels', + merchantRulesCount: () => ({ + one: '1 handelaarsregel', + other: (count: number) => `${count} handelaarsregels`, + }), confirmTitle: ({newWorkspaceName, totalMembers}: {newWorkspaceName?: string; totalMembers?: number}) => `Je staat op het punt ${newWorkspaceName ?? ''} te maken en te delen met ${totalMembers ?? 0} leden van de oorspronkelijke werkruimte.`, error: 'Er is een fout opgetreden bij het dupliceren van je nieuwe werkruimte. Probeer het opnieuw.', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 913c18b00825..1d924796ded3 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -5506,6 +5506,11 @@ _Aby uzyskać bardziej szczegółowe instrukcje, [odwiedź naszą stronę pomocy reimbursementAccount: 'konto zwrotów', welcomeNote: 'Proszę, zacznij używać mojego nowego obszaru roboczego', delayedSubmission: 'opóźnione przesłanie', + merchantRules: 'Zasady sprzedawcy', + merchantRulesCount: () => ({ + one: '1 zasada sprzedawcy', + other: (count: number) => `${count} zasady sprzedawcy`, + }), confirmTitle: ({newWorkspaceName, totalMembers}: {newWorkspaceName?: string; totalMembers?: number}) => `Za chwilę utworzysz i udostępnisz ${newWorkspaceName ?? ''} ${totalMembers ?? 0} członkom oryginalnego obszaru roboczego.`, error: 'Wystąpił błąd podczas duplikowania Twojego nowego obszaru roboczego. Spróbuj ponownie.', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 260ce547af95..854cb7c8806b 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -5511,6 +5511,11 @@ _Para instruções mais detalhadas, [visite nossa central de ajuda](${CONST.NETS reimbursementAccount: 'conta de reembolso', welcomeNote: 'Comece a usar meu novo espaço de trabalho', delayedSubmission: 'envio atrasado', + merchantRules: 'Regras do comerciante', + merchantRulesCount: () => ({ + one: '1 regra do comerciante', + other: (count: number) => `${count} regras do comerciante`, + }), confirmTitle: ({newWorkspaceName, totalMembers}: {newWorkspaceName?: string; totalMembers?: number}) => `Você está prestes to criar e compartilhar ${newWorkspaceName ?? ''} com ${totalMembers ?? 0} membros do workspace original.`, error: 'Ocorreu um erro ao duplicar seu novo espaço de trabalho. Tente novamente.', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 811b059cf63a..cd98e14a41fb 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -5408,6 +5408,11 @@ _如需更详细的说明,请[访问我们的帮助网站](${CONST.NETSUITE_IM reimbursementAccount: '报销账户', welcomeNote: '请开始使用我的新工作区', delayedSubmission: '延迟提交', + merchantRules: '商家规则', + merchantRulesCount: () => ({ + one: '1 商家规则', + other: (count: number) => `${count} 商家规则`, + }), confirmTitle: ({newWorkspaceName, totalMembers}: {newWorkspaceName?: string; totalMembers?: number}) => `您即将创建并共享 ${newWorkspaceName ?? ''},其中包含来自原始工作区的 ${totalMembers ?? 0} 位成员。`, error: '复制您的新工作区时发生错误。请重试。', diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index 6e55164421d7..87f35cfbf416 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -2910,6 +2910,7 @@ function buildDuplicatePolicyData(policy: Policy, options: DuplicatePolicyDataOp const isPerDiemOptionSelected = parts?.perDiem; const isOverviewOptionSelected = parts?.overview; const isTravelOptionSelected = parts?.travel; + const isCodingRulesOptionSelected = parts?.codingRules; const outputCurrency = isOverviewOptionSelected ? policy?.outputCurrency : localCurrency; @@ -2963,6 +2964,7 @@ function buildDuplicatePolicyData(policy: Policy, options: DuplicatePolicyDataOp connections: isConnectionsOptionSelected ? policy?.connections : undefined, customUnits: getCustomUnitsForDuplication(policy, isDistanceRatesOptionSelected, isPerDiemOptionSelected), taxRates: isTaxesOptionSelected ? policy?.taxRates : undefined, + rules: isCodingRulesOptionSelected ? {codingRules: policy?.rules?.codingRules} : undefined, pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD, pendingFields: { autoReporting: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD, diff --git a/src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx b/src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx index 14d9af1b012e..361c52c5edc6 100644 --- a/src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx +++ b/src/pages/workspace/duplicate/WorkspaceDuplicateSelectFeaturesForm.tsx @@ -43,6 +43,7 @@ function WorkspaceDuplicateSelectFeaturesForm({policyID}: WorkspaceDuplicateForm const taxesLength = Object.keys(policy?.taxRates?.taxes ?? {}).length ?? 0; const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${policyID}`, {canBeMissing: true}); const categoriesCount = Object.keys(policyCategories ?? {}).length; + const codingRulesCount = Object.keys(policy?.rules?.codingRules ?? {}).length; const [selectedItems, setSelectedItems] = useState([]); const reportFields = Object.keys(getReportFieldsByPolicyID(policyID)).length ?? 0; const customUnits = getPerDiemCustomUnit(policy); @@ -142,6 +143,13 @@ function WorkspaceDuplicateSelectFeaturesForm({policyID}: WorkspaceDuplicateForm : undefined, } : undefined, + codingRulesCount > 0 && !isCollect + ? { + translation: translate('workspace.duplicateWorkspace.merchantRules'), + value: 'codingRules', + alternateText: translate('workspace.duplicateWorkspace.merchantRulesCount', {count: codingRulesCount}), + } + : undefined, ratesCount > 0 && policy?.areDistanceRatesEnabled ? { translation: translate('workspace.common.distanceRates'), @@ -188,6 +196,7 @@ function WorkspaceDuplicateSelectFeaturesForm({policyID}: WorkspaceDuplicateForm allRates, bankAccountList, invoiceCompany, + codingRulesCount, ]); const featuresToCopy: ListItem[] = useMemo(() => { @@ -235,6 +244,7 @@ function WorkspaceDuplicateSelectFeaturesForm({policyID}: WorkspaceDuplicateForm exportLayouts: selectedItems.includes('workflows'), overview: selectedItems.includes('overview'), travel: selectedItems.includes('travel'), + codingRules: selectedItems.includes('codingRules'), }, file: duplicatedWorkspaceAvatar, localCurrency: currentUserPersonalDetails?.localCurrencyCode ?? '', @@ -360,6 +370,7 @@ function WorkspaceDuplicateSelectFeaturesForm({policyID}: WorkspaceDuplicateForm accessibilityLabel={translate('workspace.common.selectAll')} role="button" accessibilityState={{checked: isSelectAllChecked}} + sentryLabel={CONST.SENTRY_LABEL.WORKSPACE.DUPLICATE_SELECT_FEATURES_SELECT_ALL} dataSet={{[CONST.SELECTION_SCRAPER_HIDDEN_ELEMENT]: true}} > {translate('workspace.common.selectAll')}