diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModel.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModel.kt index 192594656a..bb3a447bb7 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModel.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModel.kt @@ -141,6 +141,7 @@ import com.navi.pay.onboarding.account.common.model.view.VpaStatus import com.navi.pay.onboarding.account.detail.model.view.LinkedAccountEntity import com.navi.pay.onboarding.common.NaviPayOnboardingActionsType import com.navi.pay.onboarding.common.view.OnboardingIntentData +import com.navi.pay.utils.ALL_ENABLED_ACCOUNTS import com.navi.pay.utils.AMOUNT_MAX_LENGTH import com.navi.pay.utils.AMOUNT_MAX_LENGTH_AFTER_DECIMAL import com.navi.pay.utils.AMOUNT_MAX_LENGTH_BEFORE_DECIMAL @@ -150,6 +151,7 @@ import com.navi.pay.utils.AT_THE_RATE_CHAR import com.navi.pay.utils.BANK_ACCOUNT_UNIQUE_ID import com.navi.pay.utils.COLLECT_REQUEST_ERROR import com.navi.pay.utils.CREDIT_CARD_AND_SAVINGS_ONLY_ENABLED_ACCOUNTS +import com.navi.pay.utils.CREDIT_LINE_AND_SAVINGS_ONLY_ENABLED_ACCOUNTS import com.navi.pay.utils.DEFAULT_CONFIG import com.navi.pay.utils.DEFAULT_UPI_PURPOSE import com.navi.pay.utils.DS_KEY_NAVI_PAY_CUSTOMER_STATUS @@ -261,6 +263,27 @@ constructor( private val upiLiteAnalytics: NaviPayAnalytics.NaviPayUPILite = NaviPayAnalytics.INSTANCE.NaviPayUPILite() + private val mccForRccAndClNotSupported = + listOf( + "6010", + "6012", + "6013", + "7407", + "7408", + "7409", + "0000", + "6011", + "6051", + "6211", + "7322", + "7800", + "7801", + "7995", + "7802", + "9406", + "4829", + ) + private val _bankAccountsState = MutableStateFlow(BankAccountsState.Loading) val bankAccountsState = _bankAccountsState.asStateFlow() @@ -1164,7 +1187,11 @@ constructor( // Credit card checks if (linkedAccountEntity.accountType == AccountType.CREDIT.name) { - if (!payeeEntity.value.isMerchant || transactionType == UpiTransactionType.SELF_PAY) { + if ( + !payeeEntity.value.isMerchant || + payeeEntity.value.mcc in mccForRccAndClNotSupported || + transactionType == UpiTransactionType.SELF_PAY + ) { linkedAccountEntity.eligibilityState = EligibilityState( isAccountEligible = false, @@ -1177,7 +1204,11 @@ constructor( // Credit line checks if (linkedAccountEntity.accountType == AccountType.UPICREDIT.name) { - if (!payeeEntity.value.isMerchant || transactionType == UpiTransactionType.SELF_PAY) { + if ( + !payeeEntity.value.isMerchant || + payeeEntity.value.mcc in mccForRccAndClNotSupported || + transactionType == UpiTransactionType.SELF_PAY + ) { linkedAccountEntity.eligibilityState = EligibilityState( isAccountEligible = false, @@ -1811,10 +1842,9 @@ constructor( // Show add account if all accounts are ineligible bankAccountState is BankAccountsState.AccountList && bankAccountState.accounts.none { it.eligibilityState.isAccountEligible } -> { - val isRccEnabled = isRccEnabledForAddition() SendMoneyMainCtaState.AddAccount( ctaText = - if (isRccEnabled) + if (isRccEnabledForTransaction() || isClEnabledForTransaction()) resourceProvider.getString(resId = R.string.add_account) else resourceProvider.getString(resId = R.string.add_bank_account) ) @@ -3177,24 +3207,35 @@ constructor( } } - private fun isRccEnabledForAddition(): Boolean { + private fun isRccEnabledForTransaction(): Boolean { val paymentAmount = paymentAmount.value.text.toDoubleOrNull() ?: 0.0 - return payeeEntity.value.mcc.isNotNullAndNotEmpty() && + return payeeEntity.value.isMerchant && + payeeEntity.value.mcc !in mccForRccAndClNotSupported && accountEligibilityMerchantHelper.getAccountEligibility( eligibility = accountTypeEligibilityMap[AccountEligibilityMerchantHelper.CREDIT], amount = paymentAmount, ) } + private fun isClEnabledForTransaction(): Boolean { + val paymentAmount = paymentAmount.value.text.toDoubleOrNull() ?: 0.0 + return payeeEntity.value.isMerchant && + payeeEntity.value.mcc !in mccForRccAndClNotSupported && + accountEligibilityMerchantHelper.getAccountEligibility( + eligibility = accountTypeEligibilityMap[AccountEligibilityMerchantHelper.UPICREDIT], + amount = paymentAmount, + ) + } + fun addAccountSdkAction() { viewModelScope.launch(Dispatchers.IO) { val onboardingAction = NaviPayOnboardingActionsType.ACCOUNT_ADDITION.name - - val isRccEnabledForAddition = isRccEnabledForAddition() - val enabledAccountTypes = when { - isRccEnabledForAddition -> CREDIT_CARD_AND_SAVINGS_ONLY_ENABLED_ACCOUNTS + isRccEnabledForTransaction() && isClEnabledForTransaction() -> + ALL_ENABLED_ACCOUNTS + isRccEnabledForTransaction() -> CREDIT_CARD_AND_SAVINGS_ONLY_ENABLED_ACCOUNTS + isClEnabledForTransaction() -> CREDIT_LINE_AND_SAVINGS_ONLY_ENABLED_ACCOUNTS else -> SAVINGS_ONLY_ENABLED_ACCOUNTS }