From ba205a573a7ccadd64b47d530ca32301cbd1c7d7 Mon Sep 17 00:00:00 2001 From: Ben Limpich Date: Thu, 7 May 2026 13:42:57 -0700 Subject: [PATCH 1/9] Add travelInvoicingJournalPostingPreference type and constant --- src/CONST/index.ts | 1 + src/types/onyx/Policy.ts | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/CONST/index.ts b/src/CONST/index.ts index dd913b2f0d87..5b0e1ccdfe96 100644 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -2886,6 +2886,7 @@ const CONST = { NON_REIMBURSABLE_EXPENSES_EXPORT_DESTINATION: 'nonreimbursableExpensesExportDestination', DEFAULT_VENDOR: 'defaultVendor', TRAVEL_INVOICING_PAYABLE_ACCOUNT: 'travelInvoicingPayableAccountID', + TRAVEL_INVOICING_JOURNAL_POSTING_PREFERENCE: 'travelInvoicingJournalPostingPreference', REIMBURSABLE_PAYABLE_ACCOUNT: 'reimbursablePayableAccount', PAYABLE_ACCT: 'payableAcct', JOURNAL_POSTING_PREFERENCE: 'journalPostingPreference', diff --git a/src/types/onyx/Policy.ts b/src/types/onyx/Policy.ts index 859758a3e1cf..193a23791877 100644 --- a/src/types/onyx/Policy.ts +++ b/src/types/onyx/Policy.ts @@ -1086,6 +1086,9 @@ type NetSuiteConnectionConfig = OnyxCommon.OnyxValueWithOfflineFeedback< /** The payable account to use for Expensify Travel expenses when exporting to NetSuite */ travelInvoicingPayableAccountID?: string; + /** Whether Travel Invoicing JEs post as individual entries per expense or a single grouped entry */ + travelInvoicingJournalPostingPreference?: NetSuiteJournalPostingPreferences; + /** The provincial tax account for tax line items in NetSuite (only for Canadian Subsidiaries) */ provincialTaxPostingAccount?: string; From 8c1326aff09c65bca5b4c2b7876944349b74cd69 Mon Sep 17 00:00:00 2001 From: Ben Limpich Date: Thu, 7 May 2026 13:43:00 -0700 Subject: [PATCH 2/9] Add updateNetSuiteTravelInvoicingJournalPostingPreference action --- src/libs/actions/connections/NetSuiteCommands.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/libs/actions/connections/NetSuiteCommands.ts b/src/libs/actions/connections/NetSuiteCommands.ts index 07a8fed8c52e..698ebb1c46f6 100644 --- a/src/libs/actions/connections/NetSuiteCommands.ts +++ b/src/libs/actions/connections/NetSuiteCommands.ts @@ -1071,6 +1071,21 @@ function updateNetSuiteTravelInvoicingPayableAccount(policyID: string, accountID API.write(WRITE_COMMANDS.UPDATE_MANY_POLICY_CONNECTION_CONFIGS, parameters, onyxData); } +function updateNetSuiteTravelInvoicingJournalPostingPreference( + policyID: string, + postingPreference: ValueOf, + oldPostingPreference?: ValueOf, +) { + const onyxData = updateNetSuiteOnyxData(policyID, CONST.NETSUITE_CONFIG.TRAVEL_INVOICING_JOURNAL_POSTING_PREFERENCE, postingPreference, oldPostingPreference); + const parameters: UpdateManyPolicyConnectionConfigurationsParams = { + policyID, + connectionName: CONST.POLICY.CONNECTIONS.NAME.NETSUITE, + configUpdate: JSON.stringify({[CONST.NETSUITE_CONFIG.TRAVEL_INVOICING_JOURNAL_POSTING_PREFERENCE]: postingPreference}), + idempotencyKey: CONST.NETSUITE_CONFIG.TRAVEL_INVOICING_JOURNAL_POSTING_PREFERENCE, + }; + API.write(WRITE_COMMANDS.UPDATE_MANY_POLICY_CONNECTION_CONFIGS, parameters, onyxData); +} + export { connectPolicyToNetSuite, updateNetSuiteTokens, @@ -1111,4 +1126,5 @@ export { updateNetSuiteCustomersJobsMapping, updateNetSuiteAccountingMethod, updateNetSuiteTravelInvoicingPayableAccount, + updateNetSuiteTravelInvoicingJournalPostingPreference, }; From 04b845d6e07b501b7982092a1b6ec417612e289e Mon Sep 17 00:00:00 2001 From: Ben Limpich Date: Thu, 7 May 2026 13:43:05 -0700 Subject: [PATCH 3/9] Add routing for TI journal posting preference select screen --- src/ROUTES.ts | 4 ++++ src/SCREENS.ts | 1 + .../Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts | 1 + src/libs/Navigation/linkingConfig/config.ts | 3 +++ src/libs/Navigation/types.ts | 3 +++ 5 files changed, 12 insertions(+) diff --git a/src/ROUTES.ts b/src/ROUTES.ts index e7e54762ce03..4acfa35f6721 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -1986,6 +1986,10 @@ const ROUTES = { route: 'workspaces/:policyID/accounting/netsuite/export/travel-invoicing/payable-account', getRoute: (policyID: string) => `workspaces/${policyID}/accounting/netsuite/export/travel-invoicing/payable-account` as const, }, + POLICY_ACCOUNTING_NETSUITE_TRAVEL_INVOICING_JOURNAL_POSTING_PREFERENCE_SELECT: { + route: 'workspaces/:policyID/accounting/netsuite/export/travel-invoicing/journal-posting-preference', + getRoute: (policyID: string) => `workspaces/${policyID}/accounting/netsuite/export/travel-invoicing/journal-posting-preference` as const, + }, POLICY_ACCOUNTING_QUICKBOOKS_DESKTOP_COMPANY_CARD_EXPENSE_SELECT: { route: 'workspaces/:policyID/accounting/quickbooks-desktop/export/company-card-expense-account/card-select', getRoute: (policyID?: string, backTo?: string) => { diff --git a/src/SCREENS.ts b/src/SCREENS.ts index 4cd8277f5626..b2c8b6f7db86 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -551,6 +551,7 @@ const SCREENS = { QUICKBOOKS_ONLINE_TRAVEL_INVOICING_PAYABLE_ACCOUNT_SELECT: 'Workspace_Accounting_Quickbooks_Online_Travel_Invoicing_Payable_Account_Select', NETSUITE_TRAVEL_INVOICING_CONFIGURATION: 'Workspace_Accounting_NetSuite_Travel_Invoicing_Configuration', NETSUITE_TRAVEL_INVOICING_PAYABLE_ACCOUNT_SELECT: 'Workspace_Accounting_NetSuite_Travel_Invoicing_Payable_Account_Select', + NETSUITE_TRAVEL_INVOICING_JOURNAL_POSTING_PREFERENCE_SELECT: 'Workspace_Accounting_NetSuite_Travel_Invoicing_Journal_Posting_Preference_Select', DYNAMIC_QUICKBOOKS_ONLINE_EXPORT_OUT_OF_POCKET_EXPENSES: 'Dynamic_Workspace_Accounting_Quickbooks_Online_Export_Out_Of_Pocket_Expenses', DYNAMIC_QUICKBOOKS_ONLINE_EXPORT_OUT_OF_POCKET_EXPENSES_SELECT: 'Dynamic_Workspace_Accounting_Quickbooks_Online_Export_Out_Of_Pocket_Expenses_Select', DYNAMIC_QUICKBOOKS_ONLINE_EXPORT_OUT_OF_POCKET_EXPENSES_ACCOUNT_SELECT: 'Dynamic_Workspace_Accounting_Quickbooks_Online_Export_Out_Of_Pocket_Expenses_Account_Select', diff --git a/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts b/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts index 470ff747fbef..7253b0e25e25 100755 --- a/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts +++ b/src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts @@ -54,6 +54,7 @@ const WORKSPACE_TO_RHP: Partial['config'] = { [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_TRAVEL_INVOICING_PAYABLE_ACCOUNT_SELECT]: { path: ROUTES.POLICY_ACCOUNTING_NETSUITE_TRAVEL_INVOICING_PAYABLE_ACCOUNT_SELECT.route, }, + [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_TRAVEL_INVOICING_JOURNAL_POSTING_PREFERENCE_SELECT]: { + path: ROUTES.POLICY_ACCOUNTING_NETSUITE_TRAVEL_INVOICING_JOURNAL_POSTING_PREFERENCE_SELECT.route, + }, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_ADVANCED]: { path: ROUTES.WORKSPACE_ACCOUNTING_QUICKBOOKS_ONLINE_ADVANCED.route, }, diff --git a/src/libs/Navigation/types.ts b/src/libs/Navigation/types.ts index 78f60d770dee..ef3ba4f97f59 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -775,6 +775,9 @@ type SettingsNavigatorParamList = { [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_TRAVEL_INVOICING_PAYABLE_ACCOUNT_SELECT]: { policyID: string; }; + [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_TRAVEL_INVOICING_JOURNAL_POSTING_PREFERENCE_SELECT]: { + policyID: string; + }; [SCREENS.WORKSPACE.ACCOUNTING.DYNAMIC_QUICKBOOKS_DESKTOP_COMPANY_CARD_EXPENSE_ACCOUNT_SELECT]: { policyID: string; }; From 7133f6cf4c977ed76a0329d1645ebe16850a2285 Mon Sep 17 00:00:00 2001 From: Ben Limpich Date: Thu, 7 May 2026 13:43:11 -0700 Subject: [PATCH 4/9] Add TI journal posting preference select page --- .../ModalStackNavigators/index.tsx | 2 + ...cingJournalPostingPreferenceSelectPage.tsx | 73 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 src/pages/workspace/accounting/netsuite/export/NetSuiteTravelInvoicingJournalPostingPreferenceSelectPage.tsx diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index 5dd5650a4943..ab8055e5ed1c 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -629,6 +629,8 @@ const SettingsModalStackNavigator = createModalStackNavigator('../../../../pages/workspace/accounting/netsuite/export/NetSuiteTravelInvoicingConfigurationPage').default, [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_TRAVEL_INVOICING_PAYABLE_ACCOUNT_SELECT]: () => require('../../../../pages/workspace/accounting/netsuite/export/NetSuiteTravelInvoicingPayableAccountSelectPage').default, + [SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_TRAVEL_INVOICING_JOURNAL_POSTING_PREFERENCE_SELECT]: () => + require('../../../../pages/workspace/accounting/netsuite/export/NetSuiteTravelInvoicingJournalPostingPreferenceSelectPage').default, [SCREENS.WORKSPACE.ACCOUNTING.DYNAMIC_QUICKBOOKS_DESKTOP_COMPANY_CARD_EXPENSE_ACCOUNT_SELECT]: () => require('../../../../pages/workspace/accounting/qbd/export/DynamicQuickbooksDesktopCompanyCardExpenseAccountSelectPage').default, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_DESKTOP_COMPANY_CARD_EXPENSE_ACCOUNT_COMPANY_CARD_SELECT]: () => diff --git a/src/pages/workspace/accounting/netsuite/export/NetSuiteTravelInvoicingJournalPostingPreferenceSelectPage.tsx b/src/pages/workspace/accounting/netsuite/export/NetSuiteTravelInvoicingJournalPostingPreferenceSelectPage.tsx new file mode 100644 index 000000000000..762268ba4862 --- /dev/null +++ b/src/pages/workspace/accounting/netsuite/export/NetSuiteTravelInvoicingJournalPostingPreferenceSelectPage.tsx @@ -0,0 +1,73 @@ +import React, {useCallback} from 'react'; +import type {ValueOf} from 'type-fest'; +import type {ListItem} from '@components/SelectionList/types'; +import SelectionScreen from '@components/SelectionScreen'; +import type {SelectorType} from '@components/SelectionScreen'; +import useLocalize from '@hooks/useLocalize'; +import useThemeStyles from '@hooks/useThemeStyles'; +import {updateNetSuiteTravelInvoicingJournalPostingPreference} from '@libs/actions/connections/NetSuiteCommands'; +import {getLatestErrorField} from '@libs/ErrorUtils'; +import {settingsPendingAction} from '@libs/PolicyUtils'; +import Navigation from '@navigation/Navigation'; +import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; +import withPolicyConnections from '@pages/workspace/withPolicyConnections'; +import {clearNetSuiteErrorField} from '@userActions/Policy/Policy'; +import CONST from '@src/CONST'; +import ROUTES from '@src/ROUTES'; + +type MenuListItem = ListItem & { + value: ValueOf; +}; + +function NetSuiteTravelInvoicingJournalPostingPreferenceSelectPage({policy}: WithPolicyConnectionsProps) { + const {translate} = useLocalize(); + const styles = useThemeStyles(); + const policyID = policy?.id; + const config = policy?.connections?.netsuite?.options.config; + + const selectedValue = + Object.values(CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE).find((value) => value === config?.travelInvoicingJournalPostingPreference) ?? + CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE; + + const data: MenuListItem[] = Object.values(CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE).map((postingPreference) => ({ + value: postingPreference, + text: translate(`workspace.netsuite.journalPostingPreference.values.${postingPreference}`), + keyForList: postingPreference, + isSelected: selectedValue === postingPreference, + })); + + const goBack = useCallback(() => { + Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_TRAVEL_INVOICING_CONFIGURATION.getRoute(policyID ?? '')); + }, [policyID]); + + const selectPostingPreference = useCallback( + (row: MenuListItem) => { + if (row.value !== config?.travelInvoicingJournalPostingPreference && policyID) { + updateNetSuiteTravelInvoicingJournalPostingPreference(policyID, row.value, config?.travelInvoicingJournalPostingPreference); + } + goBack(); + }, + [config?.travelInvoicingJournalPostingPreference, goBack, policyID], + ); + + return ( + selectPostingPreference(selection as MenuListItem)} + initiallyFocusedOptionKey={data.find((mode) => mode.isSelected)?.keyForList} + policyID={policyID} + accessVariants={[CONST.POLICY.ACCESS_VARIANTS.ADMIN]} + featureName={CONST.POLICY.MORE_FEATURES.ARE_CONNECTIONS_ENABLED} + onBackButtonPress={goBack} + connectionName={CONST.POLICY.CONNECTIONS.NAME.NETSUITE} + pendingAction={settingsPendingAction([CONST.NETSUITE_CONFIG.TRAVEL_INVOICING_JOURNAL_POSTING_PREFERENCE], config?.pendingFields)} + errors={getLatestErrorField(config, CONST.NETSUITE_CONFIG.TRAVEL_INVOICING_JOURNAL_POSTING_PREFERENCE)} + errorRowStyles={[styles.ph5, styles.pv3]} + onClose={() => clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.TRAVEL_INVOICING_JOURNAL_POSTING_PREFERENCE)} + /> + ); +} + +export default withPolicyConnections(NetSuiteTravelInvoicingJournalPostingPreferenceSelectPage); From 5eb12186241b38e5436fd041eca761fc4160ca74 Mon Sep 17 00:00:00 2001 From: Ben Limpich Date: Thu, 7 May 2026 13:43:16 -0700 Subject: [PATCH 5/9] Wire TI journal posting preference into TI config and export summary --- .../export/NetSuiteExportConfigurationPage.tsx | 2 +- .../NetSuiteTravelInvoicingConfigurationPage.tsx | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/pages/workspace/accounting/netsuite/export/NetSuiteExportConfigurationPage.tsx b/src/pages/workspace/accounting/netsuite/export/NetSuiteExportConfigurationPage.tsx index aa61ed334087..44ff934897b2 100644 --- a/src/pages/workspace/accounting/netsuite/export/NetSuiteExportConfigurationPage.tsx +++ b/src/pages/workspace/accounting/netsuite/export/NetSuiteExportConfigurationPage.tsx @@ -150,7 +150,7 @@ function NetSuiteExportConfigurationPage({policy}: WithPolicyConnectionsProps) { title: travelPayableAccount?.name, description: translate('workspace.common.travelInvoicing'), onPress: !policyID ? undefined : () => Navigation.navigate(ROUTES.POLICY_ACCOUNTING_NETSUITE_TRAVEL_INVOICING_CONFIGURATION.getRoute(policyID)), - subscribedSettings: [CONST.NETSUITE_CONFIG.TRAVEL_INVOICING_PAYABLE_ACCOUNT], + subscribedSettings: [CONST.NETSUITE_CONFIG.TRAVEL_INVOICING_PAYABLE_ACCOUNT, CONST.NETSUITE_CONFIG.TRAVEL_INVOICING_JOURNAL_POSTING_PREFERENCE], shouldHide: !isTravelInvoicingEnabled, }, { diff --git a/src/pages/workspace/accounting/netsuite/export/NetSuiteTravelInvoicingConfigurationPage.tsx b/src/pages/workspace/accounting/netsuite/export/NetSuiteTravelInvoicingConfigurationPage.tsx index 22c4a0720e0e..3d2c5a880151 100644 --- a/src/pages/workspace/accounting/netsuite/export/NetSuiteTravelInvoicingConfigurationPage.tsx +++ b/src/pages/workspace/accounting/netsuite/export/NetSuiteTravelInvoicingConfigurationPage.tsx @@ -23,6 +23,7 @@ type NetSuiteSectionType = { }; const payableAccountSetting = [CONST.NETSUITE_CONFIG.TRAVEL_INVOICING_PAYABLE_ACCOUNT]; +const journalPostingPreferenceSetting = [CONST.NETSUITE_CONFIG.TRAVEL_INVOICING_JOURNAL_POSTING_PREFERENCE]; function NetSuiteTravelInvoicingConfigurationPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); @@ -48,6 +49,21 @@ function NetSuiteTravelInvoicingConfigurationPage({policy}: WithPolicyConnection pendingAction: settingsPendingAction(payableAccountSetting, config?.pendingFields), brickRoadIndicator: areSettingsInErrorFields(payableAccountSetting, config?.errorFields) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined, }, + { + title: config?.travelInvoicingJournalPostingPreference + ? translate(`workspace.netsuite.journalPostingPreference.values.${config.travelInvoicingJournalPostingPreference}`) + : translate(`workspace.netsuite.journalPostingPreference.values.${CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE}`), + description: translate('workspace.netsuite.journalPostingPreference.label'), + onPress: () => { + if (!policyID) { + return; + } + Navigation.navigate(ROUTES.POLICY_ACCOUNTING_NETSUITE_TRAVEL_INVOICING_JOURNAL_POSTING_PREFERENCE_SELECT.getRoute(policyID)); + }, + subscribedSettings: journalPostingPreferenceSetting, + pendingAction: settingsPendingAction(journalPostingPreferenceSetting, config?.pendingFields), + brickRoadIndicator: areSettingsInErrorFields(journalPostingPreferenceSetting, config?.errorFields) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined, + }, ]; return ( From 6c309b01a232794e9e9d3918e4fc504c67a715ce Mon Sep 17 00:00:00 2001 From: Ben Limpich Date: Thu, 7 May 2026 13:58:59 -0700 Subject: [PATCH 6/9] Fix no-default-id-values lint error in TI journal posting preference select page --- ...iteTravelInvoicingJournalPostingPreferenceSelectPage.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/workspace/accounting/netsuite/export/NetSuiteTravelInvoicingJournalPostingPreferenceSelectPage.tsx b/src/pages/workspace/accounting/netsuite/export/NetSuiteTravelInvoicingJournalPostingPreferenceSelectPage.tsx index 762268ba4862..d34afb8d72c6 100644 --- a/src/pages/workspace/accounting/netsuite/export/NetSuiteTravelInvoicingJournalPostingPreferenceSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/export/NetSuiteTravelInvoicingJournalPostingPreferenceSelectPage.tsx @@ -22,7 +22,7 @@ type MenuListItem = ListItem & { function NetSuiteTravelInvoicingJournalPostingPreferenceSelectPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); - const policyID = policy?.id; + const policyID = policy?.id ?? String(CONST.DEFAULT_NUMBER_ID); const config = policy?.connections?.netsuite?.options.config; const selectedValue = @@ -37,12 +37,12 @@ function NetSuiteTravelInvoicingJournalPostingPreferenceSelectPage({policy}: Wit })); const goBack = useCallback(() => { - Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_TRAVEL_INVOICING_CONFIGURATION.getRoute(policyID ?? '')); + Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_TRAVEL_INVOICING_CONFIGURATION.getRoute(policyID)); }, [policyID]); const selectPostingPreference = useCallback( (row: MenuListItem) => { - if (row.value !== config?.travelInvoicingJournalPostingPreference && policyID) { + if (row.value !== config?.travelInvoicingJournalPostingPreference) { updateNetSuiteTravelInvoicingJournalPostingPreference(policyID, row.value, config?.travelInvoicingJournalPostingPreference); } goBack(); From 5687204a00065634979afc44559d0476f27a75c9 Mon Sep 17 00:00:00 2001 From: Ben Limpich Date: Fri, 8 May 2026 17:51:39 -0700 Subject: [PATCH 7/9] Fix swapped NetSuite journal posting preference labels --- src/languages/de.ts | 4 ++-- src/languages/en.ts | 4 ++-- src/languages/es.ts | 4 ++-- 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 ++-- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 2eb97325a961..e2dcc0b9356f 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -4791,8 +4791,8 @@ ${amount} für ${merchant} – ${date}`, journalPostingPreference: { label: 'Bevorzugte Verbuchung von Journalbuchungen', values: { - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Einzelner, aufgeschlüsselter Eintrag für jeden Bericht', - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Einzelner Eintrag für jede Ausgabe', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Einzelner Eintrag für jede Ausgabe', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Einzelner, aufgeschlüsselter Eintrag für jeden Bericht', }, }, invoiceItem: { diff --git a/src/languages/en.ts b/src/languages/en.ts index d1bfb91c879e..9669cbc068a0 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -4861,8 +4861,8 @@ const translations = { journalPostingPreference: { label: 'Journal entries posting preference', values: { - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Single, itemized entry for each report', - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Single entry for each expense', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Single entry for each expense', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Single, itemized entry for each report', }, }, invoiceItem: { diff --git a/src/languages/es.ts b/src/languages/es.ts index 679099d09f6f..5471f9024989 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -4715,8 +4715,8 @@ ${amount} para ${merchant} - ${date}`, journalPostingPreference: { label: 'Preferencia de registro de asientos contables', values: { - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Entrada única y detallada para cada informe', - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Entrada única para cada gasto individual', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Entrada única para cada gasto individual', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Entrada única y detallada para cada informe', }, }, invoiceItem: { diff --git a/src/languages/fr.ts b/src/languages/fr.ts index a0a522e337a4..9098b8f9949f 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -4801,8 +4801,8 @@ ${amount} pour ${merchant} - ${date}`, journalPostingPreference: { label: 'Préférence de comptabilisation des écritures de journal', values: { - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Saisie unique et détaillée pour chaque note de frais', - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Une seule entrée pour chaque dépense', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Une seule entrée pour chaque dépense', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Saisie unique et détaillée pour chaque note de frais', }, }, invoiceItem: { diff --git a/src/languages/it.ts b/src/languages/it.ts index efcd2228a7d3..2ceb078ea1d2 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -4776,8 +4776,8 @@ ${amount} per ${merchant} - ${date}`, journalPostingPreference: { label: 'Preferenze di registrazione delle scritture contabili', values: { - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Voce singola, con dettagli per ogni report', - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Voce singola per ogni spesa', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Voce singola per ogni spesa', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Voce singola, con dettagli per ogni report', }, }, invoiceItem: { diff --git a/src/languages/ja.ts b/src/languages/ja.ts index ebc08db9494a..e90baf770a49 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -4734,8 +4734,8 @@ ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'あなたの' journalPostingPreference: { label: '仕訳の記帳設定', values: { - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: '各レポートごとの単一の項目別エントリ', - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: '各経費につき1件の入力', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: '各経費につき1件の入力', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: '各レポートごとの単一の項目別エントリ', }, }, invoiceItem: { diff --git a/src/languages/nl.ts b/src/languages/nl.ts index c923ea18c448..7848b9b3b2f2 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -4768,8 +4768,8 @@ ${amount} voor ${merchant} - ${date}`, journalPostingPreference: { label: 'Voorkeur voor het boeken van journaalposten', values: { - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Enkele, uitgesplitste boeking voor elk rapport', - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Eén boeking per uitgave', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Eén boeking per uitgave', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Enkele, uitgesplitste boeking voor elk rapport', }, }, invoiceItem: { diff --git a/src/languages/pl.ts b/src/languages/pl.ts index adaeeaa96981..adc276c18164 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -4760,8 +4760,8 @@ ${amount} dla ${merchant} - ${date}`, journalPostingPreference: { label: 'Preferencje księgowania zapisów w dzienniku', values: { - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Pojedynczy, wyszczególniony wpis dla każdego raportu', - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Pojedynczy wpis dla każdego wydatku', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Pojedynczy wpis dla każdego wydatku', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Pojedynczy, wyszczególniony wpis dla każdego raportu', }, }, invoiceItem: { diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index af446e4e8fd4..f25267f36510 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -4763,8 +4763,8 @@ ${amount} para ${merchant} - ${date}`, journalPostingPreference: { label: 'Preferência de lançamento de lançamentos contábeis', values: { - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Lançamento único, detalhado, para cada relatório', - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Lançamento único para cada despesa', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Lançamento único para cada despesa', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Lançamento único, detalhado, para cada relatório', }, }, invoiceItem: { diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 191caae4d69f..200490750bc7 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -4654,8 +4654,8 @@ ${amount},商户:${merchant} - 日期:${date}`, journalPostingPreference: { label: '日记账分录过账偏好', values: { - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: '每个报表使用单独的分项条目', - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: '每笔报销一条记录', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: '每笔报销一条记录', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: '每个报表使用单独的分项条目', }, }, invoiceItem: { From 2074aaf9daf73ef0a2e9b5ab7712a4cd56dc6516 Mon Sep 17 00:00:00 2001 From: Ben Limpich Date: Fri, 8 May 2026 17:54:52 -0700 Subject: [PATCH 8/9] update translations --- src/languages/de.ts | 2 +- src/languages/fr.ts | 4 ++-- src/languages/it.ts | 2 +- src/languages/ja.ts | 2 +- src/languages/nl.ts | 4 ++-- src/languages/pl.ts | 2 +- src/languages/pt-BR.ts | 2 +- src/languages/zh-hans.ts | 4 ++-- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index e2dcc0b9356f..bf0171099f51 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -4792,7 +4792,7 @@ ${amount} für ${merchant} – ${date}`, label: 'Bevorzugte Verbuchung von Journalbuchungen', values: { [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Einzelner Eintrag für jede Ausgabe', - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Einzelner, aufgeschlüsselter Eintrag für jeden Bericht', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Einzelner, aufgegliederter Eintrag für jeden Bericht', }, }, invoiceItem: { diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 9098b8f9949f..19b166d90613 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -4801,8 +4801,8 @@ ${amount} pour ${merchant} - ${date}`, journalPostingPreference: { label: 'Préférence de comptabilisation des écritures de journal', values: { - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Une seule entrée pour chaque dépense', - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Saisie unique et détaillée pour chaque note de frais', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Saisie unique pour chaque dépense', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Entrée unique et détaillée pour chaque rapport', }, }, invoiceItem: { diff --git a/src/languages/it.ts b/src/languages/it.ts index 2ceb078ea1d2..5de5bc7d70af 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -4777,7 +4777,7 @@ ${amount} per ${merchant} - ${date}`, label: 'Preferenze di registrazione delle scritture contabili', values: { [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Voce singola per ogni spesa', - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Voce singola, con dettagli per ogni report', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Voce singola e dettagliata per ogni report', }, }, invoiceItem: { diff --git a/src/languages/ja.ts b/src/languages/ja.ts index e90baf770a49..4af1e5bea05f 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -4735,7 +4735,7 @@ ${integrationName === CONST.ONBOARDING_ACCOUNTING_MAPPING.other ? 'あなたの' label: '仕訳の記帳設定', values: { [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: '各経費につき1件の入力', - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: '各レポートごとの単一の項目別エントリ', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: '各レポートごとの単一の明細エントリ', }, }, invoiceItem: { diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 7848b9b3b2f2..7cd14f2806ce 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -4768,8 +4768,8 @@ ${amount} voor ${merchant} - ${date}`, journalPostingPreference: { label: 'Voorkeur voor het boeken van journaalposten', values: { - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Eén boeking per uitgave', - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Enkele, uitgesplitste boeking voor elk rapport', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Enkele boeking per uitgave', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Enkele, uitgesplitste boeking per rapport', }, }, invoiceItem: { diff --git a/src/languages/pl.ts b/src/languages/pl.ts index adc276c18164..dd94c32b9165 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -4761,7 +4761,7 @@ ${amount} dla ${merchant} - ${date}`, label: 'Preferencje księgowania zapisów w dzienniku', values: { [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Pojedynczy wpis dla każdego wydatku', - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Pojedynczy, wyszczególniony wpis dla każdego raportu', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Pojedyncza, wyszczególniona pozycja dla każdego raportu', }, }, invoiceItem: { diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index f25267f36510..f61793b8fabe 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -4764,7 +4764,7 @@ ${amount} para ${merchant} - ${date}`, label: 'Preferência de lançamento de lançamentos contábeis', values: { [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: 'Lançamento único para cada despesa', - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Lançamento único, detalhado, para cada relatório', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: 'Lançamento único e detalhado para cada relatório', }, }, invoiceItem: { diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 200490750bc7..1e6d3a08415b 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -4654,8 +4654,8 @@ ${amount},商户:${merchant} - 日期:${date}`, journalPostingPreference: { label: '日记账分录过账偏好', values: { - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: '每笔报销一条记录', - [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: '每个报表使用单独的分项条目', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_INDIVIDUAL_LINE]: '每笔报销仅一条记录', + [CONST.NETSUITE_JOURNAL_POSTING_PREFERENCE.JOURNALS_POSTING_TOTAL_LINE]: '每份报表使用单一分项明细记录', }, }, invoiceItem: { From ef2e33b5375c5868ada2c8f160db9fa88213811b Mon Sep 17 00:00:00 2001 From: Ben Limpich Date: Mon, 11 May 2026 18:51:22 -0700 Subject: [PATCH 9/9] Remove redundant useCallback wrappers per React Compiler --- ...cingJournalPostingPreferenceSelectPage.tsx | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/pages/workspace/accounting/netsuite/export/NetSuiteTravelInvoicingJournalPostingPreferenceSelectPage.tsx b/src/pages/workspace/accounting/netsuite/export/NetSuiteTravelInvoicingJournalPostingPreferenceSelectPage.tsx index d34afb8d72c6..a6fa98ddbf41 100644 --- a/src/pages/workspace/accounting/netsuite/export/NetSuiteTravelInvoicingJournalPostingPreferenceSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/export/NetSuiteTravelInvoicingJournalPostingPreferenceSelectPage.tsx @@ -1,4 +1,3 @@ -import React, {useCallback} from 'react'; import type {ValueOf} from 'type-fest'; import type {ListItem} from '@components/SelectionList/types'; import SelectionScreen from '@components/SelectionScreen'; @@ -36,19 +35,16 @@ function NetSuiteTravelInvoicingJournalPostingPreferenceSelectPage({policy}: Wit isSelected: selectedValue === postingPreference, })); - const goBack = useCallback(() => { + const goBack = () => { Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_TRAVEL_INVOICING_CONFIGURATION.getRoute(policyID)); - }, [policyID]); + }; - const selectPostingPreference = useCallback( - (row: MenuListItem) => { - if (row.value !== config?.travelInvoicingJournalPostingPreference) { - updateNetSuiteTravelInvoicingJournalPostingPreference(policyID, row.value, config?.travelInvoicingJournalPostingPreference); - } - goBack(); - }, - [config?.travelInvoicingJournalPostingPreference, goBack, policyID], - ); + const selectPostingPreference = (row: MenuListItem) => { + if (row.value !== config?.travelInvoicingJournalPostingPreference) { + updateNetSuiteTravelInvoicingJournalPostingPreference(policyID, row.value, config?.travelInvoicingJournalPostingPreference); + } + goBack(); + }; return (