settlement status

This commit is contained in:
moon 2026-07-01 23:25:04 +06:30
parent 48add55380
commit 782dde479a
4 changed files with 41 additions and 6 deletions

View File

@ -104,7 +104,9 @@ fun SummaryCard(
onClickLastSync: () -> Unit, onClickLastSync: () -> Unit,
lastSyncTime: Long?, lastSyncTime: Long?,
totalSaleCount: Int, totalSaleCount: Int,
totalSaleAmount: Long totalSaleAmount: Long,
settlementStatusText: String,
settlementDateTimeText: String
) { ) {
var now by remember { mutableLongStateOf(System.currentTimeMillis()) } var now by remember { mutableLongStateOf(System.currentTimeMillis()) }
LaunchedEffect(Unit) { LaunchedEffect(Unit) {
@ -145,8 +147,8 @@ fun SummaryCard(
SummaryItem( SummaryItem(
title = "Settlement", title = "Settlement",
value = "Completed", value = settlementStatusText,
subtitle = "Today 11:00 PM", subtitle = settlementDateTimeText,
icon = Icons.Default.Check, icon = Icons.Default.Check,
iconBg = Color.CrimsonRed iconBg = Color.CrimsonRed
) )

View File

@ -394,7 +394,9 @@ fun DashboardScreen2(
onClickLastSync = onClickLastSync, onClickLastSync = onClickLastSync,
lastSyncTime = dashboardUiState.lastSyncTime, lastSyncTime = dashboardUiState.lastSyncTime,
totalSaleCount = dashboardUiState.totalSaleCount, totalSaleCount = dashboardUiState.totalSaleCount,
totalSaleAmount = dashboardUiState.totalSaleAmount totalSaleAmount = dashboardUiState.totalSaleAmount,
settlementStatusText = dashboardUiState.settlementStatusText,
settlementDateTimeText = dashboardUiState.settlementDateTimeText
) )
Spacer(Modifier.height(12.dp)) Spacer(Modifier.height(12.dp))
} }

View File

@ -15,5 +15,7 @@ data class DashboardUiState(
val lastSyncTime: Long? = null, val lastSyncTime: Long? = null,
val carouselUrls: List<String> = emptyList(), val carouselUrls: List<String> = emptyList(),
val totalSaleCount: Int = 0, val totalSaleCount: Int = 0,
val totalSaleAmount: Long = 0L val totalSaleAmount: Long = 0L,
val settlementStatusText: String = "Pending",
val settlementDateTimeText: String = "--/-- --:--"
) )

View File

@ -6,6 +6,7 @@ import androidx.lifecycle.asFlow
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.utsmyanmar.baselib.repo.Repository import com.utsmyanmar.baselib.repo.Repository
import com.utsmyanmar.paylibs.model.PayDetail import com.utsmyanmar.paylibs.model.PayDetail
import com.utsmyanmar.paylibs.system.SystemDateTime
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation
import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
@ -17,6 +18,7 @@ import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.math.BigDecimal import java.math.BigDecimal
import java.text.DecimalFormat import java.text.DecimalFormat
import java.util.Calendar
import javax.inject.Inject import javax.inject.Inject
@HiltViewModel @HiltViewModel
@ -31,11 +33,23 @@ class DashboardViewModel @Inject constructor(
init { init {
viewModelScope.launch { viewModelScope.launch {
repository.getLastTenTransactions().asFlow().collect { payDetails -> repository.getLastTenTransactions().asFlow().collect { payDetails ->
val latestSettlement = payDetails.lastOrNull {
it.transactionType == TransactionsType.SETTLEMENT.value
}
val isCurrentBusinessSettlement = latestSettlement?.isCurrentBusinessSettlement() == true
_uiState.update { _uiState.update {
it.copy( it.copy(
recentTransactions = payDetails.map { pd -> pd.toRecord() }, recentTransactions = payDetails.map { pd -> pd.toRecord() },
totalSaleCount = payDetails.totalSaleCount(), totalSaleCount = payDetails.totalSaleCount(),
totalSaleAmount = payDetails.totalSaleAmount() totalSaleAmount = payDetails.totalSaleAmount(),
settlementStatusText = if (isCurrentBusinessSettlement) {
"Completed"
} else {
"Pending"
},
settlementDateTimeText = latestSettlement
?.let { buildDateTime(it.TradeDate, it.TradeTime) }
?: "--/-- --:--"
) )
} }
} }
@ -112,3 +126,18 @@ private fun buildDateTime(date: String?, time: String?): String {
val t = (time ?: "").padStart(6, '0') val t = (time ?: "").padStart(6, '0')
return "${d.take(2)}/${d.drop(2).take(2)} ${t.take(2)}:${t.drop(2).take(2)}" return "${d.take(2)}/${d.drop(2).take(2)} ${t.take(2)}:${t.drop(2).take(2)}"
} }
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)
}