diff --git a/src/libs/PaymentUtils.ts b/src/libs/PaymentUtils.ts index 888035e4d6b3..591b5701e094 100644 --- a/src/libs/PaymentUtils.ts +++ b/src/libs/PaymentUtils.ts @@ -225,7 +225,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); @@ -242,6 +241,9 @@ function getActivePaymentType(paymentMethod: string | undefined, activeAdminPoli break; } + // When user explicitly selects "Pay Elsewhere" / "Mark as Paid", don't require payment method selection since payment happens outside of Expensify + const shouldSelectPaymentMethod = paymentMethod !== CONST.IOU.PAYMENT_TYPE.ELSEWHERE && (isPaymentMethod || !isEmpty(latestBankItems)); + return { paymentType, selectedPolicy, 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);