From a331d36b65f04626debe0896f9f7ca5d0437fc55 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Wed, 2 Jul 2025 16:25:51 +0700 Subject: [PATCH 1/3] fix: system message not threaded after setting new tax value --- src/CONST/index.ts | 3 +++ src/languages/en.ts | 4 ++++ src/languages/es.ts | 4 ++++ src/languages/params.ts | 3 +++ src/libs/ReportActionsUtils.ts | 19 +++++++++++++++++++ src/libs/SidebarUtils.ts | 7 +++++++ .../report/ContextMenu/ContextMenuActions.tsx | 7 +++++++ .../home/report/PureReportActionItem.tsx | 7 +++++++ src/types/onyx/OriginalMessage.ts | 3 +++ 9 files changed, 57 insertions(+) diff --git a/src/CONST/index.ts b/src/CONST/index.ts index b120caa3464f..005558bd09c2 100755 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -1177,6 +1177,9 @@ const CONST = { ADD_INTEGRATION: 'POLICYCHANGELOG_ADD_INTEGRATION', ADD_REPORT_FIELD: 'POLICYCHANGELOG_ADD_REPORT_FIELD', ADD_TAG: 'POLICYCHANGELOG_ADD_TAG', + ADD_TAX: 'POLICYCHANGELOG_ADD_TAX', + DELETE_TAX: 'POLICYCHANGELOG_DELETE_TAX', + UPDATE_TAX: 'POLICYCHANGELOG_UPDATE_TAX', DELETE_ALL_TAGS: 'POLICYCHANGELOG_DELETE_ALL_TAGS', DELETE_APPROVER_RULE: 'POLICYCHANGELOG_DELETE_APPROVER_RULE', DELETE_BUDGET: 'POLICYCHANGELOG_DELETE_BUDGET', diff --git a/src/languages/en.ts b/src/languages/en.ts index f4797d79e05e..218afd3867b5 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -229,6 +229,7 @@ import type { UpdatedPolicyTagFieldParams, UpdatedPolicyTagNameParams, UpdatedPolicyTagParams, + UpdatedPolicyTaxParams, UpdatedTheDistanceMerchantParams, UpdatedTheRequestParams, UpdatePolicyCustomUnitParams, @@ -5658,6 +5659,9 @@ const translations = { return `changed the "${categoryName}" category to ${newValue} (previously ${oldValue})`; }, setCategoryName: ({oldName, newName}: UpdatedPolicyCategoryNameParams) => `renamed the category "${oldName}" to "${newName}"`, + addTax: ({taxName}: UpdatedPolicyTaxParams) => `added the tax "${taxName}"`, + deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `removed the tax "${taxName}"`, + updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? 'disabled' : 'enabled'} the tax "${taxName}"`, updatedDescriptionHint: ({categoryName, oldValue, newValue}: UpdatedPolicyCategoryDescriptionHintTypeParams) => { if (!newValue) { return `removed the description hint "${oldValue}" from the category "${categoryName}"`; diff --git a/src/languages/es.ts b/src/languages/es.ts index 888858130983..123c8a967f79 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -228,6 +228,7 @@ import type { UpdatedPolicyTagFieldParams, UpdatedPolicyTagNameParams, UpdatedPolicyTagParams, + UpdatedPolicyTaxParams, UpdatedTheDistanceMerchantParams, UpdatedTheRequestParams, UpdatePolicyCustomUnitParams, @@ -5633,6 +5634,9 @@ const translations = { addCategory: ({categoryName}: UpdatedPolicyCategoryParams) => `añadió la categoría "${categoryName}""`, deleteCategory: ({categoryName}: UpdatedPolicyCategoryParams) => `eliminó la categoría "${categoryName}"`, updateCategory: ({oldValue, categoryName}: UpdatedPolicyCategoryParams) => `${oldValue ? 'deshabilitó' : 'habilitó'} la categoría "${categoryName}"`, + addTax: ({taxName}: UpdatedPolicyTaxParams) => `añadió el impuesto "${taxName}"`, + deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `eliminó el impuesto "${taxName}"`, + updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? 'deshabilitó' : 'habilitó'} el impuesto "${taxName}"`, updatedDescriptionHint: ({categoryName, oldValue, newValue}: UpdatedPolicyCategoryDescriptionHintTypeParams) => { if (!newValue) { return `eliminó la sugerencia de descripción "${oldValue}" de la categoría "${categoryName}"`; diff --git a/src/languages/params.ts b/src/languages/params.ts index a59faeacc5ad..edebe596fcbd 100644 --- a/src/languages/params.ts +++ b/src/languages/params.ts @@ -324,6 +324,8 @@ type UpdatedPolicyCategoryExpenseLimitTypeParams = {categoryName: string; oldVal type UpdatedPolicyCategoryMaxAmountNoReceiptParams = {categoryName: string; oldValue?: string; newValue: string}; +type UpdatedPolicyTaxParams = {taxName: string; oldValue?: string | boolean | number; newValue?: string | boolean | number}; + type UpdatedPolicyTagParams = {tagListName: string; tagName?: string; enabled?: boolean; count?: string}; type UpdatedPolicyTagNameParams = {oldName: string; newName: string; tagListName: string}; @@ -1028,6 +1030,7 @@ export type { UpdatedPolicyCustomUnitTaxRateExternalIDParams, UpdatedPolicyCustomUnitTaxClaimablePercentageParams, UpdatedPolicyTagParams, + UpdatedPolicyTaxParams, UpdatedPolicyTagNameParams, UpdatedPolicyTagFieldParams, UpdatedPolicyReportFieldDefaultValueParams, diff --git a/src/libs/ReportActionsUtils.ts b/src/libs/ReportActionsUtils.ts index 0770e500f637..b1a1c1dc4e72 100644 --- a/src/libs/ReportActionsUtils.ts +++ b/src/libs/ReportActionsUtils.ts @@ -2344,6 +2344,24 @@ function getWorkspaceCategoryUpdateMessage(action: ReportAction, policy?: OnyxEn return getReportActionText(action); } +function getWorkspaceTaxUpdateMessage(action: ReportAction): string { + const {taxName, oldValue, newValue} = getOriginalMessage(action as ReportAction) ?? {}; + + if (action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.ADD_TAX && taxName) { + return translateLocal('workspaceActions.addTax', {taxName}); + } + + if (action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.DELETE_TAX && taxName) { + return translateLocal('workspaceActions.deleteTax', {taxName}); + } + + if (action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_TAX && taxName) { + return translateLocal('workspaceActions.updateTax', {taxName, oldValue, newValue}); + } + + return getReportActionText(action); +} + function getWorkspaceTagUpdateMessage(action: ReportAction): string { const {tagListName, tagName, enabled, newName, newValue, oldName, oldValue, updatedField, count} = getOriginalMessage(action as ReportAction) ?? {}; @@ -3076,6 +3094,7 @@ export { getWorkspaceCategoryUpdateMessage, getWorkspaceUpdateFieldMessage, getWorkspaceCurrencyUpdateMessage, + getWorkspaceTaxUpdateMessage, getWorkspaceFrequencyUpdateMessage, getPolicyChangeLogMaxExpenseAmountNoReceiptMessage, getPolicyChangeLogMaxExpenseAmountMessage, diff --git a/src/libs/SidebarUtils.ts b/src/libs/SidebarUtils.ts index a2bb2c05ecfe..572d53d4c603 100644 --- a/src/libs/SidebarUtils.ts +++ b/src/libs/SidebarUtils.ts @@ -65,6 +65,7 @@ import { getWorkspaceReportFieldDeleteMessage, getWorkspaceReportFieldUpdateMessage, getWorkspaceTagUpdateMessage, + getWorkspaceTaxUpdateMessage, getWorkspaceUpdateFieldMessage, isActionOfType, isCardIssuedAction, @@ -719,6 +720,12 @@ function getOptionData({ isActionOfType(lastAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.SET_CATEGORY_NAME) ) { result.alternateText = getWorkspaceCategoryUpdateMessage(lastAction); + } else if ( + isActionOfType(lastAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.ADD_TAX) || + isActionOfType(lastAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.DELETE_TAX) || + isActionOfType(lastAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_TAX) + ) { + result.alternateText = getWorkspaceTaxUpdateMessage(lastAction); } else if (isActionOfType(lastAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_TAG_LIST_NAME)) { result.alternateText = getCleanedTagName(getTagListNameUpdatedMessage(lastAction) ?? ''); } else if (isTagModificationAction(lastAction?.actionName)) { diff --git a/src/pages/home/report/ContextMenu/ContextMenuActions.tsx b/src/pages/home/report/ContextMenu/ContextMenuActions.tsx index b8aea7e9a2cd..9e70314ba7d4 100644 --- a/src/pages/home/report/ContextMenu/ContextMenuActions.tsx +++ b/src/pages/home/report/ContextMenu/ContextMenuActions.tsx @@ -63,6 +63,7 @@ import { getWorkspaceReportFieldDeleteMessage, getWorkspaceReportFieldUpdateMessage, getWorkspaceTagUpdateMessage, + getWorkspaceTaxUpdateMessage, getWorkspaceUpdateFieldMessage, isActionableJoinRequest, isActionableMentionWhisper, @@ -534,6 +535,12 @@ const ContextMenuActions: ContextMenuAction[] = [ reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.SET_CATEGORY_NAME ) { Clipboard.setString(getWorkspaceCategoryUpdateMessage(reportAction)); + } else if ( + reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.ADD_TAX || + reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.DELETE_TAX || + reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_TAX + ) { + Clipboard.setString(getWorkspaceTaxUpdateMessage(reportAction)); } else if (reportAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_TAG_LIST_NAME) { Clipboard.setString(getCleanedTagName(getTagListNameUpdatedMessage(reportAction))); } else if (isTagModificationAction(reportAction.actionName)) { diff --git a/src/pages/home/report/PureReportActionItem.tsx b/src/pages/home/report/PureReportActionItem.tsx index 0e42ab4faae0..02c7584086e3 100644 --- a/src/pages/home/report/PureReportActionItem.tsx +++ b/src/pages/home/report/PureReportActionItem.tsx @@ -97,6 +97,7 @@ import { getWorkspaceReportFieldDeleteMessage, getWorkspaceReportFieldUpdateMessage, getWorkspaceTagUpdateMessage, + getWorkspaceTaxUpdateMessage, getWorkspaceUpdateFieldMessage, isActionableAddPaymentCard, isActionableJoinRequest, @@ -1097,6 +1098,12 @@ function PureReportActionItem({ action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.SET_CATEGORY_NAME ) { children = ; + } else if ( + action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.ADD_TAX || + action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.DELETE_TAX || + action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_TAX + ) { + children = ; } else if (action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_TAG_LIST_NAME) { children = ; } else if (isTagModificationAction(action.actionName)) { diff --git a/src/types/onyx/OriginalMessage.ts b/src/types/onyx/OriginalMessage.ts index 09cd4797b973..6c1087ce9746 100644 --- a/src/types/onyx/OriginalMessage.ts +++ b/src/types/onyx/OriginalMessage.ts @@ -341,6 +341,9 @@ type OriginalMessagePolicyChangeLog = { /** Name of the added category */ categoryName?: string; + /** Name of the added tax */ + taxName?: string; + /** Name of the updated field */ updatedField?: string; From d8c177ae718051387f7fb9c1a1be7f08775ce1c9 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Wed, 12 Nov 2025 21:04:24 +0700 Subject: [PATCH 2/3] update translation --- src/languages/de.ts | 4 ++++ src/languages/en.ts | 6 +++--- src/languages/fr.ts | 4 ++++ src/languages/it.ts | 4 ++++ src/languages/ja.ts | 4 ++++ src/languages/nl.ts | 4 ++++ src/languages/pl.ts | 4 ++++ src/languages/pt-BR.ts | 4 ++++ src/languages/zh-hans.ts | 4 ++++ 9 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 7404a5192a6c..b6861c4bfcb3 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -271,6 +271,7 @@ import type { UpdatedPolicyTagFieldParams, UpdatedPolicyTagNameParams, UpdatedPolicyTagParams, + UpdatedPolicyTaxParams, UpdatedTheDistanceMerchantParams, UpdatedTheRequestParams, UpdatePolicyCustomUnitParams, @@ -6147,6 +6148,9 @@ ${amount} für ${merchant} - ${date}`, `änderte die Rate der Berichte, die zufällig zur manuellen Genehmigung weitergeleitet werden, auf ${Math.round(newAuditRate * 100)}% (zuvor ${Math.round(oldAuditRate * 100)}%)`, updatedManualApprovalThreshold: ({oldLimit, newLimit}: UpdatedPolicyManualApprovalThresholdParams) => `hat das manuelle Genehmigungslimit für alle Ausgaben auf ${newLimit} geändert (vorher ${oldLimit})`, + addTax: ({taxName}: UpdatedPolicyTaxParams) => `hat die Steuer "${taxName}" hinzugefügt`, + deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `hat die Steuer "${taxName}" entfernt`, + updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? `hat die Steuer "${taxName}" deaktiviert` : `hat die Steuer "${taxName}" aktiviert`}`, }, roomMembersPage: { memberNotFound: 'Mitglied nicht gefunden.', diff --git a/src/languages/en.ts b/src/languages/en.ts index 1833a47d4f6c..e6d6086b89d0 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -6017,9 +6017,6 @@ const translations = { return `changed the "${categoryName}" category to ${newValue} (previously ${oldValue})`; }, setCategoryName: ({oldName, newName}: UpdatedPolicyCategoryNameParams) => `renamed the category "${oldName}" to "${newName}"`, - addTax: ({taxName}: UpdatedPolicyTaxParams) => `added the tax "${taxName}"`, - deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `removed the tax "${taxName}"`, - updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? 'disabled' : 'enabled'} the tax "${taxName}"`, updatedDescriptionHint: ({categoryName, oldValue, newValue}: UpdatedPolicyCategoryDescriptionHintTypeParams) => { if (!newValue) { return `removed the description hint "${oldValue}" from the category "${categoryName}"`; @@ -6121,6 +6118,9 @@ const translations = { `changed the rate of reports randomly routed for manual approval to ${Math.round(newAuditRate * 100)}% (previously ${Math.round(oldAuditRate * 100)}%)`, updatedManualApprovalThreshold: ({oldLimit, newLimit}: UpdatedPolicyManualApprovalThresholdParams) => `changed the manual approval limit for all expenses to ${newLimit} (previously ${oldLimit})`, + addTax: ({taxName}: UpdatedPolicyTaxParams) => `added the tax "${taxName}"`, + deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `removed the tax "${taxName}"`, + updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? 'disabled' : 'enabled'} the tax "${taxName}"`, }, roomMembersPage: { memberNotFound: 'Member not found.', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index d210f95c4d07..e468a9dd8c15 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -271,6 +271,7 @@ import type { UpdatedPolicyTagFieldParams, UpdatedPolicyTagNameParams, UpdatedPolicyTagParams, + UpdatedPolicyTaxParams, UpdatedTheDistanceMerchantParams, UpdatedTheRequestParams, UpdatePolicyCustomUnitParams, @@ -6154,6 +6155,9 @@ ${amount} pour ${merchant} - ${date}`, `a changé le taux de rapports acheminés aléatoirement pour approbation manuelle à ${Math.round(newAuditRate * 100)}% (précédemment ${Math.round(oldAuditRate * 100)}%)`, updatedManualApprovalThreshold: ({oldLimit, newLimit}: UpdatedPolicyManualApprovalThresholdParams) => `a modifié la limite d'approbation manuelle pour toutes les dépenses à ${newLimit} (précédemment ${oldLimit})`, + addTax: ({taxName}: UpdatedPolicyTaxParams) => `a ajouté la taxe "${taxName}"`, + deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `a supprimé la taxe "${taxName}"`, + updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? 'a désactivé' : 'a activé'} la taxe "${taxName}"`, }, roomMembersPage: { memberNotFound: 'Membre non trouvé.', diff --git a/src/languages/it.ts b/src/languages/it.ts index 30d094b3fbdd..1ee6600f6ab3 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -271,6 +271,7 @@ import type { UpdatedPolicyTagFieldParams, UpdatedPolicyTagNameParams, UpdatedPolicyTagParams, + UpdatedPolicyTaxParams, UpdatedTheDistanceMerchantParams, UpdatedTheRequestParams, UpdatePolicyCustomUnitParams, @@ -6162,6 +6163,9 @@ ${amount} per ${merchant} - ${date}`, `ha cambiato la percentuale di rapporti instradati casualmente per l'approvazione manuale a ${Math.round(newAuditRate * 100)}% (precedentemente ${Math.round(oldAuditRate * 100)}%)`, updatedManualApprovalThreshold: ({oldLimit, newLimit}: UpdatedPolicyManualApprovalThresholdParams) => `ha cambiato il limite di approvazione manuale per tutte le spese a ${newLimit} (precedentemente ${oldLimit})`, + addTax: ({taxName}: UpdatedPolicyTaxParams) => `ha aggiunto l'imposta "${taxName}"`, + deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `ha rimosso l'imposta "${taxName}"`, + updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? 'ha disattivato' : 'ha attivato'} l'imposta "${taxName}"`, }, roomMembersPage: { memberNotFound: 'Membro non trovato.', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 3760ef0ee3fb..91e50b754261 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -271,6 +271,7 @@ import type { UpdatedPolicyTagFieldParams, UpdatedPolicyTagNameParams, UpdatedPolicyTagParams, + UpdatedPolicyTaxParams, UpdatedTheDistanceMerchantParams, UpdatedTheRequestParams, UpdatePolicyCustomUnitParams, @@ -6097,6 +6098,9 @@ ${date} - ${merchant}に${amount}`, updatedAuditRate: ({oldAuditRate, newAuditRate}: UpdatedPolicyAuditRateParams) => `レポートが手動承認のためにランダムにルーティングされる割合を${Math.round(newAuditRate * 100)}%(以前は${Math.round(oldAuditRate * 100)}%)に変更しました。`, updatedManualApprovalThreshold: ({oldLimit, newLimit}: UpdatedPolicyManualApprovalThresholdParams) => `すべての経費の手動承認限度額を${newLimit}に変更しました(以前は${oldLimit})`, + addTax: ({taxName}: UpdatedPolicyTaxParams) => `税 "${taxName}" を追加しました`, + deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `税 "${taxName}" を削除しました`, + updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? `税 "${taxName}" を無効にしました` : `税 "${taxName}" を有効にしました`}`, }, roomMembersPage: { memberNotFound: 'メンバーが見つかりません。', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index be0a042fbcfc..00fe4fde3d12 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -271,6 +271,7 @@ import type { UpdatedPolicyTagFieldParams, UpdatedPolicyTagNameParams, UpdatedPolicyTagParams, + UpdatedPolicyTaxParams, UpdatedTheDistanceMerchantParams, UpdatedTheRequestParams, UpdatePolicyCustomUnitParams, @@ -6144,6 +6145,9 @@ ${amount} voor ${merchant} - ${date}`, `heeft het percentage van rapporten dat willekeurig wordt doorgestuurd voor handmatige goedkeuring gewijzigd naar ${Math.round(newAuditRate * 100)}% (voorheen ${Math.round(oldAuditRate * 100)}%)`, updatedManualApprovalThreshold: ({oldLimit, newLimit}: UpdatedPolicyManualApprovalThresholdParams) => `heeft de handmatige goedkeuringslimiet voor alle uitgaven gewijzigd naar ${newLimit} (voorheen ${oldLimit})`, + addTax: ({taxName}: UpdatedPolicyTaxParams) => `heeft de belasting "${taxName}" toegevoegd`, + deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `heeft de belasting "${taxName}" verwijderd`, + updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? `heeft de belasting "${taxName}" uitgeschakeld` : `heeft de belasting "${taxName}" ingeschakeld`}`, }, roomMembersPage: { memberNotFound: 'Lid niet gevonden.', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 0ba0a7a2a9cf..c1bdce51df4d 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -271,6 +271,7 @@ import type { UpdatedPolicyTagFieldParams, UpdatedPolicyTagNameParams, UpdatedPolicyTagParams, + UpdatedPolicyTaxParams, UpdatedTheDistanceMerchantParams, UpdatedTheRequestParams, UpdatePolicyCustomUnitParams, @@ -6131,6 +6132,9 @@ ${amount} dla ${merchant} - ${date}`, `zmieniono wskaźnik raportów losowo kierowanych do ręcznej akceptacji na ${Math.round(newAuditRate * 100)}% (wcześniej ${Math.round(oldAuditRate * 100)}%)`, updatedManualApprovalThreshold: ({oldLimit, newLimit}: UpdatedPolicyManualApprovalThresholdParams) => `zmieniono limit ręcznego zatwierdzania dla wszystkich wydatków na ${newLimit} (wcześniej ${oldLimit})`, + addTax: ({taxName}: UpdatedPolicyTaxParams) => `dodał podatek "${taxName}"`, + deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `usunął podatek "${taxName}"`, + updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? `wyłączył podatek "${taxName}"` : `włączył podatek "${taxName}"`}`, }, roomMembersPage: { memberNotFound: 'Nie znaleziono członka.', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 0aefae6e26d8..ad6c0826ed9c 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -271,6 +271,7 @@ import type { UpdatedPolicyTagFieldParams, UpdatedPolicyTagNameParams, UpdatedPolicyTagParams, + UpdatedPolicyTaxParams, UpdatedTheDistanceMerchantParams, UpdatedTheRequestParams, UpdatePolicyCustomUnitParams, @@ -6144,6 +6145,9 @@ ${amount} para ${merchant} - ${date}`, `alterou a taxa de relatórios encaminhados aleatoriamente para aprovação manual para ${Math.round(newAuditRate * 100)}% (anteriormente ${Math.round(oldAuditRate * 100)}%)`, updatedManualApprovalThreshold: ({oldLimit, newLimit}: UpdatedPolicyManualApprovalThresholdParams) => `alterou o limite de aprovação manual para todas as despesas para ${newLimit} (anteriormente ${oldLimit})`, + addTax: ({taxName}: UpdatedPolicyTaxParams) => `adicionou o imposto "${taxName}"`, + deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `removeu o imposto "${taxName}"`, + updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? 'desativou' : 'ativou'} o imposto "${taxName}"`, }, roomMembersPage: { memberNotFound: 'Membro não encontrado.', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index c59c3511e9d8..4c0e742b2bbc 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -271,6 +271,7 @@ import type { UpdatedPolicyTagFieldParams, UpdatedPolicyTagNameParams, UpdatedPolicyTagParams, + UpdatedPolicyTaxParams, UpdatedTheDistanceMerchantParams, UpdatedTheRequestParams, UpdatePolicyCustomUnitParams, @@ -6007,6 +6008,9 @@ ${merchant}的${amount} - ${date}`, updatedAuditRate: ({oldAuditRate, newAuditRate}: UpdatedPolicyAuditRateParams) => `将随机分配进行人工审批的报告比例更改为${Math.round(newAuditRate * 100)}%(之前为${Math.round(oldAuditRate * 100)}%)`, updatedManualApprovalThreshold: ({oldLimit, newLimit}: UpdatedPolicyManualApprovalThresholdParams) => `将所有费用的人工审批限额更改为${newLimit}(之前为${oldLimit})`, + addTax: ({taxName}: UpdatedPolicyTaxParams) => `已添加税项 "${taxName}"`, + deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `已删除税项 "${taxName}"`, + updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? `已禁用税项 "${taxName}"` : `已启用税项 "${taxName}"`}`, }, roomMembersPage: { memberNotFound: '未找到成员。', From 20f460131675228b2de3e6e4d2f39ab3c13ef0d7 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Wed, 12 Nov 2025 21:33:53 +0700 Subject: [PATCH 3/3] update translation for update tax action --- src/languages/de.ts | 23 ++++++++++++++++++++++- src/languages/en.ts | 23 ++++++++++++++++++++++- src/languages/es.ts | 23 ++++++++++++++++++++++- src/languages/fr.ts | 23 ++++++++++++++++++++++- src/languages/it.ts | 23 ++++++++++++++++++++++- src/languages/ja.ts | 23 ++++++++++++++++++++++- src/languages/nl.ts | 23 ++++++++++++++++++++++- src/languages/params.ts | 2 +- src/languages/pl.ts | 23 ++++++++++++++++++++++- src/languages/pt-BR.ts | 23 ++++++++++++++++++++++- src/languages/zh-hans.ts | 23 ++++++++++++++++++++++- src/libs/ReportActionsUtils.ts | 7 +++++-- 12 files changed, 226 insertions(+), 13 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index b6861c4bfcb3..65246f39cb94 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -6150,7 +6150,28 @@ ${amount} für ${merchant} - ${date}`, `hat das manuelle Genehmigungslimit für alle Ausgaben auf ${newLimit} geändert (vorher ${oldLimit})`, addTax: ({taxName}: UpdatedPolicyTaxParams) => `hat die Steuer "${taxName}" hinzugefügt`, deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `hat die Steuer "${taxName}" entfernt`, - updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? `hat die Steuer "${taxName}" deaktiviert` : `hat die Steuer "${taxName}" aktiviert`}`, + updateTax: ({oldValue, taxName, updatedField, newValue}: UpdatedPolicyTaxParams) => { + if (!updatedField) { + return ''; + } + switch (updatedField) { + case 'name': { + return `hat die Steuer "${oldValue}" in "${newValue}" umbenannt`; + } + case 'code': { + return `hat den Steuercode für "${taxName}" von "${oldValue}" auf "${newValue}" geändert`; + } + case 'rate': { + return `hat den Steuersatz für "${taxName}" von "${oldValue}" auf "${newValue}" geändert`; + } + case 'enabled': { + return `${oldValue ? `hat die Steuer "${taxName}" deaktiviert` : `hat die Steuer "${taxName}" aktiviert`}`; + } + default: { + return ''; + } + } + }, }, roomMembersPage: { memberNotFound: 'Mitglied nicht gefunden.', diff --git a/src/languages/en.ts b/src/languages/en.ts index e6d6086b89d0..4c7c605385a6 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -6120,7 +6120,28 @@ const translations = { `changed the manual approval limit for all expenses to ${newLimit} (previously ${oldLimit})`, addTax: ({taxName}: UpdatedPolicyTaxParams) => `added the tax "${taxName}"`, deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `removed the tax "${taxName}"`, - updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? 'disabled' : 'enabled'} the tax "${taxName}"`, + updateTax: ({oldValue, taxName, updatedField, newValue}: UpdatedPolicyTaxParams) => { + if (!updatedField) { + return ''; + } + switch (updatedField) { + case 'name': { + return `renamed the tax "${oldValue}" to "${newValue}"`; + } + case 'code': { + return `changed the tax code for "${taxName}" from "${oldValue}" to "${newValue}"`; + } + case 'rate': { + return `changed the tax rate for "${taxName}" from "${oldValue}" to "${newValue}"`; + } + case 'enabled': { + return `${oldValue ? 'disabled' : 'enabled'} the tax "${taxName}"`; + } + default: { + return ''; + } + } + }, }, roomMembersPage: { memberNotFound: 'Member not found.', diff --git a/src/languages/es.ts b/src/languages/es.ts index 5a737e3f75f8..879338317e41 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -5786,7 +5786,28 @@ ${amount} para ${merchant} - ${date}`, updatedManualApprovalThreshold: ({oldLimit, newLimit}) => `cambió el límite de aprobación manual para todos los gastos a ${newLimit} (previamente ${oldLimit})`, addTax: ({taxName}) => `añadió el impuesto "${taxName}"`, deleteTax: ({taxName}) => `eliminó el impuesto "${taxName}"`, - updateTax: ({oldValue, taxName}) => `${oldValue ? 'deshabilitó' : 'habilitó'} el impuesto "${taxName}"`, + updateTax: ({oldValue, taxName, updatedField, newValue}) => { + if (!updatedField) { + return ''; + } + switch (updatedField) { + case 'name': { + return `cambió el nombre del impuesto de "${oldValue}" a "${newValue}"`; + } + case 'code': { + return `cambió el código del impuesto "${taxName}" de "${oldValue}" a "${newValue}"`; + } + case 'rate': { + return `cambió la tasa del impuesto "${taxName}" de "${oldValue}" a "${newValue}"`; + } + case 'enabled': { + return `${oldValue ? 'deshabilitó' : 'habilitó'} el impuesto "${taxName}"`; + } + default: { + return ''; + } + } + }, }, roomMembersPage: { memberNotFound: 'Miembro no encontrado.', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index e468a9dd8c15..f1822906b06f 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -6157,7 +6157,28 @@ ${amount} pour ${merchant} - ${date}`, `a modifié la limite d'approbation manuelle pour toutes les dépenses à ${newLimit} (précédemment ${oldLimit})`, addTax: ({taxName}: UpdatedPolicyTaxParams) => `a ajouté la taxe "${taxName}"`, deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `a supprimé la taxe "${taxName}"`, - updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? 'a désactivé' : 'a activé'} la taxe "${taxName}"`, + updateTax: ({oldValue, taxName, updatedField, newValue}: UpdatedPolicyTaxParams) => { + if (!updatedField) { + return ''; + } + switch (updatedField) { + case 'name': { + return `a renommé la taxe "${oldValue}" en "${newValue}"`; + } + case 'code': { + return `a modifié le code de la taxe "${taxName}" de "${oldValue}" à "${newValue}"`; + } + case 'rate': { + return `a modifié le taux de la taxe "${taxName}" de "${oldValue}" à "${newValue}"`; + } + case 'enabled': { + return `${oldValue ? 'a désactivé' : 'a activé'} la taxe "${taxName}"`; + } + default: { + return ''; + } + } + }, }, roomMembersPage: { memberNotFound: 'Membre non trouvé.', diff --git a/src/languages/it.ts b/src/languages/it.ts index 1ee6600f6ab3..f8e1c1e3205c 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -6165,7 +6165,28 @@ ${amount} per ${merchant} - ${date}`, `ha cambiato il limite di approvazione manuale per tutte le spese a ${newLimit} (precedentemente ${oldLimit})`, addTax: ({taxName}: UpdatedPolicyTaxParams) => `ha aggiunto l'imposta "${taxName}"`, deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `ha rimosso l'imposta "${taxName}"`, - updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? 'ha disattivato' : 'ha attivato'} l'imposta "${taxName}"`, + updateTax: ({oldValue, taxName, updatedField, newValue}: UpdatedPolicyTaxParams) => { + if (!updatedField) { + return ''; + } + switch (updatedField) { + case 'name': { + return `ha rinominato l'imposta da "${oldValue}" a "${newValue}"`; + } + case 'code': { + return `ha modificato il codice dell'imposta "${taxName}" da "${oldValue}" a "${newValue}"`; + } + case 'rate': { + return `ha modificato l'aliquota dell'imposta "${taxName}" da "${oldValue}" a "${newValue}"`; + } + case 'enabled': { + return `${oldValue ? 'ha disattivato' : 'ha attivato'} l'imposta "${taxName}"`; + } + default: { + return ''; + } + } + }, }, roomMembersPage: { memberNotFound: 'Membro non trovato.', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 91e50b754261..5270c2f5e82d 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -6100,7 +6100,28 @@ ${date} - ${merchant}に${amount}`, updatedManualApprovalThreshold: ({oldLimit, newLimit}: UpdatedPolicyManualApprovalThresholdParams) => `すべての経費の手動承認限度額を${newLimit}に変更しました(以前は${oldLimit})`, addTax: ({taxName}: UpdatedPolicyTaxParams) => `税 "${taxName}" を追加しました`, deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `税 "${taxName}" を削除しました`, - updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? `税 "${taxName}" を無効にしました` : `税 "${taxName}" を有効にしました`}`, + updateTax: ({oldValue, taxName, updatedField, newValue}: UpdatedPolicyTaxParams) => { + if (!updatedField) { + return ''; + } + switch (updatedField) { + case 'name': { + return `税 "${oldValue}" の名前を "${newValue}" に変更しました`; + } + case 'code': { + return `税 "${taxName}" のコードを "${oldValue}" から "${newValue}" に変更しました`; + } + case 'rate': { + return `税 "${taxName}" の税率を "${oldValue}" から "${newValue}" に変更しました`; + } + case 'enabled': { + return `${oldValue ? `税 "${taxName}" を無効にしました` : `税 "${taxName}" を有効にしました`}`; + } + default: { + return ''; + } + } + }, }, roomMembersPage: { memberNotFound: 'メンバーが見つかりません。', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 00fe4fde3d12..743d7bb5e449 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -6147,7 +6147,28 @@ ${amount} voor ${merchant} - ${date}`, `heeft de handmatige goedkeuringslimiet voor alle uitgaven gewijzigd naar ${newLimit} (voorheen ${oldLimit})`, addTax: ({taxName}: UpdatedPolicyTaxParams) => `heeft de belasting "${taxName}" toegevoegd`, deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `heeft de belasting "${taxName}" verwijderd`, - updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? `heeft de belasting "${taxName}" uitgeschakeld` : `heeft de belasting "${taxName}" ingeschakeld`}`, + updateTax: ({oldValue, taxName, updatedField, newValue}: UpdatedPolicyTaxParams) => { + if (!updatedField) { + return ''; + } + switch (updatedField) { + case 'name': { + return `heeft de belasting "${oldValue}" hernoemd naar "${newValue}"`; + } + case 'code': { + return `heeft de belastingcode voor "${taxName}" gewijzigd van "${oldValue}" naar "${newValue}"`; + } + case 'rate': { + return `heeft het belastingtarief voor "${taxName}" gewijzigd van "${oldValue}" naar "${newValue}"`; + } + case 'enabled': { + return `${oldValue ? `heeft de belasting "${taxName}" uitgeschakeld` : `heeft de belasting "${taxName}" ingeschakeld`}`; + } + default: { + return ''; + } + } + }, }, roomMembersPage: { memberNotFound: 'Lid niet gevonden.', diff --git a/src/languages/params.ts b/src/languages/params.ts index 9cf33d0e4331..7ede30a25fe3 100644 --- a/src/languages/params.ts +++ b/src/languages/params.ts @@ -374,7 +374,7 @@ type UpdatedPolicyCategoryExpenseLimitTypeParams = {categoryName: string; oldVal type UpdatedPolicyCategoryMaxAmountNoReceiptParams = {categoryName: string; oldValue?: string; newValue: string}; -type UpdatedPolicyTaxParams = {taxName: string; oldValue?: string | boolean | number; newValue?: string | boolean | number}; +type UpdatedPolicyTaxParams = {taxName: string; oldValue?: string | boolean | number; newValue?: string | boolean | number; updatedField?: string}; type UpdatedPolicyTagParams = {tagListName: string; tagName?: string; enabled?: boolean; count?: string}; diff --git a/src/languages/pl.ts b/src/languages/pl.ts index c1bdce51df4d..4c6e4122e9bb 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -6134,7 +6134,28 @@ ${amount} dla ${merchant} - ${date}`, `zmieniono limit ręcznego zatwierdzania dla wszystkich wydatków na ${newLimit} (wcześniej ${oldLimit})`, addTax: ({taxName}: UpdatedPolicyTaxParams) => `dodał podatek "${taxName}"`, deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `usunął podatek "${taxName}"`, - updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? `wyłączył podatek "${taxName}"` : `włączył podatek "${taxName}"`}`, + updateTax: ({oldValue, taxName, updatedField, newValue}: UpdatedPolicyTaxParams) => { + if (!updatedField) { + return ''; + } + switch (updatedField) { + case 'name': { + return `zmienił nazwę podatku z "${oldValue}" na "${newValue}"`; + } + case 'code': { + return `zmienił kod podatku "${taxName}" z "${oldValue}" na "${newValue}"`; + } + case 'rate': { + return `zmienił stawkę podatku "${taxName}" z "${oldValue}" na "${newValue}"`; + } + case 'enabled': { + return `${oldValue ? `wyłączył podatek "${taxName}"` : `włączył podatek "${taxName}"`}`; + } + default: { + return ''; + } + } + }, }, roomMembersPage: { memberNotFound: 'Nie znaleziono członka.', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index ad6c0826ed9c..bf635249a16b 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -6147,7 +6147,28 @@ ${amount} para ${merchant} - ${date}`, `alterou o limite de aprovação manual para todas as despesas para ${newLimit} (anteriormente ${oldLimit})`, addTax: ({taxName}: UpdatedPolicyTaxParams) => `adicionou o imposto "${taxName}"`, deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `removeu o imposto "${taxName}"`, - updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? 'desativou' : 'ativou'} o imposto "${taxName}"`, + updateTax: ({oldValue, taxName, updatedField, newValue}: UpdatedPolicyTaxParams) => { + if (!updatedField) { + return ''; + } + switch (updatedField) { + case 'name': { + return `renomeou o imposto de "${oldValue}" para "${newValue}"`; + } + case 'code': { + return `alterou o código do imposto "${taxName}" de "${oldValue}" para "${newValue}"`; + } + case 'rate': { + return `alterou a taxa do imposto "${taxName}" de "${oldValue}" para "${newValue}"`; + } + case 'enabled': { + return `${oldValue ? 'desativou' : 'ativou'} o imposto "${taxName}"`; + } + default: { + return ''; + } + } + }, }, roomMembersPage: { memberNotFound: 'Membro não encontrado.', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 4c0e742b2bbc..b3dc8a119939 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -6010,7 +6010,28 @@ ${merchant}的${amount} - ${date}`, updatedManualApprovalThreshold: ({oldLimit, newLimit}: UpdatedPolicyManualApprovalThresholdParams) => `将所有费用的人工审批限额更改为${newLimit}(之前为${oldLimit})`, addTax: ({taxName}: UpdatedPolicyTaxParams) => `已添加税项 "${taxName}"`, deleteTax: ({taxName}: UpdatedPolicyTaxParams) => `已删除税项 "${taxName}"`, - updateTax: ({oldValue, taxName}: UpdatedPolicyTaxParams) => `${oldValue ? `已禁用税项 "${taxName}"` : `已启用税项 "${taxName}"`}`, + updateTax: ({oldValue, taxName, updatedField, newValue}: UpdatedPolicyTaxParams) => { + if (!updatedField) { + return ''; + } + switch (updatedField) { + case 'name': { + return `将税项 "${oldValue}" 重命名为 "${newValue}"`; + } + case 'code': { + return `将税项 "${taxName}" 的代码从 "${oldValue}" 更改为 "${newValue}"`; + } + case 'rate': { + return `将税项 "${taxName}" 的税率从 "${oldValue}" 更改为 "${newValue}"`; + } + case 'enabled': { + return `${oldValue ? `已禁用税项 "${taxName}"` : `已启用税项 "${taxName}"`}`; + } + default: { + return ''; + } + } + }, }, roomMembersPage: { memberNotFound: '未找到成员。', diff --git a/src/libs/ReportActionsUtils.ts b/src/libs/ReportActionsUtils.ts index 20707517b355..9995d669cd54 100644 --- a/src/libs/ReportActionsUtils.ts +++ b/src/libs/ReportActionsUtils.ts @@ -2523,18 +2523,21 @@ function getWorkspaceCategoryUpdateMessage(action: ReportAction, policy?: OnyxEn } function getWorkspaceTaxUpdateMessage(action: ReportAction): string { - const {taxName, oldValue, newValue} = getOriginalMessage(action as ReportAction) ?? {}; + const {taxName, oldValue, newValue, updatedField} = getOriginalMessage(action as ReportAction) ?? {}; if (action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.ADD_TAX && taxName) { + // eslint-disable-next-line @typescript-eslint/no-deprecated return translateLocal('workspaceActions.addTax', {taxName}); } if (action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.DELETE_TAX && taxName) { + // eslint-disable-next-line @typescript-eslint/no-deprecated return translateLocal('workspaceActions.deleteTax', {taxName}); } if (action.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_TAX && taxName) { - return translateLocal('workspaceActions.updateTax', {taxName, oldValue, newValue}); + // eslint-disable-next-line @typescript-eslint/no-deprecated + return translateLocal('workspaceActions.updateTax', {taxName, oldValue, newValue, updatedField}); } return getReportActionText(action);