NTP-52793 | Payer VPA Collect request for mandate fix (#15637)

This commit is contained in:
Aditya Narayan Malik
2025-04-04 15:16:57 +05:30
committed by GitHub
parent 8761406a28
commit cf2356760f

View File

@@ -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,