From d239da7e72f649dd610a2c99888aa2b0f7542948 Mon Sep 17 00:00:00 2001
From: moon <56061215+MgKyawLay@users.noreply.github.com>
Date: Wed, 16 Sep 2026 16:17:51 +0630
Subject: [PATCH] settlement double print fixed
---
.idea/misc.xml | 2 +-
app/build.gradle.kts | 4 +--
app/changelog.md | 12 ++++++++-
.../auto_settlement/SettlementScheduler.kt | 2 +-
.../ui/dashboard/DashboardScreen.kt | 2 +-
.../ui/dashboard/DashboardViewModel.kt | 17 +++----------
.../ui/history_functions/HistoryFilters.kt | 25 +++++++++++++++++++
.../ReprintSettlementScreen.kt | 2 +-
.../ui/sending_to_host/SendingToHostRoute.kt | 22 ++++++++++------
.../ui/settlement/SettlementViewModel.kt | 6 ++++-
.../baselib/db/dao/PayDetailDao.java | 2 +-
.../paylibs/print/printx/PrintXImpl.java | 5 ++++
12 files changed, 70 insertions(+), 31 deletions(-)
diff --git a/.idea/misc.xml b/.idea/misc.xml
index efd1031..976db11 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,5 +1,5 @@
-
+
\ No newline at end of file
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 86b054f..ba53455 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -40,8 +40,8 @@ android {
dimension = "env"
applicationIdSuffix = ".uat"
versionNameSuffix = "-UAT"
- versionCode = 19
- versionName = "3.7"
+ versionCode = 20
+ versionName = "3.8"
buildConfigField("String", "ENV", "\"UAT\"")
resValue("string", "app_name", "MOB-UAT")
}
diff --git a/app/changelog.md b/app/changelog.md
index f05f223..37f9da8 100644
--- a/app/changelog.md
+++ b/app/changelog.md
@@ -33,4 +33,14 @@
* qr for user manual
### version 3.7
-* auto-settlement for both P2 and P3
\ No newline at end of file
+* auto-settlement for both P2 and P3
+
+### version 3.8
+* Slip design modified
+* Continue Button hide in transactions success
+* date format 2026 aligned in paper slip
+* fixed 2 paper roll out after settlement
+* fixed terminal disable/enable screen shaking
+* cardholder name adjust to 20 words
+* card masked in PrintPreview Screen
+* cash adv in settlement
\ No newline at end of file
diff --git a/app/src/main/java/com/mob/utsmyanmar/auto_settlement/SettlementScheduler.kt b/app/src/main/java/com/mob/utsmyanmar/auto_settlement/SettlementScheduler.kt
index 6cb3b58..af4106d 100644
--- a/app/src/main/java/com/mob/utsmyanmar/auto_settlement/SettlementScheduler.kt
+++ b/app/src/main/java/com/mob/utsmyanmar/auto_settlement/SettlementScheduler.kt
@@ -10,7 +10,7 @@ import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation
import java.util.Calendar
object SettlementScheduler {
- private const val FALLBACK_ALERT_TIME = "23:30:00"
+ private const val FALLBACK_ALERT_TIME = "23:00:00"
private const val REQUEST_CODE = 100
fun schedule(context: Context): Boolean {
diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardScreen.kt b/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardScreen.kt
index b5455d0..29ec71c 100644
--- a/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardScreen.kt
+++ b/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardScreen.kt
@@ -267,7 +267,7 @@ fun DashboardScreen2(
)
Spacer(modifier = Modifier.height(10.dp))
Text(
- text = "Released on : 06-Sep-2026",
+ text = "Released on : 16-Sep-2026",
style = MaterialTheme.typography.bodySmall,
color = Color.Gray,
modifier = Modifier.padding(horizontal = 16.dp)
diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardViewModel.kt b/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardViewModel.kt
index 01691b7..c6aeb41 100644
--- a/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardViewModel.kt
+++ b/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardViewModel.kt
@@ -18,7 +18,6 @@ import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import java.math.BigDecimal
import java.text.DecimalFormat
-import java.util.Calendar
import javax.inject.Inject
@HiltViewModel
@@ -33,7 +32,7 @@ class DashboardViewModel @Inject constructor(
init {
viewModelScope.launch {
repository.getLastTenTransactions().asFlow().collect { payDetails ->
- val latestSettlement = payDetails.lastOrNull {
+ val latestSettlement = payDetails.firstOrNull {
it.transactionType == TransactionsType.SETTLEMENT.value
}
val isCurrentBusinessSettlement = latestSettlement?.isCurrentBusinessSettlement() == true
@@ -178,16 +177,6 @@ private fun buildDateTime(date: String?, time: String?): String {
}
private fun PayDetail.isCurrentBusinessSettlement(): Boolean {
- if (transactionType != TransactionsType.SETTLEMENT.value) return false
- if (TradeDate != SystemDateTime.getMMDD()) return false
-
- val now = Calendar.getInstance()
- val cutoff = Calendar.getInstance().apply {
- set(Calendar.HOUR_OF_DAY, 23)
- set(Calendar.MINUTE, 0)
- set(Calendar.SECOND, 0)
- set(Calendar.MILLISECOND, 0)
- }
-
- return now.before(cutoff)
+ return transactionType == TransactionsType.SETTLEMENT.value &&
+ TradeDate == SystemDateTime.getMMDD()
}
diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/history_functions/HistoryFilters.kt b/app/src/main/java/com/mob/utsmyanmar/ui/history_functions/HistoryFilters.kt
index 125a510..f9b7272 100644
--- a/app/src/main/java/com/mob/utsmyanmar/ui/history_functions/HistoryFilters.kt
+++ b/app/src/main/java/com/mob/utsmyanmar/ui/history_functions/HistoryFilters.kt
@@ -1,6 +1,7 @@
package com.mob.utsmyanmar.ui.history_functions
import com.utsmyanmar.paylibs.model.PayDetail
+import com.utsmyanmar.paylibs.model.SettleData
import com.utsmyanmar.paylibs.utils.POSUtil
import com.utsmyanmar.paylibs.utils.enums.HostType
import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType
@@ -17,6 +18,10 @@ enum class HistoryHostPurpose {
}
internal fun prepareReprintPayDetail(payDetail: PayDetail): PayDetail {
+ if (payDetail.settleDataObj == null) {
+ payDetail.settleDataObj = parseSettlementData(payDetail.settleList)
+ }
+
val suffix = "(REPRINT)"
payDetail.transType = if (payDetail.transType.length >= 20) {
"${payDetail.transType}\n$suffix"
@@ -26,6 +31,26 @@ internal fun prepareReprintPayDetail(payDetail: PayDetail): PayDetail {
return payDetail
}
+private fun parseSettlementData(value: String): SettleData? {
+ val parts = value.split("-")
+ if (parts.size < 4) return null
+
+ fun count(index: Int): Int = parts[index]
+ .substringBefore(":")
+ .toIntOrNull() ?: 0
+
+ fun amount(index: Int): Long = parts[index]
+ .substringAfter(":")
+ .toLongOrNull() ?: 0L
+
+ return SettleData(
+ count(0), amount(0),
+ count(3), amount(3),
+ count(2), amount(2),
+ count(1), amount(1)
+ )
+}
+
internal fun displayTransactionStatus(payDetail: PayDetail): String {
if (payDetail.transactionType == TransactionsType.REVERSAL.value) {
return if (payDetail.isNeedReversal) "REVERSAL FAILED" else "REVERSAL SUCCESS"
diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/history_functions/ReprintSettlementScreen.kt b/app/src/main/java/com/mob/utsmyanmar/ui/history_functions/ReprintSettlementScreen.kt
index 267a744..4386e65 100644
--- a/app/src/main/java/com/mob/utsmyanmar/ui/history_functions/ReprintSettlementScreen.kt
+++ b/app/src/main/java/com/mob/utsmyanmar/ui/history_functions/ReprintSettlementScreen.kt
@@ -50,7 +50,7 @@ fun ReprintSettlementScreen(
return@LaunchedEffect
}
hasStarted = true
- val detail = prepareReprintPayDetail(settlements.last())
+ val detail = prepareReprintPayDetail(settlements.first())
payDetail = detail
printSettlementReport(context, detail, onSuccess = onDone) {
printFailed = true
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 13b1d06..edebbb8 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
@@ -36,15 +36,21 @@ fun ProcessingRoute(
settlementViewModel.startSettlementProcess()
}
- LaunchedEffect(settlementStatus.status) {
- when(settlementStatus.status) {
- TransactionStatus.ON_ERROR,
- TransactionStatus.ON_SUCCESS -> {
- onTransactionFinished()
- sharedViewModel.payDetail.value = settlementViewModel.getPayDetail()
- onNavigateTransactionResult()
+ LaunchedEffect(Unit) {
+ settlementViewModel.events.collect { event ->
+ when (event) {
+ is com.mob.utsmyanmar.ui.settlement.SettlementEvent.ShowStatus -> {
+ when (event.status) {
+ TransactionStatus.ON_ERROR,
+ TransactionStatus.ON_SUCCESS -> {
+ onTransactionFinished()
+ sharedViewModel.payDetail.value = settlementViewModel.getPayDetail()
+ onNavigateTransactionResult()
+ }
+ else -> Unit
+ }
+ }
}
- else -> {}
}
}
} else {
diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/settlement/SettlementViewModel.kt b/app/src/main/java/com/mob/utsmyanmar/ui/settlement/SettlementViewModel.kt
index 4297e0b..919b48e 100644
--- a/app/src/main/java/com/mob/utsmyanmar/ui/settlement/SettlementViewModel.kt
+++ b/app/src/main/java/com/mob/utsmyanmar/ui/settlement/SettlementViewModel.kt
@@ -253,7 +253,10 @@ class SettlementViewModel @Inject constructor(
fun startSettlementProcess() {
_uiState.update {
- it.copy(isLoading = true)
+ it.copy(
+ status = null,
+ isLoading = true
+ )
}
SystemParamsOperation.getInstance().getIncrementBatchNo()
@@ -466,6 +469,7 @@ class SettlementViewModel @Inject constructor(
if (!errorFlag && settlementApproved) {
updateDB()
insertPayDetail(currentPayDetail)
+ SystemParamsOperation.getInstance().setNeedSettlement(false)
postStatus(TransactionStatus.ON_SUCCESS)
} else {
postStatus(TransactionStatus.ON_ERROR)
diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/db/dao/PayDetailDao.java b/baselib/src/main/java/com/utsmyanmar/baselib/db/dao/PayDetailDao.java
index 90e34f7..a01eafd 100644
--- a/baselib/src/main/java/com/utsmyanmar/baselib/db/dao/PayDetailDao.java
+++ b/baselib/src/main/java/com/utsmyanmar/baselib/db/dao/PayDetailDao.java
@@ -128,7 +128,7 @@ public interface PayDetailDao {
@Query(("SELECT * FROM paydetail WHERE transactionType = 3 AND voucherNo IN(:voucherNo)"))
LiveData checkLastSettlement(String voucherNo);
- @Query("SELECT * FROM paydetail WHERE transactionType = 3 AND voucherNo <= :voucherNo AND accountType != 'MPU'")
+ @Query("SELECT * FROM paydetail WHERE transactionType = 3 AND voucherNo <= :voucherNo ORDER BY PID DESC")
LiveData> getLastSettlement(String voucherNo);
// @Query("SELECT * FROM paydetail WHERE transactionType != 10 AND voucherNo <= :voucherNo")
diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java
index a67d930..b754f70 100644
--- a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java
+++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java
@@ -199,6 +199,11 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
this.callbackStatus = printXStatus;
try {
+ if (payDetail == null || payDetail.getSettleDataObj() == null) {
+ printXStatus.onFailure();
+ return;
+ }
+
LogUtil.d(TAG, payDetail.getSettleDataObj().toString());
setHeight(0x12);