Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NetSuite QuickStart #55049

Draft
wants to merge 3 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions src/CONST.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2107,6 +2107,12 @@ const CONST = {
'_vietNam',
] as string[],

NSQS_EXPORT_DATE: {
LAST_EXPENSE: 'LAST_EXPENSE',
EXPORTED: 'EXPORTED',
SUBMITTED: 'SUBMITTED',
},

QUICKBOOKS_EXPORT_DATE: {
LAST_EXPENSE: 'LAST_EXPENSE',
REPORT_EXPORTED: 'REPORT_EXPORTED',
Expand Down Expand Up @@ -2589,17 +2595,20 @@ const CONST = {
QBD: 'quickbooksDesktop',
XERO: 'xero',
NETSUITE: 'netsuite',
NSQS: 'nsqs',
SAGE_INTACCT: 'intacct',
},
ROUTE: {
QBO: 'quickbooks-online',
XERO: 'xero',
NETSUITE: 'netsuite',
NSQS: 'netsuite-quickstart',
SAGE_INTACCT: 'sage-intacct',
QBD: 'quickbooks-desktop',
},
NAME_USER_FRIENDLY: {
netsuite: 'NetSuite',
nsqs: 'NetSuite QuickStart Edition',
quickbooksOnline: 'QuickBooks Online',
quickbooksDesktop: 'QuickBooks Desktop',
xero: 'Xero',
Expand All @@ -2613,6 +2622,7 @@ const CONST = {
"https://help.expensify.com/articles/expensify-classic/connections/sage-intacct/Sage-Intacct-Troubleshooting#:~:text=First%20make%20sure%20that%20you,your%20company's%20Web%20Services%20authorizations.",
netsuite:
'https://help.expensify.com/articles/expensify-classic/connections/netsuite/Netsuite-Troubleshooting#expensierror-ns0109-failed-to-login-to-netsuite-please-verify-your-credentials',
// s77rt: do we have a link for nsqs?
},
SYNC_STAGE_NAME: {
STARTING_IMPORT_QBO: 'startingImportQBO',
Expand Down Expand Up @@ -4999,6 +5009,7 @@ const CONST = {
quickbooksOnline: 'QuickBooks Online',
xero: 'Xero',
netsuite: 'NetSuite',
// s77rt: Do I need to add NSQS here?
intacct: 'Sage Intacct',
quickbooksDesktop: 'QuickBooks Desktop',
},
Expand Down
4 changes: 4 additions & 0 deletions src/ONYXKEYS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -708,6 +708,8 @@
NETSUITE_TOKEN_INPUT_FORM_DRAFT: 'netsuiteTokenInputFormDraft',
NETSUITE_CUSTOM_FORM_ID_FORM: 'netsuiteCustomFormIDForm',
NETSUITE_CUSTOM_FORM_ID_FORM_DRAFT: 'netsuiteCustomFormIDFormDraft',
NSQS_OAUTH2_FORM: 'nsqsOAuth2Form',
NSQS_OAUTH2_FORM_DRAFT: 'nsqsOAuth2FormDraft',
SAGE_INTACCT_DIMENSION_TYPE_FORM: 'sageIntacctDimensionTypeForm',
SAGE_INTACCT_DIMENSION_TYPE_FORM_DRAFT: 'sageIntacctDimensionTypeFormDraft',
SEARCH_ADVANCED_FILTERS_FORM: 'searchAdvancedFiltersForm',
Expand Down Expand Up @@ -817,6 +819,8 @@
[ONYXKEYS.FORMS.NETSUITE_CUSTOM_SEGMENT_ADD_FORM]: FormTypes.NetSuiteCustomFieldForm;
[ONYXKEYS.FORMS.NETSUITE_TOKEN_INPUT_FORM]: FormTypes.NetSuiteTokenInputForm;
[ONYXKEYS.FORMS.NETSUITE_CUSTOM_FORM_ID_FORM]: FormTypes.NetSuiteCustomFormIDForm;
[ONYXKEYS.FORMS.NSQS_OAUTH2_FORM]: FormTypes.NetSuiteQuickStartOAuth2Form;
[ONYXKEYS.FORMS.NSQS_OAUTH2_FORM_DRAFT]: FormTypes.NetSuiteQuickStartOAuth2Form;
[ONYXKEYS.FORMS.SAGE_INTACCT_DIMENSION_TYPE_FORM]: FormTypes.SageIntacctDimensionForm;
[ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM]: FormTypes.SearchAdvancedFiltersForm;
[ONYXKEYS.FORMS.TEXT_PICKER_MODAL_FORM]: FormTypes.TextPickerModalForm;
Expand Down Expand Up @@ -1059,7 +1063,7 @@
type MissingOnyxKeysError = `Error: Types don't match, OnyxKey type is missing: ${Exclude<AllOnyxKeys, OnyxKey>}`;
/** If this type errors, it means that the `OnyxKey` type is missing some keys. */
// eslint-disable-next-line @typescript-eslint/no-unused-vars
type AssertOnyxKeys = AssertTypesEqual<AllOnyxKeys, OnyxKey, MissingOnyxKeysError>;

Check failure on line 1066 in src/ONYXKEYS.ts

View workflow job for this annotation

GitHub Actions / typecheck

Type 'string' does not satisfy the constraint 'never'.

export default ONYXKEYS;
export type {OnyxCollectionKey, OnyxCollectionValuesMapping, OnyxFormDraftKey, OnyxFormKey, OnyxFormValuesMapping, OnyxKey, OnyxPagesKey, OnyxValueKey, OnyxValues};
49 changes: 49 additions & 0 deletions src/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1008,6 +1008,11 @@ const ROUTES = {
getRoute: (policyID: string, connection?: ValueOf<typeof CONST.POLICY.CONNECTIONS.ROUTE>) =>
`settings/workspaces/${policyID}/accounting/${connection as string}/card-reconciliation/account` as const,
},
WORKSPACE_ACCOUNTING_MULTI_CONNECTION_SELECTOR: {
route: 'settings/workspaces/:policyID/accounting/:connection/connection-selector',
getRoute: (policyID: string, connection?: ValueOf<typeof CONST.POLICY.CONNECTIONS.ROUTE>) =>
`settings/workspaces/${policyID}/accounting/${connection as string}/connection-selector` as const,
},
WORKSPACE_CATEGORIES: {
route: 'settings/workspaces/:policyID/categories',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/categories` as const,
Expand Down Expand Up @@ -1759,6 +1764,50 @@ const ROUTES = {
route: 'settings/workspaces/:policyID/connections/netsuite/advanced/autosync/accounting-method',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/connections/netsuite/advanced/autosync/accounting-method` as const,
},
POLICY_ACCOUNTING_NSQS_SETUP: {
route: 'settings/workspaces/:policyID/accounting/netsuite-quickstart/setup',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/netsuite-quickstart/setup` as const,
},
POLICY_ACCOUNTING_NSQS_IMPORT: {
route: 'settings/workspaces/:policyID/accounting/netsuite-quickstart/import',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/netsuite-quickstart/import` as const,
},
POLICY_ACCOUNTING_NSQS_IMPORT_CUSTOMERS: {
route: 'settings/workspaces/:policyID/accounting/netsuite-quickstart/import/customers',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/netsuite-quickstart/import/customers` as const,
},
POLICY_ACCOUNTING_NSQS_IMPORT_CUSTOMERS_DISPLAYED_AS: {
route: 'settings/workspaces/:policyID/accounting/netsuite-quickstart/import/customers/displayed-as',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/netsuite-quickstart/import/customers/displayed-as` as const,
},
POLICY_ACCOUNTING_NSQS_IMPORT_PROJECTS: {
route: 'settings/workspaces/:policyID/accounting/netsuite-quickstart/import/projects',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/netsuite-quickstart/import/projects` as const,
},
POLICY_ACCOUNTING_NSQS_IMPORT_PROJECTS_DISPLAYED_AS: {
route: 'settings/workspaces/:policyID/accounting/netsuite-quickstart/import/projects/displayed-as',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/netsuite-quickstart/import/projects/displayed-as` as const,
},
POLICY_ACCOUNTING_NSQS_EXPORT: {
route: 'settings/workspaces/:policyID/accounting/netsuite-quickstart/export',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/netsuite-quickstart/export` as const,
},
POLICY_ACCOUNTING_NSQS_EXPORT_PREFERRED_EXPORTER: {
route: 'settings/workspaces/:policyID/accounting/netsuite-quickstart/export/preferred-exporter',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/netsuite-quickstart/export/preferred-exporter` as const,
},
POLICY_ACCOUNTING_NSQS_EXPORT_DATE: {
route: 'settings/workspaces/:policyID/accounting/netsuite-quickstart/export/date',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/netsuite-quickstart/export/date` as const,
},
POLICY_ACCOUNTING_NSQS_ADVANCED: {
route: 'settings/workspaces/:policyID/accounting/netsuite-quickstart/advanced',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/netsuite-quickstart/advanced` as const,
},
POLICY_ACCOUNTING_NSQS_ADVANCED_APPROVAL_ACCOUNT: {
route: 'settings/workspaces/:policyID/accounting/netsuite-quickstart/advanced/approval-account',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/netsuite-quickstart/advanced/approval-account` as const,
},
POLICY_ACCOUNTING_SAGE_INTACCT_PREREQUISITES: {
route: 'settings/workspaces/:policyID/accounting/sage-intacct/prerequisites',
getRoute: (policyID: string) => `settings/workspaces/${policyID}/accounting/sage-intacct/prerequisites` as const,
Expand Down
12 changes: 12 additions & 0 deletions src/SCREENS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,17 @@ const SCREENS = {
NETSUITE_CUSTOM_FORM_ID: 'Policy_Accounting_NetSuite_Custom_Form_ID',
NETSUITE_AUTO_SYNC: 'Policy_Accounting_NetSuite_Auto_Sync',
NETSUITE_ACCOUNTING_METHOD: 'Policy_Accounting_NetSuite_Accounting_Method',
NSQS_SETUP: 'Policy_Accounting_NetSuite_QuickStart_Setup',
NSQS_IMPORT: 'Policy_Accounting_NetSuite_QuickStart_Import',
NSQS_IMPORT_CUSTOMERS: 'Policy_Accounting_NetSuite_QuickStart_Import_Customers',
NSQS_IMPORT_CUSTOMERS_DISPLAYED_AS: 'Policy_Accounting_NetSuite_QuickStart_Import_Customers_Displayed_As',
NSQS_IMPORT_PROJECTS: 'Policy_Accounting_NetSuite_QuickStart_Import_Projects',
NSQS_IMPORT_PROJECTS_DISPLAYED_AS: 'Policy_Accounting_NetSuite_QuickStart_Import_Projects_Displayed_As',
NSQS_EXPORT: 'Policy_Accounting_NetSuite_QuickStart_Export',
NSQS_EXPORT_PREFERRED_EXPORTER: 'Policy_Accounting_NetSuite_QuickStart_Export_Preferred_Exporter',
NSQS_EXPORT_DATE: 'Policy_Accounting_NetSuite_QuickStart_Export_Date',
NSQS_ADVANCED: 'Policy_Accounting_NetSuite_QuickStart_Advanced',
NSQS_ADVANCED_APPROVAL_ACCOUNT: 'Policy_Accounting_NetSuite_QuickStart_Advanced_Approval_Account',
SAGE_INTACCT_PREREQUISITES: 'Policy_Accounting_Sage_Intacct_Prerequisites',
ENTER_SAGE_INTACCT_CREDENTIALS: 'Policy_Enter_Sage_Intacct_Credentials',
EXISTING_SAGE_INTACCT_CONNECTIONS: 'Policy_Existing_Sage_Intacct_Connections',
Expand All @@ -445,6 +456,7 @@ const SCREENS = {
SAGE_INTACCT_PAYMENT_ACCOUNT: 'Policy_Accounting_Sage_Intacct_Payment_Account',
CARD_RECONCILIATION: 'Policy_Accounting_Card_Reconciliation',
RECONCILIATION_ACCOUNT_SETTINGS: 'Policy_Accounting_Reconciliation_Account_Settings',
MULTI_CONNECTION_SELECTOR: 'Policy_Accounting_Multi_Connection_Selector',
},
INITIAL: 'Workspace_Initial',
PROFILE: 'Workspace_Profile',
Expand Down
16 changes: 16 additions & 0 deletions src/components/ConnectToNetSuiteQuickStartFlow/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import {useEffect} from 'react';
import Navigation from '@libs/Navigation/Navigation';
import ROUTES from '@src/ROUTES';
import type {ConnectToNetSuiteQuickStartFlowProps} from './types';

// s77rt: verify that using a previously connected nsqs is not a supported feature
function ConnectToNetSuiteQuickStartFlow({policyID}: ConnectToNetSuiteQuickStartFlowProps) {
useEffect(() => {
Navigation.navigate(ROUTES.POLICY_ACCOUNTING_NSQS_SETUP.getRoute(policyID));
// eslint-disable-next-line react-compiler/react-compiler, react-hooks/exhaustive-deps
}, []);

return null;
}

export default ConnectToNetSuiteQuickStartFlow;
10 changes: 10 additions & 0 deletions src/components/ConnectToNetSuiteQuickStartFlow/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import type {PolicyConnectionName} from '@src/types/onyx/Policy';

type ConnectToNetSuiteQuickStartFlowProps = {
policyID: string;
shouldDisconnectIntegrationBeforeConnecting?: boolean;
integrationToDisconnect?: PolicyConnectionName;
};

// eslint-disable-next-line import/prefer-default-export
export type {ConnectToNetSuiteQuickStartFlowProps};
2 changes: 1 addition & 1 deletion src/components/ConnectionLayout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@
titleAlreadyTranslated,
shouldLoadForEmptyConnection = false,
onBackButtonPress = () => Navigation.goBack(),
shouldBeBlocked = false,

Check failure on line 105 in src/components/ConnectionLayout.tsx

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

'shouldBeBlocked' is assigned a value but never used

Check failure on line 105 in src/components/ConnectionLayout.tsx

View workflow job for this annotation

GitHub Actions / ESLint check

'shouldBeBlocked' is assigned a value but never used
}: ConnectionLayoutProps) {
const {translate} = useLocalize();

Expand All @@ -122,14 +122,14 @@
[title, titleStyle, children, titleAlreadyTranslated],
);

const shouldBlockByConnection = shouldLoadForEmptyConnection ? !isConnectionEmpty : isConnectionEmpty;

Check failure on line 125 in src/components/ConnectionLayout.tsx

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

'shouldBlockByConnection' is assigned a value but never used

Check failure on line 125 in src/components/ConnectionLayout.tsx

View workflow job for this annotation

GitHub Actions / ESLint check

'shouldBlockByConnection' is assigned a value but never used

return (
<AccessOrNotFoundWrapper
policyID={policyID}
accessVariants={accessVariants}
featureName={featureName}
shouldBeBlocked={!!shouldBeBlocked || shouldBlockByConnection}
shouldBeBlocked={false} // s77rt: revert this line
>
<ScreenWrapper
includeSafeAreaPaddingBottom={!!shouldIncludeSafeAreaPaddingBottom}
Expand Down
7 changes: 6 additions & 1 deletion src/components/SelectionScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@
/** Default renderer for every item in the list */
listItem: typeof RadioListItem | typeof UserListItem | typeof TableListItem;

/** The style is applied for the wrap component of list item */
listItemWrapperStyle?: StyleProp<ViewStyle>;

/** Item `keyForList` to focus initially */
initiallyFocusedOptionKey?: string | null | undefined;

Expand Down Expand Up @@ -115,13 +118,14 @@
listFooterContent,
sections,
listItem,
listItemWrapperStyle,
initiallyFocusedOptionKey,
onSelectRow,
onBackButtonPress,
policyID,
accessVariants,
featureName,
shouldBeBlocked,

Check failure on line 128 in src/components/SelectionScreen.tsx

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

'shouldBeBlocked' is defined but never used

Check failure on line 128 in src/components/SelectionScreen.tsx

View workflow job for this annotation

GitHub Actions / ESLint check

'shouldBeBlocked' is defined but never used
connectionName,
pendingAction,
errors,
Expand All @@ -139,14 +143,14 @@
const styles = useThemeStyles();

const policy = PolicyUtils.getPolicy(policyID);
const isConnectionEmpty = isEmpty(policy?.connections?.[connectionName]);

Check failure on line 146 in src/components/SelectionScreen.tsx

View workflow job for this annotation

GitHub Actions / Changed files ESLint check

'isConnectionEmpty' is assigned a value but never used

Check failure on line 146 in src/components/SelectionScreen.tsx

View workflow job for this annotation

GitHub Actions / ESLint check

'isConnectionEmpty' is assigned a value but never used

return (
<AccessOrNotFoundWrapper
policyID={policyID}
accessVariants={accessVariants}
featureName={featureName}
shouldBeBlocked={isConnectionEmpty || shouldBeBlocked}
shouldBeBlocked={false} // s77rt: revert this line
>
<ScreenWrapper
includeSafeAreaPaddingBottom={!!errors && !isEmptyObject(errors)}
Expand Down Expand Up @@ -180,6 +184,7 @@
shouldSingleExecuteRowSelect={shouldSingleExecuteRowSelect}
shouldUpdateFocusedIndex={shouldUpdateFocusedIndex}
isAlternateTextMultilineSupported
listItemWrapperStyle={listItemWrapperStyle}
>
<ErrorMessageRow
errors={errors}
Expand Down
73 changes: 73 additions & 0 deletions src/languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3288,6 +3288,74 @@ const translations = {
},
},
},
multiConnector: {
title: 'NetSuite setup',
description: 'Select your NetSuite version to continue.',
},
},
nsqs: {
setup: {
title: 'NetSuite setup',
description: 'Enter your NetSuite account ID',
formInputs: {
netSuiteAccountID: 'NetSuite Account ID',
},
},
import: {
expenseCategories: 'Expense categories',
expenseCategoriesDescription: 'NetSuite expense categories import into Expensify as categories.',
importTypes: {
[CONST.INTEGRATION_ENTITY_MAP_TYPES.TAG]: {
label: 'Tags',
description: 'Line-item level',
},
[CONST.INTEGRATION_ENTITY_MAP_TYPES.REPORT_FIELD]: {
label: 'Report fields',
description: 'Report level',
},
},
importFields: {
customers: {
title: 'Customers',
subtitle: 'Choose how to handle NetSuite *customers* in Expensify.',
},
projects: {
title: 'Projects',
subtitle: 'Choose how to handle NetSuite *projects* in Expensify.',
},
},
},
export: {
description: 'Configure how Expensify data exports to NetSuite.',
exportDate: {
label: 'Export date',
description: 'Use this date when exporting reports to NetSuite.',
values: {
[CONST.NSQS_EXPORT_DATE.LAST_EXPENSE]: {
label: 'Date of last expense',
description: 'Date of the most recent expense on the report.',
},
[CONST.NSQS_EXPORT_DATE.EXPORTED]: {
label: 'Export date',
description: 'Date the report was exported to NetSuite.',
},
[CONST.NSQS_EXPORT_DATE.SUBMITTED]: {
label: 'Submitted date',
description: 'Date the report was submitted for approval.',
},
},
},
expense: 'Expense',
reimbursableExpenses: 'Export reimbursable expenses as',
nonReimbursableExpenses: 'Export non-reimbursable expenses as',
},
advanced: {
autoSyncDescription: 'Sync NetSuite and Expensify automatically, every day.',
defaultApprovalAccount: 'NetSuite default',
approvalAccount: 'A/P approval account',
approvalAccountDescription:
'Choose the account that transactions will be approved against in NetSuite. If you’re syncing reimbursed reports, this is also the account that bill payments will be created against.',
},
},
intacct: {
sageIntacctSetup: 'Sage Intacct setup',
Expand Down Expand Up @@ -3900,6 +3968,7 @@ const translations = {
qbd: 'QuickBooks Desktop',
xero: 'Xero',
netsuite: 'NetSuite',
nsqs: 'NetSuite QuickStart Edition',
intacct: 'Sage Intacct',
talkYourOnboardingSpecialist: 'Chat with your setup specialist.',
talkYourAccountManager: 'Chat with your account manager.',
Expand All @@ -3913,6 +3982,8 @@ const translations = {
return 'Xero';
case CONST.POLICY.CONNECTIONS.NAME.NETSUITE:
return 'NetSuite';
case CONST.POLICY.CONNECTIONS.NAME.NSQS:
return 'NetSuite QuickStart Edition';
case CONST.POLICY.CONNECTIONS.NAME.SAGE_INTACCT:
return 'Sage Intacct';
default: {
Expand Down Expand Up @@ -3947,6 +4018,8 @@ const translations = {
return "Can't connect to Xero.";
case CONST.POLICY.CONNECTIONS.NAME.NETSUITE:
return "Can't connect to NetSuite.";
case CONST.POLICY.CONNECTIONS.NAME.NSQS:
return "Can't connect to NetSuite QuickStart Edition.";
case CONST.POLICY.CONNECTIONS.NAME.QBD:
return "Can't connect to QuickBooks Desktop.";
default: {
Expand Down
2 changes: 2 additions & 0 deletions src/libs/AccountingUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ const ROUTE_NAME_MAPPING = {
[CONST.POLICY.CONNECTIONS.ROUTE.XERO]: CONST.POLICY.CONNECTIONS.NAME.XERO,
[CONST.POLICY.CONNECTIONS.ROUTE.SAGE_INTACCT]: CONST.POLICY.CONNECTIONS.NAME.SAGE_INTACCT,
[CONST.POLICY.CONNECTIONS.ROUTE.NETSUITE]: CONST.POLICY.CONNECTIONS.NAME.NETSUITE,
[CONST.POLICY.CONNECTIONS.ROUTE.NSQS]: CONST.POLICY.CONNECTIONS.NAME.NSQS,
[CONST.POLICY.CONNECTIONS.ROUTE.QBD]: CONST.POLICY.CONNECTIONS.NAME.QBD,
};

Expand All @@ -15,6 +16,7 @@ const NAME_ROUTE_MAPPING = {
[CONST.POLICY.CONNECTIONS.NAME.XERO]: CONST.POLICY.CONNECTIONS.ROUTE.XERO,
[CONST.POLICY.CONNECTIONS.NAME.SAGE_INTACCT]: CONST.POLICY.CONNECTIONS.ROUTE.SAGE_INTACCT,
[CONST.POLICY.CONNECTIONS.NAME.NETSUITE]: CONST.POLICY.CONNECTIONS.ROUTE.NETSUITE,
[CONST.POLICY.CONNECTIONS.NAME.NSQS]: CONST.POLICY.CONNECTIONS.ROUTE.NSQS,
[CONST.POLICY.CONNECTIONS.NAME.QBD]: CONST.POLICY.CONNECTIONS.ROUTE.QBD,
};

Expand Down
Loading
Loading