From a84b4c7f19d9e90c3bee3322ec6f4fd4d5f540a4 Mon Sep 17 00:00:00 2001 From: Yuwen Memon Date: Wed, 5 Feb 2025 14:12:59 -0800 Subject: [PATCH 1/6] Fix NSQS sync trigger --- .../API/parameters/SyncPolicyToNSQSParams.ts | 1 + src/libs/PolicyUtils.ts | 5 +++++ src/libs/actions/connections/index.ts | 18 +++++++++++++----- .../accounting/PolicyAccountingPage.tsx | 4 ++-- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/libs/API/parameters/SyncPolicyToNSQSParams.ts b/src/libs/API/parameters/SyncPolicyToNSQSParams.ts index 319ccb2f1d50..aa867403586d 100644 --- a/src/libs/API/parameters/SyncPolicyToNSQSParams.ts +++ b/src/libs/API/parameters/SyncPolicyToNSQSParams.ts @@ -1,5 +1,6 @@ type SyncPolicyToNSQSParams = { policyID: string; + netSuiteAccountID: string; idempotencyKey: string; }; diff --git a/src/libs/PolicyUtils.ts b/src/libs/PolicyUtils.ts index e136c7fe457a..8e1d3ba61b35 100644 --- a/src/libs/PolicyUtils.ts +++ b/src/libs/PolicyUtils.ts @@ -997,6 +997,10 @@ function getIntegrationLastSuccessfulDate(connection?: Connections[keyof Connect return syncSuccessfulDate; } +function getNSQSCompanyID(policy: Policy | undefined) { + return policy?.connections?.netsuiteQuickStart?.config?.credentials?.companyID; +} + function getCurrentSageIntacctEntityName(policy: Policy | undefined, defaultNameIfNoEntity: string): string | undefined { const currentEntityID = policy?.connections?.intacct?.config?.entity; if (!currentEntityID) { @@ -1358,6 +1362,7 @@ export { getNetSuiteReceivableAccountOptions, getNetSuiteInvoiceItemOptions, getNetSuiteTaxAccountOptions, + getNSQSCompanyID, getSageIntacctVendors, getSageIntacctNonReimbursableActiveDefaultVendor, getSageIntacctCreditCards, diff --git a/src/libs/actions/connections/index.ts b/src/libs/actions/connections/index.ts index 5d1131b06836..2ffa29255f39 100644 --- a/src/libs/actions/connections/index.ts +++ b/src/libs/actions/connections/index.ts @@ -4,7 +4,7 @@ import type {OnyxEntry, OnyxUpdate} from 'react-native-onyx'; import Onyx from 'react-native-onyx'; import * as API from '@libs/API'; import type { - RemovePolicyConnectionParams, + RemovePolicyConnectionParams, SyncPolicyToNSQSParams, SyncPolicyToQuickbooksDesktopParams, UpdateManyPolicyConnectionConfigurationsParams, UpdatePolicyConnectionConfigParams, @@ -18,6 +18,7 @@ import type * as OnyxCommon from '@src/types/onyx/OnyxCommon'; import type {ConnectionName, Connections, PolicyConnectionName, PolicyConnectionSyncProgress} from '@src/types/onyx/Policy'; import type Policy from '@src/types/onyx/Policy'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; +import {getNSQSCompanyID} from "@libs/PolicyUtils"; type ConnectionNameExceptNetSuite = Exclude; @@ -222,14 +223,15 @@ function getSyncConnectionParameters(connectionName: PolicyConnectionName) { /** * This method helps in syncing policy to the connected accounting integration. * - * @param policyID - ID of the policy for which the sync is needed + * @param policy - Policy for which the sync is needed * @param connectionName - Name of the connection, QBO/Xero * @param forceDataRefresh - If true, it will trigger a full data refresh */ -function syncConnection(policyID: string, connectionName: PolicyConnectionName | undefined, forceDataRefresh = false) { - if (!connectionName) { +function syncConnection(policy: Policy | undefined, connectionName: PolicyConnectionName | undefined, forceDataRefresh = false) { + if (!connectionName || !policy) { return; } + const policyID = policy.id; const syncConnectionData = getSyncConnectionParameters(connectionName); if (!syncConnectionData) { @@ -255,7 +257,7 @@ function syncConnection(policyID: string, connectionName: PolicyConnectionName | }, ]; - const parameters: SyncPolicyToQuickbooksDesktopParams = { + let parameters: SyncPolicyToQuickbooksDesktopParams | SyncPolicyToNSQSParams = { policyID, idempotencyKey: policyID, }; @@ -263,6 +265,12 @@ function syncConnection(policyID: string, connectionName: PolicyConnectionName | if (connectionName === CONST.POLICY.CONNECTIONS.NAME.QBD) { parameters.forceDataRefresh = forceDataRefresh; } + if (connectionName === CONST.POLICY.CONNECTIONS.NAME.NSQS) { + parameters = { + ...parameters, + netSuiteAccountID: getNSQSCompanyID(policy), + } as SyncPolicyToNSQSParams; + } API.read(syncConnectionData.readCommand, parameters, { optimisticData, diff --git a/src/pages/workspace/accounting/PolicyAccountingPage.tsx b/src/pages/workspace/accounting/PolicyAccountingPage.tsx index e20239e96ac3..ab6c2946a64d 100644 --- a/src/pages/workspace/accounting/PolicyAccountingPage.tsx +++ b/src/pages/workspace/accounting/PolicyAccountingPage.tsx @@ -38,7 +38,7 @@ import { getConnectedIntegration, getCurrentSageIntacctEntityName, getCurrentXeroOrganizationName, - getIntegrationLastSuccessfulDate, + getIntegrationLastSuccessfulDate, getNSQSCompanyID, getXeroTenants, hasUnsupportedIntegration, isControlPolicy, @@ -147,7 +147,7 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { { icon: Expensicons.Sync, text: translate('workspace.accounting.syncNow'), - onSelected: () => syncConnection(policyID, connectedIntegration), + onSelected: () => syncConnection(policy, connectedIntegration), disabled: isOffline, }, ]), From 7dc87c33940a1ed96aa6ca215e0f599e0ee48fe5 Mon Sep 17 00:00:00 2001 From: Yuwen Memon Date: Mon, 10 Feb 2025 13:45:20 -0800 Subject: [PATCH 2/6] Prettier --- src/libs/actions/connections/index.ts | 5 +++-- src/pages/workspace/accounting/PolicyAccountingPage.tsx | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libs/actions/connections/index.ts b/src/libs/actions/connections/index.ts index 6ecf28b2e293..381be3989b8b 100644 --- a/src/libs/actions/connections/index.ts +++ b/src/libs/actions/connections/index.ts @@ -4,7 +4,8 @@ import type {OnyxEntry, OnyxUpdate} from 'react-native-onyx'; import Onyx from 'react-native-onyx'; import * as API from '@libs/API'; import type { - RemovePolicyConnectionParams, SyncPolicyToNSQSParams, + RemovePolicyConnectionParams, + SyncPolicyToNSQSParams, SyncPolicyToQuickbooksDesktopParams, UpdateManyPolicyConnectionConfigurationsParams, UpdatePolicyConnectionConfigParams, @@ -12,13 +13,13 @@ import type { import {READ_COMMANDS, WRITE_COMMANDS} from '@libs/API/types'; import * as ErrorUtils from '@libs/ErrorUtils'; import * as PolicyUtils from '@libs/PolicyUtils'; +import {getNSQSCompanyID} from '@libs/PolicyUtils'; import CONST from '@src/CONST'; import ONYXKEYS from '@src/ONYXKEYS'; import type * as OnyxCommon from '@src/types/onyx/OnyxCommon'; import type {ConnectionName, Connections, PolicyConnectionName, PolicyConnectionSyncProgress} from '@src/types/onyx/Policy'; import type Policy from '@src/types/onyx/Policy'; import {isEmptyObject} from '@src/types/utils/EmptyObject'; -import {getNSQSCompanyID} from "@libs/PolicyUtils"; type ConnectionNameExceptNetSuite = Exclude; diff --git a/src/pages/workspace/accounting/PolicyAccountingPage.tsx b/src/pages/workspace/accounting/PolicyAccountingPage.tsx index ab6c2946a64d..f17c17105287 100644 --- a/src/pages/workspace/accounting/PolicyAccountingPage.tsx +++ b/src/pages/workspace/accounting/PolicyAccountingPage.tsx @@ -38,7 +38,8 @@ import { getConnectedIntegration, getCurrentSageIntacctEntityName, getCurrentXeroOrganizationName, - getIntegrationLastSuccessfulDate, getNSQSCompanyID, + getIntegrationLastSuccessfulDate, + getNSQSCompanyID, getXeroTenants, hasUnsupportedIntegration, isControlPolicy, From 41ec87d0477d0ac79f664b23e161f0d4fe7741a0 Mon Sep 17 00:00:00 2001 From: Yuwen Memon Date: Mon, 10 Feb 2025 13:46:01 -0800 Subject: [PATCH 3/6] Linter --- src/libs/PolicyUtils.ts | 4 ++-- src/libs/actions/connections/index.ts | 7 ++----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/libs/PolicyUtils.ts b/src/libs/PolicyUtils.ts index 31dfb2c96f04..845cf834443a 100644 --- a/src/libs/PolicyUtils.ts +++ b/src/libs/PolicyUtils.ts @@ -997,8 +997,8 @@ function getIntegrationLastSuccessfulDate(connection?: Connections[keyof Connect return syncSuccessfulDate; } -function getNSQSCompanyID(policy: Policy | undefined) { - return policy?.connections?.netsuiteQuickStart?.config?.credentials?.companyID; +function getNSQSCompanyID(policy: Policy) { + return policy.connections?.netsuiteQuickStart?.config?.credentials?.companyID; } function getCurrentSageIntacctEntityName(policy: Policy | undefined, defaultNameIfNoEntity: string): string | undefined { diff --git a/src/libs/actions/connections/index.ts b/src/libs/actions/connections/index.ts index 381be3989b8b..fb5605097814 100644 --- a/src/libs/actions/connections/index.ts +++ b/src/libs/actions/connections/index.ts @@ -258,7 +258,7 @@ function syncConnection(policy: Policy | undefined, connectionName: PolicyConnec }, ]; - let parameters: SyncPolicyToQuickbooksDesktopParams | SyncPolicyToNSQSParams = { + const parameters: SyncPolicyToQuickbooksDesktopParams | SyncPolicyToNSQSParams = { policyID, idempotencyKey: policyID, }; @@ -267,10 +267,7 @@ function syncConnection(policy: Policy | undefined, connectionName: PolicyConnec parameters.forceDataRefresh = forceDataRefresh; } if (connectionName === CONST.POLICY.CONNECTIONS.NAME.NSQS) { - parameters = { - ...parameters, - netSuiteAccountID: getNSQSCompanyID(policy), - } as SyncPolicyToNSQSParams; + (parameters as SyncPolicyToNSQSParams).netSuiteAccountID = getNSQSCompanyID(policy) as string; } API.read(syncConnectionData.readCommand, parameters, { From e047d02af2a6ccea9f439a79b0cba91702adbddc Mon Sep 17 00:00:00 2001 From: Yuwen Memon Date: Mon, 10 Feb 2025 13:48:15 -0800 Subject: [PATCH 4/6] Linter --- src/libs/actions/connections/index.ts | 2 +- src/pages/workspace/accounting/PolicyAccountingPage.tsx | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/libs/actions/connections/index.ts b/src/libs/actions/connections/index.ts index fb5605097814..f15f0d6996d0 100644 --- a/src/libs/actions/connections/index.ts +++ b/src/libs/actions/connections/index.ts @@ -267,7 +267,7 @@ function syncConnection(policy: Policy | undefined, connectionName: PolicyConnec parameters.forceDataRefresh = forceDataRefresh; } if (connectionName === CONST.POLICY.CONNECTIONS.NAME.NSQS) { - (parameters as SyncPolicyToNSQSParams).netSuiteAccountID = getNSQSCompanyID(policy) as string; + (parameters as SyncPolicyToNSQSParams).netSuiteAccountID = getNSQSCompanyID(policy) ?? ''; } API.read(syncConnectionData.readCommand, parameters, { diff --git a/src/pages/workspace/accounting/PolicyAccountingPage.tsx b/src/pages/workspace/accounting/PolicyAccountingPage.tsx index f17c17105287..2bf35a88f860 100644 --- a/src/pages/workspace/accounting/PolicyAccountingPage.tsx +++ b/src/pages/workspace/accounting/PolicyAccountingPage.tsx @@ -39,7 +39,6 @@ import { getCurrentSageIntacctEntityName, getCurrentXeroOrganizationName, getIntegrationLastSuccessfulDate, - getNSQSCompanyID, getXeroTenants, hasUnsupportedIntegration, isControlPolicy, From 3ea2b1dc525a4b6578feb3f379228963fa99a31b Mon Sep 17 00:00:00 2001 From: Yuwen Memon Date: Mon, 10 Feb 2025 13:55:33 -0800 Subject: [PATCH 5/6] Fix call to syncConnection --- .../accounting/qbd/QuickBooksDesktopSetupFlowSyncPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/workspace/accounting/qbd/QuickBooksDesktopSetupFlowSyncPage.tsx b/src/pages/workspace/accounting/qbd/QuickBooksDesktopSetupFlowSyncPage.tsx index 5dbd6c3cb01a..8110f9bf3292 100644 --- a/src/pages/workspace/accounting/qbd/QuickBooksDesktopSetupFlowSyncPage.tsx +++ b/src/pages/workspace/accounting/qbd/QuickBooksDesktopSetupFlowSyncPage.tsx @@ -23,7 +23,7 @@ function QuickBooksDesktopSetupFlowSyncPage({route}: QuickBooksDesktopSetupFlowS const isSyncInProgress = isConnectionInProgress(connectionSyncProgress, policy); if (!isSyncInProgress) { - syncConnection(policyID, CONST.POLICY.CONNECTIONS.NAME.QBD, true); + syncConnection(policy, CONST.POLICY.CONNECTIONS.NAME.QBD, true); } Navigation.navigate(ROUTES.WORKSPACE_ACCOUNTING.getRoute(policyID)); From 5ece57897d08dd425f3ce1c1cccfcbd123ded954 Mon Sep 17 00:00:00 2001 From: Yuwen Memon Date: Tue, 11 Feb 2025 11:08:18 -0800 Subject: [PATCH 6/6] Fix ESLint --- src/pages/workspace/accounting/PolicyAccountingPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/workspace/accounting/PolicyAccountingPage.tsx b/src/pages/workspace/accounting/PolicyAccountingPage.tsx index 2bf35a88f860..dae6d7b20432 100644 --- a/src/pages/workspace/accounting/PolicyAccountingPage.tsx +++ b/src/pages/workspace/accounting/PolicyAccountingPage.tsx @@ -158,7 +158,7 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) { shouldCallAfterModalHide: true, }, ], - [shouldShowEnterCredentials, shouldShowReinstallConnectorMenuItem, translate, isOffline, policyID, connectedIntegration, startIntegrationFlow], + [shouldShowEnterCredentials, shouldShowReinstallConnectorMenuItem, translate, isOffline, policy, connectedIntegration, startIntegrationFlow], ); useFocusEffect(