diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 81a83c6d07f7..2258e88794b2 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -340,7 +340,15 @@ 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, + SCREENS.WORKSPACE.ACCOUNTING.DYNAMIC_QUICKBOOKS_DESKTOP_ADVANCED, + SCREENS.WORKSPACE.ACCOUNTING.XERO_ADVANCED, + SCREENS.WORKSPACE.ACCOUNTING.SAGE_INTACCT_ADVANCED, + ], queryParams: ['connection', 'reconciliationAccountSettingsType'], }, ADDRESS_COUNTRY: { diff --git a/src/pages/workspace/accounting/common/TravelInvoicingContinuousReconciliationSection.tsx b/src/pages/workspace/accounting/common/TravelInvoicingContinuousReconciliationSection.tsx new file mode 100644 index 000000000000..7859917eee86 --- /dev/null +++ b/src/pages/workspace/accounting/common/TravelInvoicingContinuousReconciliationSection.tsx @@ -0,0 +1,96 @@ +import React from 'react'; +import type {StyleProp, ViewStyle} 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 {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; + toggleWrapperStyle?: StyleProp; + menuItemWrapperStyle?: StyleProp; +}; + +function TravelInvoicingContinuousReconciliationSection({ + policy, + connectionName, + isAutoSyncEnabled, + toggleWrapperStyle, + menuItemWrapperStyle, +}: TravelInvoicingContinuousReconciliationSectionProps) { + const {translate} = useLocalize(); + 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 && ( + + + + )} + + ); +} + +export default TravelInvoicingContinuousReconciliationSection; diff --git a/src/pages/workspace/accounting/intacct/advanced/SageIntacctAdvancedPage.tsx b/src/pages/workspace/accounting/intacct/advanced/SageIntacctAdvancedPage.tsx index 1be408e20945..9ce9f9aafb90 100644 --- a/src/pages/workspace/accounting/intacct/advanced/SageIntacctAdvancedPage.tsx +++ b/src/pages/workspace/accounting/intacct/advanced/SageIntacctAdvancedPage.tsx @@ -118,7 +118,6 @@ function SageIntacctAdvancedPage({policy}: WithPolicyProps) { })()} /> - {toggleSections.map((section) => ( - {qbdToggleSettingItems.map((item) => (