From 25b67b5acd3cd605561b3f5fba950ea37029e187 Mon Sep 17 00:00:00 2001 From: Rodrigo Lino da Costa Date: Mon, 18 May 2026 19:21:37 -0300 Subject: [PATCH 01/11] Extract travel invoicing reconciliation section --- ...voicingContinuousReconciliationSection.tsx | 102 ++++++++++++ .../advanced/NetSuiteAdvancedPage.tsx | 157 ++++++++---------- 2 files changed, 171 insertions(+), 88 deletions(-) create mode 100644 src/pages/workspace/accounting/common/TravelInvoicingContinuousReconciliationSection.tsx diff --git a/src/pages/workspace/accounting/common/TravelInvoicingContinuousReconciliationSection.tsx b/src/pages/workspace/accounting/common/TravelInvoicingContinuousReconciliationSection.tsx new file mode 100644 index 000000000000..de560081b5a6 --- /dev/null +++ b/src/pages/workspace/accounting/common/TravelInvoicingContinuousReconciliationSection.tsx @@ -0,0 +1,102 @@ +import React from 'react'; +import type {StyleProp, ViewStyle} from 'react-native'; +import {View} from 'react-native'; +import type {OnyxEntry} from 'react-native-onyx'; +import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription'; +import OfflineWithFeedback from '@components/OfflineWithFeedback'; +import useLocalize from '@hooks/useLocalize'; +import useOnyx from '@hooks/useOnyx'; +import useThemeStyles from '@hooks/useThemeStyles'; +import {getRouteParamForConnection} from '@libs/AccountingUtils'; +import {toggleTravelInvoicingContinuousReconciliation} from '@libs/actions/TravelInvoicing'; +import {getCardSettings, getConnectionBankAccountsForReconciliation} from '@libs/CardUtils'; +import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; +import Navigation from '@libs/Navigation/Navigation'; +import {getIsTravelInvoicingEnabled} from '@libs/TravelInvoicingUtils'; +import RECONCILIATION_ACCOUNT_SETTINGS_TYPE from '@pages/workspace/accounting/reconciliation/constants'; +import ToggleSettingOptionRow from '@pages/workspace/workflows/ToggleSettingsOptionRow'; +import CONST from '@src/CONST'; +import ONYXKEYS from '@src/ONYXKEYS'; +import {DYNAMIC_ROUTES} from '@src/ROUTES'; +import type Policy from '@src/types/onyx/Policy'; +import type {ConnectionName} from '@src/types/onyx/Policy'; + +type TravelInvoicingContinuousReconciliationSectionProps = { + policy: OnyxEntry; + connectionName: ConnectionName; + isAutoSyncEnabled: boolean; + shouldShowDivider?: boolean; + toggleWrapperStyle?: StyleProp; + menuItemWrapperStyle?: StyleProp; +}; + +function TravelInvoicingContinuousReconciliationSection({ + policy, + connectionName, + isAutoSyncEnabled, + shouldShowDivider = false, + toggleWrapperStyle, + menuItemWrapperStyle, +}: TravelInvoicingContinuousReconciliationSectionProps) { + const {translate} = useLocalize(); + const styles = useThemeStyles(); + const workspaceAccountID = policy?.workspaceAccountID ?? CONST.DEFAULT_NUMBER_ID; + + const [cardSettings] = useOnyx(`${ONYXKEYS.COLLECTION.PRIVATE_EXPENSIFY_CARD_SETTINGS}${workspaceAccountID}`); + const travelSettings = getCardSettings(cardSettings, CONST.TRAVEL.PROGRAM_TRAVEL_US); + const isTravelInvoicingEnabled = getIsTravelInvoicingEnabled(travelSettings); + const [travelInvoicingContinuousReconciliation] = useOnyx(`${ONYXKEYS.COLLECTION.TRAVEL_INVOICING_USE_CONTINUOUS_RECONCILIATION}${workspaceAccountID}`); + const [travelInvoicingContinuousReconciliationPendingAction] = useOnyx(`${ONYXKEYS.COLLECTION.TRAVEL_INVOICING_USE_CONTINUOUS_RECONCILIATION_PENDING_ACTION}${workspaceAccountID}`); + const [travelInvoicingContinuousReconciliationConnection] = useOnyx(`${ONYXKEYS.COLLECTION.TRAVEL_INVOICING_CONTINUOUS_RECONCILIATION_CONNECTION}${workspaceAccountID}`); + const [travelInvoicingReconciliationBankAccountID] = useOnyx(`${ONYXKEYS.COLLECTION.TRAVEL_INVOICING_RECONCILIATION_BANK_ACCOUNT_ID}${workspaceAccountID}`); + const travelInvoicingReconciliationBankAccount = getConnectionBankAccountsForReconciliation(policy?.connections, connectionName).find( + (account) => account.id === travelInvoicingReconciliationBankAccountID, + ); + + const navigateToTravelInvoicingReconciliationAccountSettings = () => { + Navigation.navigate( + createDynamicRoute( + `${DYNAMIC_ROUTES.WORKSPACE_ACCOUNTING_RECONCILIATION_ACCOUNT_SETTINGS.path}?connection=${getRouteParamForConnection(connectionName)}&reconciliationAccountSettingsType=${ + RECONCILIATION_ACCOUNT_SETTINGS_TYPE.TRAVEL_INVOICING + }`, + ), + ); + }; + + if (!isTravelInvoicingEnabled) { + return null; + } + + return ( + <> + { + toggleTravelInvoicingContinuousReconciliation(workspaceAccountID, isEnabled, connectionName, travelInvoicingContinuousReconciliationConnection); + if (isEnabled) { + navigateToTravelInvoicingReconciliationAccountSettings(); + } + }} + pendingAction={travelInvoicingContinuousReconciliationPendingAction} + wrapperStyle={toggleWrapperStyle} + /> + {!!travelInvoicingContinuousReconciliation && ( + + + + )} + {shouldShowDivider && } + + ); +} + +export default TravelInvoicingContinuousReconciliationSection; diff --git a/src/pages/workspace/accounting/netsuite/advanced/NetSuiteAdvancedPage.tsx b/src/pages/workspace/accounting/netsuite/advanced/NetSuiteAdvancedPage.tsx index 2a8d72f8a987..d4398ea1239a 100644 --- a/src/pages/workspace/accounting/netsuite/advanced/NetSuiteAdvancedPage.tsx +++ b/src/pages/workspace/accounting/netsuite/advanced/NetSuiteAdvancedPage.tsx @@ -7,7 +7,6 @@ import ConnectionLayout from '@components/ConnectionLayout'; import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription'; import OfflineWithFeedback from '@components/OfflineWithFeedback'; import useLocalize from '@hooks/useLocalize'; -import useOnyx from '@hooks/useOnyx'; import useThemeStyles from '@hooks/useThemeStyles'; import { updateNetSuiteAutoCreateEntities, @@ -17,8 +16,6 @@ import { updateNetSuiteSyncReimbursedReports, } from '@libs/actions/connections/NetSuiteCommands'; import {clearNetSuiteErrorField} from '@libs/actions/Policy/Policy'; -import {toggleTravelInvoicingContinuousReconciliation} from '@libs/actions/TravelInvoicing'; -import {getCardSettings, getConnectionBankAccountsForReconciliation} from '@libs/CardUtils'; import {getLatestErrorField} from '@libs/ErrorUtils'; import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@libs/Navigation/Navigation'; @@ -29,7 +26,7 @@ import { getFilteredReimbursableAccountOptions, settingsPendingAction, } from '@libs/PolicyUtils'; -import {getIsTravelInvoicingEnabled} from '@libs/TravelInvoicingUtils'; +import TravelInvoicingContinuousReconciliationSection from '@pages/workspace/accounting/common/TravelInvoicingContinuousReconciliationSection'; import type {ExtendedMenuItemWithSubscribedSettings, MenuItemToRender} from '@pages/workspace/accounting/netsuite/types'; import { shouldHideCustomFormIDOptions, @@ -38,36 +35,23 @@ import { shouldHideReimbursedReportsSection, shouldHideReportsExportTo, } from '@pages/workspace/accounting/netsuite/utils'; -import RECONCILIATION_ACCOUNT_SETTINGS_TYPE from '@pages/workspace/accounting/reconciliation/constants'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import ToggleSettingOptionRow from '@pages/workspace/workflows/ToggleSettingsOptionRow'; import CONST from '@src/CONST'; import type {TranslationPaths} from '@src/languages/types'; -import ONYXKEYS from '@src/ONYXKEYS'; import ROUTES, {DYNAMIC_ROUTES} from '@src/ROUTES'; function NetSuiteAdvancedPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); const policyID = policy?.id ?? CONST.DEFAULT_NUMBER_ID.toString(); - const workspaceAccountID = policy?.workspaceAccountID ?? CONST.DEFAULT_NUMBER_ID; const config = policy?.connections?.netsuite?.options?.config; const autoSyncConfig = policy?.connections?.netsuite?.config; const autoSync = !!autoSyncConfig?.autoSync?.enabled; const accountingMethod = policy?.connections?.netsuite?.options?.config?.accountingMethod; const {payableList} = policy?.connections?.netsuite?.options?.data ?? {}; - const [cardSettings] = useOnyx(`${ONYXKEYS.COLLECTION.PRIVATE_EXPENSIFY_CARD_SETTINGS}${workspaceAccountID}`); - const travelSettings = getCardSettings(cardSettings, CONST.TRAVEL.PROGRAM_TRAVEL_US); - const isTravelInvoicingEnabled = getIsTravelInvoicingEnabled(travelSettings); - const [travelInvoicingContinuousReconciliation] = useOnyx(`${ONYXKEYS.COLLECTION.TRAVEL_INVOICING_USE_CONTINUOUS_RECONCILIATION}${workspaceAccountID}`); - const [travelInvoicingContinuousReconciliationPendingAction] = useOnyx(`${ONYXKEYS.COLLECTION.TRAVEL_INVOICING_USE_CONTINUOUS_RECONCILIATION_PENDING_ACTION}${workspaceAccountID}`); - const [travelInvoicingContinuousReconciliationConnection] = useOnyx(`${ONYXKEYS.COLLECTION.TRAVEL_INVOICING_CONTINUOUS_RECONCILIATION_CONNECTION}${workspaceAccountID}`); - const [travelInvoicingReconciliationBankAccountID] = useOnyx(`${ONYXKEYS.COLLECTION.TRAVEL_INVOICING_RECONCILIATION_BANK_ACCOUNT_ID}${workspaceAccountID}`); - const travelInvoicingReconciliationBankAccount = getConnectionBankAccountsForReconciliation(policy?.connections, CONST.POLICY.CONNECTIONS.NAME.NETSUITE).find( - (account) => account.id === travelInvoicingReconciliationBankAccountID, - ); const shouldShowCustomFormIDOptions = useSharedValue(!shouldHideCustomFormIDOptions(config)); const shouldAnimateAccordionSection = useSharedValue(false); @@ -91,14 +75,6 @@ function NetSuiteAdvancedPage({policy}: WithPolicyConnectionsProps) { return getFilteredApprovalAccountOptions(payableList).find(({id}) => id === config?.approvalAccount); }, [config?.approvalAccount, payableList, translate]); - const navigateToTravelInvoicingReconciliationAccountSettings = () => { - Navigation.navigate( - createDynamicRoute( - `${DYNAMIC_ROUTES.WORKSPACE_ACCOUNTING_RECONCILIATION_ACCOUNT_SETTINGS.path}?connection=${CONST.POLICY.CONNECTIONS.ROUTE.NETSUITE}&reconciliationAccountSettingsType=${RECONCILIATION_ACCOUNT_SETTINGS_TYPE.TRAVEL_INVOICING}`, - ), - ); - }; - const renderDefaultMenuItem = (item: MenuItemToRender) => { return ( { - toggleTravelInvoicingContinuousReconciliation(workspaceAccountID, isEnabled, CONST.POLICY.CONNECTIONS.NAME.NETSUITE, travelInvoicingContinuousReconciliationConnection); - if (isEnabled) { - navigateToTravelInvoicingReconciliationAccountSettings(); - } - }, - pendingAction: travelInvoicingContinuousReconciliationPendingAction, - shouldHide: !isTravelInvoicingEnabled, - }, - { - type: 'menuitem', - description: translate('workspace.accounting.reconciliationAccount'), - onPress: navigateToTravelInvoicingReconciliationAccountSettings, - title: travelInvoicingReconciliationBankAccount?.name, - shouldHide: !isTravelInvoicingEnabled || !travelInvoicingContinuousReconciliation, - }, - { - type: 'divider', - key: 'dividerTravelInvoicing', - shouldHide: !isTravelInvoicingEnabled, - }, { type: 'toggle', title: translate('workspace.netsuite.advancedConfig.inviteEmployees'), @@ -316,6 +265,58 @@ function NetSuiteAdvancedPage({policy}: WithPolicyConnectionsProps) { }, ]; + const renderMenuItem = (item: ExtendedMenuItemWithSubscribedSettings) => { + if (item?.shouldHide) { + return null; + } + + switch (item.type) { + case 'divider': + return ( + + ); + case 'toggle': + // eslint-disable-next-line no-case-declarations + const {type, shouldHide, ...rest} = item; + return ( + + ); + case 'accordion': + return ( + + {item.children.map((child) => { + return renderDefaultMenuItem(child); + })} + + ); + default: + return renderDefaultMenuItem(item); + } + }; + + const getMenuItemKey = (item: ExtendedMenuItemWithSubscribedSettings) => { + switch (item.type) { + case 'divider': + return item.key; + case 'accordion': + return 'customFormIDOptions'; + case 'toggle': + return item.title; + case 'menuitem': + return item.description; + } + }; + return ( - {menuItems - .filter((item) => !item?.shouldHide) - .map((item) => { - switch (item.type) { - case 'divider': - return ( - - ); - case 'toggle': - // eslint-disable-next-line no-case-declarations - const {type, shouldHide, ...rest} = item; - return ( - - ); - case 'accordion': - return ( - - {item.children.map((child) => { - return renderDefaultMenuItem(child); - })} - - ); - default: - return renderDefaultMenuItem(item); - } - })} + {menuItems.map((item) => { + return ( + + {renderMenuItem(item)} + {item.type === 'divider' && item.key === 'divider2' && ( + + )} + + ); + })} ); } From 93dce38ae0dcb1a6a8cbfa80ed380e8b38ab1293 Mon Sep 17 00:00:00 2001 From: Rodrigo Lino da Costa Date: Mon, 18 May 2026 19:23:19 -0300 Subject: [PATCH 02/11] Add travel invoicing reconciliation to QBO --- src/ROUTES.ts | 7 ++++++- .../accounting/qbo/advanced/QuickbooksAdvancedPage.tsx | 8 ++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 09e10b2c6922..b52b88c01b7e 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -333,7 +333,12 @@ const DYNAMIC_ROUTES = { }, WORKSPACE_ACCOUNTING_RECONCILIATION_ACCOUNT_SETTINGS: { path: 'account-reconciliation-settings', - entryScreens: [SCREENS.WORKSPACE.ACCOUNTING.CARD_RECONCILIATION, SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_EXPENSIFY_CARD_SETTINGS_ACCOUNT, SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_ADVANCED], + entryScreens: [ + SCREENS.WORKSPACE.ACCOUNTING.CARD_RECONCILIATION, + SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_EXPENSIFY_CARD_SETTINGS_ACCOUNT, + SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_ADVANCED, + SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_ADVANCED, + ], queryParams: ['connection', 'reconciliationAccountSettingsType'], }, ADDRESS_COUNTRY: { diff --git a/src/pages/workspace/accounting/qbo/advanced/QuickbooksAdvancedPage.tsx b/src/pages/workspace/accounting/qbo/advanced/QuickbooksAdvancedPage.tsx index b2439bcdbe00..8923c1c86078 100644 --- a/src/pages/workspace/accounting/qbo/advanced/QuickbooksAdvancedPage.tsx +++ b/src/pages/workspace/accounting/qbo/advanced/QuickbooksAdvancedPage.tsx @@ -14,6 +14,7 @@ import {getLatestErrorField} from '@libs/ErrorUtils'; import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@libs/Navigation/Navigation'; import {areSettingsInErrorFields, settingsPendingAction} from '@libs/PolicyUtils'; +import TravelInvoicingContinuousReconciliationSection from '@pages/workspace/accounting/common/TravelInvoicingContinuousReconciliationSection'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import ToggleSettingOptionRow from '@pages/workspace/workflows/ToggleSettingsOptionRow'; @@ -206,6 +207,13 @@ function QuickbooksAdvancedPage({policy}: WithPolicyConnectionsProps) { > {syncReimbursedSubMenuItems()} + ); } From 09a8ee52e75bc3d0db4b2f6865f4acaffa6ec9f7 Mon Sep 17 00:00:00 2001 From: Rodrigo Lino da Costa Date: Mon, 18 May 2026 19:24:59 -0300 Subject: [PATCH 03/11] Add travel invoicing reconciliation to QBD --- src/ROUTES.ts | 1 + .../qbd/advanced/DynamicQuickbooksDesktopAdvancedPage.tsx | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/ROUTES.ts b/src/ROUTES.ts index b52b88c01b7e..b58a074c4e13 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -338,6 +338,7 @@ const DYNAMIC_ROUTES = { SCREENS.WORKSPACE.DYNAMIC_WORKSPACE_EXPENSIFY_CARD_SETTINGS_ACCOUNT, SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_ADVANCED, SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_ADVANCED, + SCREENS.WORKSPACE.ACCOUNTING.DYNAMIC_QUICKBOOKS_DESKTOP_ADVANCED, ], queryParams: ['connection', 'reconciliationAccountSettingsType'], }, diff --git a/src/pages/workspace/accounting/qbd/advanced/DynamicQuickbooksDesktopAdvancedPage.tsx b/src/pages/workspace/accounting/qbd/advanced/DynamicQuickbooksDesktopAdvancedPage.tsx index 580d4c139d15..c6b591d07d59 100644 --- a/src/pages/workspace/accounting/qbd/advanced/DynamicQuickbooksDesktopAdvancedPage.tsx +++ b/src/pages/workspace/accounting/qbd/advanced/DynamicQuickbooksDesktopAdvancedPage.tsx @@ -10,6 +10,7 @@ import {updateQuickbooksDesktopShouldAutoCreateVendor} from '@libs/actions/conne import {getLatestErrorField} from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; import {areSettingsInErrorFields, settingsPendingAction} from '@libs/PolicyUtils'; +import TravelInvoicingContinuousReconciliationSection from '@pages/workspace/accounting/common/TravelInvoicingContinuousReconciliationSection'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import ToggleSettingOptionRow from '@pages/workspace/workflows/ToggleSettingsOptionRow'; @@ -88,6 +89,13 @@ function DynamicQuickbooksDesktopAdvancedPage({policy}: WithPolicyConnectionsPro onCloseError={() => clearQBDErrorField(policyID, item.subscribedSetting)} /> ))} + ); } From 6843e67a635e9ce5771341d4fbc83aec8acfa2a7 Mon Sep 17 00:00:00 2001 From: Rodrigo Lino da Costa Date: Mon, 18 May 2026 19:25:55 -0300 Subject: [PATCH 04/11] Add travel invoicing reconciliation to Xero --- src/ROUTES.ts | 1 + .../accounting/xero/advanced/XeroAdvancedPage.tsx | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/ROUTES.ts b/src/ROUTES.ts index b58a074c4e13..555c8df847e7 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -339,6 +339,7 @@ const DYNAMIC_ROUTES = { SCREENS.WORKSPACE.ACCOUNTING.NETSUITE_ADVANCED, SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_ADVANCED, SCREENS.WORKSPACE.ACCOUNTING.DYNAMIC_QUICKBOOKS_DESKTOP_ADVANCED, + SCREENS.WORKSPACE.ACCOUNTING.XERO_ADVANCED, ], queryParams: ['connection', 'reconciliationAccountSettingsType'], }, diff --git a/src/pages/workspace/accounting/xero/advanced/XeroAdvancedPage.tsx b/src/pages/workspace/accounting/xero/advanced/XeroAdvancedPage.tsx index 23547d2328a9..e0af975a2ae2 100644 --- a/src/pages/workspace/accounting/xero/advanced/XeroAdvancedPage.tsx +++ b/src/pages/workspace/accounting/xero/advanced/XeroAdvancedPage.tsx @@ -11,6 +11,7 @@ import {getLatestErrorField} from '@libs/ErrorUtils'; import createDynamicRoute from '@libs/Navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@libs/Navigation/Navigation'; import {areSettingsInErrorFields, getCurrentXeroOrganizationName, settingsPendingAction} from '@libs/PolicyUtils'; +import TravelInvoicingContinuousReconciliationSection from '@pages/workspace/accounting/common/TravelInvoicingContinuousReconciliationSection'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import ToggleSettingOptionRow from '@pages/workspace/workflows/ToggleSettingsOptionRow'; @@ -125,6 +126,13 @@ function XeroAdvancedPage({policy}: WithPolicyConnectionsProps) { + ); } From 0e53b844fcf9e79291e17225f72c0bc48146734e Mon Sep 17 00:00:00 2001 From: Rodrigo Lino da Costa Date: Mon, 18 May 2026 19:26:56 -0300 Subject: [PATCH 05/11] Add travel invoicing reconciliation to Intacct --- src/ROUTES.ts | 1 + .../intacct/advanced/SageIntacctAdvancedPage.tsx | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 555c8df847e7..78061eee8ffd 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -340,6 +340,7 @@ const DYNAMIC_ROUTES = { SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_ADVANCED, SCREENS.WORKSPACE.ACCOUNTING.DYNAMIC_QUICKBOOKS_DESKTOP_ADVANCED, SCREENS.WORKSPACE.ACCOUNTING.XERO_ADVANCED, + SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_ADVANCED, ], queryParams: ['connection', 'reconciliationAccountSettingsType'], }, diff --git a/src/pages/workspace/accounting/intacct/advanced/SageIntacctAdvancedPage.tsx b/src/pages/workspace/accounting/intacct/advanced/SageIntacctAdvancedPage.tsx index 1be408e20945..0c2327b2c263 100644 --- a/src/pages/workspace/accounting/intacct/advanced/SageIntacctAdvancedPage.tsx +++ b/src/pages/workspace/accounting/intacct/advanced/SageIntacctAdvancedPage.tsx @@ -11,6 +11,7 @@ import {getLatestErrorField} from '@libs/ErrorUtils'; import {areSettingsInErrorFields, getCurrentSageIntacctEntityName, settingsPendingAction} from '@libs/PolicyUtils'; import createDynamicRoute from '@navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@navigation/Navigation'; +import TravelInvoicingContinuousReconciliationSection from '@pages/workspace/accounting/common/TravelInvoicingContinuousReconciliationSection'; import type {WithPolicyProps} from '@pages/workspace/withPolicy'; import withPolicy from '@pages/workspace/withPolicy'; import ToggleSettingOptionRow from '@pages/workspace/workflows/ToggleSettingsOptionRow'; @@ -152,6 +153,12 @@ function SageIntacctAdvancedPage({policy}: WithPolicyProps) { /> + ); } From 2d0d79b2f91a95ce5710ee22a8de175cf321634d Mon Sep 17 00:00:00 2001 From: Rodrigo Lino da Costa Date: Mon, 18 May 2026 19:29:12 -0300 Subject: [PATCH 06/11] Update central invoicing reconciliation copy --- src/languages/de.ts | 6 +++--- src/languages/en.ts | 6 +++--- src/languages/es.ts | 6 +++--- src/languages/fr.ts | 6 +++--- src/languages/it.ts | 6 +++--- src/languages/ja.ts | 6 +++--- src/languages/nl.ts | 6 +++--- src/languages/pl.ts | 6 +++--- src/languages/pt-BR.ts | 6 +++--- src/languages/zh-hans.ts | 6 +++--- 10 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 666a0f26a1aa..6846d7a4848d 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -6385,11 +6385,11 @@ _Für ausführlichere Anweisungen [besuchen Sie unsere Hilfeseite](${CONST.NETSU chooseBankAccount: 'Wählen Sie das Bankkonto aus, mit dem Ihre Zahlungen mit der Expensify Karte abgeglichen werden.', settlementAccountReconciliation: (settlementAccountUrl: string, lastFourPAN: string) => `Stellen Sie sicher, dass dieses Konto mit Ihrem Expensify Karte-Abrechnungskonto (endend auf ${lastFourPAN}) übereinstimmt, damit die fortlaufende Abstimmung richtig funktioniert.`, - chooseTravelInvoicingBankAccount: 'Wählen Sie das Bankkonto aus, mit dem Ihre Zahlungen aus der Reiseabrechnung abgeglichen werden.', + chooseTravelInvoicingBankAccount: 'Wählen Sie das Bankkonto aus, mit dem Ihre Zahlungen aus der zentralen Rechnungsstellung abgeglichen werden.', travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => - `Stellen Sie sicher, dass dieses Konto mit Ihrem Abrechnungskonto für Reiseabrechnungen (endet auf ${lastFourPAN}) übereinstimmt, damit die kontinuierliche Abstimmung ordnungsgemäß funktioniert.`, + `Stellen Sie sicher, dass dieses Konto mit Ihrem Abrechnungskonto für zentrale Rechnungsstellung (endet auf ${lastFourPAN}) übereinstimmt, damit die kontinuierliche Abstimmung ordnungsgemäß funktioniert.`, }, - syncTravelInvoicingSettlements: 'Reiseabrechnungs­abgleiche synchronisieren', + syncTravelInvoicingSettlements: 'Abgleiche der zentralen Rechnungsstellung synchronisieren', }, export: { notReadyHeading: 'Nicht bereit zum Export', diff --git a/src/languages/en.ts b/src/languages/en.ts index 054be5276749..64f5aa609f2b 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -6402,18 +6402,18 @@ const translations = { cardReconciliation: 'Card reconciliation', reconciliationAccount: 'Reconciliation account', continuousReconciliation: 'Continuous Reconciliation', - syncTravelInvoicingSettlements: 'Sync travel invoicing settlements', + syncTravelInvoicingSettlements: 'Sync central invoicing settlements', saveHoursOnReconciliation: 'Save hours on reconciliation each accounting period by having Expensify continuously reconcile Expensify Card statements and settlements on your behalf.', enableContinuousReconciliation: (accountingAdvancedSettingsLink: string, connectionName: string) => `In order to enable Continuous Reconciliation, please enable auto-sync for ${connectionName}.`, chooseReconciliationAccount: { chooseBankAccount: 'Choose the bank account that your Expensify Card payments will be reconciled against.', - chooseTravelInvoicingBankAccount: 'Choose the bank account that your travel invoicing payments will be reconciled against.', + chooseTravelInvoicingBankAccount: 'Choose the bank account that your central invoicing payments will be reconciled against.', settlementAccountReconciliation: (settlementAccountUrl: string, lastFourPAN: string) => `Make sure this account matches your Expensify Card settlement account (ending in ${lastFourPAN}) so Continuous Reconciliation works properly.`, travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => - `Make sure this account matches your travel invoicing settlement account (ending in ${lastFourPAN}) so Continuous Reconciliation works properly.`, + `Make sure this account matches your central invoicing settlement account (ending in ${lastFourPAN}) so Continuous Reconciliation works properly.`, }, }, hr: { diff --git a/src/languages/es.ts b/src/languages/es.ts index c97eec5469d3..8e1358880420 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -6168,11 +6168,11 @@ ${amount} para ${merchant} - ${date}`, chooseBankAccount: 'Elige la cuenta bancaria con la que se conciliarán los pagos de tu Tarjeta Expensify.', settlementAccountReconciliation: (settlementAccountUrl, lastFourPAN) => `Asegúrate de que esta cuenta coincide con la cuenta de liquidación de tu Tarjeta Expensify (que termina en ${lastFourPAN}) para que la conciliación continua funcione correctamente.`, - chooseTravelInvoicingBankAccount: 'Elige la cuenta bancaria con la que se reconciliarán los pagos de tus facturas de viaje.', + chooseTravelInvoicingBankAccount: 'Elige la cuenta bancaria con la que se reconciliarán los pagos de tu facturación central.', travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => - `Asegúrate de que esta cuenta coincida con tu cuenta de liquidación de facturas de viaje (que termina en ${lastFourPAN}) para que la conciliación continua funcione correctamente.`, + `Asegúrate de que esta cuenta coincida con tu cuenta de liquidación de facturación central (que termina en ${lastFourPAN}) para que la conciliación continua funcione correctamente.`, }, - syncTravelInvoicingSettlements: 'Sincronizar liquidaciones de facturación de viajes', + syncTravelInvoicingSettlements: 'Sincronizar liquidaciones de facturación central', }, card: { issueCard: 'Emitir tarjeta', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 550c3833766a..cdbda08c2e1b 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -6407,11 +6407,11 @@ _Pour des instructions plus détaillées, [visitez notre site d’aide](${CONST. chooseBankAccount: 'Choisissez le compte bancaire avec lequel les paiements de votre Carte Expensify seront rapprochés.', settlementAccountReconciliation: (settlementAccountUrl: string, lastFourPAN: string) => `Assurez-vous que ce compte correspond à votre compte de règlement Carte Expensify (se terminant par ${lastFourPAN}) afin que la réconciliation continue fonctionne correctement.`, - chooseTravelInvoicingBankAccount: 'Choisissez le compte bancaire sur lequel les paiements de facturation de voyage seront rapprochés.', + chooseTravelInvoicingBankAccount: 'Choisissez le compte bancaire avec lequel vos paiements de facturation centrale seront rapprochés.', travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => - `Assurez-vous que ce compte correspond à votre compte de règlement de facturation de voyage (se terminant par ${lastFourPAN}) afin que le rapprochement continu fonctionne correctement.`, + `Assurez-vous que ce compte correspond à votre compte de règlement de facturation centrale (se terminant par ${lastFourPAN}) afin que le rapprochement continu fonctionne correctement.`, }, - syncTravelInvoicingSettlements: 'Synchroniser les règlements de facturation de voyage', + syncTravelInvoicingSettlements: 'Synchroniser les règlements de facturation centrale', }, export: { notReadyHeading: 'Pas prêt à être exporté', diff --git a/src/languages/it.ts b/src/languages/it.ts index 7e4004af1c33..306bd89bc5f9 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -6375,11 +6375,11 @@ _Per istruzioni più dettagliate, [visita il nostro sito di assistenza](${CONST. chooseBankAccount: 'Scegli il conto bancario con cui verranno riconciliati i pagamenti della tua Carta Expensify.', settlementAccountReconciliation: (settlementAccountUrl: string, lastFourPAN: string) => `Assicurati che questo conto corrisponda al tuo conto di regolamento della Carta Expensify (con finale ${lastFourPAN}) affinché la Riconciliazione continua funzioni correttamente.`, - chooseTravelInvoicingBankAccount: 'Scegli il conto bancario su cui verranno riconciliati i pagamenti della fatturazione di viaggio.', + chooseTravelInvoicingBankAccount: 'Scegli il conto bancario su cui verranno riconciliati i pagamenti della fatturazione centralizzata.', travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => - `Assicurati che questo conto corrisponda al tuo conto di regolamento per la fatturazione dei viaggi (che termina con ${lastFourPAN}) in modo che la Riconciliazione continua funzioni correttamente.`, + `Assicurati che questo conto corrisponda al tuo conto di regolamento per la fatturazione centralizzata (che termina con ${lastFourPAN}) in modo che la Riconciliazione continua funzioni correttamente.`, }, - syncTravelInvoicingSettlements: 'Sincronizza le liquidazioni delle fatture di viaggio', + syncTravelInvoicingSettlements: 'Sincronizza le liquidazioni della fatturazione centralizzata', }, export: { notReadyHeading: 'Non pronto per l’esportazione', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index e1adc94add55..9a197e580cbb 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -6304,11 +6304,11 @@ _詳しい手順については、[ヘルプサイトをご覧ください](${CO chooseBankAccount: 'Expensify カードの支払いを照合する銀行口座を選択してください。', settlementAccountReconciliation: (settlementAccountUrl: string, lastFourPAN: string) => `継続消込が正しく機能するように、この口座が、末尾が ${lastFourPAN} のExpensify カード精算口座と一致していることを確認してください。`, - chooseTravelInvoicingBankAccount: '出張請求の支払いの消込に使用する銀行口座を選択してください。', + chooseTravelInvoicingBankAccount: '一括請求の支払いの消込に使用する銀行口座を選択してください。', travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => - `Continuous Reconciliation が正しく機能するように、この口座が、旅行の請求書決済用口座(末尾が ${lastFourPAN} の口座)と一致していることを確認してください。`, + `Continuous Reconciliation が正しく機能するように、この口座が、一括請求の精算口座(末尾が ${lastFourPAN} の口座)と一致していることを確認してください。`, }, - syncTravelInvoicingSettlements: '出張請求の精算を同期', + syncTravelInvoicingSettlements: '一括請求の精算を同期', }, export: { notReadyHeading: 'エクスポートの準備ができていません', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index ae287c39d23f..e100670cf04e 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -6353,11 +6353,11 @@ _Voor meer gedetailleerde instructies, [bezoek onze help-site](${CONST.NETSUITE_ chooseBankAccount: 'Kies de bankrekening waarop de betalingen met je Expensify Kaart worden afgestemd.', settlementAccountReconciliation: (settlementAccountUrl: string, lastFourPAN: string) => `Zorg ervoor dat deze rekening overeenkomt met je Expensify Kaart-afwikkelingsrekening (eindigend op ${lastFourPAN}), zodat Continue Afstemming goed werkt.`, - chooseTravelInvoicingBankAccount: 'Kies de bankrekening waarop de betalingen van je reiskostenfacturen worden afgeletterd.', + chooseTravelInvoicingBankAccount: 'Kies de bankrekening waarop je betalingen voor centrale facturering worden afgeletterd.', travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => - `Zorg ervoor dat deze rekening overeenkomt met je afwikkelingsrekening voor reiskostenfacturatie (die eindigt op ${lastFourPAN}), zodat Continue Afstemming goed werkt.`, + `Zorg ervoor dat deze rekening overeenkomt met je afwikkelingsrekening voor centrale facturering (die eindigt op ${lastFourPAN}), zodat Continue Afstemming goed werkt.`, }, - syncTravelInvoicingSettlements: 'Reisfactureringsafrekeningen synchroniseren', + syncTravelInvoicingSettlements: 'Afrekeningen voor centrale facturering synchroniseren', }, export: { notReadyHeading: 'Niet klaar om te exporteren', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index bf356175daa3..5d417613da43 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -6346,11 +6346,11 @@ _Aby uzyskać bardziej szczegółowe instrukcje, [odwiedź naszą stronę pomocy chooseBankAccount: 'Wybierz konto bankowe, do którego będą uzgadniane płatności kartą Karta Expensify.', settlementAccountReconciliation: (settlementAccountUrl: string, lastFourPAN: string) => `Upewnij się, że to konto jest takie samo jak twoje konto rozliczeniowe Karty Expensify (kończące się na ${lastFourPAN}), aby Ciągłe Uzgadnianie działało poprawnie.`, - chooseTravelInvoicingBankAccount: 'Wybierz konto bankowe, z którym będą uzgadniane płatności za faktury podróżne.', + chooseTravelInvoicingBankAccount: 'Wybierz konto bankowe, z którym będą uzgadniane płatności z fakturowania centralnego.', travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => - `Upewnij się, że to konto jest takie samo jak konto rozliczeniowe do fakturowania podróży (kończące się na ${lastFourPAN}), żeby Ciągłe Uzgadnianie działało poprawnie.`, + `Upewnij się, że to konto jest takie samo jak konto rozliczeniowe do fakturowania centralnego (kończące się na ${lastFourPAN}), żeby Ciągłe Uzgadnianie działało poprawnie.`, }, - syncTravelInvoicingSettlements: 'Synchronizuj rozliczenia faktur podróżnych', + syncTravelInvoicingSettlements: 'Synchronizuj rozliczenia fakturowania centralnego', }, export: { notReadyHeading: 'Niegotowe do eksportu', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 335796eb0076..50c60cee914e 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -6354,11 +6354,11 @@ _Para instruções mais detalhadas, [visite nossa central de ajuda](${CONST.NETS chooseBankAccount: 'Escolha a conta bancária na qual os pagamentos do seu Cartão Expensify serão conciliados.', settlementAccountReconciliation: (settlementAccountUrl: string, lastFourPAN: string) => `Certifique-se de que esta conta corresponda à sua conta de liquidação do Cartão Expensify (terminada em ${lastFourPAN}) para que a Reconciliação Contínua funcione corretamente.`, - chooseTravelInvoicingBankAccount: 'Escolha a conta bancária na qual os pagamentos de faturamento de viagem serão conciliados.', + chooseTravelInvoicingBankAccount: 'Escolha a conta bancária na qual os pagamentos de faturamento central serão conciliados.', travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => - `Certifique-se de que esta conta corresponda à sua conta de liquidação de faturamento de viagem (terminada em ${lastFourPAN}) para que a Conciliação Contínua funcione corretamente.`, + `Certifique-se de que esta conta corresponda à sua conta de liquidação de faturamento central (terminada em ${lastFourPAN}) para que a Conciliação Contínua funcione corretamente.`, }, - syncTravelInvoicingSettlements: 'Sincronizar liquidações de faturamento de viagens', + syncTravelInvoicingSettlements: 'Sincronizar liquidações de faturamento central', }, export: { notReadyHeading: 'Não está pronto para exportar', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index baca42c2b5c3..f3ecb530ff95 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -6199,10 +6199,10 @@ _如需更详细的说明,请[访问我们的帮助网站](${CONST.NETSUITE_IM chooseBankAccount: '选择用于对账 Expensify 卡付款的银行账户。', settlementAccountReconciliation: (settlementAccountUrl: string, lastFourPAN: string) => `请确保此账户与您的Expensify 卡结算账户(末尾为 ${lastFourPAN})一致,以便持续对账功能正常运行。`, - chooseTravelInvoicingBankAccount: '选择用于核对差旅开票付款的银行账户。', - travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => `请确保此账户与您的差旅发票结算账户(以 ${lastFourPAN} 结尾)一致,以确保持续对账功能正常运行。`, + chooseTravelInvoicingBankAccount: '选择用于核对集中开票付款的银行账户。', + travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => `请确保此账户与您的集中开票结算账户(以 ${lastFourPAN} 结尾)一致,以确保持续对账功能正常运行。`, }, - syncTravelInvoicingSettlements: '同步差旅开票结算', + syncTravelInvoicingSettlements: '同步集中开票结算', }, export: { notReadyHeading: '尚未准备好导出', From 5591993b0ddf9c87ecb8ff94da828b7a7750638f Mon Sep 17 00:00:00 2001 From: Rodrigo Lino da Costa Date: Mon, 18 May 2026 19:59:13 -0300 Subject: [PATCH 07/11] Revert "Update central invoicing reconciliation copy" This reverts commit 2d0d79b2f91a95ce5710ee22a8de175cf321634d. --- src/languages/de.ts | 6 +++--- src/languages/en.ts | 6 +++--- src/languages/es.ts | 6 +++--- src/languages/fr.ts | 6 +++--- src/languages/it.ts | 6 +++--- src/languages/ja.ts | 6 +++--- src/languages/nl.ts | 6 +++--- src/languages/pl.ts | 6 +++--- src/languages/pt-BR.ts | 6 +++--- src/languages/zh-hans.ts | 6 +++--- 10 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 6846d7a4848d..666a0f26a1aa 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -6385,11 +6385,11 @@ _Für ausführlichere Anweisungen [besuchen Sie unsere Hilfeseite](${CONST.NETSU chooseBankAccount: 'Wählen Sie das Bankkonto aus, mit dem Ihre Zahlungen mit der Expensify Karte abgeglichen werden.', settlementAccountReconciliation: (settlementAccountUrl: string, lastFourPAN: string) => `Stellen Sie sicher, dass dieses Konto mit Ihrem Expensify Karte-Abrechnungskonto (endend auf ${lastFourPAN}) übereinstimmt, damit die fortlaufende Abstimmung richtig funktioniert.`, - chooseTravelInvoicingBankAccount: 'Wählen Sie das Bankkonto aus, mit dem Ihre Zahlungen aus der zentralen Rechnungsstellung abgeglichen werden.', + chooseTravelInvoicingBankAccount: 'Wählen Sie das Bankkonto aus, mit dem Ihre Zahlungen aus der Reiseabrechnung abgeglichen werden.', travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => - `Stellen Sie sicher, dass dieses Konto mit Ihrem Abrechnungskonto für zentrale Rechnungsstellung (endet auf ${lastFourPAN}) übereinstimmt, damit die kontinuierliche Abstimmung ordnungsgemäß funktioniert.`, + `Stellen Sie sicher, dass dieses Konto mit Ihrem Abrechnungskonto für Reiseabrechnungen (endet auf ${lastFourPAN}) übereinstimmt, damit die kontinuierliche Abstimmung ordnungsgemäß funktioniert.`, }, - syncTravelInvoicingSettlements: 'Abgleiche der zentralen Rechnungsstellung synchronisieren', + syncTravelInvoicingSettlements: 'Reiseabrechnungs­abgleiche synchronisieren', }, export: { notReadyHeading: 'Nicht bereit zum Export', diff --git a/src/languages/en.ts b/src/languages/en.ts index 64f5aa609f2b..054be5276749 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -6402,18 +6402,18 @@ const translations = { cardReconciliation: 'Card reconciliation', reconciliationAccount: 'Reconciliation account', continuousReconciliation: 'Continuous Reconciliation', - syncTravelInvoicingSettlements: 'Sync central invoicing settlements', + syncTravelInvoicingSettlements: 'Sync travel invoicing settlements', saveHoursOnReconciliation: 'Save hours on reconciliation each accounting period by having Expensify continuously reconcile Expensify Card statements and settlements on your behalf.', enableContinuousReconciliation: (accountingAdvancedSettingsLink: string, connectionName: string) => `In order to enable Continuous Reconciliation, please enable auto-sync for ${connectionName}.`, chooseReconciliationAccount: { chooseBankAccount: 'Choose the bank account that your Expensify Card payments will be reconciled against.', - chooseTravelInvoicingBankAccount: 'Choose the bank account that your central invoicing payments will be reconciled against.', + chooseTravelInvoicingBankAccount: 'Choose the bank account that your travel invoicing payments will be reconciled against.', settlementAccountReconciliation: (settlementAccountUrl: string, lastFourPAN: string) => `Make sure this account matches your Expensify Card settlement account (ending in ${lastFourPAN}) so Continuous Reconciliation works properly.`, travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => - `Make sure this account matches your central invoicing settlement account (ending in ${lastFourPAN}) so Continuous Reconciliation works properly.`, + `Make sure this account matches your travel invoicing settlement account (ending in ${lastFourPAN}) so Continuous Reconciliation works properly.`, }, }, hr: { diff --git a/src/languages/es.ts b/src/languages/es.ts index 8e1358880420..c97eec5469d3 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -6168,11 +6168,11 @@ ${amount} para ${merchant} - ${date}`, chooseBankAccount: 'Elige la cuenta bancaria con la que se conciliarán los pagos de tu Tarjeta Expensify.', settlementAccountReconciliation: (settlementAccountUrl, lastFourPAN) => `Asegúrate de que esta cuenta coincide con la cuenta de liquidación de tu Tarjeta Expensify (que termina en ${lastFourPAN}) para que la conciliación continua funcione correctamente.`, - chooseTravelInvoicingBankAccount: 'Elige la cuenta bancaria con la que se reconciliarán los pagos de tu facturación central.', + chooseTravelInvoicingBankAccount: 'Elige la cuenta bancaria con la que se reconciliarán los pagos de tus facturas de viaje.', travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => - `Asegúrate de que esta cuenta coincida con tu cuenta de liquidación de facturación central (que termina en ${lastFourPAN}) para que la conciliación continua funcione correctamente.`, + `Asegúrate de que esta cuenta coincida con tu cuenta de liquidación de facturas de viaje (que termina en ${lastFourPAN}) para que la conciliación continua funcione correctamente.`, }, - syncTravelInvoicingSettlements: 'Sincronizar liquidaciones de facturación central', + syncTravelInvoicingSettlements: 'Sincronizar liquidaciones de facturación de viajes', }, card: { issueCard: 'Emitir tarjeta', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index cdbda08c2e1b..550c3833766a 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -6407,11 +6407,11 @@ _Pour des instructions plus détaillées, [visitez notre site d’aide](${CONST. chooseBankAccount: 'Choisissez le compte bancaire avec lequel les paiements de votre Carte Expensify seront rapprochés.', settlementAccountReconciliation: (settlementAccountUrl: string, lastFourPAN: string) => `Assurez-vous que ce compte correspond à votre compte de règlement Carte Expensify (se terminant par ${lastFourPAN}) afin que la réconciliation continue fonctionne correctement.`, - chooseTravelInvoicingBankAccount: 'Choisissez le compte bancaire avec lequel vos paiements de facturation centrale seront rapprochés.', + chooseTravelInvoicingBankAccount: 'Choisissez le compte bancaire sur lequel les paiements de facturation de voyage seront rapprochés.', travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => - `Assurez-vous que ce compte correspond à votre compte de règlement de facturation centrale (se terminant par ${lastFourPAN}) afin que le rapprochement continu fonctionne correctement.`, + `Assurez-vous que ce compte correspond à votre compte de règlement de facturation de voyage (se terminant par ${lastFourPAN}) afin que le rapprochement continu fonctionne correctement.`, }, - syncTravelInvoicingSettlements: 'Synchroniser les règlements de facturation centrale', + syncTravelInvoicingSettlements: 'Synchroniser les règlements de facturation de voyage', }, export: { notReadyHeading: 'Pas prêt à être exporté', diff --git a/src/languages/it.ts b/src/languages/it.ts index 306bd89bc5f9..7e4004af1c33 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -6375,11 +6375,11 @@ _Per istruzioni più dettagliate, [visita il nostro sito di assistenza](${CONST. chooseBankAccount: 'Scegli il conto bancario con cui verranno riconciliati i pagamenti della tua Carta Expensify.', settlementAccountReconciliation: (settlementAccountUrl: string, lastFourPAN: string) => `Assicurati che questo conto corrisponda al tuo conto di regolamento della Carta Expensify (con finale ${lastFourPAN}) affinché la Riconciliazione continua funzioni correttamente.`, - chooseTravelInvoicingBankAccount: 'Scegli il conto bancario su cui verranno riconciliati i pagamenti della fatturazione centralizzata.', + chooseTravelInvoicingBankAccount: 'Scegli il conto bancario su cui verranno riconciliati i pagamenti della fatturazione di viaggio.', travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => - `Assicurati che questo conto corrisponda al tuo conto di regolamento per la fatturazione centralizzata (che termina con ${lastFourPAN}) in modo che la Riconciliazione continua funzioni correttamente.`, + `Assicurati che questo conto corrisponda al tuo conto di regolamento per la fatturazione dei viaggi (che termina con ${lastFourPAN}) in modo che la Riconciliazione continua funzioni correttamente.`, }, - syncTravelInvoicingSettlements: 'Sincronizza le liquidazioni della fatturazione centralizzata', + syncTravelInvoicingSettlements: 'Sincronizza le liquidazioni delle fatture di viaggio', }, export: { notReadyHeading: 'Non pronto per l’esportazione', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 9a197e580cbb..e1adc94add55 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -6304,11 +6304,11 @@ _詳しい手順については、[ヘルプサイトをご覧ください](${CO chooseBankAccount: 'Expensify カードの支払いを照合する銀行口座を選択してください。', settlementAccountReconciliation: (settlementAccountUrl: string, lastFourPAN: string) => `継続消込が正しく機能するように、この口座が、末尾が ${lastFourPAN} のExpensify カード精算口座と一致していることを確認してください。`, - chooseTravelInvoicingBankAccount: '一括請求の支払いの消込に使用する銀行口座を選択してください。', + chooseTravelInvoicingBankAccount: '出張請求の支払いの消込に使用する銀行口座を選択してください。', travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => - `Continuous Reconciliation が正しく機能するように、この口座が、一括請求の精算口座(末尾が ${lastFourPAN} の口座)と一致していることを確認してください。`, + `Continuous Reconciliation が正しく機能するように、この口座が、旅行の請求書決済用口座(末尾が ${lastFourPAN} の口座)と一致していることを確認してください。`, }, - syncTravelInvoicingSettlements: '一括請求の精算を同期', + syncTravelInvoicingSettlements: '出張請求の精算を同期', }, export: { notReadyHeading: 'エクスポートの準備ができていません', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index e100670cf04e..ae287c39d23f 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -6353,11 +6353,11 @@ _Voor meer gedetailleerde instructies, [bezoek onze help-site](${CONST.NETSUITE_ chooseBankAccount: 'Kies de bankrekening waarop de betalingen met je Expensify Kaart worden afgestemd.', settlementAccountReconciliation: (settlementAccountUrl: string, lastFourPAN: string) => `Zorg ervoor dat deze rekening overeenkomt met je Expensify Kaart-afwikkelingsrekening (eindigend op ${lastFourPAN}), zodat Continue Afstemming goed werkt.`, - chooseTravelInvoicingBankAccount: 'Kies de bankrekening waarop je betalingen voor centrale facturering worden afgeletterd.', + chooseTravelInvoicingBankAccount: 'Kies de bankrekening waarop de betalingen van je reiskostenfacturen worden afgeletterd.', travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => - `Zorg ervoor dat deze rekening overeenkomt met je afwikkelingsrekening voor centrale facturering (die eindigt op ${lastFourPAN}), zodat Continue Afstemming goed werkt.`, + `Zorg ervoor dat deze rekening overeenkomt met je afwikkelingsrekening voor reiskostenfacturatie (die eindigt op ${lastFourPAN}), zodat Continue Afstemming goed werkt.`, }, - syncTravelInvoicingSettlements: 'Afrekeningen voor centrale facturering synchroniseren', + syncTravelInvoicingSettlements: 'Reisfactureringsafrekeningen synchroniseren', }, export: { notReadyHeading: 'Niet klaar om te exporteren', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 5d417613da43..bf356175daa3 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -6346,11 +6346,11 @@ _Aby uzyskać bardziej szczegółowe instrukcje, [odwiedź naszą stronę pomocy chooseBankAccount: 'Wybierz konto bankowe, do którego będą uzgadniane płatności kartą Karta Expensify.', settlementAccountReconciliation: (settlementAccountUrl: string, lastFourPAN: string) => `Upewnij się, że to konto jest takie samo jak twoje konto rozliczeniowe Karty Expensify (kończące się na ${lastFourPAN}), aby Ciągłe Uzgadnianie działało poprawnie.`, - chooseTravelInvoicingBankAccount: 'Wybierz konto bankowe, z którym będą uzgadniane płatności z fakturowania centralnego.', + chooseTravelInvoicingBankAccount: 'Wybierz konto bankowe, z którym będą uzgadniane płatności za faktury podróżne.', travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => - `Upewnij się, że to konto jest takie samo jak konto rozliczeniowe do fakturowania centralnego (kończące się na ${lastFourPAN}), żeby Ciągłe Uzgadnianie działało poprawnie.`, + `Upewnij się, że to konto jest takie samo jak konto rozliczeniowe do fakturowania podróży (kończące się na ${lastFourPAN}), żeby Ciągłe Uzgadnianie działało poprawnie.`, }, - syncTravelInvoicingSettlements: 'Synchronizuj rozliczenia fakturowania centralnego', + syncTravelInvoicingSettlements: 'Synchronizuj rozliczenia faktur podróżnych', }, export: { notReadyHeading: 'Niegotowe do eksportu', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 50c60cee914e..335796eb0076 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -6354,11 +6354,11 @@ _Para instruções mais detalhadas, [visite nossa central de ajuda](${CONST.NETS chooseBankAccount: 'Escolha a conta bancária na qual os pagamentos do seu Cartão Expensify serão conciliados.', settlementAccountReconciliation: (settlementAccountUrl: string, lastFourPAN: string) => `Certifique-se de que esta conta corresponda à sua conta de liquidação do Cartão Expensify (terminada em ${lastFourPAN}) para que a Reconciliação Contínua funcione corretamente.`, - chooseTravelInvoicingBankAccount: 'Escolha a conta bancária na qual os pagamentos de faturamento central serão conciliados.', + chooseTravelInvoicingBankAccount: 'Escolha a conta bancária na qual os pagamentos de faturamento de viagem serão conciliados.', travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => - `Certifique-se de que esta conta corresponda à sua conta de liquidação de faturamento central (terminada em ${lastFourPAN}) para que a Conciliação Contínua funcione corretamente.`, + `Certifique-se de que esta conta corresponda à sua conta de liquidação de faturamento de viagem (terminada em ${lastFourPAN}) para que a Conciliação Contínua funcione corretamente.`, }, - syncTravelInvoicingSettlements: 'Sincronizar liquidações de faturamento central', + syncTravelInvoicingSettlements: 'Sincronizar liquidações de faturamento de viagens', }, export: { notReadyHeading: 'Não está pronto para exportar', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index f3ecb530ff95..baca42c2b5c3 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -6199,10 +6199,10 @@ _如需更详细的说明,请[访问我们的帮助网站](${CONST.NETSUITE_IM chooseBankAccount: '选择用于对账 Expensify 卡付款的银行账户。', settlementAccountReconciliation: (settlementAccountUrl: string, lastFourPAN: string) => `请确保此账户与您的Expensify 卡结算账户(末尾为 ${lastFourPAN})一致,以便持续对账功能正常运行。`, - chooseTravelInvoicingBankAccount: '选择用于核对集中开票付款的银行账户。', - travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => `请确保此账户与您的集中开票结算账户(以 ${lastFourPAN} 结尾)一致,以确保持续对账功能正常运行。`, + chooseTravelInvoicingBankAccount: '选择用于核对差旅开票付款的银行账户。', + travelInvoicingSettlementAccountReconciliation: (lastFourPAN: string) => `请确保此账户与您的差旅发票结算账户(以 ${lastFourPAN} 结尾)一致,以确保持续对账功能正常运行。`, }, - syncTravelInvoicingSettlements: '同步集中开票结算', + syncTravelInvoicingSettlements: '同步差旅开票结算', }, export: { notReadyHeading: '尚未准备好导出', From 2e63faf99790adb80189f00ae83594725c5ae426 Mon Sep 17 00:00:00 2001 From: Rodrigo Lino da Costa Date: Mon, 18 May 2026 20:30:28 -0300 Subject: [PATCH 08/11] Remove unused divider prop from travel invoicing section --- Mobile-Expensify | 2 +- .../TravelInvoicingContinuousReconciliationSection.tsx | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/Mobile-Expensify b/Mobile-Expensify index f767e6f3800c..1b85431e33e8 160000 --- a/Mobile-Expensify +++ b/Mobile-Expensify @@ -1 +1 @@ -Subproject commit f767e6f3800cc37599715193e91d96c7806214bb +Subproject commit 1b85431e33e81e1cf2680d616172c119226dd315 diff --git a/src/pages/workspace/accounting/common/TravelInvoicingContinuousReconciliationSection.tsx b/src/pages/workspace/accounting/common/TravelInvoicingContinuousReconciliationSection.tsx index de560081b5a6..7859917eee86 100644 --- a/src/pages/workspace/accounting/common/TravelInvoicingContinuousReconciliationSection.tsx +++ b/src/pages/workspace/accounting/common/TravelInvoicingContinuousReconciliationSection.tsx @@ -1,12 +1,10 @@ import React from 'react'; import type {StyleProp, ViewStyle} from 'react-native'; -import {View} from 'react-native'; import type {OnyxEntry} from 'react-native-onyx'; import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription'; import OfflineWithFeedback from '@components/OfflineWithFeedback'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; -import useThemeStyles from '@hooks/useThemeStyles'; import {getRouteParamForConnection} from '@libs/AccountingUtils'; import {toggleTravelInvoicingContinuousReconciliation} from '@libs/actions/TravelInvoicing'; import {getCardSettings, getConnectionBankAccountsForReconciliation} from '@libs/CardUtils'; @@ -25,7 +23,6 @@ type TravelInvoicingContinuousReconciliationSectionProps = { policy: OnyxEntry; connectionName: ConnectionName; isAutoSyncEnabled: boolean; - shouldShowDivider?: boolean; toggleWrapperStyle?: StyleProp; menuItemWrapperStyle?: StyleProp; }; @@ -34,12 +31,10 @@ function TravelInvoicingContinuousReconciliationSection({ policy, connectionName, isAutoSyncEnabled, - shouldShowDivider = false, toggleWrapperStyle, menuItemWrapperStyle, }: TravelInvoicingContinuousReconciliationSectionProps) { const {translate} = useLocalize(); - const styles = useThemeStyles(); const workspaceAccountID = policy?.workspaceAccountID ?? CONST.DEFAULT_NUMBER_ID; const [cardSettings] = useOnyx(`${ONYXKEYS.COLLECTION.PRIVATE_EXPENSIFY_CARD_SETTINGS}${workspaceAccountID}`); @@ -94,7 +89,6 @@ function TravelInvoicingContinuousReconciliationSection({ /> )} - {shouldShowDivider && } ); } From 9aba50a288b513d68261a2049193a4bdd300afd2 Mon Sep 17 00:00:00 2001 From: Rodrigo Lino da Costa Date: Mon, 18 May 2026 20:54:13 -0300 Subject: [PATCH 09/11] Move travel sync section after auto-sync setting --- .../intacct/advanced/SageIntacctAdvancedPage.tsx | 12 ++++++------ .../DynamicQuickbooksDesktopAdvancedPage.tsx | 14 +++++++------- .../qbo/advanced/QuickbooksAdvancedPage.tsx | 14 +++++++------- .../accounting/xero/advanced/XeroAdvancedPage.tsx | 14 +++++++------- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/pages/workspace/accounting/intacct/advanced/SageIntacctAdvancedPage.tsx b/src/pages/workspace/accounting/intacct/advanced/SageIntacctAdvancedPage.tsx index 0c2327b2c263..37df8c6ac1e7 100644 --- a/src/pages/workspace/accounting/intacct/advanced/SageIntacctAdvancedPage.tsx +++ b/src/pages/workspace/accounting/intacct/advanced/SageIntacctAdvancedPage.tsx @@ -119,6 +119,12 @@ function SageIntacctAdvancedPage({policy}: WithPolicyProps) { })()} /> + {toggleSections.map((section) => ( - ); } diff --git a/src/pages/workspace/accounting/qbd/advanced/DynamicQuickbooksDesktopAdvancedPage.tsx b/src/pages/workspace/accounting/qbd/advanced/DynamicQuickbooksDesktopAdvancedPage.tsx index c6b591d07d59..6595b1f02264 100644 --- a/src/pages/workspace/accounting/qbd/advanced/DynamicQuickbooksDesktopAdvancedPage.tsx +++ b/src/pages/workspace/accounting/qbd/advanced/DynamicQuickbooksDesktopAdvancedPage.tsx @@ -73,6 +73,13 @@ function DynamicQuickbooksDesktopAdvancedPage({policy}: WithPolicyConnectionsPro })()} /> + {qbdToggleSettingItems.map((item) => ( clearQBDErrorField(policyID, item.subscribedSetting)} /> ))} - ); } diff --git a/src/pages/workspace/accounting/qbo/advanced/QuickbooksAdvancedPage.tsx b/src/pages/workspace/accounting/qbo/advanced/QuickbooksAdvancedPage.tsx index 8923c1c86078..a8069d15bfc9 100644 --- a/src/pages/workspace/accounting/qbo/advanced/QuickbooksAdvancedPage.tsx +++ b/src/pages/workspace/accounting/qbo/advanced/QuickbooksAdvancedPage.tsx @@ -186,6 +186,13 @@ function QuickbooksAdvancedPage({policy}: WithPolicyConnectionsProps) { })()} /> + {qboToggleSettingItems.map((item) => ( {syncReimbursedSubMenuItems()} - ); } diff --git a/src/pages/workspace/accounting/xero/advanced/XeroAdvancedPage.tsx b/src/pages/workspace/accounting/xero/advanced/XeroAdvancedPage.tsx index e0af975a2ae2..c4c3638336c8 100644 --- a/src/pages/workspace/accounting/xero/advanced/XeroAdvancedPage.tsx +++ b/src/pages/workspace/accounting/xero/advanced/XeroAdvancedPage.tsx @@ -82,6 +82,13 @@ function XeroAdvancedPage({policy}: WithPolicyConnectionsProps) { })()} /> + - ); } From 72e6540a2b2bb44849d493ce86960aed57126ccb Mon Sep 17 00:00:00 2001 From: Rodrigo Lino da Costa Date: Wed, 20 May 2026 10:29:50 +0200 Subject: [PATCH 10/11] remove all usages --- Mobile-Expensify | 2 +- .../intacct/advanced/SageIntacctAdvancedPage.tsx | 8 -------- .../advanced/DynamicQuickbooksDesktopAdvancedPage.tsx | 9 --------- .../accounting/qbo/advanced/QuickbooksAdvancedPage.tsx | 8 -------- .../accounting/xero/advanced/XeroAdvancedPage.tsx | 8 -------- 5 files changed, 1 insertion(+), 34 deletions(-) diff --git a/Mobile-Expensify b/Mobile-Expensify index 5576bb9a7fd0..e48a63dd0ba2 160000 --- a/Mobile-Expensify +++ b/Mobile-Expensify @@ -1 +1 @@ -Subproject commit 5576bb9a7fd05aa43767639ef1243e06715b9e9e +Subproject commit e48a63dd0ba213bb646fc751303428906e8e51ea diff --git a/src/pages/workspace/accounting/intacct/advanced/SageIntacctAdvancedPage.tsx b/src/pages/workspace/accounting/intacct/advanced/SageIntacctAdvancedPage.tsx index 37df8c6ac1e7..9ce9f9aafb90 100644 --- a/src/pages/workspace/accounting/intacct/advanced/SageIntacctAdvancedPage.tsx +++ b/src/pages/workspace/accounting/intacct/advanced/SageIntacctAdvancedPage.tsx @@ -11,7 +11,6 @@ import {getLatestErrorField} from '@libs/ErrorUtils'; import {areSettingsInErrorFields, getCurrentSageIntacctEntityName, settingsPendingAction} from '@libs/PolicyUtils'; import createDynamicRoute from '@navigation/helpers/dynamicRoutesUtils/createDynamicRoute'; import Navigation from '@navigation/Navigation'; -import TravelInvoicingContinuousReconciliationSection from '@pages/workspace/accounting/common/TravelInvoicingContinuousReconciliationSection'; import type {WithPolicyProps} from '@pages/workspace/withPolicy'; import withPolicy from '@pages/workspace/withPolicy'; import ToggleSettingOptionRow from '@pages/workspace/workflows/ToggleSettingsOptionRow'; @@ -119,13 +118,6 @@ function SageIntacctAdvancedPage({policy}: WithPolicyProps) { })()} /> - - {toggleSections.map((section) => ( - - {qbdToggleSettingItems.map((item) => ( - {qboToggleSettingItems.map((item) => ( - Date: Wed, 20 May 2026 11:32:55 +0200 Subject: [PATCH 11/11] Restore Mobile-Expensify submodule pointer --- Mobile-Expensify | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mobile-Expensify b/Mobile-Expensify index e48a63dd0ba2..5576bb9a7fd0 160000 --- a/Mobile-Expensify +++ b/Mobile-Expensify @@ -1 +1 @@ -Subproject commit e48a63dd0ba213bb646fc751303428906e8e51ea +Subproject commit 5576bb9a7fd05aa43767639ef1243e06715b9e9e