diff --git a/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModel.kt b/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModel.kt index f6367ad0ff..e806f778ba 100644 --- a/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModel.kt +++ b/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModel.kt @@ -72,7 +72,6 @@ import com.navi.pay.management.common.sendmoney.model.network.TransactionRespons import com.navi.pay.management.common.sendmoney.model.view.BankAccountsState import com.navi.pay.management.common.sendmoney.model.view.CollectRequestAction import com.navi.pay.management.common.sendmoney.model.view.LinkedAccountEntityState -import com.navi.pay.management.common.sendmoney.model.view.PayeeEntity import com.navi.pay.management.common.sendmoney.model.view.PayeeSeverity import com.navi.pay.management.common.sendmoney.model.view.SendMoneyBackPressAction import com.navi.pay.management.common.sendmoney.model.view.SendMoneyMainCtaState @@ -143,6 +142,7 @@ import com.navi.pay.utils.ZERO_STRING import com.navi.pay.utils.getDisplayableAmount import com.navi.pay.utils.getFormattedAmountWithDecimal import com.navi.pay.utils.getIfscForBankUptime +import com.navi.pay.utils.getTrimmedValue import com.navi.pay.utils.isAccountIdOfTypeUpiLite import com.navi.pay.utils.isAmountValidForSendMoney import com.navi.pay.utils.toUpiMapperVpa @@ -1174,15 +1174,9 @@ constructor( rewardNudgeShown = if (rewardsNudgeDetailEntity.value != null) "Y" else "N" ) - // TODO: Try directly updating payeeEntity & check the flow - val payeeEntity = - payeeEntity.value.copy( - amount = String.format("%.2f", paymentAmount.value.toDouble()), - note = - note.value.trim().ifBlank { - naviPayDefaultConfig.config.configMessage.sendMoneyDefaultRemarks - } - ) + _payeeEntity.update { + it.copy(amount = getFormattedPaymentAmount(), note = getNoteValue()) + } val txnTimeStamp = NaviPayCommonUtils.getDateTimeObjectFromDateTimeString( @@ -1198,8 +1192,8 @@ constructor( credDataProvider.upiLiteSendMoneyCred( linkedAccountEntity = selectedBankAccount, payerLiteAccountNumber = lrn, - payeeEntity = payeeEntity, upiRequestId = upiRequestId, + payeeEntity = payeeEntity.value, txnTimeStamp = txnTimeStamp.toString() ) upiLiteAnalytics.onDevGenericEvent( @@ -1210,7 +1204,7 @@ constructor( npciCredData = credDataProvider.payCred( accountEntity = selectedBankAccount, - payeeEntity = payeeEntity, + payeeEntity = payeeEntity.value, upiRequestId = upiRequestId ) } @@ -1229,7 +1223,6 @@ constructor( if (isPaymentFromLiteAccount) modifyCredBlockForLiteTxn(npciResult.data) else npciResult.data, - payeeEntity = payeeEntity, selectedBankAccountEntity = selectedBankAccount, txnTimeStamp = txnTimeStamp.toString(), clService = npciClService, @@ -1246,7 +1239,6 @@ constructor( isExternalUpiRequestIdAvailable: Boolean, upiRequestId: String, credBlock: String, - payeeEntity: PayeeEntity, selectedBankAccountEntity: LinkedAccountEntity, txnTimeStamp: String, clService: NpciClService, @@ -1274,7 +1266,6 @@ constructor( isExternalUpiRequestIdAvailable = isExternalUpiRequestIdAvailable, upiRequestId = upiRequestId, credBlock = credBlock, - payeeEntity = payeeEntity, selectedBankAccount = selectedBankAccountEntity, txnTimeStamp = txnTimeStamp, clService = clService, @@ -1288,7 +1279,6 @@ constructor( isExternalUpiRequestIdAvailable = isExternalUpiRequestIdAvailable, upiRequestId = upiRequestId, credBlock = credBlock, - payeeEntity = payeeEntity, selectedBankAccount = selectedBankAccountEntity, txnTimeStamp = txnTimeStamp, clService = clService, @@ -1411,7 +1401,7 @@ constructor( bankCode = validateVpaAPIResponse.data!!.bankCode ) } - val severity = _payeeEntity.value.severity + val severity = payeeEntity.value.severity if (shouldWarnUserOrBlockTransaction(severity = severity)) { naviPayAnalytics.onPotentialFraudLanded( source = source, @@ -1516,7 +1506,6 @@ constructor( isExternalUpiRequestIdAvailable: Boolean, upiRequestId: String, credBlock: String, - payeeEntity: PayeeEntity, selectedBankAccount: LinkedAccountEntity, txnTimeStamp: String, clService: NpciClService, @@ -1536,16 +1525,16 @@ constructor( SendMoneyRequest( gatewayPayeeInfo = GatewayPayeeInfo( - vpa = payeeEntity.vpa, - name = payeeEntity.name, - bankIfsc = payeeEntity.bankIfsc, - bankAccountUniqueId = payeeEntity.bankAccountUniqueId, - bankAccountNumber = payeeEntity.maskedAccountNumber, - bankName = payeeEntity.bankName, - bankCode = payeeEntity.bankCode, - mobileNumber = payeeEntity.phoneNumber, - upiNumber = payeeEntity.upiNumber, - mcc = payeeEntity.mcc, + vpa = payeeEntity.value.vpa, + name = payeeEntity.value.name, + bankIfsc = payeeEntity.value.bankIfsc, + bankAccountUniqueId = payeeEntity.value.bankAccountUniqueId, + bankAccountNumber = payeeEntity.value.maskedAccountNumber, + bankName = payeeEntity.value.bankName, + bankCode = payeeEntity.value.bankCode, + mobileNumber = payeeEntity.value.phoneNumber, + upiNumber = payeeEntity.value.upiNumber, + mcc = payeeEntity.value.mcc, ), gatewayPayerInfo = GatewayPayerInfo( @@ -1559,20 +1548,20 @@ constructor( ), gatewayTxnInfo = GatewayTxnInfo( - amount = payeeEntity.amount, + amount = payeeEntity.value.amount, upiRequestId = upiRequestId, - currency = payeeEntity.currency, - initiationMode = payeeEntity.mode, + currency = payeeEntity.value.currency, + initiationMode = payeeEntity.value.mode, purpose = if (isPaymentFromLiteAccount) UPILitePurposeCodes.SEND_MONEY.purposeCode - else payeeEntity.purpose, - remarks = payeeEntity.note, + else payeeEntity.value.purpose, + remarks = payeeEntity.value.note, timeStamp = txnTimeStamp, credBlock = credBlock, - refCategory = payeeEntity.refCategory, - refUrl = payeeEntity.refUrl, + refCategory = payeeEntity.value.refCategory, + refUrl = payeeEntity.value.refUrl, transactionType = transactionType.name, - transactionReference = payeeEntity.transactionReference, + transactionReference = payeeEntity.value.transactionReference, paymentMode = getTransactionInitiationTypeFromSendMoneyScreenSource( sendMoneyScreenSource = source @@ -1981,19 +1970,14 @@ constructor( val upiRequestId = payeeEntity.value.transactionId ?: "" - val payeeEntity = - payeeEntity.value.copy( - amount = String.format("%.2f", paymentAmount.value.toDouble()), - note = - note.value.trim().ifBlank { - naviPayDefaultConfig.config.configMessage.sendMoneyDefaultRemarks - } - ) + _payeeEntity.update { + it.copy(amount = getFormattedPaymentAmount(), note = getNoteValue()) + } val npciCredData = credDataProvider.collectCred( accountEntity = updatedBankAccount, - payeeEntity = payeeEntity, + payeeEntity = payeeEntity.value, upiRequestId = upiRequestId ) @@ -2010,7 +1994,6 @@ constructor( collectRequestAction = CollectRequestAction.APPROVE, upiRequestId = upiRequestId, credBlock = npciResult.data, - payeeEntity = payeeEntity, selectedBankAccount = updatedBankAccount ) is NpciResult.Error -> handleNpciError(npciError = npciResult) @@ -2024,20 +2007,12 @@ constructor( val selectedBankAccount = _selectedBankAccount.value ?: return val upiRequestId = payeeEntity.value.transactionId ?: "" - val payeeEntity = - payeeEntity.value.copy( - amount = String.format("%.2f", paymentAmount.value.toDouble()), - note = - note.value.trim().ifBlank { - naviPayDefaultConfig.config.configMessage.sendMoneyDefaultRemarks - } - ) + _payeeEntity.update { it.copy(amount = getFormattedPaymentAmount(), note = getNoteValue()) } processCollectRequest( collectRequestAction = CollectRequestAction.DECLINE, upiRequestId = upiRequestId, credBlock = null, - payeeEntity = payeeEntity, selectedBankAccount = selectedBankAccount ) } @@ -2046,7 +2021,6 @@ constructor( collectRequestAction: CollectRequestAction, upiRequestId: String, credBlock: String?, - payeeEntity: PayeeEntity, selectedBankAccount: LinkedAccountEntity ) { if (source !is SendMoneyScreenSource.CollectRequest) return @@ -2078,16 +2052,16 @@ constructor( CollectRequestActionRequest( gatewayPayeeInfo = GatewayPayeeInfo( - vpa = payeeEntity.vpa, - name = payeeEntity.name, - bankIfsc = payeeEntity.bankIfsc, - bankAccountUniqueId = payeeEntity.bankAccountUniqueId, - bankAccountNumber = payeeEntity.maskedAccountNumber, - bankName = payeeEntity.bankName, - bankCode = payeeEntity.bankCode, + vpa = payeeEntity.value.vpa, + name = payeeEntity.value.name, + bankIfsc = payeeEntity.value.bankIfsc, + bankAccountUniqueId = payeeEntity.value.bankAccountUniqueId, + bankAccountNumber = payeeEntity.value.maskedAccountNumber, + bankName = payeeEntity.value.bankName, + bankCode = payeeEntity.value.bankCode, mobileNumber = null, upiNumber = null, - mcc = payeeEntity.mcc, + mcc = payeeEntity.value.mcc, ), gatewayPayerInfo = GatewayPayerInfo( @@ -2101,18 +2075,18 @@ constructor( ), gatewayTxnInfo = GatewayTxnInfo( - amount = payeeEntity.amount, + amount = payeeEntity.value.amount, upiRequestId = upiRequestId, - currency = payeeEntity.currency, - initiationMode = payeeEntity.mode, - purpose = payeeEntity.purpose, - remarks = payeeEntity.note, + currency = payeeEntity.value.currency, + initiationMode = payeeEntity.value.mode, + purpose = payeeEntity.value.purpose, + remarks = payeeEntity.value.note, timeStamp = null, credBlock = credBlock, - refCategory = payeeEntity.refCategory, - refUrl = payeeEntity.refUrl, + refCategory = payeeEntity.value.refCategory, + refUrl = payeeEntity.value.refUrl, transactionType = transactionType.name, - transactionReference = payeeEntity.transactionReference, + transactionReference = payeeEntity.value.transactionReference, paymentMode = getTransactionInitiationTypeFromSendMoneyScreenSource( sendMoneyScreenSource = source @@ -2333,12 +2307,9 @@ constructor( txnStatus = sendMoneyResponse.status, txnType = transactionType.name, txnReqType = sendMoneyResponse.txnRequestType, - amount = String.format("%.2f", (paymentAmount.value.toDoubleOrNull() ?: 0.0)), + amount = getFormattedPaymentAmount(), currency = DEFAULT_UPI_CURRENCY, - remarks = - note.value.trim().ifBlank { - naviPayDefaultConfig.config.configMessage.sendMoneyDefaultRemarks - }, + remarks = getNoteValue(), txnTimestamp = sendMoneyResponse.transactionTimestamp ?: DateTime.now(DateTimeZone.UTC), // DB always stores in UTC @@ -2480,4 +2451,12 @@ constructor( _rewardsNudgeDetailEntity.update { rewardsNudgeDetail } } } + + private fun getNoteValue() = + note.value.getTrimmedValue( + defaultValue = naviPayDefaultConfig.config.configMessage.sendMoneyDefaultRemarks + ) + + private fun getFormattedPaymentAmount() = + String.format("%.2f", paymentAmount.value.toDoubleOrNull() ?: 0.0) } diff --git a/navi-pay/src/main/kotlin/com/navi/pay/utils/NaviPayExt.kt b/navi-pay/src/main/kotlin/com/navi/pay/utils/NaviPayExt.kt index aed81419cc..4eaf0badbe 100644 --- a/navi-pay/src/main/kotlin/com/navi/pay/utils/NaviPayExt.kt +++ b/navi-pay/src/main/kotlin/com/navi/pay/utils/NaviPayExt.kt @@ -230,6 +230,10 @@ fun String.getFormattedAmountWithDecimal(): String { return amount } +fun String.getTrimmedValue(defaultValue: String = EMPTY): String { + return this.trim().ifBlank { defaultValue } +} + fun String.isAccountIdOfTypeUpiLite(): Boolean { return this.contains(UNDERSCORE) }