diff --git a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/model/WebPaymentModels.kt b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/model/WebPaymentModels.kt index bcae296d9d..35f5805167 100644 --- a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/model/WebPaymentModels.kt +++ b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/model/WebPaymentModels.kt @@ -7,7 +7,6 @@ package com.navi.payment.nativepayment.model -import android.net.Uri import android.os.Bundle import android.os.Parcelable import com.navi.common.network.models.GenericErrorResponse @@ -16,8 +15,6 @@ import com.navi.common.upi.PAYER_BANK_ACCOUNT_ID import com.navi.common.upi.T_STORE_ORDER_REFERENCE_ID import com.navi.common.utils.EMPTY import com.navi.common.utils.log -import com.navi.pay.management.common.sendmoney.model.view.PayeeEntity -import com.navi.pay.management.moneytransfer.scanpay.util.getPayeeEntity import com.navi.pay.utils.NAVI_PAY_UPI_URI_KEY import com.navi.payment.paymentscreen.model.PaymentErrorData import kotlinx.parcelize.Parcelize @@ -50,7 +47,7 @@ sealed class WebPaymentData : Parcelable { val tstoreOrderReferenceId: String, val metadata: String, val payerBankAccountId: String, - val payeeEntity: PayeeEntity, + val naviPayUpiUriKey: String?, ) : WebPaymentData() { companion object { fun from(bundle: Bundle): WebViewSendMoneyData { @@ -58,9 +55,7 @@ sealed class WebPaymentData : Parcelable { tstoreOrderReferenceId = bundle.getString(T_STORE_ORDER_REFERENCE_ID).orEmpty(), metadata = bundle.getString(METADATA).orEmpty(), payerBankAccountId = bundle.getString(PAYER_BANK_ACCOUNT_ID).orEmpty(), - payeeEntity = - Uri.parse(bundle.getString(NAVI_PAY_UPI_URI_KEY).orEmpty()) - .getPayeeEntity(true), + naviPayUpiUriKey = bundle.getString(NAVI_PAY_UPI_URI_KEY).orEmpty(), ) } } diff --git a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/screens/MPSScreen.kt b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/screens/MPSScreen.kt index b907e983d2..c3ec007442 100644 --- a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/screens/MPSScreen.kt +++ b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/screens/MPSScreen.kt @@ -7,7 +7,6 @@ package com.navi.payment.nativepayment.screens -import android.net.Uri import androidx.activity.compose.BackHandler import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts @@ -55,7 +54,6 @@ import com.navi.pay.common.ui.NaviPayModalBottomSheetLayout import com.navi.pay.management.common.sendmoney.model.view.BankAccountsState import com.navi.pay.management.common.sendmoney.model.view.SendMoneyScreenSource import com.navi.pay.management.common.sendmoney.ui.PaymentFailedRetryBottomSheetContent -import com.navi.pay.management.moneytransfer.scanpay.util.getPayeeEntity import com.navi.pay.onboarding.account.detail.model.view.LinkedAccountEntity import com.navi.pay.utils.isAccountIdOfTypeUpiLite import com.navi.payment.R as PaymentR @@ -178,10 +176,9 @@ fun MPSScreen( ), naviUpiTransactionInfo = NaviUpiTransactionInfo( - payeeEntity = - Uri.parse(payload?.naviPayUpiUriKey).getPayeeEntity(true), + naviPayUpiUriKey = payload?.naviPayUpiUriKey, upiRequestId = pmsSendMoneyStatus.upiRequestId, - selectedBankAccount = selectedBankAccount, + selectedBankAccountId = selectedBankAccount?.accountId.orEmpty(), credBlock = pmsSendMoneyStatus.credBlock.orEmpty(), metaData = Gson().toJson(payload?.metadata), txnTimeStamp = mpsViewModel.txnTimeStamp, diff --git a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/screens/OneClickCheckoutScreen.kt b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/screens/OneClickCheckoutScreen.kt index 91f3c31852..2fcc0eb91c 100644 --- a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/screens/OneClickCheckoutScreen.kt +++ b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/screens/OneClickCheckoutScreen.kt @@ -7,7 +7,6 @@ package com.navi.payment.nativepayment.screens -import android.net.Uri import androidx.activity.compose.BackHandler import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts @@ -38,7 +37,6 @@ import com.navi.pay.common.theme.color.NaviPayColor import com.navi.pay.common.ui.NaviPayModalBottomSheet import com.navi.pay.management.common.sendmoney.model.view.SendMoneyScreenSource import com.navi.pay.management.common.sendmoney.ui.PaymentFailedRetryBottomSheetContent -import com.navi.pay.management.moneytransfer.scanpay.util.getPayeeEntity import com.navi.payment.nativepayment.NaviPaymentAnalyticScreenName import com.navi.payment.nativepayment.NaviPaymentAnalytics import com.navi.payment.nativepayment.activity.NaviPaymentActivity @@ -331,9 +329,10 @@ private fun navigateToTransactionPollingScreen( ), naviUpiTransactionInfo = NaviUpiTransactionInfo( - payeeEntity = Uri.parse(payload?.naviPayUpiUriKey).getPayeeEntity(true), + naviPayUpiUriKey = payload?.naviPayUpiUriKey, upiRequestId = pmsSendMoneyStatus.upiRequestId, - selectedBankAccount = oneClickCheckoutViewModel.linkedAccountEntity, + selectedBankAccountId = + oneClickCheckoutViewModel.linkedAccountEntity?.accountId.orEmpty(), credBlock = pmsSendMoneyStatus.credBlock.orEmpty(), metaData = Gson().toJson(payload?.metadata), txnTimeStamp = oneClickCheckoutViewModel.txnTimeStamp, diff --git a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/screens/WebPaymentMainScreen.kt b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/screens/WebPaymentMainScreen.kt index 206fb66fad..a44c15e559 100644 --- a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/screens/WebPaymentMainScreen.kt +++ b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/screens/WebPaymentMainScreen.kt @@ -171,9 +171,8 @@ fun WebPaymentMainScreen( val tstoreOrderReferenceId = data?.tstoreOrderReferenceId val metadata = data?.metadata val payerBankAccountId = data?.payerBankAccountId - val payeeEntity = data?.payeeEntity webPaymentViewModel.startNaviUpiPayment( - payeeEntity = payeeEntity, + naviPayUpiUriKey = data?.naviPayUpiUriKey, tstoreOrderId = tstoreOrderReferenceId.orEmpty(), metaData = metadata, bankAccountId = payerBankAccountId.orEmpty(), diff --git a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/usecase/PmsSendMoneyUseCase.kt b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/usecase/PmsSendMoneyUseCase.kt index 3b7f1da646..82c833d69e 100644 --- a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/usecase/PmsSendMoneyUseCase.kt +++ b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/usecase/PmsSendMoneyUseCase.kt @@ -7,6 +7,7 @@ package com.navi.payment.nativepayment.usecase +import android.net.Uri import com.navi.base.AppServiceManager import com.navi.base.utils.ResourceProvider import com.navi.base.utils.UNDERSCORE @@ -21,6 +22,7 @@ import com.navi.pay.common.model.view.NaviPayButtonAction import com.navi.pay.common.model.view.NaviPayButtonTheme import com.navi.pay.common.model.view.NaviPayErrorButtonConfig import com.navi.pay.common.model.view.NaviPayErrorConfig +import com.navi.pay.common.usecase.LinkedAccountsUseCase import com.navi.pay.common.usecase.SendMoneyUseCase import com.navi.pay.common.usecase.UpiRequestIdUseCase import com.navi.pay.common.utils.DeviceInfoProvider @@ -32,6 +34,7 @@ import com.navi.pay.management.common.sendmoney.model.network.TransactionRespons import com.navi.pay.management.common.sendmoney.model.view.PayeeEntity import com.navi.pay.management.common.sendmoney.model.view.SendMoneyScreenSource import com.navi.pay.management.common.sendmoney.model.view.UpiTransactionType +import com.navi.pay.management.moneytransfer.scanpay.util.getPayeeEntity import com.navi.pay.onboarding.account.detail.model.view.LinkedAccountEntity import com.navi.pay.onboarding.binding.model.view.NaviPayCustomerOnboardingEntity import com.navi.pay.utils.NAVI_AXIS_UPI_HANDLE @@ -41,6 +44,7 @@ import com.navi.payment.nativepayment.NaviPaymentAnalytics import com.navi.payment.nativepayment.model.PMSSendMoneyStatus import com.navi.payment.paymentscreen.model.NaviUpiTransactionInfo import javax.inject.Inject +import kotlinx.coroutines.flow.first class PmsSendMoneyUseCase @Inject @@ -51,6 +55,7 @@ constructor( private val deviceInfoProvider: DeviceInfoProvider, private val upiRequestIdUseCase: UpiRequestIdUseCase, private val sendMoneyUseCase: SendMoneyUseCase, + private val linkedAccountUseCase: LinkedAccountsUseCase, ) { private val naviPaymentAnalytics = NaviPaymentAnalytics.INSTANCE.CommonAnalytics() @@ -304,18 +309,23 @@ constructor( onInitialChecksFailure(errorConfig) return } - naviUpiTransactionInfo.selectedBankAccount?.isArcProtected = - naviUpiTransactionInfo.isArcProtected + val selectedBankAccount = + fetchLinkedAccountEntity(accountId = naviUpiTransactionInfo.selectedBankAccountId) + if (selectedBankAccount == null) { + onInitialChecksFailure(getGenericErrorConfig()) + return + } + selectedBankAccount.isArcProtected = naviUpiTransactionInfo.isArcProtected sendMoneyUseCase.executeSendMoney( - payeeEntity = naviUpiTransactionInfo.payeeEntity, + payeeEntity = + Uri.parse(naviUpiTransactionInfo.naviPayUpiUriKey) + .getPayeeEntity(isVerifiedVpa = true), upiRequestId = naviUpiTransactionInfo.upiRequestId, - selectedBankAccount = naviUpiTransactionInfo.selectedBankAccount!!, + selectedBankAccount = selectedBankAccount, txnTimeStamp = naviUpiTransactionInfo.txnTimeStamp, credBlock = naviUpiTransactionInfo.credBlock, isPaymentFromLiteAccount = - naviUpiTransactionInfo.selectedBankAccount.accountId - .isAccountIdOfTypeUpiLite() - .orFalse(), + selectedBankAccount.accountId.isAccountIdOfTypeUpiLite().orFalse(), sendMoneyScreenSource = SendMoneyScreenSource.PMS, transactionType = UpiTransactionType.INTENT_PAY, tstoreOrderId = tstoreOrderId, @@ -329,4 +339,9 @@ constructor( customerOnboardingEntity = naviUpiTransactionInfo.onboardingDataEntity, ) } + + private suspend fun fetchLinkedAccountEntity(accountId: String): LinkedAccountEntity? { + val accounts = linkedAccountUseCase.execute(includeAllDetails = true).first() + return accounts.firstOrNull { it.accountId == accountId } + } } diff --git a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/NPSViewModel.kt b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/NPSViewModel.kt index a619d5aedc..fcdbf0be4f 100644 --- a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/NPSViewModel.kt +++ b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/NPSViewModel.kt @@ -1485,12 +1485,13 @@ constructor( payNowResponse = payNowResponse, naviUpiTransactionInfo = NaviUpiTransactionInfo( - selectedBankAccount = - npsScreenState.naviUpiPaymentState.selectedBankAccount, + selectedBankAccountId = + npsScreenState.naviUpiPaymentState.selectedBankAccount + ?.accountId + .orEmpty(), credBlock = pmsSendMoneyStatus.credBlock.orEmpty(), upiRequestId = pmsSendMoneyStatus.upiRequestId, - payeeEntity = - Uri.parse(payload?.naviPayUpiUriKey).getPayeeEntity(true), + naviPayUpiUriKey = payload?.naviPayUpiUriKey, metaData = Gson().toJson(payload?.metadata), txnTimeStamp = txnTimeStamp, isArcProtected = diff --git a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/TransactionPollingViewModel.kt b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/TransactionPollingViewModel.kt index 0e1f75ae87..2bdb303425 100644 --- a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/TransactionPollingViewModel.kt +++ b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/TransactionPollingViewModel.kt @@ -242,9 +242,8 @@ constructor( response = sendMoneyResponse, sourceDestination = sourceDestination, isPaymentThroughLiteAccount = - naviUpiTransactionInfo.selectedBankAccount - ?.accountId - ?.isAccountIdOfTypeUpiLite() + naviUpiTransactionInfo.selectedBankAccountId + .isAccountIdOfTypeUpiLite() .orFalse(), ) ) diff --git a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/UpiIntentViewModel.kt b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/UpiIntentViewModel.kt index 0db24301b9..9326e9e320 100644 --- a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/UpiIntentViewModel.kt +++ b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/UpiIntentViewModel.kt @@ -599,15 +599,18 @@ constructor( payNowResponse = payNowResponse, naviUpiTransactionInfo = NaviUpiTransactionInfo( - selectedBankAccount = + selectedBankAccountId = getLinkedAccountEntityFromVpaIfAvailable( - vpa = - upiScreenState.npsBaseState.upiCollectOptionState.upiCollectVpa - .text - ), + vpa = + upiScreenState.npsBaseState.upiCollectOptionState + .upiCollectVpa + .text + ) + ?.accountId + .orEmpty(), credBlock = pmsSendMoneyStatus.credBlock.orEmpty(), upiRequestId = pmsSendMoneyStatus.upiRequestId, - payeeEntity = Uri.parse(payload?.naviPayUpiUriKey).getPayeeEntity(true), + naviPayUpiUriKey = payload?.naviPayUpiUriKey, metaData = Gson().toJson(payload?.metadata), txnTimeStamp = txnTimeStamp, onboardingDataEntity = pmsSendMoneyStatus.onboardingDataEntity, diff --git a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/WebPaymentViewModel.kt b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/WebPaymentViewModel.kt index 2a2a876288..a1c3d87d72 100644 --- a/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/WebPaymentViewModel.kt +++ b/android/navi-payment/src/main/java/com/navi/payment/nativepayment/viewmodel/WebPaymentViewModel.kt @@ -40,7 +40,6 @@ import com.navi.pay.common.setup.NaviPayManager import com.navi.pay.common.usecase.LinkedAccountsUseCase import com.navi.pay.common.viewmodel.NaviPayBaseVM.Companion.ERROR_DEFAULT_TAG import com.navi.pay.management.common.sendmoney.model.view.BankAccountsState -import com.navi.pay.management.common.sendmoney.model.view.PayeeEntity import com.navi.pay.management.common.utils.NaviPayPspManager import com.navi.pay.management.moneytransfer.scanpay.util.getPayeeEntity import com.navi.pay.onboarding.account.detail.model.view.LinkedAccountEntity @@ -424,7 +423,7 @@ constructor( } fun startNaviUpiPayment( - payeeEntity: PayeeEntity?, + naviPayUpiUriKey: String?, tstoreOrderId: String, metaData: String?, bankAccountId: String, @@ -442,7 +441,7 @@ constructor( linkedAccountEntity.accountId.isAccountIdOfTypeUpiLite() -> handleLiteAccountPayment( linkedAccountEntity = linkedAccountEntity, - payeeEntity = payeeEntity, + naviPayUpiUriKey = naviPayUpiUriKey, tstoreOrderId = tstoreOrderId, metaData = metaData, txnTimeStamp = txnTimeStamp, @@ -450,7 +449,7 @@ constructor( else -> handleNonLiteAccountPayment( linkedAccountEntity = linkedAccountEntity, - payeeEntity = payeeEntity, + naviPayUpiUriKey = naviPayUpiUriKey, tstoreOrderId = tstoreOrderId, metaData = metaData, txnTimeStamp = txnTimeStamp, @@ -461,7 +460,7 @@ constructor( private suspend fun handleLiteAccountPayment( linkedAccountEntity: LinkedAccountEntity, - payeeEntity: PayeeEntity?, + naviPayUpiUriKey: String?, tstoreOrderId: String, metaData: String?, txnTimeStamp: String, @@ -495,7 +494,7 @@ constructor( pspEvaluationResult.onboardingDataEntity?.let { onboardingEntity -> proceedToCLPinPage( - payeeEntity = payeeEntity, + naviPayUpiUriKey = naviPayUpiUriKey, linkedAccountEntity = linkedAccountEntity, txnTimeStamp = txnTimeStamp, metaData = metaData, @@ -509,7 +508,7 @@ constructor( private suspend fun handleNonLiteAccountPayment( linkedAccountEntity: LinkedAccountEntity, - payeeEntity: PayeeEntity?, + naviPayUpiUriKey: String?, tstoreOrderId: String, metaData: String?, txnTimeStamp: String, @@ -533,7 +532,7 @@ constructor( return@evaluateAndOnboardPspForFlow } proceedToCLPinPage( - payeeEntity = payeeEntity, + naviPayUpiUriKey = naviPayUpiUriKey, linkedAccountEntity = linkedAccountEntity, txnTimeStamp = txnTimeStamp, metaData = metaData, @@ -545,7 +544,7 @@ constructor( } private suspend fun proceedToCLPinPage( - payeeEntity: PayeeEntity?, + naviPayUpiUriKey: String?, linkedAccountEntity: LinkedAccountEntity, txnTimeStamp: String, metaData: String?, @@ -555,7 +554,7 @@ constructor( val sendMoneyStatus = pmsSendMoneyUseCase.performChecksAndGenerateCredBlock( - payeeEntity = payeeEntity!!, + payeeEntity = Uri.parse(naviPayUpiUriKey).getPayeeEntity(isVerifiedVpa = true), linkedAccountEntity = linkedAccountEntity, screenName = NaviPaymentAnalyticScreenName.WEB_PAYMENT_SCREEN.screenName, baseAnalyticsParam = getBaseAnalyticParams(), @@ -565,7 +564,7 @@ constructor( _showPayNowLoader.update { false } handlePinPageResult( sendMoneyStatus = sendMoneyStatus, - payeeEntity = payeeEntity, + naviPayUpiUriKey = naviPayUpiUriKey, txnTimeStamp = txnTimeStamp, linkedAccountEntity = linkedAccountEntity, metaData = metaData, @@ -577,7 +576,7 @@ constructor( private fun handlePinPageResult( sendMoneyStatus: PMSSendMoneyStatus, - payeeEntity: PayeeEntity, + naviPayUpiUriKey: String?, txnTimeStamp: String, linkedAccountEntity: LinkedAccountEntity, metaData: String?, @@ -591,11 +590,11 @@ constructor( onInitialChecksFailure = {}, naviUpiTransactionInfo = NaviUpiTransactionInfo( - payeeEntity = payeeEntity, + naviPayUpiUriKey = naviPayUpiUriKey, txnTimeStamp = txnTimeStamp, credBlock = sendMoneyStatus.credBlock!!, upiRequestId = sendMoneyStatus.upiRequestId, - selectedBankAccount = linkedAccountEntity, + selectedBankAccountId = linkedAccountEntity.accountId, metaData = metaData, onboardingDataEntity = onboardingEntity, ), @@ -653,10 +652,8 @@ constructor( payNowResponse = response.data (response.data as? InternalPayNowResponse)?.let { val payLoad = it.providerPayload - val payeeEntity = - Uri.parse(payLoad?.naviPayUpiUriKey).getPayeeEntity(isVerifiedVpa = true) startNaviUpiPayment( - payeeEntity = payeeEntity, + naviPayUpiUriKey = payLoad?.naviPayUpiUriKey, tstoreOrderId = payLoad?.tstoreOrderReferenceId.orEmpty(), metaData = Gson().toJson(payLoad?.metadata), bankAccountId = selectedBankAccount.value?.accountId.orEmpty(), diff --git a/android/navi-payment/src/main/java/com/navi/payment/paymentscreen/model/NaviUpiTransactionInfo.kt b/android/navi-payment/src/main/java/com/navi/payment/paymentscreen/model/NaviUpiTransactionInfo.kt index 1609c6ae66..dcb4449705 100644 --- a/android/navi-payment/src/main/java/com/navi/payment/paymentscreen/model/NaviUpiTransactionInfo.kt +++ b/android/navi-payment/src/main/java/com/navi/payment/paymentscreen/model/NaviUpiTransactionInfo.kt @@ -9,16 +9,14 @@ package com.navi.payment.paymentscreen.model import android.os.Parcelable import com.navi.common.constants.EMPTY -import com.navi.pay.management.common.sendmoney.model.view.PayeeEntity -import com.navi.pay.onboarding.account.detail.model.view.LinkedAccountEntity import com.navi.pay.onboarding.binding.model.view.NaviPayCustomerOnboardingEntity import kotlinx.parcelize.Parcelize @Parcelize data class NaviUpiTransactionInfo( - val payeeEntity: PayeeEntity, + val naviPayUpiUriKey: String?, val txnTimeStamp: String, - val selectedBankAccount: LinkedAccountEntity? = null, + val selectedBankAccountId: String, val credBlock: String, val metaData: String? = null, val upiRequestId: String = EMPTY,