From 1f8c12c8124cc829f8a5e34ac86f6fed7562364f Mon Sep 17 00:00:00 2001 From: Mehul Garg Date: Tue, 12 Mar 2024 16:38:47 +0530 Subject: [PATCH] TP-57848 | Mehul | Displaying Fastag balance (#10092) --- .../model/config/NaviBbpsDefaultConfig.kt | 3 +- .../bbps/feature/paybill/PayBillViewModel.kt | 31 ++++++++++++++++++- .../bbps/feature/paybill/ui/PayBillScreen.kt | 22 +++++++++++-- 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/navi-bbps/src/main/kotlin/com/navi/bbps/common/model/config/NaviBbpsDefaultConfig.kt b/navi-bbps/src/main/kotlin/com/navi/bbps/common/model/config/NaviBbpsDefaultConfig.kt index 07972400d0..80ea7a53aa 100644 --- a/navi-bbps/src/main/kotlin/com/navi/bbps/common/model/config/NaviBbpsDefaultConfig.kt +++ b/navi-bbps/src/main/kotlin/com/navi/bbps/common/model/config/NaviBbpsDefaultConfig.kt @@ -12,7 +12,8 @@ import com.google.gson.annotations.SerializedName data class NaviBbpsDefaultConfig( @SerializedName("configMessage") val configMessage: ConfigMessage = ConfigMessage(), @SerializedName("nonExpandedDescriptionLength") val nonExpandedDescriptionLength: Int = 80, - @SerializedName("billerSearchDebounceInMillis") val billerSearchDebounceInMillis: Long = 600 + @SerializedName("billerSearchDebounceInMillis") val billerSearchDebounceInMillis: Long = 600, + @SerializedName("fastagBalanceKey") val fastagBalanceKey: String = "FASTag balance" ) data class ConfigMessage( diff --git a/navi-bbps/src/main/kotlin/com/navi/bbps/feature/paybill/PayBillViewModel.kt b/navi-bbps/src/main/kotlin/com/navi/bbps/feature/paybill/PayBillViewModel.kt index 5abbab1421..41c30892b1 100644 --- a/navi-bbps/src/main/kotlin/com/navi/bbps/feature/paybill/PayBillViewModel.kt +++ b/navi-bbps/src/main/kotlin/com/navi/bbps/feature/paybill/PayBillViewModel.kt @@ -16,14 +16,18 @@ import com.navi.bbps.common.AMOUNT_MAX_LENGTH import com.navi.bbps.common.AMOUNT_MAX_LENGTH_AFTER_DECIMAL import com.navi.bbps.common.AMOUNT_MAX_LENGTH_BEFORE_DECIMAL import com.navi.bbps.common.CATEGORY_ID_DTH +import com.navi.bbps.common.CATEGORY_ID_FASTAG import com.navi.bbps.common.CATEGORY_ID_MOBILE_POSTPAID import com.navi.bbps.common.DATE_TIME_FORMAT_DATE_MONTH_NAME_YEAR_COMMA_TIME import com.navi.bbps.common.DISPLAYABLE_MOBILE_NUMBER_KEY import com.navi.bbps.common.NaviBbpsAnalytics import com.navi.bbps.common.NaviBbpsScreen import com.navi.bbps.common.model.NaviBbpsVmData +import com.navi.bbps.common.model.config.NaviBbpsDefaultConfig +import com.navi.bbps.common.usecase.NaviBbpsConfigUseCase import com.navi.bbps.common.utils.NaviBbpsCommonUtils.getValidatedAmountNumber import com.navi.bbps.common.utils.NaviBbpsDateUtils +import com.navi.bbps.common.utils.getDefaultConfig import com.navi.bbps.common.utils.getDisplayableAmount import com.navi.bbps.common.viewmodel.NaviBbpsBaseVM import com.navi.bbps.feature.billhistorydetail.model.view.BillTransactionItemEntity @@ -71,7 +75,8 @@ constructor( savedStateHandle: SavedStateHandle, private val dispatcherProvider: CoroutineDispatcherProvider, private val payBillRepository: PayBillRepository, - private val naviBbpsDateUtils: NaviBbpsDateUtils + private val naviBbpsDateUtils: NaviBbpsDateUtils, + private val naviBbpsConfigUseCase: NaviBbpsConfigUseCase ) : NaviBbpsBaseVM( naviBbpsVmData = NaviBbpsVmData(screen = NaviBbpsScreen.NAVI_BBPS_PAY_BILL_SCREEN) @@ -125,6 +130,9 @@ constructor( private val _txId = MutableStateFlow("") val txId = _txId.asStateFlow() + var fastagBalance: String? = null + var naviBbpsDefaultConfig = NaviBbpsDefaultConfig() + @Inject lateinit var paymentNavigator: PaymentNavigator val errorMessageId = @@ -138,9 +146,16 @@ constructor( ) init { + initConfig() updateScreenState() } + private fun initConfig() { + viewModelScope.safeLaunch(Dispatchers.IO) { + naviBbpsDefaultConfig = naviBbpsConfigUseCase.getDefaultConfig() + } + } + private fun updateShouldAutoFocusOnAmount(paymentAmount: String = this.paymentAmount.value) { _shouldAutoFocusOnAmount.update { paymentAmount.isEmpty() } } @@ -217,6 +232,16 @@ constructor( updateIsAdhoc(isAdhoc = billerDetailsEntity.isAdhoc) } + private fun updateFastagBalance(additionalParams: Map?) { + if ( + billCategoryEntity?.categoryId == CATEGORY_ID_FASTAG && + !additionalParams.isNullOrEmpty() + ) { + fastagBalance = + additionalParams?.getOrDefault(naviBbpsDefaultConfig.fastagBalanceKey, null) + } + } + private fun updateScreenState() { when (val screenState = payBillScreenSource) { is PayBillSource.Others -> { @@ -260,6 +285,10 @@ constructor( screenState.billerDetailsEntity, ) ) + + updateFastagBalance( + additionalParams = screenState.billDetailsEntity.additionalParams + ) } } } diff --git a/navi-bbps/src/main/kotlin/com/navi/bbps/feature/paybill/ui/PayBillScreen.kt b/navi-bbps/src/main/kotlin/com/navi/bbps/feature/paybill/ui/PayBillScreen.kt index 91cfd0cf75..025d02881f 100644 --- a/navi-bbps/src/main/kotlin/com/navi/bbps/feature/paybill/ui/PayBillScreen.kt +++ b/navi-bbps/src/main/kotlin/com/navi/bbps/feature/paybill/ui/PayBillScreen.kt @@ -59,6 +59,7 @@ import com.navi.bbps.R import com.navi.bbps.common.MAX_AMOUNT_LENGTH import com.navi.bbps.common.NaviBbpsAnalytics import com.navi.bbps.common.NaviBbpsDimens +import com.navi.bbps.common.model.config.NaviBbpsDefaultConfig import com.navi.bbps.common.theme.NaviBbpsColor import com.navi.bbps.common.ui.BbpsCircleImage import com.navi.bbps.common.ui.KeyValueTextSection @@ -246,7 +247,9 @@ fun PayBillScreen( when (payBillScreenState) { is PayBillScreenState.BillDetailsAvailable -> { RenderPayBillBox( - payBillScreenState as PayBillScreenState.BillDetailsAvailable + payBillScreenState as PayBillScreenState.BillDetailsAvailable, + fastagBalance = payBillViewModel.fastagBalance, + naviBbpsDefaultConfig = payBillViewModel.naviBbpsDefaultConfig ) } is PayBillScreenState.BillDetailsUnavailable -> {} @@ -348,7 +351,11 @@ fun RenderPayBillPrepaidBox(payBillScreenState: PayBillScreenState.PrepaidBillDe } @Composable -fun RenderPayBillBox(payBillScreenState: PayBillScreenState.BillDetailsAvailable) { +fun RenderPayBillBox( + payBillScreenState: PayBillScreenState.BillDetailsAvailable, + naviBbpsDefaultConfig: NaviBbpsDefaultConfig, + fastagBalance: String? +) { if (payBillScreenState.billDetailsEntity.isDisplayableBillDetailsAvailable) { Column( modifier = @@ -394,6 +401,15 @@ fun RenderPayBillBox(payBillScreenState: PayBillScreenState.BillDetailsAvailable ) Spacer(modifier = Modifier.height(16.dp)) } + + if (!fastagBalance.isNullOrBlank()) { + KeyValueTextSection( + modifier = Modifier.fillMaxWidth(), + key = naviBbpsDefaultConfig.fastagBalanceKey, + value = stringResource(id = R.string.bbps_ruppes_symbol_x, fastagBalance) + ) + } + Spacer(modifier = Modifier.height(16.dp)) } } if (payBillScreenState.isSecondSectionVisible) { @@ -624,7 +640,7 @@ private fun startPaymentFlow( billDetailsEntity = billDetailsEntity, paymentStatus = dataJSONObject?.optString(STATUS).toString(), - response = payload?.toString(), + response = payload.toString(), categoryId = billCategoryEntity.categoryId ) if (dataJSONObject != null) {