Skip to content
Open
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
23 changes: 10 additions & 13 deletions src/libs/actions/connections/FinancialForce.ts
Original file line number Diff line number Diff line change
Expand Up @@ -536,7 +536,8 @@ function updateFinancialForceExportForeignCurrency(policyID: string, enabled: bo
write(WRITE_COMMANDS.UPDATE_FINANCIAL_FORCE_EXPORT_FOREIGN_CURRENCY, {policyID, enabled}, {optimisticData, failureData, successData});
}

function updateFinancialForceCompany(policyID: string, companyID: string, previousCompanyID: string | null) {
function updateFinancialForceCompany(policyID: string, companyID: string, previousCompanyID: string | null, hasPSA: boolean) {
const companyField = hasPSA ? CONST.CERTINIA_CONFIG.COMPANY_ID : CONST.CERTINIA_CONFIG.COMPANY;
const optimisticData: Array<OnyxUpdate<typeof ONYXKEYS.COLLECTION.POLICY>> = [
{
onyxMethod: Onyx.METHOD.MERGE,
Expand All @@ -545,14 +546,12 @@ function updateFinancialForceCompany(policyID: string, companyID: string, previo
connections: {
[CONST.POLICY.CONNECTIONS.NAME.CERTINIA]: {
config: {
credentials: {
[CONST.CERTINIA_CONFIG.COMPANY_ID]: companyID,
},
...(hasPSA ? {export: {[CONST.CERTINIA_CONFIG.COMPANY_ID]: companyID}} : {[CONST.CERTINIA_CONFIG.COMPANY]: companyID}),
pendingFields: {
[CONST.CERTINIA_CONFIG.COMPANY_ID]: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
[companyField]: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE,
},
errorFields: {
[CONST.CERTINIA_CONFIG.COMPANY_ID]: null,
[companyField]: null,
},
},
},
Expand All @@ -569,14 +568,12 @@ function updateFinancialForceCompany(policyID: string, companyID: string, previo
connections: {
[CONST.POLICY.CONNECTIONS.NAME.CERTINIA]: {
config: {
credentials: {
[CONST.CERTINIA_CONFIG.COMPANY_ID]: previousCompanyID ?? null,
},
...(hasPSA ? {export: {[CONST.CERTINIA_CONFIG.COMPANY_ID]: previousCompanyID ?? null}} : {[CONST.CERTINIA_CONFIG.COMPANY]: previousCompanyID ?? null}),
pendingFields: {
[CONST.CERTINIA_CONFIG.COMPANY_ID]: null,
[companyField]: null,
},
errorFields: {
[CONST.CERTINIA_CONFIG.COMPANY_ID]: getMicroSecondOnyxErrorWithTranslationKey('common.genericErrorMessage'),
[companyField]: getMicroSecondOnyxErrorWithTranslationKey('common.genericErrorMessage'),
},
},
},
Expand All @@ -594,10 +591,10 @@ function updateFinancialForceCompany(policyID: string, companyID: string, previo
[CONST.POLICY.CONNECTIONS.NAME.CERTINIA]: {
config: {
pendingFields: {
[CONST.CERTINIA_CONFIG.COMPANY_ID]: null,
[companyField]: null,
},
errorFields: {
[CONST.CERTINIA_CONFIG.COMPANY_ID]: null,
[companyField]: null,
},
},
},
Expand Down
11 changes: 6 additions & 5 deletions src/pages/workspace/accounting/PolicyAccountingPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ import {View} from 'react-native';
import type {MenuItemData, PolicyAccountingPageProps} from './types';

import {AccountingContextProvider, useAccountingActions, useAccountingState} from './AccountingContext';
import {isCertiniaSRPConnection} from './certinia/utils';
import {getCertiniaSelectedCompanyID, isCertiniaFFAConnection} from './certinia/utils';
import {getAccountingIntegrationData, getSynchronizationErrorMessage} from './utils';

type RouteParams = {
Expand Down Expand Up @@ -285,7 +285,8 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) {
const rilletSubsidiaryList = policy?.connections?.rillet?.data?.subsidiaries;
const certiniaConfig = policy?.connections?.financialforce?.config;
const certiniaCompanies = policy?.connections?.financialforce?.data?.companies ?? [];
const certiniaCompanyID = certiniaConfig?.credentials?.companyID;
const certiniaCompanyID = getCertiniaSelectedCompanyID(certiniaConfig);
const certiniaCompanyField = certiniaConfig?.hasPSA ? CONST.CERTINIA_CONFIG.COMPANY_ID : CONST.CERTINIA_CONFIG.COMPANY;
const selectedCertiniaCompany = certiniaCompanies.find((company) => company.id === certiniaCompanyID);
switch (connectedIntegration) {
case CONST.POLICY.CONNECTIONS.NAME.XERO:
Expand Down Expand Up @@ -360,7 +361,7 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) {
interactive: false,
};
case CONST.POLICY.CONNECTIONS.NAME.CERTINIA:
return !isCertiniaSRPConnection(certiniaConfig)
return !isCertiniaFFAConnection(certiniaConfig)
? {}
: {
description: translate('workspace.certinia.company'),
Expand All @@ -371,8 +372,8 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) {
shouldShowRightIcon: canWriteAccounting,
shouldShowDescriptionOnTop: true,
interactive: canWriteAccounting,
pendingAction: settingsPendingAction([CONST.CERTINIA_CONFIG.COMPANY_ID], certiniaConfig?.pendingFields),
brickRoadIndicator: areSettingsInErrorFields([CONST.CERTINIA_CONFIG.COMPANY_ID], certiniaConfig?.errorFields) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined,
pendingAction: settingsPendingAction([certiniaCompanyField], certiniaConfig?.pendingFields),
brickRoadIndicator: areSettingsInErrorFields([certiniaCompanyField], certiniaConfig?.errorFields) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : undefined,
onPress: canWriteAccounting ? () => Navigation.navigate(ROUTES.POLICY_ACCOUNTING_CERTINIA_COMPANY_SELECTOR.getRoute(policyID)) : undefined,
};
case CONST.POLICY.CONNECTIONS.NAME.RILLET:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import ROUTES from '@src/ROUTES';

import React from 'react';

import {isCertiniaSRPConnection} from './utils';
import {getCertiniaSelectedCompanyID, isCertiniaFFAConnection} from './utils';

type CompanyListItem = ListItem & {
value: string;
Expand All @@ -32,7 +32,8 @@ function CertiniaCompanySelectorPage({policy}: WithPolicyConnectionsProps) {
const styles = useThemeStyles();
const policyID = policy?.id;
const {config, data} = policy?.connections?.financialforce ?? {};
const companyID = config?.credentials?.companyID;
const companyID = getCertiniaSelectedCompanyID(config);
const companyField = config?.hasPSA ? CONST.CERTINIA_CONFIG.COMPANY_ID : CONST.CERTINIA_CONFIG.COMPANY;
const companies = data?.companies ?? [];
const illustrations = useMemoizedLazyIllustrations(['Telescope']);

Expand All @@ -55,7 +56,7 @@ function CertiniaCompanySelectorPage({policy}: WithPolicyConnectionsProps) {

const selectCompany = (row: CompanyListItem) => {
if (row.value !== companyID && policyID) {
updateFinancialForceCompany(policyID, row.value, companyID ?? null);
updateFinancialForceCompany(policyID, row.value, companyID ?? null, !!config?.hasPSA);
}
Navigation.goBack(policyID ? ROUTES.POLICY_ACCOUNTING.getRoute(policyID) : undefined);
};
Expand All @@ -66,7 +67,7 @@ function CertiniaCompanySelectorPage({policy}: WithPolicyConnectionsProps) {
accessVariants={[CONST.POLICY.ACCESS_VARIANTS.ADMIN, CONST.POLICY.ACCESS_VARIANTS.PAID]}
featureName={CONST.POLICY.MORE_FEATURES.ARE_CONNECTIONS_ENABLED}
displayName="CertiniaCompanySelectorPage"
shouldBeBlocked={!isCertiniaSRPConnection(config)}
shouldBeBlocked={!isCertiniaFFAConnection(config)}
data={dataOptions}
onSelectRow={selectCompany}
shouldSingleExecuteRowSelect
Expand All @@ -75,10 +76,10 @@ function CertiniaCompanySelectorPage({policy}: WithPolicyConnectionsProps) {
title="workspace.certinia.company"
listEmptyContent={listEmptyContent}
connectionName={CONST.POLICY.CONNECTIONS.NAME.CERTINIA}
pendingAction={settingsPendingAction([CONST.CERTINIA_CONFIG.COMPANY_ID], config?.pendingFields)}
errors={getLatestErrorField(config, CONST.CERTINIA_CONFIG.COMPANY_ID)}
pendingAction={settingsPendingAction([companyField], config?.pendingFields)}
errors={getLatestErrorField(config, companyField)}
errorRowStyles={[styles.ph5, styles.pv3]}
onClose={() => clearFinancialForceErrorField(policyID, CONST.CERTINIA_CONFIG.COMPANY_ID)}
onClose={() => clearFinancialForceErrorField(policyID, companyField)}
/>
);
}
Expand Down
11 changes: 8 additions & 3 deletions src/pages/workspace/accounting/certinia/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -118,20 +118,25 @@ function isCertiniaDimensionParam(dimension: string): dimension is CertiniaDimen
return (CERTINIA_DIMENSION_PARAMS as readonly string[]).includes(dimension);
}

function isCertiniaSRPConnection(config: FinancialForceConnectionConfig | undefined): boolean {
return !!config?.hasPSA && config?.hasPSAOnly === false;
function isCertiniaFFAConnection(config: FinancialForceConnectionConfig | undefined): boolean {
return config?.hasPSAOnly === false;
}

function getCertiniaSelectedCompanyID(config: FinancialForceConnectionConfig | undefined): string | undefined {
return config?.hasPSA ? config.export?.companyID : config?.company;
}

export {
CERTINIA_DIMENSION_PARAMS,
CERTINIA_FFA_EXPORT_STATUSES,
dimensionParamToNumber,
getCertiniaSelectedCompanyID,
getCertiniaReportExportStatusValue,
getCertiniaFFAExportStatusValue,
getDimensionLabel,
getDisplayTypeLabel,
getParentTagMappingLabel,
isCertiniaSRPConnection,
isCertiniaFFAConnection,
isCertiniaDimensionParam,
updateFinancialForceDimensionMapping,
};
Expand Down
5 changes: 4 additions & 1 deletion src/types/onyx/Policy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1473,7 +1473,7 @@ type FinancialForceConnectionData = {

/** Certinia credentials (Salesforce / Certinia org); fields populate as OAuth / sync complete */
type FinancialForceCredentials = {
/** Certinia company ID */
/** Salesforce organization ID */
companyID?: string;

/** Salesforce enterprise / instance URL */
Expand Down Expand Up @@ -1564,6 +1564,9 @@ type FinancialForceConnectionConfig = OnyxCommon.OnyxValueWithOfflineFeedback<
/** Whether the connection has been fully set up */
isConfigured?: boolean;

/** FFA Accounting Company ID */
company?: string;

/** Certinia import / coding settings */
coding: FinancialForceCodingConfig;

Expand Down
Loading