Skip to content

Commit 060c78b

Browse files
authored
Merge pull request #61880 from callstack-internal/feat/waterim-61531
Feat: Show settlement account for admins who don't own bank account
2 parents 92dbcbe + 7be1e16 commit 060c78b

File tree

3 files changed

+39
-8
lines changed

3 files changed

+39
-8
lines changed

src/pages/workspace/expensifyCard/WorkspaceCardSettingsPage.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,11 @@ function WorkspaceCardSettingsPage({route}: WorkspaceCardSettingsPageProps) {
3232
const [cardSettings] = useOnyx(`${ONYXKEYS.COLLECTION.PRIVATE_EXPENSIFY_CARD_SETTINGS}${defaultFundID}`, {canBeMissing: false});
3333

3434
const paymentBankAccountID = cardSettings?.paymentBankAccountID;
35+
const paymentBankAccountNumber = cardSettings?.paymentBankAccountNumber;
3536
const isMonthlySettlementAllowed = cardSettings?.isMonthlySettlementAllowed ?? false;
3637
const settlementFrequency = cardSettings?.monthlySettlementDate ? CONST.EXPENSIFY_CARD.FREQUENCY_SETTING.MONTHLY : CONST.EXPENSIFY_CARD.FREQUENCY_SETTING.DAILY;
3738
const isSettlementFrequencyBlocked = !isMonthlySettlementAllowed && settlementFrequency === CONST.EXPENSIFY_CARD.FREQUENCY_SETTING.DAILY;
38-
const bankAccountNumber = paymentBankAccountID ? bankAccountList?.[paymentBankAccountID.toString()]?.accountData?.accountNumber ?? '' : '';
39+
const bankAccountNumber = bankAccountList?.[paymentBankAccountID?.toString() ?? '']?.accountData?.accountNumber ?? paymentBankAccountNumber ?? '';
3940

4041
return (
4142
<AccessOrNotFoundWrapper

src/pages/workspace/expensifyCard/WorkspaceSettlementAccountPage.tsx

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,18 @@ function WorkspaceSettlementAccountPage({route}: WorkspaceSettlementAccountPageP
3636
const policyID = route.params?.policyID;
3737
const defaultFundID = useDefaultFundID(policyID);
3838

39-
const [bankAccountsList] = useOnyx(ONYXKEYS.BANK_ACCOUNT_LIST);
40-
const [cardSettings] = useOnyx(`${ONYXKEYS.COLLECTION.PRIVATE_EXPENSIFY_CARD_SETTINGS}${defaultFundID}`);
41-
const [isUsedContinuousReconciliation] = useOnyx(`${ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION}${defaultFundID}`);
42-
const [reconciliationConnection] = useOnyx(`${ONYXKEYS.COLLECTION.EXPENSIFY_CARD_CONTINUOUS_RECONCILIATION_CONNECTION}${defaultFundID}`);
39+
const [bankAccountsList] = useOnyx(ONYXKEYS.BANK_ACCOUNT_LIST, {canBeMissing: true});
40+
const [cardSettings] = useOnyx(`${ONYXKEYS.COLLECTION.PRIVATE_EXPENSIFY_CARD_SETTINGS}${defaultFundID}`, {canBeMissing: true});
41+
const [isUsingContinuousReconciliation] = useOnyx(`${ONYXKEYS.COLLECTION.EXPENSIFY_CARD_USE_CONTINUOUS_RECONCILIATION}${defaultFundID}`, {canBeMissing: true});
42+
const [reconciliationConnection] = useOnyx(`${ONYXKEYS.COLLECTION.EXPENSIFY_CARD_CONTINUOUS_RECONCILIATION_CONNECTION}${defaultFundID}`, {canBeMissing: true});
4343

4444
const connectionName = reconciliationConnection ?? '';
4545
const connectionParam = getRouteParamForConnection(connectionName as ConnectionName);
4646

4747
const paymentBankAccountID = cardSettings?.paymentBankAccountID;
48-
const paymentBankAccountNumber = paymentBankAccountID ? bankAccountsList?.[paymentBankAccountID.toString()]?.accountData?.accountNumber ?? '' : '';
48+
const paymentBankAccountNumberFromCardSettings = cardSettings?.paymentBankAccountNumber;
49+
const paymentBankAccountAddressName = cardSettings?.paymentBankAccountAddressName;
50+
const paymentBankAccountNumber = bankAccountsList?.[paymentBankAccountID?.toString() ?? '']?.accountData?.accountNumber ?? paymentBankAccountNumberFromCardSettings ?? '';
4951

5052
const eligibleBankAccounts = getEligibleBankAccountsForCard(bankAccountsList ?? {});
5153

@@ -77,8 +79,30 @@ function WorkspaceSettlementAccountPage({route}: WorkspaceSettlementAccountPageP
7779
isSelected: bankAccountID === paymentBankAccountID,
7880
};
7981
});
82+
if (options.length === 0) {
83+
const bankName = (paymentBankAccountAddressName ?? '') as BankName;
84+
const bankAccountNumber = paymentBankAccountNumberFromCardSettings ?? '';
85+
const {icon, iconSize, iconStyles} = getBankIcon({bankName, styles});
86+
options.push({
87+
value: paymentBankAccountID,
88+
text: paymentBankAccountAddressName,
89+
leftElement: (
90+
<View style={[styles.flexRow, styles.alignItemsCenter, styles.mr3]}>
91+
<Icon
92+
src={icon}
93+
width={iconSize}
94+
height={iconSize}
95+
additionalStyles={iconStyles}
96+
/>
97+
</View>
98+
),
99+
alternateText: `${translate('workspace.expensifyCard.accountEndingIn')} ${getLastFourDigits(bankAccountNumber)}`,
100+
keyForList: paymentBankAccountID?.toString(),
101+
isSelected: true,
102+
});
103+
}
80104
return options;
81-
}, [eligibleBankAccounts, paymentBankAccountID, styles, translate]);
105+
}, [eligibleBankAccounts, paymentBankAccountAddressName, paymentBankAccountID, paymentBankAccountNumberFromCardSettings, styles, translate]);
82106

83107
const updateSettlementAccount = (value: number) => {
84108
updateSettlementAccountCard(domainName, defaultFundID, policyID, value, paymentBankAccountID);
@@ -116,7 +140,7 @@ function WorkspaceSettlementAccountPage({route}: WorkspaceSettlementAccountPageP
116140
listHeaderContent={
117141
<>
118142
<Text style={[styles.mh5, styles.mv4]}>{translate('workspace.expensifyCard.settlementAccountDescription')}</Text>
119-
{!!isUsedContinuousReconciliation && (
143+
{!!isUsingContinuousReconciliation && (
120144
<Text style={[styles.mh5, styles.mb6]}>
121145
<Text>{translate('workspace.expensifyCard.settlementAccountInfoPt1')}</Text>{' '}
122146
<TextLink onPress={() => Navigation.navigate(ROUTES.WORKSPACE_ACCOUNTING_RECONCILIATION_ACCOUNT_SETTINGS.getRoute(policyID, connectionParam))}>

src/types/onyx/ExpensifyCardSettings.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ type ExpensifyCardSettings = OnyxCommon.OnyxValueWithOfflineFeedback<{
3737

3838
/** Name of the domain card was issued for */
3939
domainName?: string;
40+
41+
/** Name of the bank account used for the card settlement */
42+
paymentBankAccountAddressName?: string;
43+
44+
/** Number of the bank account used for the card settlement */
45+
paymentBankAccountNumber?: string;
4046
}>;
4147

4248
export default ExpensifyCardSettings;

0 commit comments

Comments
 (0)