diff --git a/src/CONST.ts b/src/CONST.ts index 5be432e33fe54..7877f2a1f667c 100755 --- a/src/CONST.ts +++ b/src/CONST.ts @@ -2152,6 +2152,8 @@ const CONST = { NETSUITE_APPROVAL_ACCOUNT_DEFAULT: 'APPROVAL_ACCOUNT_DEFAULT', + NETSUITE_PAYABLE_ACCOUNT_DEFAULT_VALUE: '', + /** * Countries where tax setting is permitted (Strings are in the format of Netsuite's Country type/enum) * diff --git a/src/ROUTES.ts b/src/ROUTES.ts index e7d6990db8d5c..8d0366d04eba3 100644 --- a/src/ROUTES.ts +++ b/src/ROUTES.ts @@ -1881,7 +1881,12 @@ const ROUTES = { }, POLICY_ACCOUNTING_NETSUITE_EXPORT: { route: 'settings/workspaces/:policyID/connections/netsuite/export/', - getRoute: (policyID: string, backTo?: string) => getUrlWithBackToParam(`settings/workspaces/${policyID}/connections/netsuite/export/` as const, backTo, false), + getRoute: (policyID: string | undefined, backTo?: string) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_NETSUITE_EXPORT route'); + } + return getUrlWithBackToParam(`settings/workspaces/${policyID}/connections/netsuite/export/` as const, backTo, false); + }, }, POLICY_ACCOUNTING_NETSUITE_PREFERRED_EXPORTER_SELECT: { route: 'settings/workspaces/:policyID/connections/netsuite/export/preferred-exporter/select', @@ -1893,8 +1898,12 @@ const ROUTES = { }, POLICY_ACCOUNTING_NETSUITE_EXPORT_EXPENSES: { route: 'settings/workspaces/:policyID/connections/netsuite/export/expenses/:expenseType', - getRoute: (policyID: string, expenseType: ValueOf) => - `settings/workspaces/${policyID}/connections/netsuite/export/expenses/${expenseType as string}` as const, + getRoute: (policyID: string | undefined, expenseType: ValueOf) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_NETSUITE_EXPORT_EXPENSES route'); + } + return `settings/workspaces/${policyID}/connections/netsuite/export/expenses/${expenseType as string}` as const; + }, }, POLICY_ACCOUNTING_NETSUITE_EXPORT_EXPENSES_DESTINATION_SELECT: { route: 'settings/workspaces/:policyID/connections/netsuite/export/expenses/:expenseType/destination/select', @@ -1922,11 +1931,21 @@ const ROUTES = { }, POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT: { route: 'settings/workspaces/:policyID/connections/netsuite/export/invoice-item-preference/select', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/connections/netsuite/export/invoice-item-preference/select` as const, + getRoute: (policyID: string | undefined) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT route'); + } + return `settings/workspaces/${policyID}/connections/netsuite/export/invoice-item-preference/select` as const; + }, }, POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_SELECT: { route: 'settings/workspaces/:policyID/connections/netsuite/export/invoice-item-preference/invoice-item/select', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/connections/netsuite/export/invoice-item-preference/invoice-item/select` as const, + getRoute: (policyID: string | undefined) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_SELECT route'); + } + return `settings/workspaces/${policyID}/connections/netsuite/export/invoice-item-preference/invoice-item/select` as const; + }, }, POLICY_ACCOUNTING_NETSUITE_TAX_POSTING_ACCOUNT_SELECT: { route: 'settings/workspaces/:policyID/connections/netsuite/export/tax-posting-account/select', @@ -1938,7 +1957,12 @@ const ROUTES = { }, POLICY_ACCOUNTING_NETSUITE_ADVANCED: { route: 'settings/workspaces/:policyID/connections/netsuite/advanced/', - getRoute: (policyID: string) => `settings/workspaces/${policyID}/connections/netsuite/advanced/` as const, + getRoute: (policyID: string | undefined) => { + if (!policyID) { + Log.warn('Invalid policyID is used to build the POLICY_ACCOUNTING_NETSUITE_ADVANCED route'); + } + return `settings/workspaces/${policyID}/connections/netsuite/advanced/` as const; + }, }, POLICY_ACCOUNTING_NETSUITE_REIMBURSEMENT_ACCOUNT_SELECT: { route: 'settings/workspaces/:policyID/connections/netsuite/advanced/reimbursement-account/select', diff --git a/src/components/ConnectionLayout.tsx b/src/components/ConnectionLayout.tsx index c7bc37e38e3e2..de61f368a9118 100644 --- a/src/components/ConnectionLayout.tsx +++ b/src/components/ConnectionLayout.tsx @@ -2,13 +2,14 @@ import isEmpty from 'lodash/isEmpty'; import React, {useMemo} from 'react'; import type {StyleProp, TextStyle, ViewStyle} from 'react-native'; import {View} from 'react-native'; +import {useOnyx} from 'react-native-onyx'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; import Navigation from '@libs/Navigation/Navigation'; -import {getPolicy} from '@libs/PolicyUtils'; import type {AccessVariant} from '@pages/workspace/AccessOrNotFoundWrapper'; import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper'; import type {TranslationPaths} from '@src/languages/types'; +import ONYXKEYS from '@src/ONYXKEYS'; import type {ConnectionName, PolicyFeatureName} from '@src/types/onyx/Policy'; import HeaderWithBackButton from './HeaderWithBackButton'; import ScreenWrapper from './ScreenWrapper'; @@ -106,7 +107,7 @@ function ConnectionLayout({ }: ConnectionLayoutProps) { const {translate} = useLocalize(); - const policy = getPolicy(policyID); + const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`); const isConnectionEmpty = isEmpty(policy?.connections?.[connectionName]); const renderSelectionContent = useMemo( diff --git a/src/components/SelectionScreen.tsx b/src/components/SelectionScreen.tsx index 59532361e42df..dbeb829d7573b 100644 --- a/src/components/SelectionScreen.tsx +++ b/src/components/SelectionScreen.tsx @@ -1,12 +1,13 @@ import isEmpty from 'lodash/isEmpty'; import React from 'react'; import type {StyleProp, ViewStyle} from 'react-native'; +import {useOnyx} from 'react-native-onyx'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import {getPolicy} from '@libs/PolicyUtils'; import type {AccessVariant} from '@pages/workspace/AccessOrNotFoundWrapper'; import AccessOrNotFoundWrapper from '@pages/workspace/AccessOrNotFoundWrapper'; import type {TranslationPaths} from '@src/languages/types'; +import ONYXKEYS from '@src/ONYXKEYS'; import type * as OnyxCommon from '@src/types/onyx/OnyxCommon'; import type {ConnectionName, PolicyFeatureName} from '@src/types/onyx/Policy'; import type {ReceiptErrors} from '@src/types/onyx/Transaction'; @@ -142,7 +143,7 @@ function SelectionScreen({ const {translate} = useLocalize(); const styles = useThemeStyles(); - const policy = getPolicy(policyID); + const [policy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`); const isConnectionEmpty = isEmpty(policy?.connections?.[connectionName]); return ( diff --git a/src/libs/PolicyUtils.ts b/src/libs/PolicyUtils.ts index 97a33beac0b43..8c202f3194ee0 100644 --- a/src/libs/PolicyUtils.ts +++ b/src/libs/PolicyUtils.ts @@ -799,7 +799,7 @@ function findSelectedTaxAccountWithDefaultSelect(taxAccounts: NetSuiteTaxAccount } function getNetSuiteVendorOptions(policy: Policy | undefined, selectedVendorId: string | undefined): SelectorType[] { - const vendors = policy?.connections?.netsuite.options.data.vendors; + const vendors = policy?.connections?.netsuite?.options.data.vendors; const selectedVendor = findSelectedVendorWithDefaultSelect(vendors, selectedVendorId); @@ -812,7 +812,7 @@ function getNetSuiteVendorOptions(policy: Policy | undefined, selectedVendorId: } function getNetSuitePayableAccountOptions(policy: Policy | undefined, selectedBankAccountId: string | undefined): SelectorType[] { - const payableAccounts = policy?.connections?.netsuite.options.data.payableList; + const payableAccounts = policy?.connections?.netsuite?.options.data.payableList; const selectedPayableAccount = findSelectedBankAccountWithDefaultSelect(payableAccounts, selectedBankAccountId); @@ -825,7 +825,7 @@ function getNetSuitePayableAccountOptions(policy: Policy | undefined, selectedBa } function getNetSuiteReceivableAccountOptions(policy: Policy | undefined, selectedBankAccountId: string | undefined): SelectorType[] { - const receivableAccounts = policy?.connections?.netsuite.options.data.receivableList; + const receivableAccounts = policy?.connections?.netsuite?.options.data.receivableList; const selectedReceivableAccount = findSelectedBankAccountWithDefaultSelect(receivableAccounts, selectedBankAccountId); @@ -838,7 +838,7 @@ function getNetSuiteReceivableAccountOptions(policy: Policy | undefined, selecte } function getNetSuiteInvoiceItemOptions(policy: Policy | undefined, selectedItemId: string | undefined): SelectorType[] { - const invoiceItems = policy?.connections?.netsuite.options.data.items; + const invoiceItems = policy?.connections?.netsuite?.options.data.items; const selectedInvoiceItem = findSelectedInvoiceItemWithDefaultSelect(invoiceItems, selectedItemId); @@ -851,7 +851,7 @@ function getNetSuiteInvoiceItemOptions(policy: Policy | undefined, selectedItemI } function getNetSuiteTaxAccountOptions(policy: Policy | undefined, subsidiaryCountry?: string, selectedAccountId?: string): SelectorType[] { - const taxAccounts = policy?.connections?.netsuite.options.data.taxAccountsList; + const taxAccounts = policy?.connections?.netsuite?.options.data.taxAccountsList; const accountOptions = (taxAccounts ?? []).filter(({country}) => country === subsidiaryCountry); const selectedTaxAccount = findSelectedTaxAccountWithDefaultSelect(accountOptions, selectedAccountId); @@ -877,7 +877,7 @@ function getFilteredReimbursableAccountOptions(payableAccounts: NetSuiteAccount[ } function getNetSuiteReimbursableAccountOptions(policy: Policy | undefined, selectedBankAccountId: string | undefined): SelectorType[] { - const payableAccounts = policy?.connections?.netsuite.options.data.payableList; + const payableAccounts = policy?.connections?.netsuite?.options.data.payableList; const accountOptions = getFilteredReimbursableAccountOptions(payableAccounts); const selectedPayableAccount = findSelectedBankAccountWithDefaultSelect(accountOptions, selectedBankAccountId); @@ -895,7 +895,7 @@ function getFilteredCollectionAccountOptions(payableAccounts: NetSuiteAccount[] } function getNetSuiteCollectionAccountOptions(policy: Policy | undefined, selectedBankAccountId: string | undefined): SelectorType[] { - const payableAccounts = policy?.connections?.netsuite.options.data.payableList; + const payableAccounts = policy?.connections?.netsuite?.options.data.payableList; const accountOptions = getFilteredCollectionAccountOptions(payableAccounts); const selectedPayableAccount = findSelectedBankAccountWithDefaultSelect(accountOptions, selectedBankAccountId); @@ -913,7 +913,7 @@ function getFilteredApprovalAccountOptions(payableAccounts: NetSuiteAccount[] | } function getNetSuiteApprovalAccountOptions(policy: Policy | undefined, selectedBankAccountId: string | undefined): SelectorType[] { - const payableAccounts = policy?.connections?.netsuite.options.data.payableList; + const payableAccounts = policy?.connections?.netsuite?.options.data.payableList; const defaultApprovalAccount: NetSuiteAccount = { id: CONST.NETSUITE_APPROVAL_ACCOUNT_DEFAULT, name: translateLocal('workspace.netsuite.advancedConfig.defaultApprovalAccount'), diff --git a/src/libs/actions/Policy/Policy.ts b/src/libs/actions/Policy/Policy.ts index 21ea41bab8a8e..35d7ca7be3436 100644 --- a/src/libs/actions/Policy/Policy.ts +++ b/src/libs/actions/Policy/Policy.ts @@ -659,7 +659,10 @@ function clearXeroErrorField(policyID: string, fieldName: string) { Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {connections: {xero: {config: {errorFields: {[fieldName]: null}}}}}); } -function clearNetSuiteErrorField(policyID: string, fieldName: string) { +function clearNetSuiteErrorField(policyID: string | undefined, fieldName: string) { + if (!policyID) { + return; + } Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, {connections: {netsuite: {options: {config: {errorFields: {[fieldName]: null}}}}}}); } diff --git a/src/pages/workspace/accounting/netsuite/advanced/NetSuiteApprovalAccountSelectPage.tsx b/src/pages/workspace/accounting/netsuite/advanced/NetSuiteApprovalAccountSelectPage.tsx index 29df47e852c60..6b5c4fa4b0cf5 100644 --- a/src/pages/workspace/accounting/netsuite/advanced/NetSuiteApprovalAccountSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/advanced/NetSuiteApprovalAccountSelectPage.tsx @@ -8,14 +8,14 @@ import SelectionScreen from '@components/SelectionScreen'; import Text from '@components/Text'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as Connections from '@libs/actions/connections/NetSuiteCommands'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {updateNetSuiteApprovalAccount} from '@libs/actions/connections/NetSuiteCommands'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; import {getNetSuiteApprovalAccountOptions, settingsPendingAction} from '@libs/PolicyUtils'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import variables from '@styles/variables'; -import * as Policy from '@userActions/Policy/Policy'; +import {clearNetSuiteErrorField} from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -23,9 +23,9 @@ function NetSuiteApprovalAccountSelectPage({policy}: WithPolicyConnectionsProps) const styles = useThemeStyles(); const {translate} = useLocalize(); - const policyID = policy?.id ?? '-1'; + const policyID = policy?.id; - const config = policy?.connections?.netsuite.options.config; + const config = policy?.connections?.netsuite?.options.config; const netsuiteApprovalAccountOptions = useMemo( () => getNetSuiteApprovalAccountOptions(policy ?? undefined, config?.approvalAccount), // The default option will be language dependent, so we need to recompute the options when the language changes @@ -37,8 +37,8 @@ function NetSuiteApprovalAccountSelectPage({policy}: WithPolicyConnectionsProps) const updateCollectionAccount = useCallback( ({value}: SelectorType) => { - if (config?.approvalAccount !== value) { - Connections.updateNetSuiteApprovalAccount(policyID, value, config?.approvalAccount ?? CONST.NETSUITE_APPROVAL_ACCOUNT_DEFAULT); + if (config?.approvalAccount !== value && policyID) { + updateNetSuiteApprovalAccount(policyID, value, config?.approvalAccount ?? CONST.NETSUITE_APPROVAL_ACCOUNT_DEFAULT); } Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_ADVANCED.getRoute(policyID)); }, @@ -84,9 +84,9 @@ function NetSuiteApprovalAccountSelectPage({policy}: WithPolicyConnectionsProps) listEmptyContent={listEmptyContent} connectionName={CONST.POLICY.CONNECTIONS.NAME.NETSUITE} pendingAction={settingsPendingAction([CONST.NETSUITE_CONFIG.APPROVAL_ACCOUNT], config?.pendingFields)} - errors={ErrorUtils.getLatestErrorField(config, CONST.NETSUITE_CONFIG.APPROVAL_ACCOUNT)} + errors={getLatestErrorField(config, CONST.NETSUITE_CONFIG.APPROVAL_ACCOUNT)} errorRowStyles={[styles.ph5, styles.pv3]} - onClose={() => Policy.clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.APPROVAL_ACCOUNT)} + onClose={() => clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.APPROVAL_ACCOUNT)} /> ); } diff --git a/src/pages/workspace/accounting/netsuite/advanced/NetSuiteCollectionAccountSelectPage.tsx b/src/pages/workspace/accounting/netsuite/advanced/NetSuiteCollectionAccountSelectPage.tsx index 6062ee3ca175c..c30cc207d6a8b 100644 --- a/src/pages/workspace/accounting/netsuite/advanced/NetSuiteCollectionAccountSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/advanced/NetSuiteCollectionAccountSelectPage.tsx @@ -8,14 +8,14 @@ import SelectionScreen from '@components/SelectionScreen'; import Text from '@components/Text'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as Connections from '@libs/actions/connections/NetSuiteCommands'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {updateNetSuiteCollectionAccount} from '@libs/actions/connections/NetSuiteCommands'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; import {getNetSuiteCollectionAccountOptions, settingsPendingAction} from '@libs/PolicyUtils'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import variables from '@styles/variables'; -import * as Policy from '@userActions/Policy/Policy'; +import {clearNetSuiteErrorField} from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -23,9 +23,9 @@ function NetSuiteCollectionAccountSelectPage({policy}: WithPolicyConnectionsProp const styles = useThemeStyles(); const {translate} = useLocalize(); - const policyID = policy?.id ?? '-1'; + const policyID = policy?.id; - const config = policy?.connections?.netsuite.options.config; + const config = policy?.connections?.netsuite?.options.config; const netsuiteCollectionAccountOptions = useMemo( () => getNetSuiteCollectionAccountOptions(policy ?? undefined, config?.collectionAccount), [config?.collectionAccount, policy], @@ -35,8 +35,8 @@ function NetSuiteCollectionAccountSelectPage({policy}: WithPolicyConnectionsProp const updateCollectionAccount = useCallback( ({value}: SelectorType) => { - if (config?.collectionAccount !== value) { - Connections.updateNetSuiteCollectionAccount(policyID, value, config?.collectionAccount); + if (config?.collectionAccount !== value && policyID) { + updateNetSuiteCollectionAccount(policyID, value, config?.collectionAccount); } Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_ADVANCED.getRoute(policyID)); }, @@ -83,9 +83,9 @@ function NetSuiteCollectionAccountSelectPage({policy}: WithPolicyConnectionsProp connectionName={CONST.POLICY.CONNECTIONS.NAME.NETSUITE} shouldBeBlocked={config?.reimbursableExpensesExportDestination === CONST.NETSUITE_EXPORT_DESTINATION.JOURNAL_ENTRY} pendingAction={settingsPendingAction([CONST.NETSUITE_CONFIG.COLLECTION_ACCOUNT], config?.pendingFields)} - errors={ErrorUtils.getLatestErrorField(config, CONST.NETSUITE_CONFIG.COLLECTION_ACCOUNT)} + errors={getLatestErrorField(config, CONST.NETSUITE_CONFIG.COLLECTION_ACCOUNT)} errorRowStyles={[styles.ph5, styles.pv3]} - onClose={() => Policy.clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.COLLECTION_ACCOUNT)} + onClose={() => clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.COLLECTION_ACCOUNT)} /> ); } diff --git a/src/pages/workspace/accounting/netsuite/advanced/NetSuiteExpenseReportApprovalLevelSelectPage.tsx b/src/pages/workspace/accounting/netsuite/advanced/NetSuiteExpenseReportApprovalLevelSelectPage.tsx index b475966f6f88c..89657df8fb81e 100644 --- a/src/pages/workspace/accounting/netsuite/advanced/NetSuiteExpenseReportApprovalLevelSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/advanced/NetSuiteExpenseReportApprovalLevelSelectPage.tsx @@ -8,13 +8,13 @@ import type {SelectorType} from '@components/SelectionScreen'; import Text from '@components/Text'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as Connections from '@libs/actions/connections/NetSuiteCommands'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {updateNetSuiteExportReportsTo} from '@libs/actions/connections/NetSuiteCommands'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import {settingsPendingAction} from '@libs/PolicyUtils'; import Navigation from '@navigation/Navigation'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; -import * as Policy from '@userActions/Policy/Policy'; +import {clearNetSuiteErrorField} from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -24,9 +24,9 @@ type MenuListItem = ListItem & { function NetSuiteExpenseReportApprovalLevelSelectPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); - const policyID = policy?.id ?? '-1'; + const policyID = policy?.id; const styles = useThemeStyles(); - const config = policy?.connections?.netsuite.options.config; + const config = policy?.connections?.netsuite?.options.config; const data: MenuListItem[] = Object.values(CONST.NETSUITE_REPORTS_APPROVAL_LEVEL).map((approvalType) => ({ value: approvalType, text: translate(`workspace.netsuite.advancedConfig.exportReportsTo.values.${approvalType}`), @@ -45,8 +45,8 @@ function NetSuiteExpenseReportApprovalLevelSelectPage({policy}: WithPolicyConnec const selectExpenseReportApprovalLevel = useCallback( (row: MenuListItem) => { - if (row.value !== config?.syncOptions.exportReportsTo) { - Connections.updateNetSuiteExportReportsTo(policyID, row.value, config?.syncOptions.exportReportsTo ?? CONST.NETSUITE_REPORTS_APPROVAL_LEVEL.REPORTS_APPROVED_NONE); + if (row.value !== config?.syncOptions.exportReportsTo && policyID) { + updateNetSuiteExportReportsTo(policyID, row.value, config?.syncOptions.exportReportsTo ?? CONST.NETSUITE_REPORTS_APPROVAL_LEVEL.REPORTS_APPROVED_NONE); } Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_ADVANCED.getRoute(policyID)); }, @@ -69,9 +69,9 @@ function NetSuiteExpenseReportApprovalLevelSelectPage({policy}: WithPolicyConnec connectionName={CONST.POLICY.CONNECTIONS.NAME.NETSUITE} shouldBeBlocked={config?.reimbursableExpensesExportDestination !== CONST.NETSUITE_EXPORT_DESTINATION.EXPENSE_REPORT} pendingAction={settingsPendingAction([CONST.NETSUITE_CONFIG.SYNC_OPTIONS.EXPORT_REPORTS_TO], config?.pendingFields)} - errors={ErrorUtils.getLatestErrorField(config, CONST.NETSUITE_CONFIG.SYNC_OPTIONS.EXPORT_REPORTS_TO)} + errors={getLatestErrorField(config, CONST.NETSUITE_CONFIG.SYNC_OPTIONS.EXPORT_REPORTS_TO)} errorRowStyles={[styles.ph5, styles.pv3]} - onClose={() => Policy.clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.SYNC_OPTIONS.EXPORT_REPORTS_TO)} + onClose={() => clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.SYNC_OPTIONS.EXPORT_REPORTS_TO)} /> ); } diff --git a/src/pages/workspace/accounting/netsuite/advanced/NetSuiteJournalEntryApprovalLevelSelectPage.tsx b/src/pages/workspace/accounting/netsuite/advanced/NetSuiteJournalEntryApprovalLevelSelectPage.tsx index dae2db4d191a2..deed3a4a86844 100644 --- a/src/pages/workspace/accounting/netsuite/advanced/NetSuiteJournalEntryApprovalLevelSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/advanced/NetSuiteJournalEntryApprovalLevelSelectPage.tsx @@ -8,13 +8,13 @@ import type {SelectorType} from '@components/SelectionScreen'; import Text from '@components/Text'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as Connections from '@libs/actions/connections/NetSuiteCommands'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {updateNetSuiteExportJournalsTo} from '@libs/actions/connections/NetSuiteCommands'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import {settingsPendingAction} from '@libs/PolicyUtils'; import Navigation from '@navigation/Navigation'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; -import * as Policy from '@userActions/Policy/Policy'; +import {clearNetSuiteErrorField} from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -24,9 +24,9 @@ type MenuListItem = ListItem & { function NetSuiteJournalEntryApprovalLevelSelectPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); - const policyID = policy?.id ?? '-1'; + const policyID = policy?.id; const styles = useThemeStyles(); - const config = policy?.connections?.netsuite.options.config; + const config = policy?.connections?.netsuite?.options.config; const data: MenuListItem[] = Object.values(CONST.NETSUITE_JOURNALS_APPROVAL_LEVEL).map((approvalType) => ({ value: approvalType, text: translate(`workspace.netsuite.advancedConfig.exportJournalsTo.values.${approvalType}`), @@ -45,8 +45,8 @@ function NetSuiteJournalEntryApprovalLevelSelectPage({policy}: WithPolicyConnect const selectJournalApprovalLevel = useCallback( (row: MenuListItem) => { - if (row.value !== config?.syncOptions.exportJournalsTo) { - Connections.updateNetSuiteExportJournalsTo(policyID, row.value, config?.syncOptions.exportJournalsTo ?? CONST.NETSUITE_JOURNALS_APPROVAL_LEVEL.JOURNALS_APPROVED_NONE); + if (row.value !== config?.syncOptions.exportJournalsTo && policyID) { + updateNetSuiteExportJournalsTo(policyID, row.value, config?.syncOptions.exportJournalsTo ?? CONST.NETSUITE_JOURNALS_APPROVAL_LEVEL.JOURNALS_APPROVED_NONE); } Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_ADVANCED.getRoute(policyID)); }, @@ -72,9 +72,9 @@ function NetSuiteJournalEntryApprovalLevelSelectPage({policy}: WithPolicyConnect config?.nonreimbursableExpensesExportDestination !== CONST.NETSUITE_EXPORT_DESTINATION.JOURNAL_ENTRY } pendingAction={settingsPendingAction([CONST.NETSUITE_CONFIG.SYNC_OPTIONS.EXPORT_JOURNALS_TO], config?.pendingFields)} - errors={ErrorUtils.getLatestErrorField(config, CONST.NETSUITE_CONFIG.SYNC_OPTIONS.EXPORT_JOURNALS_TO)} + errors={getLatestErrorField(config, CONST.NETSUITE_CONFIG.SYNC_OPTIONS.EXPORT_JOURNALS_TO)} errorRowStyles={[styles.ph5, styles.pv3]} - onClose={() => Policy.clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.SYNC_OPTIONS.EXPORT_JOURNALS_TO)} + onClose={() => clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.SYNC_OPTIONS.EXPORT_JOURNALS_TO)} /> ); } diff --git a/src/pages/workspace/accounting/netsuite/advanced/NetSuiteReimbursementAccountSelectPage.tsx b/src/pages/workspace/accounting/netsuite/advanced/NetSuiteReimbursementAccountSelectPage.tsx index 01fbfc8d437c5..f3bd0bb568b59 100644 --- a/src/pages/workspace/accounting/netsuite/advanced/NetSuiteReimbursementAccountSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/advanced/NetSuiteReimbursementAccountSelectPage.tsx @@ -8,14 +8,14 @@ import SelectionScreen from '@components/SelectionScreen'; import Text from '@components/Text'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as Connections from '@libs/actions/connections/NetSuiteCommands'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {updateNetSuiteReimbursementAccountID} from '@libs/actions/connections/NetSuiteCommands'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; import {getNetSuiteReimbursableAccountOptions, settingsPendingAction} from '@libs/PolicyUtils'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import variables from '@styles/variables'; -import * as Policy from '@userActions/Policy/Policy'; +import {clearNetSuiteErrorField} from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -23,9 +23,9 @@ function NetSuiteReimbursementAccountSelectPage({policy}: WithPolicyConnectionsP const styles = useThemeStyles(); const {translate} = useLocalize(); - const policyID = policy?.id ?? '-1'; + const policyID = policy?.id; - const config = policy?.connections?.netsuite.options.config; + const config = policy?.connections?.netsuite?.options.config; const netsuiteReimbursableAccountOptions = useMemo( () => getNetSuiteReimbursableAccountOptions(policy ?? undefined, config?.reimbursementAccountID), [config?.reimbursementAccountID, policy], @@ -35,8 +35,8 @@ function NetSuiteReimbursementAccountSelectPage({policy}: WithPolicyConnectionsP const updateReimbursementAccount = useCallback( ({value}: SelectorType) => { - if (config?.reimbursementAccountID !== value) { - Connections.updateNetSuiteReimbursementAccountID(policyID, value, config?.reimbursementAccountID); + if (config?.reimbursementAccountID !== value && policyID) { + updateNetSuiteReimbursementAccountID(policyID, value, config?.reimbursementAccountID); } Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_ADVANCED.getRoute(policyID)); }, @@ -83,9 +83,9 @@ function NetSuiteReimbursementAccountSelectPage({policy}: WithPolicyConnectionsP connectionName={CONST.POLICY.CONNECTIONS.NAME.NETSUITE} shouldBeBlocked={config?.reimbursableExpensesExportDestination === CONST.NETSUITE_EXPORT_DESTINATION.JOURNAL_ENTRY} pendingAction={settingsPendingAction([CONST.NETSUITE_CONFIG.REIMBURSEMENT_ACCOUNT_ID], config?.pendingFields)} - errors={ErrorUtils.getLatestErrorField(config, CONST.NETSUITE_CONFIG.REIMBURSEMENT_ACCOUNT_ID)} + errors={getLatestErrorField(config, CONST.NETSUITE_CONFIG.REIMBURSEMENT_ACCOUNT_ID)} errorRowStyles={[styles.ph5, styles.pv3]} - onClose={() => Policy.clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.REIMBURSEMENT_ACCOUNT_ID)} + onClose={() => clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.REIMBURSEMENT_ACCOUNT_ID)} /> ); } diff --git a/src/pages/workspace/accounting/netsuite/advanced/NetSuiteVendorBillApprovalLevelSelectPage.tsx b/src/pages/workspace/accounting/netsuite/advanced/NetSuiteVendorBillApprovalLevelSelectPage.tsx index 5a1cfe0797eb6..7eec35af5c3bb 100644 --- a/src/pages/workspace/accounting/netsuite/advanced/NetSuiteVendorBillApprovalLevelSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/advanced/NetSuiteVendorBillApprovalLevelSelectPage.tsx @@ -8,13 +8,13 @@ import type {SelectorType} from '@components/SelectionScreen'; import Text from '@components/Text'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as Connections from '@libs/actions/connections/NetSuiteCommands'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {updateNetSuiteExportVendorBillsTo} from '@libs/actions/connections/NetSuiteCommands'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import {settingsPendingAction} from '@libs/PolicyUtils'; import Navigation from '@navigation/Navigation'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; -import * as Policy from '@userActions/Policy/Policy'; +import {clearNetSuiteErrorField} from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -24,9 +24,9 @@ type MenuListItem = ListItem & { function NetSuiteVendorBillApprovalLevelSelectPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); - const policyID = policy?.id ?? '-1'; + const policyID = policy?.id; const styles = useThemeStyles(); - const config = policy?.connections?.netsuite.options.config; + const config = policy?.connections?.netsuite?.options.config; const data: MenuListItem[] = Object.values(CONST.NETSUITE_VENDOR_BILLS_APPROVAL_LEVEL).map((approvalType) => ({ value: approvalType, text: translate(`workspace.netsuite.advancedConfig.exportVendorBillsTo.values.${approvalType}`), @@ -45,12 +45,8 @@ function NetSuiteVendorBillApprovalLevelSelectPage({policy}: WithPolicyConnectio const selectVendorBillApprovalLevel = useCallback( (row: MenuListItem) => { - if (row.value !== config?.syncOptions.exportVendorBillsTo) { - Connections.updateNetSuiteExportVendorBillsTo( - policyID, - row.value, - config?.syncOptions.exportVendorBillsTo ?? CONST.NETSUITE_VENDOR_BILLS_APPROVAL_LEVEL.VENDOR_BILLS_APPROVED_NONE, - ); + if (row.value !== config?.syncOptions.exportVendorBillsTo && policyID) { + updateNetSuiteExportVendorBillsTo(policyID, row.value, config?.syncOptions.exportVendorBillsTo ?? CONST.NETSUITE_VENDOR_BILLS_APPROVAL_LEVEL.VENDOR_BILLS_APPROVED_NONE); } Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_ADVANCED.getRoute(policyID)); }, @@ -76,9 +72,9 @@ function NetSuiteVendorBillApprovalLevelSelectPage({policy}: WithPolicyConnectio config?.nonreimbursableExpensesExportDestination !== CONST.NETSUITE_EXPORT_DESTINATION.VENDOR_BILL } pendingAction={settingsPendingAction([CONST.NETSUITE_CONFIG.SYNC_OPTIONS.EXPORT_VENDOR_BILLS_TO], config?.pendingFields)} - errors={ErrorUtils.getLatestErrorField(config, CONST.NETSUITE_CONFIG.SYNC_OPTIONS.EXPORT_VENDOR_BILLS_TO)} + errors={getLatestErrorField(config, CONST.NETSUITE_CONFIG.SYNC_OPTIONS.EXPORT_VENDOR_BILLS_TO)} errorRowStyles={[styles.ph5, styles.pv3]} - onClose={() => Policy.clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.SYNC_OPTIONS.EXPORT_VENDOR_BILLS_TO)} + onClose={() => clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.SYNC_OPTIONS.EXPORT_VENDOR_BILLS_TO)} /> ); } diff --git a/src/pages/workspace/accounting/netsuite/export/NetSuiteDateSelectPage.tsx b/src/pages/workspace/accounting/netsuite/export/NetSuiteDateSelectPage.tsx index ce65db5212572..94f01ac5086fd 100644 --- a/src/pages/workspace/accounting/netsuite/export/NetSuiteDateSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/export/NetSuiteDateSelectPage.tsx @@ -8,13 +8,13 @@ import type {SelectorType} from '@components/SelectionScreen'; import Text from '@components/Text'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as Connections from '@libs/actions/connections/NetSuiteCommands'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {updateNetSuiteExportDate} from '@libs/actions/connections/NetSuiteCommands'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import {settingsPendingAction} from '@libs/PolicyUtils'; import Navigation from '@navigation/Navigation'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; -import * as Policy from '@userActions/Policy/Policy'; +import {clearNetSuiteErrorField} from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -24,9 +24,9 @@ type MenuListItem = ListItem & { function NetSuiteDateSelectPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); - const policyID = policy?.id ?? '-1'; + const policyID = policy?.id; const styles = useThemeStyles(); - const config = policy?.connections?.netsuite.options.config; + const config = policy?.connections?.netsuite?.options.config; const selectedValue = Object.values(CONST.NETSUITE_EXPORT_DATE).find((value) => value === config?.exportDate) ?? CONST.NETSUITE_EXPORT_DATE.LAST_EXPENSE; const data: MenuListItem[] = Object.values(CONST.NETSUITE_EXPORT_DATE).map((dateType) => ({ value: dateType, @@ -47,8 +47,8 @@ function NetSuiteDateSelectPage({policy}: WithPolicyConnectionsProps) { const selectExportDate = useCallback( (row: MenuListItem) => { - if (row.value !== config?.exportDate) { - Connections.updateNetSuiteExportDate(policyID, row.value, config?.exportDate); + if (row.value !== config?.exportDate && policyID) { + updateNetSuiteExportDate(policyID, row.value, config?.exportDate); } Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT.getRoute(policyID)); }, @@ -70,9 +70,9 @@ function NetSuiteDateSelectPage({policy}: WithPolicyConnectionsProps) { onBackButtonPress={() => Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT.getRoute(policyID))} connectionName={CONST.POLICY.CONNECTIONS.NAME.NETSUITE} pendingAction={settingsPendingAction([CONST.NETSUITE_CONFIG.EXPORT_DATE], config?.pendingFields)} - errors={ErrorUtils.getLatestErrorField(config, CONST.NETSUITE_CONFIG.EXPORT_DATE)} + errors={getLatestErrorField(config, CONST.NETSUITE_CONFIG.EXPORT_DATE)} errorRowStyles={[styles.ph5, styles.pv3]} - onClose={() => Policy.clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.EXPORT_DATE)} + onClose={() => clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.EXPORT_DATE)} /> ); } diff --git a/src/pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesDestinationSelectPage.tsx b/src/pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesDestinationSelectPage.tsx index 403f6b6a192d4..e8ee20d81e24c 100644 --- a/src/pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesDestinationSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesDestinationSelectPage.tsx @@ -7,15 +7,15 @@ import SelectionScreen from '@components/SelectionScreen'; import type {SelectorType} from '@components/SelectionScreen'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as Connections from '@libs/actions/connections/NetSuiteCommands'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {updateNetSuiteNonReimbursableExpensesExportDestination, updateNetSuiteReimbursableExpensesExportDestination} from '@libs/actions/connections/NetSuiteCommands'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import {settingsPendingAction} from '@libs/PolicyUtils'; import Navigation from '@navigation/Navigation'; import type {ExpenseRouteParams} from '@pages/workspace/accounting/netsuite/types'; import {exportExpensesDestinationSettingName} from '@pages/workspace/accounting/netsuite/utils'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; -import * as Policy from '@userActions/Policy/Policy'; +import {clearNetSuiteErrorField} from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -26,8 +26,8 @@ type MenuListItem = ListItem & { function NetSuiteExportExpensesDestinationSelectPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); - const policyID = policy?.id ?? '-1'; - const config = policy?.connections?.netsuite.options.config; + const policyID = policy?.id; + const config = policy?.connections?.netsuite?.options.config; const route = useRoute(); const params = route.params as ExpenseRouteParams; @@ -45,11 +45,11 @@ function NetSuiteExportExpensesDestinationSelectPage({policy}: WithPolicyConnect const selectDestination = useCallback( (row: MenuListItem) => { - if (row.value !== currentDestination) { + if (row.value !== currentDestination && policyID) { if (isReimbursable) { - Connections.updateNetSuiteReimbursableExpensesExportDestination(policyID, row.value, currentDestination ?? CONST.NETSUITE_EXPORT_DESTINATION.EXPENSE_REPORT); + updateNetSuiteReimbursableExpensesExportDestination(policyID, row.value, currentDestination ?? CONST.NETSUITE_EXPORT_DESTINATION.EXPENSE_REPORT); } else { - Connections.updateNetSuiteNonReimbursableExpensesExportDestination(policyID, row.value, currentDestination ?? CONST.NETSUITE_EXPORT_DESTINATION.VENDOR_BILL); + updateNetSuiteNonReimbursableExpensesExportDestination(policyID, row.value, currentDestination ?? CONST.NETSUITE_EXPORT_DESTINATION.VENDOR_BILL); } } Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT_EXPENSES.getRoute(policyID, params.expenseType)); @@ -71,9 +71,9 @@ function NetSuiteExportExpensesDestinationSelectPage({policy}: WithPolicyConnect onBackButtonPress={() => Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT_EXPENSES.getRoute(policyID, params.expenseType))} connectionName={CONST.POLICY.CONNECTIONS.NAME.NETSUITE} pendingAction={settingsPendingAction([currentSettingName], config?.pendingFields)} - errors={ErrorUtils.getLatestErrorField(config, currentSettingName)} + errors={getLatestErrorField(config, currentSettingName)} errorRowStyles={[styles.ph5, styles.pv3]} - onClose={() => Policy.clearNetSuiteErrorField(policyID, currentSettingName)} + onClose={() => clearNetSuiteErrorField(policyID, currentSettingName)} /> ); } diff --git a/src/pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesJournalPostingPreferenceSelectPage.tsx b/src/pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesJournalPostingPreferenceSelectPage.tsx index f381bdfec3bec..b356de783d720 100644 --- a/src/pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesJournalPostingPreferenceSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesJournalPostingPreferenceSelectPage.tsx @@ -7,14 +7,14 @@ import SelectionScreen from '@components/SelectionScreen'; import type {SelectorType} from '@components/SelectionScreen'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as Connections from '@libs/actions/connections/NetSuiteCommands'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {updateNetSuiteJournalPostingPreference} from '@libs/actions/connections/NetSuiteCommands'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import {settingsPendingAction} from '@libs/PolicyUtils'; import Navigation from '@navigation/Navigation'; import type {ExpenseRouteParams} from '@pages/workspace/accounting/netsuite/types'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; -import * as Policy from '@userActions/Policy/Policy'; +import {clearNetSuiteErrorField} from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -25,8 +25,8 @@ type MenuListItem = ListItem & { function NetSuiteExportExpensesJournalPostingPreferenceSelectPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); - const policyID = policy?.id ?? '-1'; - const config = policy?.connections?.netsuite.options.config; + const policyID = policy?.id; + const config = policy?.connections?.netsuite?.options.config; const route = useRoute(); const params = route.params as ExpenseRouteParams; @@ -45,8 +45,8 @@ function NetSuiteExportExpensesJournalPostingPreferenceSelectPage({policy}: With const selectPostingPreference = useCallback( (row: MenuListItem) => { - if (row.value !== config?.journalPostingPreference) { - Connections.updateNetSuiteJournalPostingPreference(policyID, row.value, config?.journalPostingPreference); + if (row.value !== config?.journalPostingPreference && policyID) { + updateNetSuiteJournalPostingPreference(policyID, row.value, config?.journalPostingPreference); } Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT_EXPENSES.getRoute(policyID, params.expenseType)); }, @@ -72,9 +72,9 @@ function NetSuiteExportExpensesJournalPostingPreferenceSelectPage({policy}: With : config?.nonreimbursableExpensesExportDestination !== CONST.NETSUITE_EXPORT_DESTINATION.JOURNAL_ENTRY } pendingAction={settingsPendingAction([CONST.NETSUITE_CONFIG.JOURNAL_POSTING_PREFERENCE], config?.pendingFields)} - errors={ErrorUtils.getLatestErrorField(config, CONST.NETSUITE_CONFIG.JOURNAL_POSTING_PREFERENCE)} + errors={getLatestErrorField(config, CONST.NETSUITE_CONFIG.JOURNAL_POSTING_PREFERENCE)} errorRowStyles={[styles.ph5, styles.pv3]} - onClose={() => Policy.clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.JOURNAL_POSTING_PREFERENCE)} + onClose={() => clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.JOURNAL_POSTING_PREFERENCE)} /> ); } diff --git a/src/pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesPayableAccountSelectPage.tsx b/src/pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesPayableAccountSelectPage.tsx index 97e4707762816..7b4ab2a9f6911 100644 --- a/src/pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesPayableAccountSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesPayableAccountSelectPage.tsx @@ -7,15 +7,15 @@ import type {SelectorType} from '@components/SelectionScreen'; import SelectionScreen from '@components/SelectionScreen'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as Connections from '@libs/actions/connections/NetSuiteCommands'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {updateNetSuitePayableAcct, updateNetSuiteReimbursablePayableAccount} from '@libs/actions/connections/NetSuiteCommands'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; import {getNetSuitePayableAccountOptions, settingsPendingAction} from '@libs/PolicyUtils'; import type {ExpenseRouteParams} from '@pages/workspace/accounting/netsuite/types'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import variables from '@styles/variables'; -import * as Policy from '@userActions/Policy/Policy'; +import {clearNetSuiteErrorField} from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -23,26 +23,26 @@ function NetSuiteExportExpensesPayableAccountSelectPage({policy}: WithPolicyConn const styles = useThemeStyles(); const {translate} = useLocalize(); - const policyID = policy?.id ?? '-1'; + const policyID = policy?.id; const route = useRoute(); const params = route.params as ExpenseRouteParams; const isReimbursable = params.expenseType === CONST.NETSUITE_EXPENSE_TYPE.REIMBURSABLE; - const config = policy?.connections?.netsuite.options.config; + const config = policy?.connections?.netsuite?.options.config; const currentSettingName = isReimbursable ? CONST.NETSUITE_CONFIG.REIMBURSABLE_PAYABLE_ACCOUNT : CONST.NETSUITE_CONFIG.PAYABLE_ACCT; - const currentPayableAccountID = config?.[currentSettingName]; + const currentPayableAccountID = config?.[currentSettingName] ?? CONST.NETSUITE_PAYABLE_ACCOUNT_DEFAULT_VALUE; const netsuitePayableAccountOptions = useMemo(() => getNetSuitePayableAccountOptions(policy ?? undefined, currentPayableAccountID), [currentPayableAccountID, policy]); const initiallyFocusedOptionKey = useMemo(() => netsuitePayableAccountOptions?.find((mode) => mode.isSelected)?.keyForList, [netsuitePayableAccountOptions]); const updatePayableAccount = useCallback( ({value}: SelectorType) => { - if (currentPayableAccountID !== value) { + if (currentPayableAccountID !== value && policyID) { if (isReimbursable) { - Connections.updateNetSuiteReimbursablePayableAccount(policyID, value, currentPayableAccountID ?? ''); + updateNetSuiteReimbursablePayableAccount(policyID, value, currentPayableAccountID); } else { - Connections.updateNetSuitePayableAcct(policyID, value, currentPayableAccountID ?? ''); + updateNetSuitePayableAcct(policyID, value, currentPayableAccountID); } } Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT_EXPENSES.getRoute(policyID, params.expenseType)); @@ -84,9 +84,9 @@ function NetSuiteExportExpensesPayableAccountSelectPage({policy}: WithPolicyConn : config?.nonreimbursableExpensesExportDestination !== CONST.NETSUITE_EXPORT_DESTINATION.JOURNAL_ENTRY } pendingAction={settingsPendingAction([currentSettingName], config?.pendingFields)} - errors={ErrorUtils.getLatestErrorField(config, currentSettingName)} + errors={getLatestErrorField(config, currentSettingName)} errorRowStyles={[styles.ph5, styles.pv3]} - onClose={() => Policy.clearNetSuiteErrorField(policyID, currentSettingName)} + onClose={() => clearNetSuiteErrorField(policyID, currentSettingName)} /> ); } diff --git a/src/pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesVendorSelectPage.tsx b/src/pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesVendorSelectPage.tsx index 6f4cfe9817c33..8fea67a080ce8 100644 --- a/src/pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesVendorSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/export/NetSuiteExportExpensesVendorSelectPage.tsx @@ -7,15 +7,15 @@ import type {SelectorType} from '@components/SelectionScreen'; import SelectionScreen from '@components/SelectionScreen'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as Connections from '@libs/actions/connections/NetSuiteCommands'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {updateNetSuiteDefaultVendor} from '@libs/actions/connections/NetSuiteCommands'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; import {getNetSuiteVendorOptions, settingsPendingAction} from '@libs/PolicyUtils'; import type {ExpenseRouteParams} from '@pages/workspace/accounting/netsuite/types'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import variables from '@styles/variables'; -import * as Policy from '@userActions/Policy/Policy'; +import {clearNetSuiteErrorField} from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -23,21 +23,21 @@ function NetSuiteExportExpensesVendorSelectPage({policy}: WithPolicyConnectionsP const styles = useThemeStyles(); const {translate} = useLocalize(); - const policyID = policy?.id ?? '-1'; + const policyID = policy?.id; const route = useRoute(); const params = route.params as ExpenseRouteParams; const isReimbursable = params.expenseType === CONST.NETSUITE_EXPENSE_TYPE.REIMBURSABLE; - const config = policy?.connections?.netsuite.options.config; + const config = policy?.connections?.netsuite?.options.config; const netsuiteVendorOptions = useMemo(() => getNetSuiteVendorOptions(policy ?? undefined, config?.defaultVendor), [config?.defaultVendor, policy]); const initiallyFocusedOptionKey = useMemo(() => netsuiteVendorOptions?.find((mode) => mode.isSelected)?.keyForList, [netsuiteVendorOptions]); const updateDefaultVendor = useCallback( ({value}: SelectorType) => { - if (config?.defaultVendor !== value) { - Connections.updateNetSuiteDefaultVendor(policyID, value, config?.defaultVendor); + if (config?.defaultVendor !== value && policyID) { + updateNetSuiteDefaultVendor(policyID, value, config?.defaultVendor); } Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT_EXPENSES.getRoute(policyID, params.expenseType)); }, @@ -74,9 +74,9 @@ function NetSuiteExportExpensesVendorSelectPage({policy}: WithPolicyConnectionsP connectionName={CONST.POLICY.CONNECTIONS.NAME.NETSUITE} shouldBeBlocked={isReimbursable || config?.nonreimbursableExpensesExportDestination !== CONST.NETSUITE_EXPORT_DESTINATION.VENDOR_BILL} pendingAction={settingsPendingAction([CONST.NETSUITE_CONFIG.DEFAULT_VENDOR], config?.pendingFields)} - errors={ErrorUtils.getLatestErrorField(config, CONST.NETSUITE_CONFIG.DEFAULT_VENDOR)} + errors={getLatestErrorField(config, CONST.NETSUITE_CONFIG.DEFAULT_VENDOR)} errorRowStyles={[styles.ph5, styles.pv3]} - onClose={() => Policy.clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.DEFAULT_VENDOR)} + onClose={() => clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.DEFAULT_VENDOR)} /> ); } diff --git a/src/pages/workspace/accounting/netsuite/export/NetSuiteInvoiceItemPreferenceSelectPage.tsx b/src/pages/workspace/accounting/netsuite/export/NetSuiteInvoiceItemPreferenceSelectPage.tsx index f07edd7bd610b..bf2f1487fcd82 100644 --- a/src/pages/workspace/accounting/netsuite/export/NetSuiteInvoiceItemPreferenceSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/export/NetSuiteInvoiceItemPreferenceSelectPage.tsx @@ -10,13 +10,13 @@ import type {ListItem} from '@components/SelectionList/types'; import type {SelectorType} from '@components/SelectionScreen'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as Connections from '@libs/actions/connections/NetSuiteCommands'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {updateNetSuiteInvoiceItemPreference} from '@libs/actions/connections/NetSuiteCommands'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import {areSettingsInErrorFields, findSelectedInvoiceItemWithDefaultSelect, settingsPendingAction} from '@libs/PolicyUtils'; import Navigation from '@navigation/Navigation'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; -import * as Policy from '@userActions/Policy/Policy'; +import {clearNetSuiteErrorField} from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -27,10 +27,10 @@ type MenuListItem = ListItem & { function NetSuiteInvoiceItemPreferenceSelectPage({policy}: WithPolicyConnectionsProps) { const {translate} = useLocalize(); const styles = useThemeStyles(); - const policyID = policy?.id ?? '-1'; - const config = policy?.connections?.netsuite.options.config; + const policyID = policy?.id; + const config = policy?.connections?.netsuite?.options.config; - const {items} = policy?.connections?.netsuite.options.data ?? {}; + const {items} = policy?.connections?.netsuite?.options.data ?? {}; const selectedItem = useMemo(() => findSelectedInvoiceItemWithDefaultSelect(items, config?.invoiceItem), [items, config?.invoiceItem]); const selectedValue = Object.values(CONST.NETSUITE_INVOICE_ITEM_PREFERENCE).find((value) => value === config?.invoiceItemPreference) ?? CONST.NETSUITE_INVOICE_ITEM_PREFERENCE.CREATE; @@ -44,8 +44,8 @@ function NetSuiteInvoiceItemPreferenceSelectPage({policy}: WithPolicyConnections const selectInvoicePreference = useCallback( (row: MenuListItem) => { - if (row.value !== config?.invoiceItemPreference) { - Connections.updateNetSuiteInvoiceItemPreference(policyID, row.value, config?.invoiceItemPreference); + if (row.value !== config?.invoiceItemPreference && policyID) { + updateNetSuiteInvoiceItemPreference(policyID, row.value, config?.invoiceItemPreference); } if (row.value === CONST.NETSUITE_INVOICE_ITEM_PREFERENCE.CREATE) { Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT.getRoute(policyID)); @@ -70,9 +70,9 @@ function NetSuiteInvoiceItemPreferenceSelectPage({policy}: WithPolicyConnections > Policy.clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.INVOICE_ITEM_PREFERENCE)} + onClose={() => clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.INVOICE_ITEM_PREFERENCE)} style={[styles.flexGrow1, styles.flexShrink1]} contentContainerStyle={[styles.flexGrow1, styles.flexShrink1]} > diff --git a/src/pages/workspace/accounting/netsuite/export/NetSuiteInvoiceItemSelectPage.tsx b/src/pages/workspace/accounting/netsuite/export/NetSuiteInvoiceItemSelectPage.tsx index cfe0cdc89f934..cfa04f5ad81e2 100644 --- a/src/pages/workspace/accounting/netsuite/export/NetSuiteInvoiceItemSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/export/NetSuiteInvoiceItemSelectPage.tsx @@ -6,14 +6,14 @@ import type {SelectorType} from '@components/SelectionScreen'; import SelectionScreen from '@components/SelectionScreen'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as Connections from '@libs/actions/connections/NetSuiteCommands'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {updateNetSuiteInvoiceItem} from '@libs/actions/connections/NetSuiteCommands'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; import {getNetSuiteInvoiceItemOptions, settingsPendingAction} from '@libs/PolicyUtils'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import variables from '@styles/variables'; -import * as Policy from '@userActions/Policy/Policy'; +import {clearNetSuiteErrorField} from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -21,17 +21,17 @@ function NetSuiteInvoiceItemSelectPage({policy}: WithPolicyConnectionsProps) { const styles = useThemeStyles(); const {translate} = useLocalize(); - const policyID = policy?.id ?? '-1'; + const policyID = policy?.id; - const config = policy?.connections?.netsuite.options.config; + const config = policy?.connections?.netsuite?.options.config; const netsuiteInvoiceItemOptions = useMemo(() => getNetSuiteInvoiceItemOptions(policy ?? undefined, config?.invoiceItem), [config?.invoiceItem, policy]); const initiallyFocusedOptionKey = useMemo(() => netsuiteInvoiceItemOptions?.find((mode) => mode.isSelected)?.keyForList, [netsuiteInvoiceItemOptions]); const updateInvoiceItem = useCallback( ({value}: SelectorType) => { - if (config?.invoiceItem !== value) { - Connections.updateNetSuiteInvoiceItem(policyID, value, config?.invoiceItem); + if (config?.invoiceItem !== value && policyID) { + updateNetSuiteInvoiceItem(policyID, value, config?.invoiceItem); } Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_INVOICE_ITEM_PREFERENCE_SELECT.getRoute(policyID)); }, @@ -68,9 +68,9 @@ function NetSuiteInvoiceItemSelectPage({policy}: WithPolicyConnectionsProps) { connectionName={CONST.POLICY.CONNECTIONS.NAME.NETSUITE} shouldBeBlocked={config?.invoiceItemPreference !== CONST.NETSUITE_INVOICE_ITEM_PREFERENCE.SELECT} pendingAction={settingsPendingAction([CONST.NETSUITE_CONFIG.INVOICE_ITEM], config?.pendingFields)} - errors={ErrorUtils.getLatestErrorField(config, CONST.NETSUITE_CONFIG.INVOICE_ITEM)} + errors={getLatestErrorField(config, CONST.NETSUITE_CONFIG.INVOICE_ITEM)} errorRowStyles={[styles.ph5, styles.pv3]} - onClose={() => Policy.clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.INVOICE_ITEM)} + onClose={() => clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.INVOICE_ITEM)} /> ); } diff --git a/src/pages/workspace/accounting/netsuite/export/NetSuitePreferredExporterSelectPage.tsx b/src/pages/workspace/accounting/netsuite/export/NetSuitePreferredExporterSelectPage.tsx index 8e926995ec8eb..6900bf9104dee 100644 --- a/src/pages/workspace/accounting/netsuite/export/NetSuitePreferredExporterSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/export/NetSuitePreferredExporterSelectPage.tsx @@ -8,13 +8,13 @@ import Text from '@components/Text'; import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as Connections from '@libs/actions/connections/NetSuiteCommands'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {updateNetSuiteExporter} from '@libs/actions/connections/NetSuiteCommands'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import {getAdminEmployees, isExpensifyTeam, settingsPendingAction} from '@libs/PolicyUtils'; import Navigation from '@navigation/Navigation'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; -import * as Policy from '@userActions/Policy/Policy'; +import {clearNetSuiteErrorField} from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -23,14 +23,14 @@ type CardListItem = ListItem & { }; function NetSuitePreferredExporterSelectPage({policy}: WithPolicyConnectionsProps) { - const config = policy?.connections?.netsuite.options.config; + const config = policy?.connections?.netsuite?.options.config; const {translate} = useLocalize(); const styles = useThemeStyles(); const policyOwner = policy?.owner ?? ''; const exporters = getAdminEmployees(policy); const {login: currentUserLogin} = useCurrentUserPersonalDetails(); - const policyID = policy?.id ?? '-1'; + const policyID = policy?.id; const data: CardListItem[] = useMemo(() => { if (!isEmpty(policyOwner) && isEmpty(exporters)) { return [ @@ -65,8 +65,8 @@ function NetSuitePreferredExporterSelectPage({policy}: WithPolicyConnectionsProp const selectExporter = useCallback( (row: CardListItem) => { - if (row.value !== config?.exporter) { - Connections.updateNetSuiteExporter(policyID, row.value, config?.exporter ?? ''); + if (row.value !== config?.exporter && policyID) { + updateNetSuiteExporter(policyID, row.value, config?.exporter ?? ''); } Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT.getRoute(policyID)); }, @@ -98,9 +98,9 @@ function NetSuitePreferredExporterSelectPage({policy}: WithPolicyConnectionsProp title="workspace.accounting.preferredExporter" connectionName={CONST.POLICY.CONNECTIONS.NAME.NETSUITE} pendingAction={settingsPendingAction([CONST.NETSUITE_CONFIG.EXPORTER], config?.pendingFields)} - errors={ErrorUtils.getLatestErrorField(config, CONST.NETSUITE_CONFIG.EXPORTER)} + errors={getLatestErrorField(config, CONST.NETSUITE_CONFIG.EXPORTER)} errorRowStyles={[styles.ph5, styles.pv3]} - onClose={() => Policy.clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.EXPORTER)} + onClose={() => clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.EXPORTER)} /> ); } diff --git a/src/pages/workspace/accounting/netsuite/export/NetSuiteProvincialTaxPostingAccountSelectPage.tsx b/src/pages/workspace/accounting/netsuite/export/NetSuiteProvincialTaxPostingAccountSelectPage.tsx index b0edc94cede9d..3712f56ea63e3 100644 --- a/src/pages/workspace/accounting/netsuite/export/NetSuiteProvincialTaxPostingAccountSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/export/NetSuiteProvincialTaxPostingAccountSelectPage.tsx @@ -6,14 +6,14 @@ import type {SelectorType} from '@components/SelectionScreen'; import SelectionScreen from '@components/SelectionScreen'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as Connections from '@libs/actions/connections/NetSuiteCommands'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {updateNetSuiteProvincialTaxPostingAccount} from '@libs/actions/connections/NetSuiteCommands'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; import {canUseProvincialTaxNetSuite, getNetSuiteTaxAccountOptions, settingsPendingAction} from '@libs/PolicyUtils'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import variables from '@styles/variables'; -import * as Policy from '@userActions/Policy/Policy'; +import {clearNetSuiteErrorField} from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -21,9 +21,9 @@ function NetSuiteProvincialTaxPostingAccountSelectPage({policy}: WithPolicyConne const styles = useThemeStyles(); const {translate} = useLocalize(); - const policyID = policy?.id ?? '-1'; + const policyID = policy?.id; - const config = policy?.connections?.netsuite.options.config; + const config = policy?.connections?.netsuite?.options.config; const {subsidiaryList} = policy?.connections?.netsuite?.options?.data ?? {}; const selectedSubsidiary = useMemo(() => (subsidiaryList ?? []).find((subsidiary) => subsidiary.internalID === config?.subsidiaryID), [subsidiaryList, config?.subsidiaryID]); @@ -36,8 +36,8 @@ function NetSuiteProvincialTaxPostingAccountSelectPage({policy}: WithPolicyConne const updateTaxAccount = useCallback( ({value}: SelectorType) => { - if (config?.provincialTaxPostingAccount !== value) { - Connections.updateNetSuiteProvincialTaxPostingAccount(policyID, value, config?.provincialTaxPostingAccount); + if (config?.provincialTaxPostingAccount !== value && policyID) { + updateNetSuiteProvincialTaxPostingAccount(policyID, value, config?.provincialTaxPostingAccount); } Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT.getRoute(policyID)); }, @@ -74,9 +74,9 @@ function NetSuiteProvincialTaxPostingAccountSelectPage({policy}: WithPolicyConne connectionName={CONST.POLICY.CONNECTIONS.NAME.NETSUITE} shouldBeBlocked={!!config?.suiteTaxEnabled || !config?.syncOptions.syncTax || !canUseProvincialTaxNetSuite(selectedSubsidiary?.country)} pendingAction={settingsPendingAction([CONST.NETSUITE_CONFIG.PROVINCIAL_TAX_POSTING_ACCOUNT], config?.pendingFields)} - errors={ErrorUtils.getLatestErrorField(config, CONST.NETSUITE_CONFIG.PROVINCIAL_TAX_POSTING_ACCOUNT)} + errors={getLatestErrorField(config, CONST.NETSUITE_CONFIG.PROVINCIAL_TAX_POSTING_ACCOUNT)} errorRowStyles={[styles.ph5, styles.pv3]} - onClose={() => Policy.clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.PROVINCIAL_TAX_POSTING_ACCOUNT)} + onClose={() => clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.PROVINCIAL_TAX_POSTING_ACCOUNT)} /> ); } diff --git a/src/pages/workspace/accounting/netsuite/export/NetSuiteReceivableAccountSelectPage.tsx b/src/pages/workspace/accounting/netsuite/export/NetSuiteReceivableAccountSelectPage.tsx index 2bbd2fe37dc81..3766c326fabb5 100644 --- a/src/pages/workspace/accounting/netsuite/export/NetSuiteReceivableAccountSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/export/NetSuiteReceivableAccountSelectPage.tsx @@ -6,14 +6,14 @@ import type {SelectorType} from '@components/SelectionScreen'; import SelectionScreen from '@components/SelectionScreen'; import useLocalize from '@hooks/useLocalize'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as Connections from '@libs/actions/connections/NetSuiteCommands'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {updateNetSuiteReceivableAccount} from '@libs/actions/connections/NetSuiteCommands'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; import {getNetSuiteReceivableAccountOptions, settingsPendingAction} from '@libs/PolicyUtils'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import variables from '@styles/variables'; -import * as Policy from '@userActions/Policy/Policy'; +import {clearNetSuiteErrorField} from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -21,9 +21,9 @@ function NetSuiteReceivableAccountSelectPage({policy}: WithPolicyConnectionsProp const styles = useThemeStyles(); const {translate} = useLocalize(); - const policyID = policy?.id ?? '-1'; + const policyID = policy?.id; - const config = policy?.connections?.netsuite.options.config; + const config = policy?.connections?.netsuite?.options.config; const netsuiteReceivableAccountOptions = useMemo( () => getNetSuiteReceivableAccountOptions(policy ?? undefined, config?.receivableAccount), [config?.receivableAccount, policy], @@ -33,8 +33,8 @@ function NetSuiteReceivableAccountSelectPage({policy}: WithPolicyConnectionsProp const updateReceivableAccount = useCallback( ({value}: SelectorType) => { - if (config?.receivableAccount !== value) { - Connections.updateNetSuiteReceivableAccount(policyID, value, config?.receivableAccount); + if (config?.receivableAccount !== value && policyID) { + updateNetSuiteReceivableAccount(policyID, value, config?.receivableAccount); } Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT.getRoute(policyID)); }, @@ -70,9 +70,9 @@ function NetSuiteReceivableAccountSelectPage({policy}: WithPolicyConnectionsProp listEmptyContent={listEmptyContent} connectionName={CONST.POLICY.CONNECTIONS.NAME.NETSUITE} pendingAction={settingsPendingAction([CONST.NETSUITE_CONFIG.RECEIVABLE_ACCOUNT], config?.pendingFields)} - errors={ErrorUtils.getLatestErrorField(config, CONST.NETSUITE_CONFIG.RECEIVABLE_ACCOUNT)} + errors={getLatestErrorField(config, CONST.NETSUITE_CONFIG.RECEIVABLE_ACCOUNT)} errorRowStyles={[styles.ph5, styles.pv3]} - onClose={() => Policy.clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.RECEIVABLE_ACCOUNT)} + onClose={() => clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.RECEIVABLE_ACCOUNT)} /> ); } diff --git a/src/pages/workspace/accounting/netsuite/export/NetSuiteTaxPostingAccountSelectPage.tsx b/src/pages/workspace/accounting/netsuite/export/NetSuiteTaxPostingAccountSelectPage.tsx index 5d749a433606d..a7d4801c1b732 100644 --- a/src/pages/workspace/accounting/netsuite/export/NetSuiteTaxPostingAccountSelectPage.tsx +++ b/src/pages/workspace/accounting/netsuite/export/NetSuiteTaxPostingAccountSelectPage.tsx @@ -7,14 +7,14 @@ import SelectionScreen from '@components/SelectionScreen'; import useLocalize from '@hooks/useLocalize'; import usePermissions from '@hooks/usePermissions'; import useThemeStyles from '@hooks/useThemeStyles'; -import * as Connections from '@libs/actions/connections/NetSuiteCommands'; -import * as ErrorUtils from '@libs/ErrorUtils'; +import {updateNetSuiteTaxPostingAccount} from '@libs/actions/connections/NetSuiteCommands'; +import {getLatestErrorField} from '@libs/ErrorUtils'; import Navigation from '@libs/Navigation/Navigation'; import {canUseTaxNetSuite, getNetSuiteTaxAccountOptions, settingsPendingAction} from '@libs/PolicyUtils'; import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections'; import withPolicyConnections from '@pages/workspace/withPolicyConnections'; import variables from '@styles/variables'; -import * as Policy from '@userActions/Policy/Policy'; +import {clearNetSuiteErrorField} from '@userActions/Policy/Policy'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; @@ -23,9 +23,9 @@ function NetSuiteTaxPostingAccountSelectPage({policy}: WithPolicyConnectionsProp const {translate} = useLocalize(); const {canUseNetSuiteUSATax} = usePermissions(); - const policyID = policy?.id ?? '-1'; + const policyID = policy?.id; - const config = policy?.connections?.netsuite.options.config; + const config = policy?.connections?.netsuite?.options.config; const {subsidiaryList} = policy?.connections?.netsuite?.options?.data ?? {}; const selectedSubsidiary = useMemo(() => (subsidiaryList ?? []).find((subsidiary) => subsidiary.internalID === config?.subsidiaryID), [subsidiaryList, config?.subsidiaryID]); @@ -38,8 +38,8 @@ function NetSuiteTaxPostingAccountSelectPage({policy}: WithPolicyConnectionsProp const updateTaxAccount = useCallback( ({value}: SelectorType) => { - if (config?.taxPostingAccount !== value) { - Connections.updateNetSuiteTaxPostingAccount(policyID, value, config?.taxPostingAccount); + if (config?.taxPostingAccount !== value && policyID) { + updateNetSuiteTaxPostingAccount(policyID, value, config?.taxPostingAccount); } Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_EXPORT.getRoute(policyID)); }, @@ -76,9 +76,9 @@ function NetSuiteTaxPostingAccountSelectPage({policy}: WithPolicyConnectionsProp connectionName={CONST.POLICY.CONNECTIONS.NAME.NETSUITE} shouldBeBlocked={!!config?.suiteTaxEnabled || !config?.syncOptions.syncTax || !canUseTaxNetSuite(canUseNetSuiteUSATax, selectedSubsidiary?.country)} pendingAction={settingsPendingAction([CONST.NETSUITE_CONFIG.TAX_POSTING_ACCOUNT], config?.pendingFields)} - errors={ErrorUtils.getLatestErrorField(config, CONST.NETSUITE_CONFIG.TAX_POSTING_ACCOUNT)} + errors={getLatestErrorField(config, CONST.NETSUITE_CONFIG.TAX_POSTING_ACCOUNT)} errorRowStyles={[styles.ph5, styles.pv3]} - onClose={() => Policy.clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.TAX_POSTING_ACCOUNT)} + onClose={() => clearNetSuiteErrorField(policyID, CONST.NETSUITE_CONFIG.TAX_POSTING_ACCOUNT)} /> ); } diff --git a/src/pages/workspace/companyCards/utils.tsx b/src/pages/workspace/companyCards/utils.tsx index 6e33a1d781ddf..99e4ff7312717 100644 --- a/src/pages/workspace/companyCards/utils.tsx +++ b/src/pages/workspace/companyCards/utils.tsx @@ -155,7 +155,7 @@ function getExportMenuItem( switch (netSuiteConfig) { case CONST.NETSUITE_EXPORT_DESTINATION.VENDOR_BILL: { - const vendors = policy?.connections?.netsuite.options.data.vendors; + const vendors = policy?.connections?.netsuite?.options.data.vendors; // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing defaultAccount = config?.defaultVendor || vendors?.[0]?.id; isDefaultTitle = !!( @@ -177,7 +177,7 @@ function getExportMenuItem( break; } case CONST.NETSUITE_EXPORT_DESTINATION.JOURNAL_ENTRY: { - const payableAccounts = policy?.connections?.netsuite.options.data.payableList; + const payableAccounts = policy?.connections?.netsuite?.options.data.payableList; // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing defaultAccount = config?.payableAcct || payableAccounts?.[0]?.id; isDefaultTitle = !!(