diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/navigation/AppNavGraph.kt b/app/src/main/java/com/mob/utsmyanmar/ui/navigation/AppNavGraph.kt index 94290ea..ba5f773 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/navigation/AppNavGraph.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/navigation/AppNavGraph.kt @@ -669,8 +669,22 @@ fun AppNavGraph( }, onNavigateInputAmount = { navController.popBackStack(Routes.Amount.route, false) }, onNavigateProcessing = {}, - onNavigateEmvTransaction = {}, - onNavigateError = {}, + onNavigateEmvTransaction = { + navController.navigate(Routes.Processing.route) { + popUpTo(Routes.ProcessingCard.route) { + inclusive = true + } + launchSingleTop = true + } + }, + onNavigateError = { message -> + navController.navigate(Routes.TransactionError.createRoute(false, message)) { + popUpTo(Routes.ProcessingCard.route) { + inclusive = true + } + launchSingleTop = true + } + }, onBack = { navController.popBackStack() }, onShowDecline = {} ) @@ -761,6 +775,7 @@ fun AppNavGraph( sharedViewModel = sharedViewModel, transProcessViewModel = transProcessViewModel, settlementViewModel = settlementViewModel, + emvTransactionViewModel = hiltViewModel(activity), onTransactionFinished = { tmsSetupViewModel.downloadConfigs(dashboardViewModel::refreshLastSyncTime) }, diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/processing_card/ProcessingCardViewModel.kt b/app/src/main/java/com/mob/utsmyanmar/ui/processing_card/ProcessingCardViewModel.kt index 36c8d68..4e30703 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/processing_card/ProcessingCardViewModel.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/processing_card/ProcessingCardViewModel.kt @@ -22,7 +22,6 @@ import com.utsmyanmar.paylibs.model.PayDetail import com.utsmyanmar.paylibs.model.TradeData import com.utsmyanmar.paylibs.model.enums.TransCVM import com.utsmyanmar.paylibs.utils.POSUtil -import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation import com.utsmyanmar.paylibs.utils.enums.TransMenu import com.utsmyanmar.paylibs.utils.params.Params import kotlinx.coroutines.channels.Channel @@ -250,7 +249,10 @@ class ProcessingCardViewModel( emvTransactionViewModel.transType.value = sharedViewModel.transactionsType.value - if (SystemParamsOperation.getInstance().isEmvEnabled) { + if ( +// SystemParamsOperation.getInstance().isEmvEnabled + true + ) { prepareEmvTransaction() sendUiEvent(ProcessingCardUiEvent.NavigateToEmvTransaction) } else { diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/sending_to_host/SendingToHostRoute.kt b/app/src/main/java/com/mob/utsmyanmar/ui/sending_to_host/SendingToHostRoute.kt index edebbb8..48423cf 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/sending_to_host/SendingToHostRoute.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/sending_to_host/SendingToHostRoute.kt @@ -4,11 +4,13 @@ import android.R import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.livedata.observeAsState import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.mob.utsmyanmar.model.TransResultStatus import com.mob.utsmyanmar.model.TransactionStatus import com.mob.utsmyanmar.ui.settlement.SettlementViewModel import com.mob.utsmyanmar.viewmodel.SharedViewModel +import com.mob.utsmyanmar.viewmodel.EmvTransactionProcessViewModel import com.mob.utsmyanmar.viewmodel.TransProcessViewModel import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType @@ -19,6 +21,7 @@ fun ProcessingRoute( sharedViewModel: SharedViewModel, transProcessViewModel: TransProcessViewModel, settlementViewModel: SettlementViewModel, + emvTransactionViewModel: EmvTransactionProcessViewModel, onNavigateTransactionResult: () -> Unit, onNavigateSignature: () -> Unit, onNavigateError: (Boolean, String) -> Unit, @@ -26,12 +29,47 @@ fun ProcessingRoute( ) { val transStatus by transProcessViewModel.transResultStatus.collectAsStateWithLifecycle() + val emvStatus by emvTransactionViewModel.getTransStatus().observeAsState() val state by transProcessViewModel.state.collectAsStateWithLifecycle() val settlementStatus by settlementViewModel.uiState.collectAsStateWithLifecycle() - if(sharedViewModel.transactionsType.value == TransactionsType.SETTLEMENT) { + if (sharedViewModel.isEmvTrans().value == true) { + LaunchedEffect(Unit) { + emvTransactionViewModel.startProcess() + } + + LaunchedEffect(emvStatus) { + when (emvStatus) { + TransResultStatus.SUCCESS, + TransResultStatus.OFFLINE_SUCCESS -> { + onTransactionFinished() + sharedViewModel.payDetail.value = emvTransactionViewModel.payDetailResult.value + onNavigateTransactionResult() + } + + TransResultStatus.FAIL, + TransResultStatus.OFFLINE_FAILURE -> { + onTransactionFinished() + sharedViewModel.payDetail.value = emvTransactionViewModel.payDetailResult.value + onNavigateTransactionResult() + } + + TransResultStatus.NETWORK_ERROR, + TransResultStatus.ERROR -> { + onTransactionFinished() + onNavigateError( + false, + emvTransactionViewModel.errorCodeMsg.value + ?: "Something went wrong. Please try again." + ) + } + + else -> Unit + } + } + } else if(sharedViewModel.transactionsType.value == TransactionsType.SETTLEMENT) { LaunchedEffect(Unit) { settlementViewModel.startSettlementProcess() } @@ -98,7 +136,9 @@ fun ProcessingRoute( } } - if(sharedViewModel.transactionsType.value == TransactionsType.SETTLEMENT) { + if (sharedViewModel.isEmvTrans().value == true) { + ProcessingScreen(state) + } else if(sharedViewModel.transactionsType.value == TransactionsType.SETTLEMENT) { ProcessingScreen(settlementStatus.processingState) } else { ProcessingScreen(state) diff --git a/app/src/main/java/com/mob/utsmyanmar/utils/tms/TMSSetupsImpl.kt b/app/src/main/java/com/mob/utsmyanmar/utils/tms/TMSSetupsImpl.kt index 3d7f2a8..80684ad 100644 --- a/app/src/main/java/com/mob/utsmyanmar/utils/tms/TMSSetupsImpl.kt +++ b/app/src/main/java/com/mob/utsmyanmar/utils/tms/TMSSetupsImpl.kt @@ -88,7 +88,7 @@ class TMSSetupsImpl : TMSSetups { ops.merchantName = m.name ops.merchantAddress = m.address ops.merchantPhoneNo = m.phone - ops.merchantMobileNo = m.mobile_phone + ops.merchantMobileNo = m.mobilePhone.orEmpty() } siriusResponse.address.takeIf { it.isNotEmpty() }?.let { ops.merchantAddress = it } diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/network/model/sirius/SiriusMerchant.java b/baselib/src/main/java/com/utsmyanmar/baselib/network/model/sirius/SiriusMerchant.java index d9fbed5..367119e 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/network/model/sirius/SiriusMerchant.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/network/model/sirius/SiriusMerchant.java @@ -1,5 +1,7 @@ package com.utsmyanmar.baselib.network.model.sirius; +import com.google.gson.annotations.SerializedName; + public class SiriusMerchant { private String id; @@ -16,7 +18,11 @@ public class SiriusMerchant { private String mobile; - private String mobile_phone; + @SerializedName(value = "mobilePhone", alternate = {"mobile_phone"}) + private String mobilePhone; + + public SiriusMerchant() { + } public SiriusMerchant(String id, String name, String description, String address,String address2,String phone,String mobile) { this.id = id; @@ -28,6 +34,17 @@ public class SiriusMerchant { this.mobile = mobile; } + public SiriusMerchant(String id, String name, String description, String address, String address2, String phone, String mobile, String mobilePhone) { + this.id = id; + this.name = name; + this.description = description; + this.address = address; + this.address2 = address2; + this.phone = phone; + this.mobile = mobile; + this.mobilePhone = mobilePhone; + } + public void setAddress2(String address2) { this.address2 = address2; } @@ -52,12 +69,20 @@ public class SiriusMerchant { return mobile; } + public String getMobilePhone() { + return mobilePhone != null ? mobilePhone : mobile; + } + + public void setMobilePhone(String mobilePhone) { + this.mobilePhone = mobilePhone; + } + public String getMobile_phone() { - return mobile_phone; + return getMobilePhone(); } public void setMobile_phone(String mobile_phone) { - this.mobile_phone = mobile_phone; + this.mobilePhone = mobile_phone; } public void setId(String id) { diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/CardSchemeUtils.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/CardSchemeUtils.java index 51ec835..f34572b 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/CardSchemeUtils.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/CardSchemeUtils.java @@ -3,6 +3,7 @@ package com.utsmyanmar.paylibs.utils; import android.text.TextUtils; import sunmi.sunmiui.utils.LogUtil; +import com.utsmyanmar.paylibs.utils.enums.CardScheme; public class CardSchemeUtils { private static final String TAG = "CardSchemeUtil"; @@ -25,19 +26,8 @@ public class CardSchemeUtils { } else if ("A000000524".equals(group)) { accountType = AccountType.RPC.getValue(); } else if ("A000000333".equals(group)) { - if ("A000000333010101".equals(aid)) { - - accountType = AccountType.DD.getValue(); - } else if ("A000000333010102".equals(aid)) { - - accountType = AccountType.CC.getValue(); - } else if ("A000000333010103".equals(aid)) { - - accountType = AccountType.SCC.getValue(); - } else if ("A000000333010101".equals(aid)) { - - accountType = AccountType.EC.getValue(); - } + // Keep the scheme value used by host routing and receipt logic. + accountType = CardScheme.UPI.name; } LogUtil.d(TAG, "Card accountType = " + accountType); return accountType;