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 1757d8ab25..a80d597463 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 @@ -152,8 +152,6 @@ import com.navi.pay.npcicl.CredDataProvider import com.navi.pay.npcicl.NpciRepository import com.navi.pay.npcicl.NpciResult import com.navi.pay.onboarding.account.add.model.view.AccountType -import com.navi.pay.onboarding.account.common.model.view.VpaEntity -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.account.detail.model.view.deepCopy import com.navi.pay.utils.ACCOUNT_ID @@ -3135,10 +3133,9 @@ constructor( if (source !is SendMoneyScreenSource.CollectRequest) { return@launch } - val vpaEntity = - selectedBankAccount.value?.vpaEntityList?.firstOrNull { - it.vpa.equals(source.payerVpa, ignoreCase = true) - } ?: return@launch + val selectedBankAccount = selectedBankAccount.value ?: return@launch + val collectRequestPsp = PspType.fromVpa(source.payerVpa) ?: return@launch + val vpaEntity = selectedBankAccount.getVpaEntityByPsp(collectRequestPsp) naviPayPspManager.evaluateAndOnboardPspForVpa( vpaEntity = vpaEntity, @@ -3164,36 +3161,20 @@ constructor( return@evaluateAndOnboardPspForVpa } - val updatedBankAccount = - if (source.collectType.equals(REQUEST_TYPE_MANDATE, ignoreCase = true)) { - // Payer VPA will be UMN in case of mandate, so getting this from - // collect - // request item. - selectedBankAccount.value?.deepCopy( - vpaEntityList = - listOf( - VpaEntity( - vpa = source.umn!!, - isVpaPrimary = true, - status = VpaStatus.toVpaStatus(status = ""), - accountId = selectedBankAccount.value?.accountId ?: "", - bankAccountUniqueId = - selectedBankAccount.value - ?.getBuidByPsp(pspType) - .orEmpty(), - ) - ) - ) + // Payer VPA will be UMN in case of mandate + val collectRequestVpa = + if (isCollectRequestOfTypeMandate(collectType = source.collectType)) { + source.umn } else { - selectedBankAccount.value - } + source.payerVpa + } ?: return@evaluateAndOnboardPspForVpa - if (updatedBankAccount == null) { - if (pspEvaluationResult.isOnboardingTriggered) { - updateTriggerDismissBottomSheet() - } - return@evaluateAndOnboardPspForVpa - } + val updatedVpaEntityForCollectRequest = vpaEntity.copy(vpa = collectRequestVpa) + + val updatedBankAccount = + selectedBankAccount.deepCopy( + vpaEntityList = listOf(updatedVpaEntityForCollectRequest) + ) if (!pspEvaluationResult.isOnboardingTriggered) { updateShowPayButtonLoader(true) @@ -3252,10 +3233,7 @@ constructor( upiRequestId = upiRequestId, credBlock = npciResult.data, selectedBankAccount = updatedBankAccount, - collectRequestVpa = - vpaEntity.vpa, // TODO: Multibank - Check if this is correct for - // mandate - // collect request approve + collectRequestVpa = collectRequestVpa, pspType = pspEvaluationResult.onboardingDataEntity.pspType, ) } @@ -3275,15 +3253,21 @@ constructor( } private fun declineCollectRequest() { - // TODO: - Check if we need to handle this for mandate decline case viewModelScope.launch(Dispatchers.IO) { if (source !is SendMoneyScreenSource.CollectRequest) { return@launch } - val vpaEntity = - selectedBankAccount.value?.vpaEntityList?.firstOrNull { - it.vpa.equals(source.payerVpa, ignoreCase = true) + val selectedBankAccount = selectedBankAccount.value ?: return@launch + val collectRequestPsp = PspType.fromVpa(source.payerVpa) ?: return@launch + val vpaEntity = selectedBankAccount.getVpaEntityByPsp(collectRequestPsp) + + // Payer VPA will be UMN in case of mandate + val collectRequestVpa = + if (isCollectRequestOfTypeMandate(collectType = source.collectType)) { + source.umn + } else { + source.payerVpa } ?: return@launch naviPayPspManager.evaluateAndOnboardPspForVpa( @@ -3300,15 +3284,6 @@ constructor( ) } - if ( - selectedBankAccount.value == null && - pspEvaluationResult.isOnboardingTriggered - ) { - updateTriggerDismissBottomSheet() - } - - val selectedBankAccount = - selectedBankAccount.value ?: return@evaluateAndOnboardPspForVpa val upiRequestId = payeeEntity.value.transactionId ?: "" updatePayeeEntity( @@ -3324,9 +3299,7 @@ constructor( credBlock = null, selectedBankAccount = selectedBankAccount, isOnboardingTriggered = pspEvaluationResult.isOnboardingTriggered, - collectRequestVpa = - vpaEntity.vpa, // TODO: Check if this is correct for mandate collect - // request decline + collectRequestVpa = collectRequestVpa, pspType = pspEvaluationResult.onboardingDataEntity.pspType, ) }, @@ -3334,6 +3307,9 @@ constructor( } } + private fun isCollectRequestOfTypeMandate(collectType: String): Boolean = + collectType.equals(REQUEST_TYPE_MANDATE, ignoreCase = true) + private suspend fun processCollectRequest( collectRequestAction: CollectRequestAction, upiRequestId: String,