Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion src/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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: {
Expand Down
Original file line number Diff line number Diff line change
@@ -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<Policy>;
connectionName: ConnectionName;
isAutoSyncEnabled: boolean;
toggleWrapperStyle?: StyleProp<ViewStyle>;
menuItemWrapperStyle?: StyleProp<ViewStyle>;
};

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 (
<>
<ToggleSettingOptionRow
title={translate('workspace.accounting.syncTravelInvoicingSettlements')}
isActive={!!travelInvoicingContinuousReconciliation}
switchAccessibilityLabel={translate('workspace.accounting.syncTravelInvoicingSettlements')}
disabled={!isAutoSyncEnabled}
onToggle={(isEnabled) => {
toggleTravelInvoicingContinuousReconciliation(workspaceAccountID, isEnabled, connectionName, travelInvoicingContinuousReconciliationConnection);
if (isEnabled) {
navigateToTravelInvoicingReconciliationAccountSettings();
}
}}
pendingAction={travelInvoicingContinuousReconciliationPendingAction}
wrapperStyle={toggleWrapperStyle}
/>
{!!travelInvoicingContinuousReconciliation && (
<OfflineWithFeedback pendingAction={travelInvoicingContinuousReconciliationPendingAction}>
<MenuItemWithTopDescription
description={translate('workspace.accounting.reconciliationAccount')}
onPress={navigateToTravelInvoicingReconciliationAccountSettings}
title={travelInvoicingReconciliationBankAccount?.name}
shouldShowRightIcon
wrapperStyle={menuItemWrapperStyle}
/>
</OfflineWithFeedback>
)}
</>
);
}

export default TravelInvoicingContinuousReconciliationSection;
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,6 @@ function SageIntacctAdvancedPage({policy}: WithPolicyProps) {
})()}
/>
</OfflineWithFeedback>

{toggleSections.map((section) => (
<ToggleSettingOptionRow
key={section.label}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ function DynamicQuickbooksDesktopAdvancedPage({policy}: WithPolicyConnectionsPro
})()}
/>
</OfflineWithFeedback>

{qbdToggleSettingItems.map((item) => (
<ToggleSettingOptionRow
key={item.title}
Expand Down
Loading