NTP-31439 | Vedant Aggarwal | RCC/CL blocked for unsupported MCC (#14681)
This commit is contained in:
@@ -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>(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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user