From 3247123e08c67303902351d7c8b1b4482f6a15e1 Mon Sep 17 00:00:00 2001 From: Nicolay Arefyeu Date: Wed, 24 Apr 2024 17:34:21 +0300 Subject: [PATCH 01/12] Update Export Pages for Company Cards to include amendments --- src/CONST.ts | 8 ++ src/ROUTES.ts | 20 +++- src/SCREENS.ts | 5 +- src/languages/en.ts | 13 +++ src/languages/es.ts | 13 +++ .../ModalStackNavigators/index.tsx | 8 +- .../FULL_SCREEN_TO_RHP_MAPPING.ts | 3 + src/libs/Navigation/linkingConfig/config.ts | 9 ++ src/libs/Navigation/types.ts | 9 ++ ...uickbooksCompanyCardExpenseAccountPage.tsx | 104 +++++++++++++++++ ...anyCardExpenseAccountPayableSelectPage.tsx | 74 ++++++++++++ ...ompanyCardExpenseAccountSelectCardPage.tsx | 107 ++++++++++++++++++ ...oksCompanyCardExpenseAccountSelectPage.tsx | 93 +++++++-------- .../QuickbooksExportConfigurationPage.tsx | 4 +- src/types/onyx/Policy.ts | 5 +- 15 files changed, 414 insertions(+), 61 deletions(-) create mode 100644 src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx create mode 100644 src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPayableSelectPage.tsx create mode 100644 src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectCardPage.tsx 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..6d6070d95081f 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -1895,6 +1895,18 @@ export default { 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.', @@ -1902,6 +1914,7 @@ export default { "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', + account: 'Account', accountsPayableDescription: 'This is your chosen A/P account, against which vendor bills for each report are created.', journalEntry: 'Journal Entry', optionBelow: 'Choose an option below:', diff --git a/src/languages/es.ts b/src/languages/es.ts index 0980ec5dcac52..50d36b01595ec 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: 'Establezca un proveedor predeterminado que se aplicará a todas las transacciones con tarjeta de crédito al momento de la exportación.', + 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: 'Seleccione el proveedor aplicado a todas las transacciones con tarjeta de crédito.', + debitCardDescription: + "Automáticamente relacionaremos el nombre del comerciante en la transacción con tarjeta de débito con cualquier proveedor correspondiente en QuickBooks. Si no existen proveedores, crearemos una 'Tarjeta de débito miscelánea'. vendedor para asociación.", + creditCardDescription: + "Automáticamente relacionaremos el nombre del comerciante en la transacción con tarjeta de crédito con cualquier proveedor correspondiente en QuickBooks. Si no existen proveedores, crearemos una 'Tarjeta de crédito miscelánea'. vendedor para asociación.", + vendorBillDescription: + 'Crearemos una única factura de proveedor detallada para cada informe de Expensify, con la fecha del último gasto en el informe. Si este período está cerrado, publicaremos en el día 1 del próximo período abierto. Puede agregar 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..43fe2520f93cf --- /dev/null +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx @@ -0,0 +1,104 @@ +import React from 'react'; +import {View} from 'react-native'; +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 Switch from '@components/Switch'; +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 {WithPolicyProps} from '@pages/workspace/withPolicy'; +import withPolicyConnections from '@pages/workspace/withPolicyConnections'; +import variables from '@styles/variables'; +import CONST from '@src/CONST'; +import ROUTES from '@src/ROUTES'; + +function QuickbooksCompanyCardExpenseAccountPage({policy}: WithPolicyProps) { + 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={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={exportAccountPayable ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined} + shouldShowRightIcon + /> + + {translate('workspace.qbo.defaultVendorDescription')} + + + {translate('workspace.qbo.defaultVendor')} + + + + + Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.QBO, CONST.QUICK_BOOKS_CONFIG.AUTO_CREATE_VENDOR, isOn) + } + /> + + + + + )} + + 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..d393e75850c19 --- /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 {WithPolicyProps} from '@pages/workspace/withPolicy'; +import withPolicyConnections from '@pages/workspace/withPolicyConnections'; +import CONST from '@src/CONST'; +import ROUTES from '@src/ROUTES'; + +type CardListItem = ListItem & { + value: string; +}; + +function QuickbooksCompanyCardExpenseAccountPayableSelectPage({policy}: WithPolicyProps) { + 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 onSelectRow = 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={onSelectRow} + 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..1b0dd7aa9c67f --- /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 {WithPolicyProps} from '@pages/workspace/withPolicy'; +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}: WithPolicyProps) { + 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 onSelectRow = 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={onSelectRow} + 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..faf4186567490 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'; @@ -17,57 +15,52 @@ import type {WithPolicyProps} from '@pages/workspace/withPolicy'; 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) { 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( (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={onSelectRow} + 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..2a2ee446dc1b7 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksExportConfigurationPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksExportConfigurationPage.tsx @@ -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/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 = { From f83e4aa0a4617eab745ff73097a3e9eccd84f6e0 Mon Sep 17 00:00:00 2001 From: narefyev91 Date: Thu, 25 Apr 2024 13:55:45 +0300 Subject: [PATCH 02/12] Update src/languages/en.ts Co-authored-by: Tom Rhys Jones --- src/languages/en.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/en.ts b/src/languages/en.ts index 6d6070d95081f..58363f41cd310 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -1896,7 +1896,7 @@ export default { debitCard: 'Debit Card', vendorBill: 'Vendor Bill', vendor: 'Vendor', - defaultVendor: 'Default 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.", From b95efd4ed834c40b888ec84a9fbad1133b33eec4 Mon Sep 17 00:00:00 2001 From: narefyev91 Date: Thu, 25 Apr 2024 13:55:53 +0300 Subject: [PATCH 03/12] Update src/languages/en.ts Co-authored-by: Tom Rhys Jones --- src/languages/en.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/en.ts b/src/languages/en.ts index 58363f41cd310..76ba8fa7cef17 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -1892,7 +1892,7 @@ 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', + creditCard: 'Credit card', debitCard: 'Debit Card', vendorBill: 'Vendor Bill', vendor: 'Vendor', From b75a4f70bf012f7351091ab0a4a708c9c5a53657 Mon Sep 17 00:00:00 2001 From: narefyev91 Date: Thu, 25 Apr 2024 13:56:00 +0300 Subject: [PATCH 04/12] Update src/languages/en.ts Co-authored-by: Tom Rhys Jones --- src/languages/en.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/en.ts b/src/languages/en.ts index 76ba8fa7cef17..4daf15c582d4b 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -1893,7 +1893,7 @@ export default { 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', + debitCard: 'Debit card', vendorBill: 'Vendor Bill', vendor: 'Vendor', defaultVendor: 'Default vendor', From d40e480c52d2a36d858e43124b00707d2f27c161 Mon Sep 17 00:00:00 2001 From: narefyev91 Date: Thu, 25 Apr 2024 13:56:08 +0300 Subject: [PATCH 05/12] Update src/languages/en.ts Co-authored-by: Tom Rhys Jones --- src/languages/en.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/en.ts b/src/languages/en.ts index 4daf15c582d4b..700ef9c6216e8 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -1894,7 +1894,7 @@ export default { exportCompanyCardsDescription: 'Set how company card purchases export to QuickBooks Online.', creditCard: 'Credit card', debitCard: 'Debit card', - vendorBill: 'Vendor Bill', + vendorBill: 'Vendor bill', vendor: 'Vendor', defaultVendor: 'Default vendor', defaultVendorDescription: 'Set a default vendor that will apply to all credit card transactions upon export.', From d0071971914db3019a3d637d7663ff24efc15701 Mon Sep 17 00:00:00 2001 From: narefyev91 Date: Thu, 25 Apr 2024 14:15:48 +0300 Subject: [PATCH 06/12] Update src/languages/es.ts Co-authored-by: Rocio Perez-Cano --- src/languages/es.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/es.ts b/src/languages/es.ts index 50d36b01595ec..2a0e078bc21ed 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1924,7 +1924,7 @@ export default { account: 'Cuenta', vendor: 'Proveedor', defaultVendor: 'Proveedor predeterminado', - defaultVendorDescription: 'Establezca un proveedor predeterminado que se aplicará a todas las transacciones con tarjeta de crédito al momento de la exportación.', + 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: 'Seleccione el proveedor aplicado a todas las transacciones con tarjeta de crédito.', From bec07a360622073e47a0b6bf8b0c8d0f965a692b Mon Sep 17 00:00:00 2001 From: narefyev91 Date: Thu, 25 Apr 2024 14:15:58 +0300 Subject: [PATCH 07/12] Update src/languages/es.ts Co-authored-by: Rocio Perez-Cano --- src/languages/es.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/es.ts b/src/languages/es.ts index 2a0e078bc21ed..61e5932cd953d 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1927,7 +1927,7 @@ export default { 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: 'Seleccione el proveedor aplicado a todas las transacciones con tarjeta de crédito.', + vendorBillAccountDescription: 'Selecciona el proveedor que se aplicará a todas las transacciones con tarjeta de crédito.', debitCardDescription: "Automáticamente relacionaremos el nombre del comerciante en la transacción con tarjeta de débito con cualquier proveedor correspondiente en QuickBooks. Si no existen proveedores, crearemos una 'Tarjeta de débito miscelánea'. vendedor para asociación.", creditCardDescription: From c87b73c085e71a1f06842d827e1b7722519f56f5 Mon Sep 17 00:00:00 2001 From: narefyev91 Date: Thu, 25 Apr 2024 14:16:05 +0300 Subject: [PATCH 08/12] Update src/languages/es.ts Co-authored-by: Rocio Perez-Cano --- src/languages/es.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/es.ts b/src/languages/es.ts index 61e5932cd953d..169485bf6bfeb 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1933,7 +1933,7 @@ export default { creditCardDescription: "Automáticamente relacionaremos el nombre del comerciante en la transacción con tarjeta de crédito con cualquier proveedor correspondiente en QuickBooks. Si no existen proveedores, crearemos una 'Tarjeta de crédito miscelánea'. vendedor para asociación.", vendorBillDescription: - 'Crearemos una única factura de proveedor detallada para cada informe de Expensify, con la fecha del último gasto en el informe. Si este período está cerrado, publicaremos en el día 1 del próximo período abierto. Puede agregar la factura del proveedor a la cuenta A/P de su elección (a continuación).', + '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: From adbef5cff3049ead3507a69d81d2db7a7179e239 Mon Sep 17 00:00:00 2001 From: narefyev91 Date: Thu, 25 Apr 2024 14:16:20 +0300 Subject: [PATCH 09/12] Update src/languages/es.ts Co-authored-by: Rocio Perez-Cano --- src/languages/es.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/es.ts b/src/languages/es.ts index 169485bf6bfeb..a06d021ed2c4d 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1929,7 +1929,7 @@ export default { 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 en la transacción con tarjeta de débito con cualquier proveedor correspondiente en QuickBooks. Si no existen proveedores, crearemos una 'Tarjeta de débito miscelánea'. vendedor para asociación.", + "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 en la transacción con tarjeta de crédito con cualquier proveedor correspondiente en QuickBooks. Si no existen proveedores, crearemos una 'Tarjeta de crédito miscelánea'. vendedor para asociación.", vendorBillDescription: From 77add8053f401f39946ace9ee2cba82c68727e4f Mon Sep 17 00:00:00 2001 From: narefyev91 Date: Thu, 25 Apr 2024 14:16:30 +0300 Subject: [PATCH 10/12] Update src/languages/es.ts Co-authored-by: Rocio Perez-Cano --- src/languages/es.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/es.ts b/src/languages/es.ts index a06d021ed2c4d..da88d6caf62d2 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -1931,7 +1931,7 @@ export default { 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 en la transacción con tarjeta de crédito con cualquier proveedor correspondiente en QuickBooks. Si no existen proveedores, crearemos una 'Tarjeta de crédito miscelánea'. vendedor para asociación.", + "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', From ae980e8abc72e7b0bf2f7c9aa19bec33b40a4940 Mon Sep 17 00:00:00 2001 From: Nicolay Arefyeu Date: Thu, 25 Apr 2024 15:21:56 +0300 Subject: [PATCH 11/12] updates after review --- src/languages/en.ts | 4 +- ...uickbooksCompanyCardExpenseAccountPage.tsx | 40 ++++++++----------- ...anyCardExpenseAccountPayableSelectPage.tsx | 8 ++-- ...ompanyCardExpenseAccountSelectCardPage.tsx | 8 ++-- ...oksCompanyCardExpenseAccountSelectPage.tsx | 8 ++-- .../QuickbooksExportConfigurationPage.tsx | 4 +- .../export/QuickbooksExportDateSelectPage.tsx | 8 ++-- ...ickbooksExportInvoiceAccountSelectPage.tsx | 8 ++-- ...oksOutOfPocketExpenseAccountSelectPage.tsx | 8 ++-- ...oksOutOfPocketExpenseConfigurationPage.tsx | 4 +- ...ooksOutOfPocketExpenseEntitySelectPage.tsx | 8 ++-- ...ooksPreferredExporterConfigurationPage.tsx | 8 ++-- 12 files changed, 54 insertions(+), 62 deletions(-) diff --git a/src/languages/en.ts b/src/languages/en.ts index 700ef9c6216e8..3ff5d693441ff 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -1913,10 +1913,10 @@ export default { 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/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx index 43fe2520f93cf..6b2e81bf5fb5c 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx @@ -1,11 +1,9 @@ import React from 'react'; -import {View} from 'react-native'; 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 Switch from '@components/Switch'; import Text from '@components/Text'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; @@ -13,13 +11,13 @@ 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 variables from '@styles/variables'; +import ToggleSettingOptionRow from '@pages/workspace/workflows/ToggleSettingsOptionRow'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; -function QuickbooksCompanyCardExpenseAccountPage({policy}: WithPolicyProps) { +function QuickbooksCompanyCardExpenseAccountPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); const policyID = policy?.id ?? ''; @@ -44,7 +42,7 @@ function QuickbooksCompanyCardExpenseAccountPage({policy}: WithPolicyProps) { description={translate('workspace.qbo.exportCompany')} error={errorFields?.exportCompanyCard ? translate('common.genericErrorMessage') : undefined} onPress={() => Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_SELECT.getRoute(policyID))} - brickRoadIndicator={exportCompanyCard ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined} + brickRoadIndicator={errorFields?.exportCompanyCard ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined} shouldShowRightIcon /> @@ -59,27 +57,21 @@ function QuickbooksCompanyCardExpenseAccountPage({policy}: WithPolicyProps) { description={translate('workspace.qbo.accountsPayable')} error={errorFields?.exportAccountPayable ? translate('common.genericErrorMessage') : undefined} onPress={() => Navigation.navigate(ROUTES.POLICY_ACCOUNTING_QUICKBOOKS_ONLINE_COMPANY_CARD_EXPENSE_ACCOUNT_PAYABLE_SELECT.getRoute(policyID))} - brickRoadIndicator={exportAccountPayable ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined} + brickRoadIndicator={errorFields?.exportAccountPayable ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined} shouldShowRightIcon /> - {translate('workspace.qbo.defaultVendorDescription')} - - - {translate('workspace.qbo.defaultVendor')} - - - - - Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.QBO, CONST.QUICK_BOOKS_CONFIG.AUTO_CREATE_VENDOR, isOn) - } - /> - - - + + Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.QBO, CONST.QUICK_BOOKS_CONFIG.AUTO_CREATE_VENDOR, isOn) + } + pendingAction={pendingFields?.autoCreateVendor} + /> )} diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPayableSelectPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPayableSelectPage.tsx index d393e75850c19..6e363d9980390 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPayableSelectPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPayableSelectPage.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 QuickbooksCompanyCardExpenseAccountPayableSelectPage({policy}: WithPolicyProps) { +function QuickbooksCompanyCardExpenseAccountPayableSelectPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); const {accountsPayable} = policy?.connections?.quickbooksOnline?.data ?? {}; @@ -38,7 +38,7 @@ function QuickbooksCompanyCardExpenseAccountPayableSelectPage({policy}: WithPoli [exportAccountPayable, accountsPayable], ); - const onSelectRow = useCallback( + 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); @@ -60,7 +60,7 @@ function QuickbooksCompanyCardExpenseAccountPayableSelectPage({policy}: WithPoli headerContent={{translate('workspace.qbo.accountsPayableDescription')}} sections={[{data}]} ListItem={RadioListItem} - onSelectRow={onSelectRow} + onSelectRow={selectAccountPayable} initiallyFocusedOptionKey={data.find((mode) => mode.isSelected)?.keyForList} /> diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectCardPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectCardPage.tsx index 1b0dd7aa9c67f..00a82ddb424b2 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectCardPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectCardPage.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>; type Card = {name: string; id: ValueOf}; -function QuickbooksCompanyCardExpenseAccountSelectCardPage({policy}: WithPolicyProps) { +function QuickbooksCompanyCardExpenseAccountSelectCardPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); const policyID = policy?.id ?? ''; @@ -64,7 +64,7 @@ function QuickbooksCompanyCardExpenseAccountSelectCardPage({policy}: WithPolicyP const sections = useMemo(() => [{data}], [data]); - const onSelectRow = useCallback( + 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); @@ -89,7 +89,7 @@ function QuickbooksCompanyCardExpenseAccountSelectCardPage({policy}: WithPolicyP headerContent={{translate('workspace.qbo.exportCompanyCardsDescription')}} sections={sections} ListItem={RadioListItem} - onSelectRow={onSelectRow} + onSelectRow={selectExportCompanyCard} initiallyFocusedOptionKey={data.find((mode) => mode.isSelected)?.keyForList} footerContent={ isLocationEnabled && {translate('workspace.qbo.companyCardsLocationEnabledDescription')} diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectPage.tsx index faf4186567490..626ba45dea2c5 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountSelectPage.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 QuickbooksCompanyCardExpenseAccountSelectPage({policy}: WithPolicyProps) { +function QuickbooksCompanyCardExpenseAccountSelectPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); const policyID = policy?.id ?? ''; @@ -53,7 +53,7 @@ function QuickbooksCompanyCardExpenseAccountSelectPage({policy}: WithPolicyProps })); }, [exportCompanyCardAccount, creditCards, bankAccounts, exportCompanyCard, vendors]); - 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_COMPANY_CARD_ACCOUNT, row.value); @@ -77,7 +77,7 @@ function QuickbooksCompanyCardExpenseAccountSelectPage({policy}: WithPolicyProps headerContent={exportCompanyCard ? {translate(`workspace.qbo.${exportCompanyCard}AccountDescription`)} : null} sections={[{data}]} ListItem={RadioListItem} - onSelectRow={onSelectRow} + 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 2a2ee446dc1b7..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 ?? ''; 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} /> From 4e12cd88ff733f5b91aa2cec6077f5fcaaef5af0 Mon Sep 17 00:00:00 2001 From: Nicolay Arefyeu Date: Thu, 25 Apr 2024 15:37:48 +0300 Subject: [PATCH 12/12] Update Export Pages for Company Cards to include amendments --- .../qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx index 6b2e81bf5fb5c..ee1497ed3e601 100644 --- a/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx +++ b/src/pages/workspace/accounting/qbo/export/QuickbooksCompanyCardExpenseAccountPage.tsx @@ -65,7 +65,7 @@ function QuickbooksCompanyCardExpenseAccountPage({policy}: WithPolicyConnections subtitle={translate('workspace.qbo.defaultVendorDescription')} errors={errorFields?.autoCreateVendor ?? undefined} title={translate('workspace.qbo.defaultVendor')} - wrapperStyle={[styles.ph5, styles.mb3]} + wrapperStyle={[styles.ph5, styles.mb3, styles.mt1]} isActive={Boolean(autoCreateVendor)} onToggle={(isOn) => Connections.updatePolicyConnectionConfig(policyID, CONST.POLICY.CONNECTIONS.NAME.QBO, CONST.QUICK_BOOKS_CONFIG.AUTO_CREATE_VENDOR, isOn)