Skip to content

Commit

Permalink
Merge pull request #45102 from mananjadhav/mj-netsuite-combine-api
Browse files Browse the repository at this point in the history
[#Wave-Control: Add NetSuite] Settings Configuration in NewDot: Combine `Customers` and `Jobs` Mapping API
  • Loading branch information
yuwenmemon authored Jul 12, 2024
2 parents 6e1c64d + 09b59eb commit 885e1a5
Show file tree
Hide file tree
Showing 7 changed files with 144 additions and 12 deletions.
10 changes: 10 additions & 0 deletions src/libs/API/parameters/UpdateNetSuiteCustomersJobsParams.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import type {ValueOf} from 'type-fest';
import type CONST from '@src/CONST';

type UpdateNetSuiteCustomersJobsParams = {
policyID: string;
customersMapping: ValueOf<typeof CONST.INTEGRATION_ENTITY_MAP_TYPES>;
jobsMapping: ValueOf<typeof CONST.INTEGRATION_ENTITY_MAP_TYPES>;
};

export default UpdateNetSuiteCustomersJobsParams;
1 change: 1 addition & 0 deletions src/libs/API/parameters/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -255,3 +255,4 @@ export type {default as RequestExpensifyCardLimitIncreaseParams} from './Request
export type {default as UpdateNetSuiteGenericTypeParams} from './UpdateNetSuiteGenericTypeParams';
export type {default as UpdateNetSuiteCustomFormIDParams} from './UpdateNetSuiteCustomFormIDParams';
export type {default as UpdateSageIntacctGenericTypeParams} from './UpdateSageIntacctGenericTypeParams';
export type {default as UpdateNetSuiteCustomersJobsParams} from './UpdateNetSuiteCustomersJobsParams';
2 changes: 2 additions & 0 deletions src/libs/API/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,7 @@ const WRITE_COMMANDS = {
UPDATE_NETSUITE_LOCATIONS_MAPPING: 'UpdateNetSuiteLocationsMapping',
UPDATE_NETSUITE_CUSTOMERS_MAPPING: 'UpdateNetSuiteCustomersMapping',
UPDATE_NETSUITE_JOBS_MAPPING: 'UpdateNetSuiteJobsMapping',
UPDATE_NETSUITE_CUSTOMERS_JOBS_MAPPING: 'UpdateNetSuiteCustomersJobsMapping',
UPDATE_NETSUITE_EXPORTER: 'UpdateNetSuiteExporter',
UPDATE_NETSUITE_EXPORT_DATE: 'UpdateNetSuiteExportDate',
UPDATE_NETSUITE_REIMBURSABLE_EXPENSES_EXPORT_DESTINATION: 'UpdateNetSuiteReimbursableExpensesExportDestination',
Expand Down Expand Up @@ -581,6 +582,7 @@ type WriteCommandParameters = {
[WRITE_COMMANDS.UPDATE_NETSUITE_LOCATIONS_MAPPING]: Parameters.UpdateNetSuiteGenericTypeParams<'mapping', ValueOf<typeof CONST.INTEGRATION_ENTITY_MAP_TYPES>>;
[WRITE_COMMANDS.UPDATE_NETSUITE_CUSTOMERS_MAPPING]: Parameters.UpdateNetSuiteGenericTypeParams<'mapping', ValueOf<typeof CONST.INTEGRATION_ENTITY_MAP_TYPES>>;
[WRITE_COMMANDS.UPDATE_NETSUITE_JOBS_MAPPING]: Parameters.UpdateNetSuiteGenericTypeParams<'mapping', ValueOf<typeof CONST.INTEGRATION_ENTITY_MAP_TYPES>>;
[WRITE_COMMANDS.UPDATE_NETSUITE_CUSTOMERS_JOBS_MAPPING]: Parameters.UpdateNetSuiteCustomersJobsParams;
[WRITE_COMMANDS.UPDATE_NETSUITE_EXPORTER]: Parameters.UpdateNetSuiteGenericTypeParams<'email', string>;
[WRITE_COMMANDS.UPDATE_NETSUITE_EXPORT_DATE]: Parameters.UpdateNetSuiteGenericTypeParams<'value', ValueOf<typeof CONST.NETSUITE_EXPORT_DATE>>;
[WRITE_COMMANDS.UPDATE_NETSUITE_REIMBURSABLE_EXPENSES_EXPORT_DESTINATION]: Parameters.UpdateNetSuiteGenericTypeParams<'value', ValueOf<typeof CONST.NETSUITE_EXPORT_DESTINATION>>;
Expand Down
115 changes: 114 additions & 1 deletion src/libs/actions/connections/NetSuiteCommands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {WRITE_COMMANDS} from '@libs/API/types';
import * as ErrorUtils from '@libs/ErrorUtils';
import CONST from '@src/CONST';
import ONYXKEYS from '@src/ONYXKEYS';
import type {Connections, NetSuiteCustomFormID, NetSuiteCustomList, NetSuiteCustomSegment} from '@src/types/onyx/Policy';
import type {Connections, NetSuiteCustomFormID, NetSuiteCustomList, NetSuiteCustomSegment, NetSuiteMappingValues} from '@src/types/onyx/Policy';
import type {OnyxData} from '@src/types/onyx/Request';

type SubsidiaryParam = {
Expand Down Expand Up @@ -402,6 +402,118 @@ function updateNetSuiteImportMapping<TMappingName extends keyof Connections['net
API.write(commandName, params, onyxData);
}

function updateNetSuiteCustomersJobsMapping(
policyID: string,
mappingValue: {
customersMapping: NetSuiteMappingValues;
jobsMapping: NetSuiteMappingValues;
},
oldMappingValue: {
customersMapping?: NetSuiteMappingValues;
jobsMapping?: NetSuiteMappingValues;
},
) {
const onyxData: OnyxData = {
optimisticData: [
{
onyxMethod: Onyx.METHOD.MERGE,
key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`,
value: {
connections: {
netsuite: {
options: {
config: {
syncOptions: {
mapping: {
customers: mappingValue.customersMapping,
jobs: mappingValue.jobsMapping,
pendingFields: {
customers: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
jobs: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
},
},
},
errorFields: {
customers: null,
jobs: null,
},
},
},
},
},
},
},
],
successData: [
{
onyxMethod: Onyx.METHOD.MERGE,
key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`,
value: {
connections: {
netsuite: {
options: {
config: {
syncOptions: {
mapping: {
customers: mappingValue.customersMapping,
jobs: mappingValue.jobsMapping,
pendingFields: {
customers: null,
jobs: null,
},
},
},
errorFields: {
customers: null,
jobs: null,
},
},
},
},
},
},
},
],
failureData: [
{
onyxMethod: Onyx.METHOD.MERGE,
key: `${ONYXKEYS.COLLECTION.POLICY}${policyID}`,
value: {
connections: {
netsuite: {
options: {
config: {
syncOptions: {
mapping: {
customers: oldMappingValue.customersMapping,
jobs: oldMappingValue.jobsMapping,
pendingFields: {
customers: null,
jobs: null,
},
},
},
errorFields: {
customers: ErrorUtils.getMicroSecondOnyxErrorWithTranslationKey('common.genericErrorMessage'),
jobs: ErrorUtils.getMicroSecondOnyxErrorWithTranslationKey('common.genericErrorMessage'),
},
},
},
},
},
},
},
],
};

const params = {
policyID,
...mappingValue,
};

API.write(WRITE_COMMANDS.UPDATE_NETSUITE_CUSTOMERS_JOBS_MAPPING, params, onyxData);
}

function updateNetSuiteSyncTaxConfiguration(policyID: string, isSyncTaxEnabled: boolean) {
const onyxData = updateNetSuiteSyncOptionsOnyxData(policyID, CONST.NETSUITE_CONFIG.SYNC_OPTIONS.SYNC_TAX, isSyncTaxEnabled, !isSyncTaxEnabled);

Expand Down Expand Up @@ -889,4 +1001,5 @@ export {
updateNetSuiteExportJournalsTo,
updateNetSuiteApprovalAccount,
updateNetSuiteCustomFormIDOptions,
updateNetSuiteCustomersJobsMapping,
};
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import React, {useCallback} from 'react';
import type {ValueOf} from 'type-fest';
import RadioListItem from '@components/SelectionList/RadioListItem';
import type {SelectorType} from '@components/SelectionScreen';
import SelectionScreen from '@components/SelectionScreen';
import useLocalize from '@hooks/useLocalize';
import {updateNetSuiteImportMapping} from '@libs/actions/connections/NetSuiteCommands';
import {updateNetSuiteCustomersJobsMapping} from '@libs/actions/connections/NetSuiteCommands';
import Navigation from '@libs/Navigation/Navigation';
import withPolicyConnections from '@pages/workspace/withPolicyConnections';
import type {WithPolicyConnectionsProps} from '@pages/workspace/withPolicyConnections';
import CONST from '@src/CONST';
import ROUTES from '@src/ROUTES';
import type {NetSuiteMappingValues} from '@src/types/onyx/Policy';

type ImportListItem = SelectorType & {
value: ValueOf<typeof CONST.INTEGRATION_ENTITY_MAP_TYPES>;
value: NetSuiteMappingValues;
};

function NetSuiteImportCustomersOrProjectSelectPage({policy}: WithPolicyConnectionsProps) {
Expand All @@ -39,14 +39,19 @@ function NetSuiteImportCustomersOrProjectSelectPage({policy}: WithPolicyConnecti
const updateImportMapping = useCallback(
({value}: ImportListItem) => {
if (value !== importedValue) {
if (importJobs !== CONST.INTEGRATION_ENTITY_MAP_TYPES.NETSUITE_DEFAULT) {
updateNetSuiteImportMapping(policyID, CONST.NETSUITE_CONFIG.SYNC_OPTIONS.CUSTOMER_MAPPINGS.JOBS, value, importMappings?.jobs);
}
if (importCustomer !== CONST.INTEGRATION_ENTITY_MAP_TYPES.NETSUITE_DEFAULT) {
updateNetSuiteImportMapping(policyID, CONST.NETSUITE_CONFIG.SYNC_OPTIONS.CUSTOMER_MAPPINGS.CUSTOMERS, value, importMappings?.customers);
}
updateNetSuiteCustomersJobsMapping(
policyID,
{
customersMapping: importCustomer !== CONST.INTEGRATION_ENTITY_MAP_TYPES.NETSUITE_DEFAULT ? value : CONST.INTEGRATION_ENTITY_MAP_TYPES.NETSUITE_DEFAULT,
jobsMapping: importJobs !== CONST.INTEGRATION_ENTITY_MAP_TYPES.NETSUITE_DEFAULT ? value : CONST.INTEGRATION_ENTITY_MAP_TYPES.NETSUITE_DEFAULT,
},
{
customersMapping: importMappings?.customers,
jobsMapping: importMappings?.jobs,
},
);
}
Navigation.goBack();
Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_IMPORT_CUSTOMERS_OR_PROJECTS.getRoute(policyID));
},
[importCustomer, importJobs, importMappings?.customers, importMappings?.jobs, importedValue, policyID],
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ function NetSuiteImportMappingPage({
updateNetSuiteImportMapping(policyID, importField as keyof typeof importMappings, value, importValue);
}

Navigation.goBack();
Navigation.goBack(ROUTES.POLICY_ACCOUNTING_NETSUITE_IMPORT.getRoute(policyID));
},
[importField, importValue, policyID],
);
Expand Down
1 change: 1 addition & 0 deletions src/types/onyx/Policy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1562,6 +1562,7 @@ export type {
SageIntacctMappingName,
SageIntacctDimension,
SageIntacctDataElementWithValue,
NetSuiteMappingValues,
SageIntacctDataElement,
SageIntacctConnectionsConfig,
};

0 comments on commit 885e1a5

Please sign in to comment.