diff --git a/src/CONST.ts b/src/CONST.ts index c2299f242b6bb..a30afc61e4895 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -1240,6 +1240,8 @@ const CONST = { EXPORT_INVOICE: 'exportInvoice', EXPORT_ENTITY: 'exportEntity', EXPORT_ACCOUNT: 'exportAccount', + EXPORT_ACCOUNT_PAYABLE: 'exportAccountPayable', + EXPORT_COMPANY_CARD_ACCOUNT: 'exportCompanyCardAccount', EXPORT_COMPANY_CARD: 'exportCompanyCard', AUTO_SYNC: 'autoSync', SYNCE_PEOPLE: 'syncPeople', @@ -4619,6 +4621,12 @@ const CONST = { SUBMITTED_DATA: 'submittedData', }, + QUICKBOOKS_EXPORT_COMPANY_CARD: { + CREDIT_CARD: 'creditCard', + DEBIT_CARD: 'debitCard', + VENDOR_BILL: 'vendorBill', + }, + SESSION_STORAGE_KEYS: { INITIAL_URL: 'INITIAL_URL', }, diff --git a/src/ROUTES.ts b/src/ROUTES.ts index 809f0778c3e4b..a501583ff8946 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -480,17 +480,29 @@ const ROUTES = { route: 'settings/workspaces/:policyID/accounting/quickbooks-online/export', getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/quickbooks-online/export` as const, }, + POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT: { + route: 'settings/workspaces/:policyID/accounting/quickbooks-online/export/company-card-expense-account', + getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/quickbooks-online/export/company-card-expense-account` as const, + }, POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_SELECT: { - route: 'settings/workspaces/:policyID/accounting/quickbooks-online/company-card-expense-account-select', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/quickbooks-online/company-card-expense-account-select` as const, + route: 'settings/workspaces/:policyID/accounting/quickbooks-online/export/company-card-expense-account/account-select', + getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/quickbooks-online/export/company-card-expense-account/account-select` as const, + }, + POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_SELECT: { + route: 'settings/workspaces/:policyID/accounting/quickbooks-online/export/company-card-expense-account/card-select', + getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/quickbooks-online/export/company-card-expense-account/card-select` as const, }, POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_INVOICE_ACCOUNT_SELECT: { route: 'settings/workspaces/:policyID/accounting/quickbooks-online/export/invoice-account-select', getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/quickbooks-online/export/invoice-account-select` as const, }, + POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_PAYABLE_SELECT: { + route: 'settings/workspaces/:policyID/accounting/quickbooks-online/export/company-card-expense-account/account-payable-select', + getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/quickbooks-online/export/company-card-expense-account/account-payable-select` as const, + }, POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_PREFERRED_EXPORTER: { - route: 'settings/workspaces/:policyID/accounting/quickbooks-online/preferred-exporter', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/quickbooks-online/preferred-exporter` as const, + route: 'settings/workspaces/:policyID/accounting/quickbooks-online/export/preferred-exporter', + getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/export/quickbooks-online/preferred-exporter` as const, }, POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_EXPORT_OUT_OF_POCKET_EXPENSES: { route: 'settings/workspaces/:policyID/accounting/quickbooks-online/export/out-of-pocket-expense', diff --git a/src/SCREENS.ts b/src/SCREENS.ts index bf3cedbb738b7..07866c2761911 100644 --- a/src/SCREENS.ts +++ b/src/SCREENS.ts @@ -217,7 +217,10 @@ const SCREENS = { QUICKBOOKS_ONLINE_EXPORT: 'Workspace_Accounting_Quickbooks_Online_Export', QUICKBOOKS_ONLINE_EXPORT_DATE_SELECT: 'Workspace_Accounting_Quickbooks_Online_Export_Date_Select', QUICKBOOKS_ONLINE_EXPORT_INVOICE_ACCOUNT_SELECT: 'Workspace_Accounting_Quickbooks_Online_Export_Invoice_Account_Select', - QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_SELECT: 'Workspace_Accounting_Quickbooks_Online_Export_Company_Card_Expense_Select', + QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT: 'Workspace_Accounting_Quickbooks_Online_Export_Company_Card_Expense', + QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_SELECT: 'Workspace_Accounting_Quickbooks_Online_Export_Company_Card_Expense_Account_Select', + QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_PAYABLE_SELECT: 'Workspace_Accounting_Quickbooks_Online_Export_Company_Card_Expense_Account_Payable_Select', + QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_COMPANY_CARD_SELECT: 'Workspace_Accounting_Quickbooks_Online_Export_Company_Card_Expense_Select', QUICKBOOKS_ONLINE_EXPORT_PREFERRED_EXPORTER: 'Workspace_Accounting_Quickbooks_Online_Export_Preferred_Exporter', QUICKBOOKS_ONLINE_EXPORT_OUT_OF_POCKET_EXPENSES: 'Workspace_Accounting_Quickbooks_Online_Export_Out_Of_Pocket_Expenses', QUICKBOOKS_ONLINE_EXPORT_OUT_OF_POCKET_EXPENSES_SELECT: 'Workspace_Accounting_Quickbooks_Online_Export_Out_Of_Pocket_Expenses_Select', diff --git a/src/languages/en.ts b/src/languages/en.ts index d3ffbc9bb368f..3ff5d693441ff 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -1892,18 +1892,31 @@ export default { archive: 'Accounts receivable archive', // This is an account name that will come directly from QBO, so I don't know why we need a translation for it. It should take whatever the name of the account is in QBO. Leaving this note for CS. exportInvoicesDescription: 'Invoices will be exported to this account in QuickBooks Online.', exportCompanyCardsDescription: 'Set how company card purchases export to QuickBooks Online.', - creditCard: 'Credit Card', - debitCard: 'Debit Card', - vendorBill: 'Vendor Bill', + creditCard: 'Credit card', + debitCard: 'Debit card', + vendorBill: 'Vendor bill', + vendor: 'Vendor', + defaultVendor: 'Default vendor', + defaultVendorDescription: 'Set a default vendor that will apply to all credit card transactions upon export.', + debitCardDescription: + "We'll automatically match the merchant name on the debit card transaction to any corresponding vendors in QuickBooks. If no vendors exist, we'll create a 'Debit Card Misc.' vendor for association.", + creditCardDescription: + "We'll automatically match the merchant name on the credit card transaction to any corresponding vendors in QuickBooks. If no vendors exist, we'll create a 'Credit Card Misc.' vendor for association.", + vendorBillDescription: + "We'll create a single itemized vendor bill for each Expensify report, carrying the date of the last expense on the report. If this period is closed, we'll post to the 1st of the next open period. You can add the vendor bill to your A/P account of choice (below).", + debitCardAccountDescription: 'Debit card transactions will export to the bank account below.”', + creditCardAccountDescription: 'Credit card transactions will export to the bank account below.', + vendorBillAccountDescription: 'Select the vendor applied to all credit card transactions.', exportPreferredExporterNote: 'This can be any workspace admin, but must be a Domain Admin if you set different export accounts for individual company cards in Domain Settings.', exportPreferredExporterSubNote: 'Once set, the preferred exporter will see reports for export in their account.', exportOutOfPocketExpensesDescription: 'Set how out-of-pocket expenses export to QuickBooks Online.', exportVendorBillDescription: "We'll create a single itemized vendor bill for each Expensify report. If the period of the bill is closed, we'll post to the 1st of the next open period. You can add the vendor bill to your A/P account of choice (below).", check: 'Check', - accountsPayable: 'Accounts Payable', + accountsPayable: 'Accounts payable', + account: 'Account', accountsPayableDescription: 'This is your chosen A/P account, against which vendor bills for each report are created.', - journalEntry: 'Journal Entry', + journalEntry: 'Journal entry', optionBelow: 'Choose an option below:', vendorBillError: 'Vendor Bills are not available when locations are enabled. Please select a different export option.', checkError: 'Check is not available when locations are enabled. Please select a different export option.', diff --git a/src/languages/es.ts b/src/languages/es.ts index 0980ec5dcac52..da88d6caf62d2 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1921,6 +1921,19 @@ export default { optionBelow: 'Elija una opción a continuación:', creditCard: 'Tarjeta de crédito', vendorBill: 'Factura del proveedor', + account: 'Cuenta', + vendor: 'Proveedor', + defaultVendor: 'Proveedor predeterminado', + defaultVendorDescription: 'Establece un proveedor predeterminado que se aplicará a todas las transacciones con tarjeta de crédito al momento de exportarlas.', + debitCardAccountDescription: 'Las transacciones con tarjeta de débito se exportarán a la cuenta bancaria que aparece a continuación.”', + creditCardAccountDescription: 'Las transacciones con tarjeta de crédito se exportarán a la cuenta bancaria que aparece a continuación.', + vendorBillAccountDescription: 'Selecciona el proveedor que se aplicará a todas las transacciones con tarjeta de crédito.', + debitCardDescription: + "Automáticamente relacionaremos el nombre del comerciante de la transacción con tarjeta de débito con cualquier proveedor correspondiente en QuickBooks. Si no existen proveedores, crearemos un proveedor asociado 'Debit Card Misc.'.", + creditCardDescription: + "Automáticamente relacionaremos el nombre del comerciante de la transacción con tarjeta de crédito con cualquier proveedor correspondiente en QuickBooks. Si no existen proveedores, crearemos un proveedor asociado 'Credit Card Misc.'.", + vendorBillDescription: + 'Crearemos una única factura detallada con los proveedores por cada informe de Expensify, con fecha del último gasto en el informe. Si este período está cerrado, la publicaremos con fecha del día 1 del próximo período abierto. Puede añadir la factura del proveedor a la cuenta A/P de su elección (a continuación).', accountsPayable: 'Cuentas por pagar', accountsPayableDescription: 'Esta es la cuenta de cuentas por pagar elegida, contra la cual se crean las facturas de proveedores para cada informe.', companyCardsLocationEnabledDescription: diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx index c1ead29096b23..1b4894cc468a3 100644 --- a/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx +++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx @@ -256,12 +256,18 @@ const SettingsModalStackNavigator = createModalStackNavigator require('../../../../pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseAccountSelectPage').default as React.ComponentType, + [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_PAYABLE_SELECT]: () => + require('../../../../pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPayableSelectPage').default as React.ComponentType, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_EXPORT_OUT_OF_POCKET_EXPENSES]: () => require('../../../../pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseConfigurationPage').default as React.ComponentType, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_EXPORT_OUT_OF_POCKET_EXPENSES_SELECT]: () => require('../../../../pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseEntitySelectPage').default as React.ComponentType, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_SELECT]: () => - require('../../../../pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectPage').default as React.ComponentType, + require('@pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectPage').default as React.ComponentType, + [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_COMPANY_CARD_SELECT]: () => + require('../../../../pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectCardPage').default as React.ComponentType, + [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT]: () => + require('../../../../pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage').default as React.ComponentType, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_EXPORT_PREFERRED_EXPORTER]: () => require('../../../../pages/workspace/accounting/qbo/export/QuickbooksPreferredExporterConfigurationPage').default as React.ComponentType, [SCREENS.REIMBURSEMENT_ACCOUNT]: () => require('../../../../pages/ReimbursementAccount/ReimbursementAccountPage').default as React.ComponentType, diff --git a/src/libs/Navigation/linkingConfig/FULL_SCREEN_TO_RHP_MAPPING.ts b/src/libs/Navigation/linkingConfig/FULL_SCREEN_TO_RHP_MAPPING.ts index 5225408a36773..b2aa7ad35a055 100755 --- a/src/libs/Navigation/linkingConfig/FULL_SCREEN_TO_RHP_MAPPING.ts +++ b/src/libs/Navigation/linkingConfig/FULL_SCREEN_TO_RHP_MAPPING.ts @@ -28,8 +28,11 @@ const FULL_SCREEN_TO_RHP_MAPPING: Partial> = { SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_EXPORT, SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_EXPORT_DATE_SELECT, SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_EXPORT_INVOICE_ACCOUNT_SELECT, + SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_PAYABLE_SELECT, SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_EXPORT_OUT_OF_POCKET_EXPENSES_ACCOUNT_SELECT, + SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT, SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_SELECT, + SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_COMPANY_CARD_SELECT, SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_EXPORT_PREFERRED_EXPORTER, SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_EXPORT_OUT_OF_POCKET_EXPENSES, SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_EXPORT_OUT_OF_POCKET_EXPENSES_SELECT, diff --git a/src/libs/Navigation/linkingConfig/config.ts b/src/libs/Navigation/linkingConfig/config.ts index f309b19563e1a..629abc3384aad 100644 --- a/src/libs/Navigation/linkingConfig/config.ts +++ b/src/libs/Navigation/linkingConfig/config.ts @@ -277,6 +277,9 @@ const config: LinkingOptions['config'] = { [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_EXPORT]: {path: ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_EXPORT.route}, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_EXPORT_DATE_SELECT]: {path: ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_EXPORT_DATE_SELECT.route}, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_EXPORT_INVOICE_ACCOUNT_SELECT]: {path: ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_INVOICE_ACCOUNT_SELECT.route}, + [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_PAYABLE_SELECT]: { + path: ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_PAYABLE_SELECT.route, + }, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_EXPORT_OUT_OF_POCKET_EXPENSES_ACCOUNT_SELECT]: { path: ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_EXPORT_OUT_OF_POCKET_EXPENSES_ACCOUNT_SELECT.route, }, @@ -289,6 +292,12 @@ const config: LinkingOptions['config'] = { [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_SELECT]: { path: ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_SELECT.route, }, + [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT]: { + path: ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT.route, + }, + [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_COMPANY_CARD_SELECT]: { + path: ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_SELECT.route, + }, [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_EXPORT_PREFERRED_EXPORTER]: {path: ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_PREFERRED_EXPORTER.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 87fad1064e755..5988aca59b179 100644 --- a/src/libs/Navigation/types.ts +++ b/src/libs/Navigation/types.ts @@ -286,6 +286,15 @@ type SettingsNavigatorParamList = { [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_SELECT]: { policyID: string; }; + [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT]: { + policyID: string; + }; + [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_COMPANY_CARD_SELECT]: { + policyID: string; + }; + [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_PAYABLE_SELECT]: { + policyID: string; + }; [SCREENS.WORKSPACE.ACCOUNTING.QUICKBOOKS_ONLINE_EXPORT_PREFERRED_EXPORTER]: { policyID: string; }; diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx new file mode 100644 index 0000000000000..ee1497ed3e601 --- /dev/null +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx @@ -0,0 +1,96 @@ +import React from 'react'; +import HeaderWithBackButton from '@components/HeaderWithBackButton'; +import MenuItemWithTopDescription from '@components/MenuItemWithTopDescription'; +import OfflineWithFeedback from '@components/OfflineWithFeedback'; +import ScreenWrapper from '@components/ScreenWrapper'; +import ScrollView from '@components/ScrollView'; +import Text from '@components/Text'; +import useLocalize from '@hooks/useLocalize'; +import useThemeStyles from '@hooks/useThemeStyles'; +import * as Connections from '@libs/actions/connections'; +import Navigation from '@navigation/Navigation'; +import AdminPolicyAccessOrNotFoundWrapper from '@pages/workspace/AdminPolicyAccessOrNotFoundWrapper'; +import FeatureEnabledAccessOrNotFoundWrapper from '@pages/workspace/FeatureEnabledAccessOrNotFoundWrapper'; +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 ROUTES from '@src/ROUTES'; + +function QuickbooksCompanyCardExpenseAccountPage({policy}: WithPolicyConnectionsProps) { + const {translate} = useLocalize(); + const styles = useThemeStyles(); + const policyID = policy?.id ?? ''; + const {exportCompanyCardAccount, exportAccountPayable, autoCreateVendor, errorFields, pendingFields, exportCompanyCard} = policy?.connections?.quickbooksOnline?.config ?? {}; + const isVendorSelected = exportCompanyCard === CONST.QUICKBOOKS_EXPORT_COMPANY_CARD.VENDOR_BILL; + return ( + + + + + + {translate('workspace.qbo.exportCompanyCardsDescription')} + + Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_SELECT.getRoute(policyID))} + brickRoadIndicator={errorFields?.exportCompanyCard ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined} + shouldShowRightIcon + /> + + {!!exportCompanyCard && ( + {translate(`workspace.qbo.${exportCompanyCard}Description`)} + )} + {isVendorSelected && ( + <> + + Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_PAYABLE_SELECT.getRoute(policyID))} + brickRoadIndicator={errorFields?.exportAccountPayable ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined} + shouldShowRightIcon + /> + + + Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.QBO, CONST.QUICK_BOOKS_CONFIG.AUTO_CREATE_VENDOR, isOn) + } + pendingAction={pendingFields?.autoCreateVendor} + /> + + )} + + Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_SELECT.getRoute(policyID))} + brickRoadIndicator={errorFields?.exportCompanyCardAccount ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined} + shouldShowRightIcon + error={errorFields?.exportCompanyCardAccount ? translate('common.genericErrorMessage') : undefined} + /> + + + + + + ); +} + +QuickbooksCompanyCardExpenseAccountPage.displayName = 'QuickbooksCompanyCardExpenseAccountPage'; + +export default withPolicyConnections(QuickbooksCompanyCardExpenseAccountPage); diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPayableSelectPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPayableSelectPage.tsx new file mode 100644 index 0000000000000..6e363d9980390 --- /dev/null +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPayableSelectPage.tsx @@ -0,0 +1,74 @@ +import React, {useCallback, useMemo} from 'react'; +import HeaderWithBackButton from '@components/HeaderWithBackButton'; +import ScreenWrapper from '@components/ScreenWrapper'; +import SelectionList from '@components/SelectionList'; +import RadioListItem from '@components/SelectionList/RadioListItem'; +import type {ListItem} from '@components/SelectionList/types'; +import Text from '@components/Text'; +import useLocalize from '@hooks/useLocalize'; +import useThemeStyles from '@hooks/useThemeStyles'; +import * as Connections from '@libs/actions/connections'; +import Navigation from '@navigation/Navigation'; +import AdminPolicyAccessOrNotFoundWrapper from '@pages/workspace/AdminPolicyAccessOrNotFoundWrapper'; +import FeatureEnabledAccessOrNotFoundWrapper from '@pages/workspace/FeatureEnabledAccessOrNotFoundWrapper'; +import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; +import withPolicyConnections from '@pages/workspace/withPolicyConnections'; +import CONST from '@src/CONST'; +import ROUTES from '@src/ROUTES'; + +type CardListItem = ListItem & { + value: string; +}; + +function QuickbooksCompanyCardExpenseAccountPayableSelectPage({policy}: WithPolicyConnectionsProps) { + const {translate} = useLocalize(); + const styles = useThemeStyles(); + const {accountsPayable} = policy?.connections?.quickbooksOnline?.data ?? {}; + const {exportAccountPayable} = policy?.connections?.quickbooksOnline?.config ?? {}; + + const policyID = policy?.id ?? ''; + const data: CardListItem[] = useMemo( + () => + accountsPayable?.map((account) => ({ + value: account.name, + text: account.name, + keyForList: account.name, + isSelected: account.name === exportAccountPayable, + })) ?? [], + [exportAccountPayable, accountsPayable], + ); + + const selectAccountPayable = useCallback( + (row: CardListItem) => { + if (row.value !== exportAccountPayable) { + Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.QBO, CONST.QUICK_BOOKS_CONFIG.EXPORT_ACCOUNT_PAYABLE, row.value); + } + Navigation.goBack(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT.getRoute(policyID)); + }, + [exportAccountPayable, policyID], + ); + + return ( + + + + + {translate('workspace.qbo.accountsPayableDescription')}} + sections={[{data}]} + ListItem={RadioListItem} + onSelectRow={selectAccountPayable} + initiallyFocusedOptionKey={data.find((mode) => mode.isSelected)?.keyForList} + /> + + + + ); +} + +QuickbooksCompanyCardExpenseAccountPayableSelectPage.displayName = 'QuickbooksCompanyCardExpenseAccountPayableSelectPage'; + +export default withPolicyConnections(QuickbooksCompanyCardExpenseAccountPayableSelectPage); diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectCardPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectCardPage.tsx new file mode 100644 index 0000000000000..00a82ddb424b2 --- /dev/null +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectCardPage.tsx @@ -0,0 +1,107 @@ +import React, {useCallback, useMemo} from 'react'; +import {View} from 'react-native'; +import type {SectionListData} from 'react-native'; +import type {ValueOf} from 'type-fest'; +import HeaderWithBackButton from '@components/HeaderWithBackButton'; +import ScreenWrapper from '@components/ScreenWrapper'; +import SelectionList from '@components/SelectionList'; +import RadioListItem from '@components/SelectionList/RadioListItem'; +import type {ListItem, Section} from '@components/SelectionList/types'; +import Text from '@components/Text'; +import useLocalize from '@hooks/useLocalize'; +import useThemeStyles from '@hooks/useThemeStyles'; +import * as Connections from '@libs/actions/connections'; +import Navigation from '@navigation/Navigation'; +import AdminPolicyAccessOrNotFoundWrapper from '@pages/workspace/AdminPolicyAccessOrNotFoundWrapper'; +import FeatureEnabledAccessOrNotFoundWrapper from '@pages/workspace/FeatureEnabledAccessOrNotFoundWrapper'; +import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; +import withPolicyConnections from '@pages/workspace/withPolicyConnections'; +import CONST from '@src/CONST'; +import ROUTES from '@src/ROUTES'; + +type CardListItem = ListItem & { + value: ValueOf; +}; +type CardsSection = SectionListData>; +type Card = {name: string; id: ValueOf}; + +function QuickbooksCompanyCardExpenseAccountSelectCardPage({policy}: WithPolicyConnectionsProps) { + const {translate} = useLocalize(); + const styles = useThemeStyles(); + const policyID = policy?.id ?? ''; + const {exportCompanyCard, syncLocations} = policy?.connections?.quickbooksOnline?.config ?? {}; + const isLocationEnabled = Boolean(syncLocations && syncLocations !== CONST.INTEGRATION_ENTITY_MAP_TYPES.NONE); + + const defaultCards = useMemo( + () => [ + { + name: translate(`workspace.qbo.creditCard`), + id: CONST.QUICKBOOKS_EXPORT_COMPANY_CARD.CREDIT_CARD, + }, + { + name: translate(`workspace.qbo.debitCard`), + id: CONST.QUICKBOOKS_EXPORT_COMPANY_CARD.DEBIT_CARD, + }, + { + name: translate(`workspace.qbo.vendorBill`), + id: CONST.QUICKBOOKS_EXPORT_COMPANY_CARD.VENDOR_BILL, + }, + ], + [translate], + ); + const cards = useMemo(() => (isLocationEnabled ? defaultCards.slice(0, -1) : defaultCards), [isLocationEnabled, defaultCards]); + + const data = useMemo( + () => + cards.map((card) => ({ + value: card.id, + text: card.name, + keyForList: card.name, + isSelected: card.id === exportCompanyCard, + })), + [cards, exportCompanyCard], + ); + + const sections = useMemo(() => [{data}], [data]); + + const selectExportCompanyCard = useCallback( + (row: CardListItem) => { + if (row.value !== exportCompanyCard) { + Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.QBO, CONST.QUICK_BOOKS_CONFIG.EXPORT_COMPANY_CARD, row.value); + Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.QBO, CONST.QUICK_BOOKS_CONFIG.EXPORT_COMPANY_CARD_ACCOUNT); + } + Navigation.goBack(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT.getRoute(policyID)); + }, + [exportCompanyCard, policyID], + ); + + return ( + + + + + + {translate('workspace.qbo.exportCompanyCardsDescription')}} + sections={sections} + ListItem={RadioListItem} + onSelectRow={selectExportCompanyCard} + initiallyFocusedOptionKey={data.find((mode) => mode.isSelected)?.keyForList} + footerContent={ + isLocationEnabled && {translate('workspace.qbo.companyCardsLocationEnabledDescription')} + } + /> + + + + + ); +} + +QuickbooksCompanyCardExpenseAccountSelectCardPage.displayName = 'QuickbooksCompanyCardExpenseAccountSelectCardPage'; + +export default withPolicyConnections(QuickbooksCompanyCardExpenseAccountSelectCardPage); diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectPage.tsx index d0f7b42d5f204..626ba45dea2c5 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectPage.tsx @@ -1,11 +1,9 @@ import React, {useCallback, useMemo} from 'react'; -import {View} from 'react-native'; -import type {SectionListData} from 'react-native'; import HeaderWithBackButton from '@components/HeaderWithBackButton'; import ScreenWrapper from '@components/ScreenWrapper'; import SelectionList from '@components/SelectionList'; import RadioListItem from '@components/SelectionList/RadioListItem'; -import type {ListItem, Section} from '@components/SelectionList/types'; +import type {ListItem} from '@components/SelectionList/types'; import Text from '@components/Text'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; @@ -13,61 +11,56 @@ import * as Connections from '@libs/actions/connections'; import Navigation from '@navigation/Navigation'; import AdminPolicyAccessOrNotFoundWrapper from '@pages/workspace/AdminPolicyAccessOrNotFoundWrapper'; import FeatureEnabledAccessOrNotFoundWrapper from '@pages/workspace/FeatureEnabledAccessOrNotFoundWrapper'; -import type {WithPolicyProps} from '@pages/workspace/withPolicy'; +import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; +import type {Account} from '@src/types/onyx/Policy'; type CardListItem = ListItem & { value: string; }; -type CardsSection = SectionListData>; -type Card = {name: string}; -function QuickbooksCompanyCardExpenseAccountSelectPage({policy}: WithPolicyProps) { +function QuickbooksCompanyCardExpenseAccountSelectPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); - const {exportCompanyCard, syncLocations} = policy?.connections?.quickbooksOnline?.config ?? {}; - const isLocationEnabled = Boolean(syncLocations && syncLocations !== CONST.INTEGRATION_ENTITY_MAP_TYPES.NONE); + const policyID = policy?.id ?? ''; + const {creditCards, vendors, bankAccounts} = policy?.connections?.quickbooksOnline?.data ?? {}; - const defaultCards = useMemo( - () => [ - { - name: translate(`workspace.qbo.creditCard`), - }, - { - name: translate(`workspace.qbo.debitCard`), - }, - { - name: translate(`workspace.qbo.vendorBill`), - }, - ], - [translate], - ); - const cards = useMemo(() => (isLocationEnabled ? defaultCards.slice(0, -1) : defaultCards), [isLocationEnabled, defaultCards]); + const {exportCompanyCardAccount, exportAccount, exportCompanyCard} = policy?.connections?.quickbooksOnline?.config ?? {}; - const data = useMemo( - () => - cards.map((card) => ({ - value: card.name, - text: card.name, - keyForList: card.name, - isSelected: card.name === exportCompanyCard, - })), - [cards, exportCompanyCard], - ); + const data: CardListItem[] = useMemo(() => { + let accounts: Account[]; + switch (exportCompanyCard) { + case CONST.QUICKBOOKS_EXPORT_COMPANY_CARD.CREDIT_CARD: + accounts = creditCards ?? []; + break; + case CONST.QUICKBOOKS_EXPORT_COMPANY_CARD.DEBIT_CARD: + accounts = bankAccounts ?? []; + break; + case CONST.QUICKBOOKS_EXPORT_ENTITY.VENDOR_BILL: + accounts = vendors ?? []; + break; + default: + accounts = []; + } - const sections = useMemo(() => [{data}], [data]); - const policyID = policy?.id ?? ''; + return accounts.map((card) => ({ + value: card.name, + text: card.name, + keyForList: card.name, + isSelected: card.name === exportCompanyCardAccount, + })); + }, [exportCompanyCardAccount, creditCards, bankAccounts, exportCompanyCard, vendors]); - const onSelectRow = useCallback( + const selectExportAccount = useCallback( (row: CardListItem) => { - if (row.value !== exportCompanyCard) { - Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.QBO, CONST.QUICK_BOOKS_CONFIG.EXPORT_COMPANY_CARD, row.value); + if (row.value !== exportAccount) { + Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.QBO, CONST.QUICK_BOOKS_CONFIG.EXPORT_COMPANY_CARD_ACCOUNT, row.value); } - Navigation.goBack(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_EXPORT.getRoute(policyID)); + Navigation.goBack(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT.getRoute(policyID)); }, - [exportCompanyCard, policyID], + [exportAccount, policyID], ); return ( @@ -77,20 +70,16 @@ function QuickbooksCompanyCardExpenseAccountSelectPage({policy}: WithPolicyProps featureName={CONST.POLICY.MORE_FEATURES.ARE_CONNECTIONS_ENABLED} > - - - {translate('workspace.qbo.exportCompanyCardsDescription')}} - sections={sections} - ListItem={RadioListItem} - onSelectRow={onSelectRow} - initiallyFocusedOptionKey={data.find((mode) => mode.isSelected)?.keyForList} - footerContent={ - isLocationEnabled && {translate('workspace.qbo.companyCardsLocationEnabledDescription')} - } - /> - + + {translate(`workspace.qbo.${exportCompanyCard}AccountDescription`)} : null} + sections={[{data}]} + ListItem={RadioListItem} + onSelectRow={selectExportAccount} + initiallyFocusedOptionKey={data.find((mode) => mode.isSelected)?.keyForList} + /> diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksExportConfigurationPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksExportConfigurationPage.tsx index cb025096edaf2..270b8004515e7 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksExportConfigurationPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksExportConfigurationPage.tsx @@ -13,7 +13,7 @@ import useThemeStyles from '@hooks/useThemeStyles'; import Navigation from '@navigation/Navigation'; import AdminPolicyAccessOrNotFoundWrapper from '@pages/workspace/AdminPolicyAccessOrNotFoundWrapper'; import FeatureEnabledAccessOrNotFoundWrapper from '@pages/workspace/FeatureEnabledAccessOrNotFoundWrapper'; -import type {WithPolicyProps} from '@pages/workspace/withPolicy'; +import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import * as Link from '@userActions/Link'; import CONST from '@src/CONST'; @@ -21,7 +21,7 @@ import ROUTES from '@src/ROUTES'; type MenuItem = MenuItemProps & {pendingAction?: OfflineWithFeedbackProps['pendingAction']}; -function QuickbooksExportConfigurationPage({policy}: WithPolicyProps) { +function QuickbooksExportConfigurationPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); const policyID = policy?.id ?? ''; @@ -62,9 +62,9 @@ function QuickbooksExportConfigurationPage({policy}: WithPolicyProps) { }, { description: translate('workspace.qbo.exportCompany'), - onPress: () => Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_SELECT.getRoute(policyID)), + onPress: () => Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT.getRoute(policyID)), brickRoadIndicator: errorFields?.exportCompanyCard ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined, - title: exportCompanyCard, + title: exportCompanyCard ? translate(`workspace.qbo.${exportCompanyCard}`) : undefined, pendingAction: pendingFields?.exportCompanyCard, error: errorFields?.exportCompanyCard ? translate('common.genericErrorMessage') : undefined, }, diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksExportDateSelectPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksExportDateSelectPage.tsx index 74509c9ec20a5..4e0e52f732b23 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksExportDateSelectPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksExportDateSelectPage.tsx @@ -12,7 +12,7 @@ import * as Connections from '@libs/actions/connections'; import Navigation from '@navigation/Navigation'; import AdminPolicyAccessOrNotFoundWrapper from '@pages/workspace/AdminPolicyAccessOrNotFoundWrapper'; import FeatureEnabledAccessOrNotFoundWrapper from '@pages/workspace/FeatureEnabledAccessOrNotFoundWrapper'; -import type {WithPolicyProps} from '@pages/workspace/withPolicy'; +import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -20,7 +20,7 @@ import ROUTES from '@src/ROUTES'; type CardListItem = ListItem & { value: ValueOf; }; -function QuickbooksExportDateSelectPage({policy}: WithPolicyProps) { +function QuickbooksExportDateSelectPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); const policyID = policy?.id ?? ''; @@ -33,7 +33,7 @@ function QuickbooksExportDateSelectPage({policy}: WithPolicyProps) { isSelected: exportDate === dateType, })); - const onSelectRow = useCallback( + const selectExportDate = useCallback( (row: CardListItem) => { if (row.value !== exportDate) { Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.QBO, CONST.QUICK_BOOKS_CONFIG.EXPORT_DATE, row.value); @@ -58,7 +58,7 @@ function QuickbooksExportDateSelectPage({policy}: WithPolicyProps) { headerContent={{translate('workspace.qbo.exportDateDescription')}} sections={[{data}]} ListItem={RadioListItem} - onSelectRow={onSelectRow} + onSelectRow={selectExportDate} initiallyFocusedOptionKey={data.find((mode) => mode.isSelected)?.keyForList} /> diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksExportInvoiceAccountSelectPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksExportInvoiceAccountSelectPage.tsx index 23763c5b9948f..3e334ce6eadf4 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksExportInvoiceAccountSelectPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksExportInvoiceAccountSelectPage.tsx @@ -11,7 +11,7 @@ import * as Connections from '@libs/actions/connections'; import Navigation from '@navigation/Navigation'; import AdminPolicyAccessOrNotFoundWrapper from '@pages/workspace/AdminPolicyAccessOrNotFoundWrapper'; import FeatureEnabledAccessOrNotFoundWrapper from '@pages/workspace/FeatureEnabledAccessOrNotFoundWrapper'; -import type {WithPolicyProps} from '@pages/workspace/withPolicy'; +import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -20,7 +20,7 @@ type CardListItem = ListItem & { value: string; }; -function QuickbooksExportInvoiceAccountSelectPage({policy}: WithPolicyProps) { +function QuickbooksExportInvoiceAccountSelectPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); const {accountsReceivable} = policy?.connections?.quickbooksOnline?.data ?? {}; @@ -38,7 +38,7 @@ function QuickbooksExportInvoiceAccountSelectPage({policy}: WithPolicyProps) { [exportInvoice, accountsReceivable], ); - const onSelectRow = useCallback( + const selectExportInvoice = useCallback( (row: CardListItem) => { if (row.value !== exportInvoice) { Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.QBO, CONST.QUICK_BOOKS_CONFIG.EXPORT_INVOICE, row.value); @@ -60,7 +60,7 @@ function QuickbooksExportInvoiceAccountSelectPage({policy}: WithPolicyProps) { headerContent={{translate('workspace.qbo.exportInvoicesDescription')}} sections={[{data}]} ListItem={RadioListItem} - onSelectRow={onSelectRow} + onSelectRow={selectExportInvoice} initiallyFocusedOptionKey={data.find((mode) => mode.isSelected)?.keyForList} /> diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseAccountSelectPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseAccountSelectPage.tsx index f2f238e3d9b31..a94c209a1bc06 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseAccountSelectPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseAccountSelectPage.tsx @@ -11,7 +11,7 @@ import * as Connections from '@libs/actions/connections'; import Navigation from '@navigation/Navigation'; import AdminPolicyAccessOrNotFoundWrapper from '@pages/workspace/AdminPolicyAccessOrNotFoundWrapper'; import FeatureEnabledAccessOrNotFoundWrapper from '@pages/workspace/FeatureEnabledAccessOrNotFoundWrapper'; -import type {WithPolicyProps} from '@pages/workspace/withPolicy'; +import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -21,7 +21,7 @@ type CardListItem = ListItem & { value: string; }; -function QuickbooksOutOfPocketExpenseAccountSelectPage({policy}: WithPolicyProps) { +function QuickbooksOutOfPocketExpenseAccountSelectPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); const {bankAccounts, journalEntryAccounts, accountsPayable} = policy?.connections?.quickbooksOnline?.data ?? {}; @@ -54,7 +54,7 @@ function QuickbooksOutOfPocketExpenseAccountSelectPage({policy}: WithPolicyProps const policyID = policy?.id ?? ''; - const onSelectRow = useCallback( + const selectExportAccount = useCallback( (row: CardListItem) => { if (row.value !== exportAccount) { Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.QBO, CONST.QUICK_BOOKS_CONFIG.EXPORT_ACCOUNT, row.value); @@ -76,7 +76,7 @@ function QuickbooksOutOfPocketExpenseAccountSelectPage({policy}: WithPolicyProps headerContent={{translate('workspace.qbo.accountsPayableDescription')}} sections={[{data}]} ListItem={RadioListItem} - onSelectRow={onSelectRow} + onSelectRow={selectExportAccount} initiallyFocusedOptionKey={data.find((mode) => mode.isSelected)?.keyForList} /> diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseConfigurationPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseConfigurationPage.tsx index 0dffef7474cea..e2748e4055d65 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseConfigurationPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseConfigurationPage.tsx @@ -10,12 +10,12 @@ import useThemeStyles from '@hooks/useThemeStyles'; import Navigation from '@navigation/Navigation'; import AdminPolicyAccessOrNotFoundWrapper from '@pages/workspace/AdminPolicyAccessOrNotFoundWrapper'; import FeatureEnabledAccessOrNotFoundWrapper from '@pages/workspace/FeatureEnabledAccessOrNotFoundWrapper'; -import type {WithPolicyProps} from '@pages/workspace/withPolicy'; +import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; -function QuickbooksOutOfPocketExpenseConfigurationPage({policy}: WithPolicyProps) { +function QuickbooksOutOfPocketExpenseConfigurationPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); const policyID = policy?.id ?? ''; diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseEntitySelectPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseEntitySelectPage.tsx index d0007d23ed5ab..5f2fe30aa5da6 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseEntitySelectPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksOutOfPocketExpenseEntitySelectPage.tsx @@ -14,7 +14,7 @@ import * as Connections from '@libs/actions/connections'; import Navigation from '@navigation/Navigation'; import AdminPolicyAccessOrNotFoundWrapper from '@pages/workspace/AdminPolicyAccessOrNotFoundWrapper'; import FeatureEnabledAccessOrNotFoundWrapper from '@pages/workspace/FeatureEnabledAccessOrNotFoundWrapper'; -import type {WithPolicyProps} from '@pages/workspace/withPolicy'; +import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -25,7 +25,7 @@ type CardListItem = ListItem & { }; type CardsSection = SectionListData>; -function QuickbooksOutOfPocketExpenseEntitySelectPage({policy}: WithPolicyProps) { +function QuickbooksOutOfPocketExpenseEntitySelectPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); const {exportEntity, syncTaxes, syncLocations} = policy?.connections?.quickbooksOnline?.config ?? {}; @@ -71,7 +71,7 @@ function QuickbooksOutOfPocketExpenseEntitySelectPage({policy}: WithPolicyProps) const sections: CardsSection[] = useMemo(() => [{data: data.filter((item) => item.isShown)}], [data]); - const onSelectRow = useCallback( + const selectExportEntity = useCallback( (row: CardListItem) => { if (row.value !== exportEntity) { Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.QBO, CONST.QUICK_BOOKS_CONFIG.EXPORT_ENTITY, row.value); @@ -98,7 +98,7 @@ function QuickbooksOutOfPocketExpenseEntitySelectPage({policy}: WithPolicyProps) headerContent={{translate('workspace.qbo.optionBelow')}} sections={sections} ListItem={RadioListItem} - onSelectRow={onSelectRow} + onSelectRow={selectExportEntity} initiallyFocusedOptionKey={data.find((mode) => mode.isSelected)?.keyForList} footerContent={isTaxesEnabled && {translate('workspace.qbo.outOfPocketTaxEnabledDescription')}} /> diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksPreferredExporterConfigurationPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksPreferredExporterConfigurationPage.tsx index a3d29b73427ce..9e0e9f4f494d4 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksPreferredExporterConfigurationPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksPreferredExporterConfigurationPage.tsx @@ -12,7 +12,7 @@ import {getAdminEmployees} from '@libs/PolicyUtils'; import Navigation from '@navigation/Navigation'; import AdminPolicyAccessOrNotFoundWrapper from '@pages/workspace/AdminPolicyAccessOrNotFoundWrapper'; import FeatureEnabledAccessOrNotFoundWrapper from '@pages/workspace/FeatureEnabledAccessOrNotFoundWrapper'; -import type {WithPolicyProps} from '@pages/workspace/withPolicy'; +import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -21,7 +21,7 @@ type CardListItem = ListItem & { value: string; }; -function QuickBooksExportPreferredExporterPage({policy}: WithPolicyProps) { +function QuickBooksExportPreferredExporterPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); const {exporter} = policy?.connections?.quickbooksOnline?.config ?? {}; @@ -44,7 +44,7 @@ function QuickBooksExportPreferredExporterPage({policy}: WithPolicyProps) { [exporter, exporters], ); - const onSelectRow = useCallback( + const selectExporter = useCallback( (row: CardListItem) => { if (row.value !== exporter) { Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.QBO, CONST.QUICK_BOOKS_CONFIG.PREFERRED_EXPORTER, row.value); @@ -71,7 +71,7 @@ function QuickBooksExportPreferredExporterPage({policy}: WithPolicyProps) { } sections={[{data}]} ListItem={RadioListItem} - onSelectRow={onSelectRow} + onSelectRow={selectExporter} initiallyFocusedOptionKey={data.find((mode) => mode.isSelected)?.keyForList} /> diff --git a/src/types/onyx/Policy.ts b/src/types/onyx/Policy.ts index 8a46485c64608..ef49608189463 100644 --- a/src/types/onyx/Policy.ts +++ b/src/types/onyx/Policy.ts @@ -171,6 +171,7 @@ type QBOConnectionConfig = OnyxCommon.OnyxValueWithOfflineFeedback<{ syncAccounts: IntegrationEntityMap; syncTaxes: IntegrationEntityMap; lastConfigurationTime: number; + exportCompanyCardAccount?: string; syncTax: boolean; enableNewCategories: IntegrationEntityMap; errors?: OnyxCommon.Errors; @@ -179,8 +180,10 @@ type QBOConnectionConfig = OnyxCommon.OnyxValueWithOfflineFeedback<{ outOfPocketExpenses: string; exportInvoice: string; exportAccount: string; + exportAccountPayable: string; + accountPayable: string; exportEntity?: ValueOf; - exportCompanyCard: string; + exportCompanyCard: ValueOf; errorFields?: OnyxCommon.ErrorFields; }>; type Connection = {