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);