From eb2ffa5eb3282b7a92ceca8a22b7ab29af84034a Mon Sep 17 00:00:00 2001 From: Srikar Parsi Date: Wed, 4 Feb 2026 13:07:35 -0500 Subject: [PATCH 1/4] Don't use bank account flow for pay elsewhere --- src/libs/PaymentUtils.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libs/PaymentUtils.ts b/src/libs/PaymentUtils.ts index 3c522efa9686..fe6fb81897d4 100644 --- a/src/libs/PaymentUtils.ts +++ b/src/libs/PaymentUtils.ts @@ -223,7 +223,6 @@ const isSecondaryActionAPaymentOption = (item: PopoverMenuItem): item is Payment */ function getActivePaymentType(paymentMethod: string | undefined, activeAdminPolicies: Policy[], latestBankItems: BankAccountMenuItem[] | undefined, policyID?: string | undefined) { const isPaymentMethod = Object.values(CONST.PAYMENT_METHODS).includes(paymentMethod as ValueOf); - const shouldSelectPaymentMethod = isPaymentMethod || !isEmpty(latestBankItems); // payment method is equal to policyID when user selects "Pay via workspace" option const selectedPolicy = activeAdminPolicies.find((activePolicy) => activePolicy.id === policyID || activePolicy.id === paymentMethod); @@ -240,6 +239,9 @@ function getActivePaymentType(paymentMethod: string | undefined, activeAdminPoli break; } + // "Pay Elsewhere" doesn't require payment method selection/validation since payment happens outside of Expensify + const shouldSelectPaymentMethod = paymentType !== CONST.IOU.PAYMENT_TYPE.ELSEWHERE && (isPaymentMethod || !isEmpty(latestBankItems)); + return { paymentType, selectedPolicy, From 25abb09a1fa0e223174f1671e96933a39830c1a5 Mon Sep 17 00:00:00 2001 From: Srikar Parsi Date: Wed, 4 Feb 2026 13:33:26 -0500 Subject: [PATCH 2/4] explicitly check --- src/libs/PaymentUtils.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/libs/PaymentUtils.ts b/src/libs/PaymentUtils.ts index fe6fb81897d4..35e78d6ed49a 100644 --- a/src/libs/PaymentUtils.ts +++ b/src/libs/PaymentUtils.ts @@ -239,8 +239,9 @@ function getActivePaymentType(paymentMethod: string | undefined, activeAdminPoli break; } - // "Pay Elsewhere" doesn't require payment method selection/validation since payment happens outside of Expensify - const shouldSelectPaymentMethod = paymentType !== CONST.IOU.PAYMENT_TYPE.ELSEWHERE && (isPaymentMethod || !isEmpty(latestBankItems)); + // When user explicitly selects "Pay Elsewhere" / "Mark as Paid", don't require payment method selection since payment happens outside of Expensify + const isExplicitElsewherePayment = paymentMethod === CONST.IOU.PAYMENT_TYPE.ELSEWHERE; + const shouldSelectPaymentMethod = !isExplicitElsewherePayment && (isPaymentMethod || !isEmpty(latestBankItems)); return { paymentType, From 9e4ff51270f1b24c21fce564f2c1013e3655bfa1 Mon Sep 17 00:00:00 2001 From: Srikar Parsi Date: Wed, 4 Feb 2026 13:44:06 -0500 Subject: [PATCH 3/4] simplify --- src/libs/PaymentUtils.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/libs/PaymentUtils.ts b/src/libs/PaymentUtils.ts index 35e78d6ed49a..869acecc9dcd 100644 --- a/src/libs/PaymentUtils.ts +++ b/src/libs/PaymentUtils.ts @@ -240,8 +240,7 @@ function getActivePaymentType(paymentMethod: string | undefined, activeAdminPoli } // When user explicitly selects "Pay Elsewhere" / "Mark as Paid", don't require payment method selection since payment happens outside of Expensify - const isExplicitElsewherePayment = paymentMethod === CONST.IOU.PAYMENT_TYPE.ELSEWHERE; - const shouldSelectPaymentMethod = !isExplicitElsewherePayment && (isPaymentMethod || !isEmpty(latestBankItems)); + const shouldSelectPaymentMethod = paymentMethod !== CONST.IOU.PAYMENT_TYPE.ELSEWHERE && (isPaymentMethod || !isEmpty(latestBankItems)); return { paymentType, From 14a0d27ad2470ff86ebc2743ad299017f22cbc76 Mon Sep 17 00:00:00 2001 From: Srikar Parsi Date: Wed, 4 Feb 2026 15:02:13 -0500 Subject: [PATCH 4/4] add test --- tests/unit/PaymentUtilsTest.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/unit/PaymentUtilsTest.ts b/tests/unit/PaymentUtilsTest.ts index cf59236bccdc..038c29e5c484 100644 --- a/tests/unit/PaymentUtilsTest.ts +++ b/tests/unit/PaymentUtilsTest.ts @@ -110,6 +110,13 @@ describe('PaymentUtils', () => { expect(result.shouldSelectPaymentMethod).toBe(true); }); + it('should set shouldSelectPaymentMethod to false when paymentMethod is explicitly ELSEWHERE (Mark as Paid)', () => { + const result = getActivePaymentType(CONST.IOU.PAYMENT_TYPE.ELSEWHERE, [], [bankItem]); + + expect(result.paymentType).toBe(CONST.IOU.PAYMENT_TYPE.ELSEWHERE); + expect(result.shouldSelectPaymentMethod).toBe(false); + }); + it('should find selectedPolicy by policyID', () => { const result = getActivePaymentType(undefined, [randomPolicyA, randomPolicyB], undefined, randomPolicyA.id);