NTP-42965 || Shrihari | Razorpay to Turbo-checkout migration (#15149)
Co-authored-by: Aman S <aman.s@navi.com>
This commit is contained in:
@@ -45,6 +45,7 @@ import com.navi.amc.utils.AmcAnalytics.AMC_BTN_CSAT_PLAYSTORE_BSHEET_END
|
||||
import com.navi.amc.utils.AmcAnalytics.AMC_INIT_CSAT_PLAYSTORE_BSHEET
|
||||
import com.navi.amc.utils.AmcAnalytics.AMC_PAYMENT_TOKEN_RECEIVED
|
||||
import com.navi.amc.utils.AmcAnalytics.AMC_RECEIVED_NULL_POST_PAYMENT_DATA
|
||||
import com.navi.amc.utils.AmcAnalytics.ISIN
|
||||
import com.navi.amc.utils.AmcAnalytics.ORDER_STATUS_SCREEN
|
||||
import com.navi.amc.utils.AmcAnalytics.SCREEN_NAME
|
||||
import com.navi.amc.utils.Constant
|
||||
@@ -55,6 +56,7 @@ import com.navi.amc.utils.Constant.CARD_SHIMMER_ANIMATION_DELAY
|
||||
import com.navi.amc.utils.Constant.DATA
|
||||
import com.navi.amc.utils.Constant.DATA_SOURCE
|
||||
import com.navi.amc.utils.Constant.DISMISS
|
||||
import com.navi.amc.utils.Constant.FLOW_TYPE_SIP_PURCHASE
|
||||
import com.navi.amc.utils.Constant.FUND_ID
|
||||
import com.navi.amc.utils.Constant.GET_SIP_SUMMARY_BOTTOMSHEET
|
||||
import com.navi.amc.utils.Constant.HELP_BOTTOMSHEET
|
||||
@@ -69,6 +71,7 @@ import com.navi.amc.utils.Constant.PAYMENT_TIMESTAMP
|
||||
import com.navi.amc.utils.Constant.REQUEST_CONFIG
|
||||
import com.navi.amc.utils.Constant.SHOW_BOTTOMSHEET
|
||||
import com.navi.amc.utils.Constant.SIP_REFERENCE_ID
|
||||
import com.navi.amc.utils.Constant.SOURCE_TYPE
|
||||
import com.navi.amc.utils.Constant.THOUSAND
|
||||
import com.navi.amc.utils.Constant.THREE
|
||||
import com.navi.amc.utils.Constant.TRANSACTION_ID
|
||||
@@ -76,6 +79,7 @@ import com.navi.amc.utils.Constant.TURBO_CHECKOUT_FLOW
|
||||
import com.navi.amc.utils.Constant.WHITE
|
||||
import com.navi.amc.utils.SubPageStatusType
|
||||
import com.navi.amc.utils.TempStorageHelper
|
||||
import com.navi.amc.utils.bundleToMap
|
||||
import com.navi.amc.utils.getBottomSheet
|
||||
import com.navi.amc.utils.getPaymentSyncFlowStatusCta
|
||||
import com.navi.amc.utils.orValue
|
||||
@@ -131,10 +135,13 @@ import com.navi.naviwidgets.models.response.CsatWidget
|
||||
import com.navi.naviwidgets.utils.LottieEnums
|
||||
import com.navi.naviwidgets.widgets.InfoWithTimerWidgetLayout.Companion.COLOR_WHITE
|
||||
import com.navi.payment.listener.PaymentListener
|
||||
import com.navi.payment.model.common.PaymentSdkInitParams
|
||||
import com.navi.payment.model.initiatesdk.PaymentPrefetchMethodRequest
|
||||
import com.navi.payment.nativepayment.sharedviewmodel.NaviCheckoutViewModel
|
||||
import com.navi.payment.utils.PaymentAnalytics
|
||||
import com.navi.payment.utils.PaymentAnalytics.IS_TOKEN_VALID
|
||||
import com.navi.payment.utils.PaymentAnalytics.SYNC
|
||||
import com.navi.payment.utils.PaymentSource
|
||||
import com.navi.paymentclients.viewmodel.base.PaymentManager
|
||||
import com.navi.rr.scratchcard.model.GratificationStatus
|
||||
import com.navi.rr.scratchcard.model.ScratchCardBackData
|
||||
@@ -156,6 +163,7 @@ class OrderStatusFragment :
|
||||
private lateinit var binding: OrderStatusLayoutBinding
|
||||
private val viewModel by viewModels<OrderStatusViewModel>()
|
||||
private val paymentVM: PaymentManager by activityViewModels()
|
||||
private val naviCheckoutViewModel by activityViewModels<NaviCheckoutViewModel>()
|
||||
private val paymentSharedVM: PaymentSharedVM by activityViewModels()
|
||||
private val scratchCardSharedVm: ScratchCardSharedVm by activityViewModels()
|
||||
private var sipReferenceId: String? = null
|
||||
@@ -425,7 +433,48 @@ class OrderStatusFragment :
|
||||
it?.tokenDetails?.naviSdkToken.isNotNullAndNotEmpty().toString(),
|
||||
),
|
||||
)
|
||||
if (it?.syncFlow.orFalse()) {
|
||||
if (it?.isTurboCheckoutFlow.orFalse()) {
|
||||
it?.tokenDetails
|
||||
?.naviSdkToken
|
||||
?.takeIf { token -> token.isNotNullAndNotEmpty() }
|
||||
?.let { token ->
|
||||
val paymentSdkInitParams =
|
||||
PaymentSdkInitParams(
|
||||
token = token,
|
||||
requestId = it.tokenDetails?.transactionId.orEmpty(),
|
||||
mintToken = false,
|
||||
paymentPreFetchMethodRequest =
|
||||
PaymentPrefetchMethodRequest(
|
||||
callSdkExitOnBack = false,
|
||||
previousScreenName = PaymentSource.AMC.name,
|
||||
),
|
||||
paymentSource = PaymentSource.AMC.name,
|
||||
)
|
||||
|
||||
paymentSharedVM.paymentFlowType = FLOW_TYPE_SIP_PURCHASE
|
||||
|
||||
val bundle =
|
||||
Bundle().apply {
|
||||
putAll(arguments)
|
||||
putString(SOURCE_TYPE, PAYMENT)
|
||||
putString(
|
||||
TRANSACTION_ID,
|
||||
viewModel.paymentInitiateData.value?.tokenDetails?.transactionId,
|
||||
)
|
||||
putParcelable(
|
||||
REQUEST_CONFIG,
|
||||
viewModel.paymentInitiateData.value?.requestConfig,
|
||||
)
|
||||
putString(
|
||||
ORDER_ID,
|
||||
viewModel.paymentInitiateData.value?.tokenDetails?.naviOrderId,
|
||||
)
|
||||
}
|
||||
|
||||
paymentSharedVM.paymentArgsDataMap = bundleToMap(bundle)
|
||||
naviCheckoutViewModel.initiatePayment(paymentSdkInitParams)
|
||||
}
|
||||
} else if (it?.syncFlow.orFalse()) {
|
||||
paymentSharedVM.isSyncFlow = true
|
||||
if (it?.tokenDetails?.naviSdkToken.isNotNullAndNotEmpty()) {
|
||||
paymentSharedVM.syncFlowPaymentInitStartTime = System.currentTimeMillis()
|
||||
@@ -998,7 +1047,17 @@ class OrderStatusFragment :
|
||||
val isSipSummaryUrl = action.url.orEmpty().endsWith(GET_SIP_SUMMARY_BOTTOMSHEET, true)
|
||||
|
||||
if (isRetry && !isOtpUrl) {
|
||||
showLoader()
|
||||
buyFlowVM.apply {
|
||||
fundName = arguments?.getString(ORDER_HEADER_TITLE).orEmpty()
|
||||
fundId = action.parameters?.firstOrNull { it.key == ISIN }?.value.orEmpty()
|
||||
}
|
||||
arguments?.apply {
|
||||
putString(
|
||||
AMOUNT,
|
||||
action.parameters?.firstOrNull { it.key == AMOUNT }?.value.orEmpty(),
|
||||
)
|
||||
putString(ORDER_HEADER_SUBTITLE, arguments?.getString(ORDER_HEADER_SUBTITLE))
|
||||
}
|
||||
viewModel.postSameOrderPayment(
|
||||
PaymentOrder(orderId = arguments?.getString(ORDER_ID), paymentMode = paymentMode)
|
||||
)
|
||||
|
||||
@@ -23,20 +23,25 @@ import com.navi.amc.common.viewmodel.PaymentSharedVM
|
||||
import com.navi.amc.databinding.PaymentSummaryLayoutBinding
|
||||
import com.navi.amc.fundbuy.models.PaymentOrder
|
||||
import com.navi.amc.fundbuy.models.PaymentPostData
|
||||
import com.navi.amc.fundbuy.models.SipDetailsData
|
||||
import com.navi.amc.fundbuy.models.SipDetailsResponse
|
||||
import com.navi.amc.fundbuy.models.SubItemData
|
||||
import com.navi.amc.fundbuy.viewmodel.PaymentSummaryViewModel
|
||||
import com.navi.amc.utils.*
|
||||
import com.navi.amc.utils.AmcAnalytics.ISIN
|
||||
import com.navi.amc.utils.Constant.AMOUNT
|
||||
import com.navi.amc.utils.Constant.FLOW_TYPE_SIP_PURCHASE
|
||||
import com.navi.amc.utils.Constant.LUMPSUM
|
||||
import com.navi.amc.utils.Constant.ORDER_HEADER_SUBTITLE
|
||||
import com.navi.amc.utils.Constant.ORDER_HEADER_TITLE
|
||||
import com.navi.amc.utils.Constant.ORDER_ID
|
||||
import com.navi.amc.utils.Constant.PAYMENT
|
||||
import com.navi.amc.utils.Constant.PAYMENT_MODE
|
||||
import com.navi.amc.utils.Constant.REQUEST_CONFIG
|
||||
import com.navi.amc.utils.Constant.RETRY_PAYMENT
|
||||
import com.navi.amc.utils.Constant.SIP
|
||||
import com.navi.amc.utils.Constant.SIP_REFERENCE_ID
|
||||
import com.navi.amc.utils.Constant.SOURCE_TYPE
|
||||
import com.navi.amc.utils.Constant.TRANSACTION_ID
|
||||
import com.navi.amc.utils.Constant.TYPE
|
||||
import com.navi.amc.utils.SubPageStatusType.PAYMENT_INIT_SUMMARY
|
||||
@@ -54,7 +59,11 @@ import com.navi.design.utils.*
|
||||
import com.navi.naviwidgets.extensions.showWhenDataIsAvailable
|
||||
import com.navi.naviwidgets.utils.getGradientDrawable
|
||||
import com.navi.payment.listener.PaymentListener
|
||||
import com.navi.payment.model.common.PaymentSdkInitParams
|
||||
import com.navi.payment.model.initiatesdk.PaymentPrefetchMethodRequest
|
||||
import com.navi.payment.nativepayment.sharedviewmodel.NaviCheckoutViewModel
|
||||
import com.navi.payment.utils.PaymentAnalytics
|
||||
import com.navi.payment.utils.PaymentSource
|
||||
import com.navi.paymentclients.viewmodel.base.PaymentManager
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import java.math.BigDecimal
|
||||
@@ -64,6 +73,7 @@ class PaymentSummaryFragment : AmcBaseFragment() {
|
||||
private lateinit var binding: PaymentSummaryLayoutBinding
|
||||
private val viewModel by viewModels<PaymentSummaryViewModel>()
|
||||
private val paymentVM: PaymentManager by activityViewModels()
|
||||
private val naviCheckoutViewModel by activityViewModels<NaviCheckoutViewModel>()
|
||||
private val paymentSharedVM: PaymentSharedVM by activityViewModels()
|
||||
override val screenName: String
|
||||
get() = PAYMENT_INIT_SUMMARY
|
||||
@@ -295,7 +305,48 @@ class PaymentSummaryFragment : AmcBaseFragment() {
|
||||
),
|
||||
)
|
||||
}
|
||||
if (it?.syncFlow.orFalse()) {
|
||||
if (it?.isTurboCheckoutFlow.orFalse()) {
|
||||
it?.tokenDetails
|
||||
?.naviSdkToken
|
||||
?.takeIf { token -> token.isNotNullAndNotEmpty() }
|
||||
?.let { token ->
|
||||
val paymentSdkInitParams =
|
||||
PaymentSdkInitParams(
|
||||
token = token,
|
||||
requestId = it.tokenDetails?.transactionId.orEmpty(),
|
||||
mintToken = false,
|
||||
paymentPreFetchMethodRequest =
|
||||
PaymentPrefetchMethodRequest(
|
||||
callSdkExitOnBack = false,
|
||||
previousScreenName = PaymentSource.AMC.name,
|
||||
),
|
||||
paymentSource = PaymentSource.AMC.name,
|
||||
)
|
||||
|
||||
paymentSharedVM.paymentFlowType = FLOW_TYPE_SIP_PURCHASE
|
||||
|
||||
val bundle =
|
||||
Bundle().apply {
|
||||
putAll(arguments)
|
||||
putString(SOURCE_TYPE, PAYMENT)
|
||||
putString(
|
||||
TRANSACTION_ID,
|
||||
viewModel.paymentInitiateData.value?.tokenDetails?.transactionId,
|
||||
)
|
||||
putParcelable(
|
||||
REQUEST_CONFIG,
|
||||
viewModel.paymentInitiateData.value?.requestConfig,
|
||||
)
|
||||
putString(
|
||||
ORDER_ID,
|
||||
viewModel.paymentInitiateData.value?.tokenDetails?.naviOrderId,
|
||||
)
|
||||
}
|
||||
|
||||
paymentSharedVM.paymentArgsDataMap = bundleToMap(bundle)
|
||||
naviCheckoutViewModel.initiatePayment(paymentSdkInitParams)
|
||||
}
|
||||
} else if (it?.syncFlow.orFalse()) {
|
||||
paymentSharedVM.isSyncFlow = true
|
||||
if (it?.tokenDetails?.naviSdkToken.isNotNullAndNotEmpty()) {
|
||||
paymentSharedVM.syncFlowPaymentInitStartTime = System.currentTimeMillis()
|
||||
@@ -367,8 +418,30 @@ class PaymentSummaryFragment : AmcBaseFragment() {
|
||||
safelyShowBottomSheet(it, key)
|
||||
}
|
||||
}
|
||||
} else if (arguments?.getString(TYPE)?.contains(SIP).orFalse()) { // get cta from backend
|
||||
buyFlowVM.apply {
|
||||
fundName = arguments?.getString(ORDER_HEADER_TITLE).orEmpty()
|
||||
fundId = arguments?.getString(ISIN)
|
||||
}
|
||||
|
||||
val sipDetailsData =
|
||||
SipDetailsData(
|
||||
sipReferenceId = arguments?.getString(SIP_REFERENCE_ID),
|
||||
amount = arguments?.getString(AMOUNT),
|
||||
scheme = arguments?.getString(ISIN),
|
||||
)
|
||||
|
||||
arguments?.apply {
|
||||
putString(AMOUNT, arguments?.getString(AMOUNT)) // formatted amount from backend
|
||||
putString(
|
||||
ORDER_HEADER_SUBTITLE,
|
||||
arguments?.getString(TYPE),
|
||||
) // order header subtitle get from backend cta params
|
||||
}
|
||||
viewModel.initiateSipPayment(sipDetailsData)
|
||||
} else {
|
||||
if (handleOtpNavigation(footer.nextCta).not()) {
|
||||
// not getting used to check
|
||||
showLoader()
|
||||
if (arguments?.getString(RETRY_PAYMENT).toBoolean().orFalse()) {
|
||||
viewModel.postSameOrderPayment(
|
||||
@@ -387,6 +460,7 @@ class PaymentSummaryFragment : AmcBaseFragment() {
|
||||
screenName = screenName,
|
||||
)
|
||||
} else if (arguments?.getString(TYPE)?.contains(SIP).orFalse()) {
|
||||
// will be deprecated
|
||||
viewModel.initiateSipPayment(
|
||||
SipDetailsResponse(
|
||||
amount = arguments?.getString(AMOUNT),
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.navi.amc.common.model.NextCtaResponse
|
||||
import com.navi.amc.fundbuy.models.PaymentOrder
|
||||
import com.navi.amc.fundbuy.models.PaymentPostData
|
||||
import com.navi.amc.fundbuy.models.PaymentSummaryScreen
|
||||
import com.navi.amc.fundbuy.models.SipDetailsData
|
||||
import com.navi.amc.fundbuy.models.SipDetailsResponse
|
||||
import com.navi.amc.network.retrofit.RetrofitService
|
||||
import com.navi.amc.utils.getAmcMetricInfo
|
||||
@@ -42,12 +43,19 @@ class PaymentSummaryRepository @Inject constructor(private val retrofitService:
|
||||
metricInfo = metricInfo,
|
||||
)
|
||||
|
||||
// razorpay only
|
||||
suspend fun postSipPaymentDetails(details: SipDetailsResponse) =
|
||||
apiResponseCallback(
|
||||
response = retrofitService.postSipPayment(details),
|
||||
metricInfo = getAmcMetricInfo(),
|
||||
)
|
||||
|
||||
suspend fun initiateSipPayment(sipDetails: SipDetailsData) =
|
||||
apiResponseCallback(
|
||||
retrofitService.initiateSipPayment(sipDetails),
|
||||
metricInfo = getAmcMetricInfo(),
|
||||
)
|
||||
|
||||
suspend fun postSameOrderPayment(details: PaymentOrder) =
|
||||
apiResponseCallback(
|
||||
response = retrofitService.postSameOrderPayment(details),
|
||||
|
||||
@@ -15,6 +15,7 @@ import com.navi.amc.common.model.NextCtaResponse
|
||||
import com.navi.amc.fundbuy.models.PaymentOrder
|
||||
import com.navi.amc.fundbuy.models.PaymentPostData
|
||||
import com.navi.amc.fundbuy.models.PaymentSummaryScreen
|
||||
import com.navi.amc.fundbuy.models.SipDetailsData
|
||||
import com.navi.amc.fundbuy.models.SipDetailsResponse
|
||||
import com.navi.amc.fundbuy.repository.PaymentSummaryRepository
|
||||
import com.navi.amc.utils.getAmcMetricInfo
|
||||
@@ -74,6 +75,7 @@ constructor(private val repository: PaymentSummaryRepository) : BaseVM() {
|
||||
}
|
||||
}
|
||||
|
||||
// remove this later
|
||||
fun initiateSipPayment(details: SipDetailsResponse) {
|
||||
viewModelScope.launch {
|
||||
val response = repository.postSipPaymentDetails(details)
|
||||
@@ -85,6 +87,17 @@ constructor(private val repository: PaymentSummaryRepository) : BaseVM() {
|
||||
}
|
||||
}
|
||||
|
||||
fun initiateSipPayment(sipDetailsData: SipDetailsData) {
|
||||
viewModelScope.launch {
|
||||
val response = repository.initiateSipPayment(sipDetailsData)
|
||||
if (response.error == null && response.errors.isNullOrEmpty()) {
|
||||
_paymentInitiateData.value = updateCheckerResponse(response.data)
|
||||
} else {
|
||||
setErrorData(response.errors, response.error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun postSameOrderPayment(details: PaymentOrder) {
|
||||
viewModelScope.launch {
|
||||
val response = repository.postSameOrderPayment(details)
|
||||
|
||||
Reference in New Issue
Block a user