Compare commits

..

4 Commits

Author SHA1 Message Date
moon
5bb07df9e3 error_slip print enable/disable 2026-08-20 15:51:22 +06:30
moon
f0799455cb history show reversal records in label 2026-08-20 15:40:47 +06:30
moon
66c969873e amount, date, time fixed in Void Preview 2026-08-20 14:49:46 +06:30
moon
46bf866de7 expiry date as **/** 2026-08-20 13:43:01 +06:30
16 changed files with 231 additions and 214 deletions

View File

@ -8,7 +8,13 @@
* fixed recent transaction only working for top 3 * fixed recent transaction only working for top 3
* routed to dashboard after printing receipt * routed to dashboard after printing receipt
* receipt printing animation re-scale * receipt printing animation re-scale
*
### version 3.4 ### version 3.4
* disable display always on * disable display always on
* auto-settlement * auto-settlement
* show expiry date as "`**`/`**`"
* align the customer name, in paper slip
* settlement fixed in both UI and system
* amount, date, time fixed in Void Preview
* show reversal status in trans records

View File

@ -50,7 +50,6 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.rotate import androidx.compose.ui.draw.rotate
import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
@ -524,26 +523,3 @@ fun Item(
} }
} }
} }
val previewTransactions = listOf(
TrnxRecord(
1L, "Sale", "MMK 10,000", "**** 1234", "06/10 14:32",
isVoided = false, isApproved = true
),
TrnxRecord(
2L, "Void", "MMK 5,500", "**** 5678", "06/10 13:10",
isVoided = true, isApproved = false
),
TrnxRecord(
3L, "Refund", "MMK 2,000", "**** 9012", "06/09 09:45",
isVoided = false, isApproved = true
),
TrnxRecord(
4L, "Sale", "MMK 30,000", "**** 3456", "06/09 08:00",
isVoided = false, isApproved = true
),
TrnxRecord(
5L, "Settlement", "MMK 0", "----", "06/08 18:00",
isVoided = false, isApproved = true
),
)

View File

@ -55,8 +55,6 @@ import com.mob.utsmyanmar.BuildConfig
import com.mob.utsmyanmar.R import com.mob.utsmyanmar.R
import com.mob.utsmyanmar.ui.components.appbar.AppBar import com.mob.utsmyanmar.ui.components.appbar.AppBar
import com.mob.utsmyanmar.ui.device_info.DeviceInfoUiState import com.mob.utsmyanmar.ui.device_info.DeviceInfoUiState
import com.mob.utsmyanmar.ui.preview.P2Preview
import com.mob.utsmyanmar.ui.preview.P3Preview
import com.mob.utsmyanmar.ui.theme.Color import com.mob.utsmyanmar.ui.theme.Color
import com.utsmyanmar.paylibs.sign_on.EchoTestProcess import com.utsmyanmar.paylibs.sign_on.EchoTestProcess
import com.utsmyanmar.paylibs.sign_on.SignOnListener import com.utsmyanmar.paylibs.sign_on.SignOnListener
@ -447,11 +445,3 @@ fun DashboardScreen2(
} }
} }
} }
@RequiresApi(Build.VERSION_CODES.N)
@P3Preview
@P2Preview
@Composable
fun PreviewDashboardScreen2() {
DashboardScreen2(dashboardUiState = DashboardUiState(previewTransactions))
}

View File

@ -88,7 +88,12 @@ class DashboardViewModel @Inject constructor(
private fun PayDetail.toRecord(): TrnxRecord { private fun PayDetail.toRecord(): TrnxRecord {
val baseType = transType?.takeIf { it.isNotBlank() }?.let { formatTypeLabel(it) } ?: "Transaction" val baseType = transType?.takeIf { it.isNotBlank() }?.let { formatTypeLabel(it) } ?: "Transaction"
val type = if (isCanceled) "Void" else baseType val type = when {
transactionType == TransactionsType.REVERSAL.value && !baseType.equals("Reversal", ignoreCase = true) ->
"$baseType (Reversal)"
isCanceled -> "Void"
else -> baseType
}
val displayAmount = displayAmount() val displayAmount = displayAmount()
val amountText = "MMK ${formatAmount(displayAmount)}" val amountText = "MMK ${formatAmount(displayAmount)}"
val card = CardNo?.takeIf { it.length >= 4 }?.let { "**** ${it.takeLast(4)}" } ?: "----" val card = CardNo?.takeIf { it.length >= 4 }?.let { "**** ${it.takeLast(4)}" } ?: "----"

View File

@ -49,7 +49,7 @@ internal fun HistoryTransactionCard(
horizontalArrangement = Arrangement.SpaceBetween horizontalArrangement = Arrangement.SpaceBetween
) { ) {
Text( Text(
text = payDetail.transType.ifBlank { "UNKNOWN" }, text = displayTransactionTitle(payDetail),
color = Color.LegacyRed, color = Color.LegacyRed,
style = MaterialTheme.typography.titleSmall style = MaterialTheme.typography.titleSmall
) )
@ -81,7 +81,7 @@ internal fun HistoryTransactionDetailCard(payDetail: PayDetail) {
verticalArrangement = Arrangement.spacedBy(8.dp) verticalArrangement = Arrangement.spacedBy(8.dp)
) { ) {
Text( Text(
text = payDetail.transType.ifBlank { "Transaction" }, text = displayTransactionTitle(payDetail),
color = Color.LegacyRed, color = Color.LegacyRed,
style = MaterialTheme.typography.titleMedium style = MaterialTheme.typography.titleMedium
) )
@ -92,7 +92,7 @@ internal fun HistoryTransactionDetailCard(payDetail: PayDetail) {
SummaryLine("Approval", payDetail.approvalCode.orEmpty()) SummaryLine("Approval", payDetail.approvalCode.orEmpty())
SummaryLine("Date", payDetail.tradeDate) SummaryLine("Date", payDetail.tradeDate)
SummaryLine("Time", payDetail.tradeTime) SummaryLine("Time", payDetail.tradeTime)
SummaryLine("Status", payDetail.tradeAnswerCode.orEmpty()) SummaryLine("Status", displayTransactionStatus(payDetail))
} }
} }
} }

View File

@ -26,6 +26,22 @@ internal fun prepareReprintPayDetail(payDetail: PayDetail): PayDetail {
return payDetail return payDetail
} }
internal fun displayTransactionStatus(payDetail: PayDetail): String {
if (payDetail.transactionType == TransactionsType.REVERSAL.value) {
return if (payDetail.isNeedReversal) "REVERSAL FAILED" else "REVERSAL SUCCESS"
}
return POSUtil.getInstance().getResponse(payDetail.tradeAnswerCode.orEmpty().ifBlank { "-" })
}
internal fun displayTransactionTitle(payDetail: PayDetail): String {
val title = payDetail.transType.ifBlank { "TRANSACTION" }
return if (payDetail.transactionType == TransactionsType.REVERSAL.value) {
"$title (REVERSAL)"
} else {
title
}
}
internal fun isValidForReprint(payDetail: PayDetail): Boolean { internal fun isValidForReprint(payDetail: PayDetail): Boolean {
if (payDetail.transactionType == TransactionsType.SETTLEMENT.value) return false if (payDetail.transactionType == TransactionsType.SETTLEMENT.value) return false
if (payDetail.transactionType == TransactionsType.WAVEPAY.value && payDetail.qrTransStatus != 1) { if (payDetail.transactionType == TransactionsType.WAVEPAY.value && payDetail.qrTransStatus != 1) {

View File

@ -38,6 +38,8 @@ import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.mob.utsmyanmar.ui.components.appbar.AppBar import com.mob.utsmyanmar.ui.components.appbar.AppBar
import com.mob.utsmyanmar.ui.history_functions.displayTransactionStatus
import com.mob.utsmyanmar.ui.history_functions.displayTransactionTitle
import com.mob.utsmyanmar.ui.theme.Color import com.mob.utsmyanmar.ui.theme.Color
import com.mob.utsmyanmar.ui.transaction_result.TransactionResultState import com.mob.utsmyanmar.ui.transaction_result.TransactionResultState
import com.mob.utsmyanmar.ui.transaction_result.TransactionResultViewModel import com.mob.utsmyanmar.ui.transaction_result.TransactionResultViewModel
@ -240,11 +242,11 @@ fun ReceiptPreview(
ReceiptRow("Merchant", state.payDetail?.merchantName.toString() ) ReceiptRow("Merchant", state.payDetail?.merchantName.toString() )
ReceiptRow("Terminal ID", state.payDetail?.terminalNo.toString() ) ReceiptRow("Terminal ID", state.payDetail?.terminalNo.toString() )
ReceiptRow("Trace No", state.payDetail?.voucherNo.toString() ) ReceiptRow("Trace No", state.payDetail?.voucherNo.toString() )
ReceiptRow("Transaction", state.payDetail?.transType.toString()) ReceiptRow("Transaction", state.payDetail?.let(::displayTransactionTitle).orEmpty())
ReceiptRow("Amount", POSUtil.getInstance().getDecimalAmountSeparatorFormat(state.payDetail?.amount?:0)) ReceiptRow("Amount", POSUtil.getInstance().getDecimalAmountSeparatorFormat(state.payDetail?.amount?:0))
ReceiptRow("Card Type", state.payDetail?.accountType.toString()) ReceiptRow("Card Type", state.payDetail?.accountType.toString())
ReceiptRow("Card No", state.payDetail?.cardNo.toString()) ReceiptRow("Card No", state.payDetail?.cardNo.toString())
ReceiptRow("Status", POSUtil.getInstance().getResponse(state.payDetail?.tradeAnswerCode?: "-")) ReceiptRow("Status", state.payDetail?.let(::displayTransactionStatus).orEmpty())
ReceiptRow("Date", state.payDetail?.transDate.toString() ) ReceiptRow("Date", state.payDetail?.transDate.toString() )
ReceiptRow("Time", state.payDetail?.transTime.toString()) ReceiptRow("Time", state.payDetail?.transTime.toString())
ReceiptRow("Ref No", state.payDetail?.referNo.toString()) ReceiptRow("Ref No", state.payDetail?.referNo.toString())

View File

@ -1,6 +1,5 @@
package com.mob.utsmyanmar.ui.sale_void package com.mob.utsmyanmar.ui.sale_void
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@ -138,8 +137,8 @@ private fun TransactionDetailsCard(transaction: PayDetail) {
DetailRow("Card No", transaction.cardNo) DetailRow("Card No", transaction.cardNo)
DetailRow("Reference", transaction.referNo) DetailRow("Reference", transaction.referNo)
DetailRow("Approval", transaction.approvalCode.orEmpty()) DetailRow("Approval", transaction.approvalCode.orEmpty())
DetailRow("Date", transaction.tradeDate) DetailRow("Date", transaction.transDate)
DetailRow("Time", transaction.tradeTime) DetailRow("Time", transaction.transTime)
} }
} }
} }

View File

@ -125,7 +125,9 @@ class TransactionResultViewModel @Inject constructor(
when { when {
isNonApprovedTrade(payDetail) && isNonApprovedTrade(payDetail) &&
isNonWavepayTransaction(transactionType) -> { isNonWavepayTransaction(transactionType) -> {
if (SystemParamsOperation.getInstance().isPrintErrorSlip) {
startPrintProcess(sharedViewModel, false) startPrintProcess(sharedViewModel, false)
}
isCardInside() isCardInside()
} }

View File

@ -174,6 +174,7 @@ class TMSSetupsImpl : TMSSetups {
"clear_batch_time" -> ops.clearBatchTime = data "clear_batch_time" -> ops.clearBatchTime = data
"alert_sound_enable" -> ops.isAlertSound = parseBoolean(data) "alert_sound_enable" -> ops.isAlertSound = parseBoolean(data)
"auto_print_enable" -> ops.isAutoPrintCustomerCopy = parseBoolean(data) "auto_print_enable" -> ops.isAutoPrintCustomerCopy = parseBoolean(data)
"print_error_slip" -> ops.setPrintErrorSlip(parseBoolean(data))
"ecr_enable" -> ops.ecrStatus = parseBoolean(data) "ecr_enable" -> ops.ecrStatus = parseBoolean(data)
"manual_entry_enable" -> ops.setManualEntyrStatus(parseBoolean(data)) "manual_entry_enable" -> ops.setManualEntyrStatus(parseBoolean(data))
"mmqr_interval_waiting_time" -> ops.waveIntervalTime = data "mmqr_interval_waiting_time" -> ops.waveIntervalTime = data

View File

@ -6,7 +6,6 @@ import android.graphics.BitmapFactory;
import android.os.RemoteException; import android.os.RemoteException;
import android.text.TextUtils; import android.text.TextUtils;
import com.sunmi.peripheral.printer.InnerPrinterCallback;
import com.sunmi.peripheral.printer.InnerResultCallback; import com.sunmi.peripheral.printer.InnerResultCallback;
import com.sunmi.peripheral.printer.SunmiPrinterService; import com.sunmi.peripheral.printer.SunmiPrinterService;
import com.utsmyanmar.paylibs.Constant; import com.utsmyanmar.paylibs.Constant;
@ -17,7 +16,6 @@ import com.utsmyanmar.paylibs.model.SettleData;
import com.utsmyanmar.paylibs.model.TradeData; import com.utsmyanmar.paylibs.model.TradeData;
import com.utsmyanmar.paylibs.system.BaseErrorCode; import com.utsmyanmar.paylibs.system.BaseErrorCode;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation; import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsSettings;
import com.utsmyanmar.paylibs.utils.iso_utils.TransactionType; import com.utsmyanmar.paylibs.utils.iso_utils.TransactionType;
import com.utsmyanmar.paylibs.utils.params.Params; import com.utsmyanmar.paylibs.utils.params.Params;
import com.utsmyanmar.paylibs.utils.print_utils.BitmapUtils; import com.utsmyanmar.paylibs.utils.print_utils.BitmapUtils;
@ -302,7 +300,8 @@ public class PrintReceipt {
if (!secondLineName.equals("")) { if (!secondLineName.equals("")) {
sunmiPrinterService.printColumnsString(new String[]{secondLineName, ""}, new int[]{2, 2}, new int[]{0, 1}, null); sunmiPrinterService.printColumnsString(new String[]{secondLineName, ""}, new int[]{2, 2}, new int[]{0, 1}, null);
} }
sunmiPrinterService.printColumnsString(new String[]{"ENTRY MODE:" + PrintUtils.getInstance().getEntryType(payDetail.getCardType()), "EXPIRY DATE:" + PrintUtils.getInstance().getFormatExpDate(payDetail.getEXPDate())}, new int[]{2, 2}, new int[]{0, 2}, null); // sunmiPrinterService.printColumnsString(new String[]{"ENTRY MODE:" + PrintUtils.getInstance().getEntryType(payDetail.getCardType()), "EXPIRY DATE:" + PrintUtils.getInstance().getFormatExpDate(payDetail.getEXPDate())}, new int[]{2, 2}, new int[]{0, 2}, null);
sunmiPrinterService.printColumnsString(new String[]{"ENTRY MODE:" + PrintUtils.getInstance().getEntryType(payDetail.getCardType()), "EXPIRY DATE:" + "**/**"}, new int[]{2, 2}, new int[]{0, 2}, null);
if (payDetail.getTradeAnswerCode().equals(Constant.ANSWER_CODE_ACCEPT) || payDetail.getTradeAnswerCode().equals(Constant.ANSWER_CODE_APPROVED)) { if (payDetail.getTradeAnswerCode().equals(Constant.ANSWER_CODE_ACCEPT) || payDetail.getTradeAnswerCode().equals(Constant.ANSWER_CODE_APPROVED)) {
sunmiPrinterService.printColumnsString(new String[]{"CARD TYPE:" + payDetail.getAccountType(), "APPRCODE:" + payDetail.getApprovalCode()}, new int[]{2, 2}, new int[]{0, 2}, null); sunmiPrinterService.printColumnsString(new String[]{"CARD TYPE:" + payDetail.getAccountType(), "APPRCODE:" + payDetail.getApprovalCode()}, new int[]{2, 2}, new int[]{0, 2}, null);
} else { } else {

View File

@ -233,7 +233,7 @@ public abstract class BaseXPrint {
sunmiPrinterService.printText("CARD NUMBER : "+ PrintUtils.getInstance().cardNumMasking(payDetail.getCardNo()) + "\n", innerResultCallback); sunmiPrinterService.printText("CARD NUMBER : "+ PrintUtils.getInstance().cardNumMasking(payDetail.getCardNo()) + "\n", innerResultCallback);
if(!firstLineName.isEmpty()) { if(!firstLineName.isEmpty()) {
sunmiPrinterService.printText("CARD HOLDER NAME: " + firstLineName + "\n", innerResultCallback); sunmiPrinterService.printText("CARD HOLDER : " + firstLineName + "\n", innerResultCallback);
// sunmiPrinterService.printColumnsString(new String[]{"CARD HOLDER NAME:", firstLineName}, new int[]{2, 2}, new int[]{0, 1}, innerResultCallback); // sunmiPrinterService.printColumnsString(new String[]{"CARD HOLDER NAME:", firstLineName}, new int[]{2, 2}, new int[]{0, 1}, innerResultCallback);
} }
if(!secondLineName.isEmpty()) { if(!secondLineName.isEmpty()) {
@ -241,7 +241,8 @@ public abstract class BaseXPrint {
// sunmiPrinterService.printColumnsString(new String[]{secondLineName, ""}, new int[]{2, 2}, new int[]{0, 1}, innerResultCallback); // sunmiPrinterService.printColumnsString(new String[]{secondLineName, ""}, new int[]{2, 2}, new int[]{0, 1}, innerResultCallback);
} }
sunmiPrinterService.printText("ENTRY MODE : " + PrintUtils.getInstance().getEntryType(payDetail.getCardType()) + "\n", innerResultCallback); sunmiPrinterService.printText("ENTRY MODE : " + PrintUtils.getInstance().getEntryType(payDetail.getCardType()) + "\n", innerResultCallback);
sunmiPrinterService.printText("EXPIRY DATE : " + PrintUtils.getInstance().getFormatExpDate(payDetail.getEXPDate()) + "\n", innerResultCallback); // sunmiPrinterService.printText("EXPIRY DATE : " + PrintUtils.getInstance().getFormatExpDate(payDetail.getEXPDate()) + "\n", innerResultCallback);
sunmiPrinterService.printText("EXPIRY DATE : " + "**/**" + "\n", innerResultCallback);
// sunmiPrinterService.printColumnsString(new String[]{"ENTRY MODE:" + PrintUtils.getInstance().getEntryType(payDetail.getCardType()), "EXPIRY DATE:" + PrintUtils.getInstance().getFormatExpDate(payDetail.getEXPDate())}, new int[]{2, 2}, new int[]{0, 2}, innerResultCallback); // sunmiPrinterService.printColumnsString(new String[]{"ENTRY MODE:" + PrintUtils.getInstance().getEntryType(payDetail.getCardType()), "EXPIRY DATE:" + PrintUtils.getInstance().getFormatExpDate(payDetail.getEXPDate())}, new int[]{2, 2}, new int[]{0, 2}, innerResultCallback);
if (payDetail.getTradeAnswerCode().equals(Constant.ANSWER_CODE_ACCEPT) || payDetail.getTradeAnswerCode().equals(Constant.ANSWER_CODE_APPROVED)) { if (payDetail.getTradeAnswerCode().equals(Constant.ANSWER_CODE_ACCEPT) || payDetail.getTradeAnswerCode().equals(Constant.ANSWER_CODE_APPROVED)) {
sunmiPrinterService.printText("CARD TYPE : " + cardType + "\n", innerResultCallback); sunmiPrinterService.printText("CARD TYPE : " + cardType + "\n", innerResultCallback);

View File

@ -57,13 +57,12 @@ public class ReversalAction {
public ReversalAction setData(TradeData tradeData) { public ReversalAction setData(TradeData tradeData) {
this.tradeData = tradeData; this.tradeData = tradeData;
payDetail = tradeData.getPayDetail(); payDetail = tradeData.getPayDetail();
payDetail.setTransactionType(TransactionsType.REVERSAL.value);
// payDetail.setTransType(REVERSAL);
if (TextUtils.equals(payDetail.getAccountType(), MPU)) { if (TextUtils.equals(payDetail.getAccountType(), MPU)) {
BITMAP = getBitmapMPU(payDetail); BITMAP = getBitmapMPU(payDetail);
} else { } else {
BITMAP = getBitmapUPI(payDetail); BITMAP = getBitmapUPI(payDetail);
} }
payDetail.setTransactionType(TransactionsType.REVERSAL.value);
return INSTANCE; return INSTANCE;
} }

View File

@ -38,32 +38,33 @@ public class POSUtil {
return instance; return instance;
} }
public POSUtil(){ public POSUtil() {
} }
public long convertAmount(String amount) { public long convertAmount(String amount) {
long amountValue = 0; long amountValue = 0;
if (amount != null ) { if (amount != null) {
if(amount.contains(",")) { if (amount.contains(",")) {
amount = amount.replace(",",""); amount = amount.replace(",", "");
} }
if(amount.contains(".")) { if (amount.contains(".")) {
int index = amount.indexOf('.'); int index = amount.indexOf('.');
int len = amount.substring(index+1).length(); int len = amount.substring(index + 1).length();
String amt = amount.replace(".",""); String amt = amount.replace(".", "");
if(len == 0){ if (len == 0) {
amountValue = Long.parseLong(amt+"00"); amountValue = Long.parseLong(amt + "00");
} else if(len == 1){ } else if (len == 1) {
amountValue = Long.parseLong(amt+"0"); amountValue = Long.parseLong(amt + "0");
} else { } else {
amountValue = Long.parseLong(amt); amountValue = Long.parseLong(amt);
} }
} else { } else {
amountValue = Long.parseLong(amount+"00"); amountValue = Long.parseLong(amount + "00");
} }
} }
@ -72,15 +73,15 @@ public class POSUtil {
public long convertAmountQR(String amount) { public long convertAmountQR(String amount) {
long amountValue = 0; long amountValue = 0;
if (amount != null ) { if (amount != null) {
if(amount.contains(",")) { if (amount.contains(",")) {
amount = amount.replace(",",""); amount = amount.replace(",", "");
} }
if(amount.contains(".")) { if (amount.contains(".")) {
int index = amount.indexOf('.'); int index = amount.indexOf('.');
amount = amount.substring(0,index); amount = amount.substring(0, index);
amountValue = Long.parseLong(amount); amountValue = Long.parseLong(amount);
} else { } else {
@ -101,21 +102,21 @@ public class POSUtil {
SimpleDateFormat dfm = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss", Locale.getDefault()); SimpleDateFormat dfm = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss", Locale.getDefault());
String currentTime = dfm.format(new Date()); String currentTime = dfm.format(new Date());
return currentTime.substring(0,10)+" "+currentTime.substring(11,19); return currentTime.substring(0, 10) + " " + currentTime.substring(11, 19);
} }
public String getCurrentDateTimeForQR() { public String getCurrentDateTimeForQR() {
SimpleDateFormat dfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); SimpleDateFormat dfm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
String currentTime = dfm.format(new Date()); String currentTime = dfm.format(new Date());
return currentTime.substring(0,10)+" "+currentTime.substring(11,19); return currentTime.substring(0, 10) + " " + currentTime.substring(11, 19);
} }
public String getCardNumMasking(String pan) { public String getCardNumMasking(String pan) {
if(pan != null){ if (pan != null) {
StringBuilder PAN = new StringBuilder(pan); StringBuilder PAN = new StringBuilder(pan);
if (pan.length() > 12) { if (pan.length() > 12) {
PAN.replace(6,12,"******"); PAN.replace(6, 12, "******");
} else { } else {
// PAN.append("*********"); // PAN.append("*********");
PAN.append(" "); PAN.append(" ");
@ -134,7 +135,7 @@ public class POSUtil {
public String getDecimalAmountFormat(long number) { public String getDecimalAmountFormat(long number) {
double decimalNumber = number / 100.0; // Divide by 100 to move decimal point two places to the left double decimalNumber = number / 100.0; // Divide by 100 to move decimal point two places to the left
return String.format(Locale.getDefault(),"%.2f", decimalNumber); return String.format(Locale.getDefault(), "%.2f", decimalNumber);
// DecimalFormat formatter = new DecimalFormat("#,###.##"); // DecimalFormat formatter = new DecimalFormat("#,###.##");
// return formatter.format(amt); // return formatter.format(amt);
} }
@ -170,7 +171,11 @@ public class POSUtil {
} }
public String formatAmount(long amount) { public String formatAmount(long amount) {
return String.format("%012d", amount); return String.format(
Locale.US,
"%,.2f",
amount / 100.0
);
} }
public String responseCodeConverter(String responseCode) { public String responseCodeConverter(String responseCode) {
@ -184,13 +189,13 @@ public class POSUtil {
public String getCardType(PayDetail payDetail) { public String getCardType(PayDetail payDetail) {
int value = 0; int value = 0;
if(payDetail.getAccountType().equals(CardScheme.VISA.name)) { if (payDetail.getAccountType().equals(CardScheme.VISA.name)) {
value = CardScheme.VISA.value; value = CardScheme.VISA.value;
} else if(payDetail.getAccountType().equals(CardScheme.MASTERCARD.name)) { } else if (payDetail.getAccountType().equals(CardScheme.MASTERCARD.name)) {
value = CardScheme.MASTERCARD.value; value = CardScheme.MASTERCARD.value;
} else if(payDetail.getAccountType().equals(CardScheme.UPI.name)) { } else if (payDetail.getAccountType().equals(CardScheme.UPI.name)) {
value = CardScheme.UPI.value; value = CardScheme.UPI.value;
} else if(payDetail.getAccountType().equals(CardScheme.MPU.name)) { } else if (payDetail.getAccountType().equals(CardScheme.MPU.name)) {
value = CardScheme.MPU.value; value = CardScheme.MPU.value;
} }
return String.valueOf(value); return String.valueOf(value);
@ -204,14 +209,14 @@ public class POSUtil {
value = "07"; value = "07";
} else if (AidlConstants.CardType.IC.getValue() == payDetail.getCardType()) { // IC } else if (AidlConstants.CardType.IC.getValue() == payDetail.getCardType()) { // IC
value = "05"; value = "05";
} else if (-9 == payDetail.getCardType()){ // Fallback } else if (-9 == payDetail.getCardType()) { // Fallback
value = "08"; value = "08";
} else { // Hand-in card number } else { // Hand-in card number
value = "01"; value = "01";
} }
if(payDetail.getTransCVM() == TransCVM.OFFLINE_PIN) { if (payDetail.getTransCVM() == TransCVM.OFFLINE_PIN) {
value += "9"; value += "9";
} else { } else {
if (payDetail.getPINCipher() != null && !payDetail.getPINCipher().trim().isEmpty()) { if (payDetail.getPINCipher() != null && !payDetail.getPINCipher().trim().isEmpty()) {
@ -233,7 +238,7 @@ public class POSUtil {
} }
public String checkMinusSign(int transType) { public String checkMinusSign(int transType) {
return (transType == TransactionsType.VOID.value || transType == TransactionsType.REFUND.value || transType == TransactionsType.PRE_AUTH_VOID.value || transType == TransactionsType.PRE_AUTH_COMPLETE_VOID.value) ? "-":""; return (transType == TransactionsType.VOID.value || transType == TransactionsType.REFUND.value || transType == TransactionsType.PRE_AUTH_VOID.value || transType == TransactionsType.PRE_AUTH_COMPLETE_VOID.value) ? "-" : "";
} }
public String getDecimalAmountVoidFormat(PayDetail payDetail) { public String getDecimalAmountVoidFormat(PayDetail payDetail) {
@ -242,23 +247,23 @@ public class POSUtil {
BigDecimal unscaled = new BigDecimal(payDetail.amount); BigDecimal unscaled = new BigDecimal(payDetail.amount);
BigDecimal scaled = unscaled.scaleByPowerOfTen(-x); BigDecimal scaled = unscaled.scaleByPowerOfTen(-x);
double amounts = Double.parseDouble(scaled.toString()); double amounts = Double.parseDouble(scaled.toString());
return payDetail.getTransactionType() == TransactionsType.VOID.value || payDetail.getTransactionType() == TransactionsType.REFUND.value || payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value ? "-"+formatter.format(amounts) : ""+formatter.format(amounts); return payDetail.getTransactionType() == TransactionsType.VOID.value || payDetail.getTransactionType() == TransactionsType.REFUND.value || payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value ? "-" + formatter.format(amounts) : "" + formatter.format(amounts);
} }
public String getTransName(PayDetail payDetail) { public String getTransName(PayDetail payDetail) {
String name = ""; String name = "";
if(payDetail.getTransactionType() == 10) { if (payDetail.getTransactionType() == 10) {
name = payDetail.transType.replace('_',' ') + "(Reversal)"; name = payDetail.transType.replace('_', ' ') + "(Reversal)";
} else { } else {
name = payDetail.transType.replace('_',' '); name = payDetail.transType.replace('_', ' ');
} }
return name; return name;
} }
public int checkQRFailureTransaction(PayDetail payDetail) { public int checkQRFailureTransaction(PayDetail payDetail) {
// return R.color.colorPrimarySmile; // return R.color.colorPrimarySmile;
if(payDetail.getTransactionType() == TransactionsType.WAVEPAY.value) { if (payDetail.getTransactionType() == TransactionsType.WAVEPAY.value) {
if(payDetail.getQrTransStatus() == -1) { if (payDetail.getQrTransStatus() == -1) {
return R.color.colorPrimarySmile; return R.color.colorPrimarySmile;
} else { } else {
return R.color.black; return R.color.black;
@ -271,9 +276,9 @@ public class POSUtil {
public String getEntryType(int cardType) { public String getEntryType(int cardType) {
String entryType = "-"; String entryType = "-";
if(AidlConstants.CardType.IC.getValue() == cardType) { if (AidlConstants.CardType.IC.getValue() == cardType) {
entryType = "Chip"; entryType = "Chip";
} else if(AidlConstants.CardType.MAGNETIC.getValue() == cardType) { } else if (AidlConstants.CardType.MAGNETIC.getValue() == cardType) {
entryType = "MagStripe"; entryType = "MagStripe";
} else if (AidlConstants.CardType.NFC.getValue() == cardType) { } else if (AidlConstants.CardType.NFC.getValue() == cardType) {
entryType = "Wave"; entryType = "Wave";
@ -286,29 +291,29 @@ public class POSUtil {
public String interceptCardNo(String cardNo) { public String interceptCardNo(String cardNo) {
if(cardNo != null){ if (cardNo != null) {
if(cardNo.isEmpty()) { if (cardNo.isEmpty()) {
return ""; return "";
} }
StringBuilder PAN = new StringBuilder(cardNo); StringBuilder PAN = new StringBuilder(cardNo);
if (cardNo.length() > 12) { if (cardNo.length() > 12) {
PAN.replace(6,12,"******"); PAN.replace(6, 12, "******");
} else { } else {
PAN.append("*********"); PAN.append("*********");
} }
return PAN.toString(); return PAN.toString();
}else { } else {
return ""; return "";
} }
} }
public String checkStringViewBatch(TransMenu transMenu) { public String checkStringViewBatch(TransMenu transMenu) {
return transMenu == TransMenu.SETTLEMENT ? "Confirm":"Print Receipt"; return transMenu == TransMenu.SETTLEMENT ? "Confirm" : "Print Receipt";
} }
public boolean checkMerchantNameLength(String merchantName) { public boolean checkMerchantNameLength(String merchantName) {
if(!TextUtils.equals(merchantName,"")){ if (!TextUtils.equals(merchantName, "")) {
return merchantName.length() >= 15; return merchantName.length() >= 15;
} else { } else {
return false; return false;
@ -324,29 +329,29 @@ public class POSUtil {
} }
public String getFormatExpDate(String exp) { public String getFormatExpDate(String exp) {
if(exp != null){ if (exp != null) {
String EXP = ""; String EXP = "";
try{ try {
EXP = exp.substring(2,4)+"/"; EXP = exp.substring(2, 4) + "/";
EXP = EXP + exp.substring(0,2); EXP = EXP + exp.substring(0, 2);
return EXP; return EXP;
}catch (Exception e){ } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return EXP; return EXP;
} }
}else { } else {
return ""; return "";
} }
} }
public String checkCardName(PayDetail payDetail) { public String checkCardName(PayDetail payDetail) {
if(payDetail != null) { if (payDetail != null) {
if(payDetail.getTransactionType() == TransactionsType.WAVEPAY.value) { if (payDetail.getTransactionType() == TransactionsType.WAVEPAY.value) {
return payDetail.getCustomerMobile().toUpperCase(); return payDetail.getCustomerMobile().toUpperCase();
} else if(payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value) { } else if (payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value) {
return "QR PAYMENT"; return "QR PAYMENT";
} else { } else {
return payDetail.getAccountType(); return payDetail.getAccountType();
@ -357,12 +362,12 @@ public class POSUtil {
} }
public String checkRRNorTrnxId(PayDetail payDetail) { public String checkRRNorTrnxId(PayDetail payDetail) {
if(payDetail != null) { if (payDetail != null) {
if(payDetail.getTransactionType() == TransactionsType.WAVEPAY.value) { if (payDetail.getTransactionType() == TransactionsType.WAVEPAY.value) {
return payDetail.getQrTransId(); return payDetail.getQrTransId();
} else if(payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value) { } else if (payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value) {
return payDetail.getReferNo()+"(RRN)"; return payDetail.getReferNo() + "(RRN)";
} else { } else {
return payDetail.getReferNo(); return payDetail.getReferNo();
} }
@ -372,9 +377,9 @@ public class POSUtil {
} }
public String checkTraceOrInvoice(PayDetail payDetail) { public String checkTraceOrInvoice(PayDetail payDetail) {
if(payDetail != null) { if (payDetail != null) {
if(payDetail.getTransactionType() == TransactionsType.WAVEPAY.value || payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value) { if (payDetail.getTransactionType() == TransactionsType.WAVEPAY.value || payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value) {
return payDetail.getInvoiceNo(); return payDetail.getInvoiceNo();
} else { } else {
return payDetail.getVoucherNo(); return payDetail.getVoucherNo();
@ -385,31 +390,31 @@ public class POSUtil {
} }
public String getFormatExpDateDR(String exp) { public String getFormatExpDateDR(String exp) {
if(exp != null && !exp.isEmpty()){ if (exp != null && !exp.isEmpty()) {
String EXP = ""; String EXP = "";
try{ try {
EXP = exp.substring(2,4)+"/"; EXP = exp.substring(2, 4) + "/";
EXP = EXP + exp.substring(0,2); EXP = EXP + exp.substring(0, 2);
return EXP; return EXP;
}catch (Exception e){ } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return EXP; return EXP;
} }
}else { } else {
return "**/**"; return "**/**";
} }
} }
public String getISOFormatExpDate(String exp) { public String getISOFormatExpDate(String exp) {
if(exp != null && !exp.isEmpty()) { if (exp != null && !exp.isEmpty()) {
if(exp.length() != 5 ) { if (exp.length() != 5) {
return ""; return "";
} }
String expDate = ""; String expDate = "";
expDate = exp.substring(3,5)+exp.substring(0,2); expDate = exp.substring(3, 5) + exp.substring(0, 2);
return expDate; return expDate;
} else { } else {
@ -418,7 +423,7 @@ public class POSUtil {
} }
private String checkResultCode(String code) { private String checkResultCode(String code) {
if(code.equals(Constant.ANSWER_CODE_ACCEPT) || code.equals(Constant.ANSWER_CODE_APPROVED)){ if (code.equals(Constant.ANSWER_CODE_ACCEPT) || code.equals(Constant.ANSWER_CODE_APPROVED)) {
return "Success"; return "Success";
} else { } else {
return BaseErrorCode.getErrorMessage(code); return BaseErrorCode.getErrorMessage(code);
@ -427,10 +432,10 @@ public class POSUtil {
@SuppressLint("DefaultLocale") @SuppressLint("DefaultLocale")
public String checkResult(PayDetail payDetail) { public String checkResult(PayDetail payDetail) {
try{ try {
if(payDetail.getTradeAnswerCode().equals("00") || payDetail.getTradeAnswerCode().equals("000")){ if (payDetail.getTradeAnswerCode().equals("00") || payDetail.getTradeAnswerCode().equals("000")) {
if(payDetail.getTransactionType() == TransactionsType.SETTLEMENT.value) { if (payDetail.getTransactionType() == TransactionsType.SETTLEMENT.value) {
return "Success"; return "Success";
} }
/* if(payDetail.getAmount() != 0) { /* if(payDetail.getAmount() != 0) {
@ -451,32 +456,31 @@ public class POSUtil {
String currencySign = SystemParamsOperation.getInstance().getCurrencyType().name; String currencySign = SystemParamsOperation.getInstance().getCurrencyType().name;
if(payDetail.getTransactionType() == TransactionsType.VOID.value ) { if (payDetail.getTransactionType() == TransactionsType.VOID.value) {
return "Transaction for Amount \n"+getDecimalAmountFormat(payDetail.getAmount()) +" "+currencySign+" Voided."; return "Transaction for Amount \n" + getDecimalAmountFormat(payDetail.getAmount()) + " " + currencySign + " Voided.";
} else if(payDetail.getTransactionType() == TransactionsType.REFUND.value) { } else if (payDetail.getTransactionType() == TransactionsType.REFUND.value) {
return "Transaction for Amount \n"+getDecimalAmountFormat(payDetail.getAmount()) +" "+currencySign+" Refunded."; return "Transaction for Amount \n" + getDecimalAmountFormat(payDetail.getAmount()) + " " + currencySign + " Refunded.";
} else if(payDetail.getTransactionType() == TransactionsType.PRE_AUTH_SALE.value) { } else if (payDetail.getTransactionType() == TransactionsType.PRE_AUTH_SALE.value) {
return "PreAuth for Amount \n"+getDecimalAmountFormat(payDetail.getAmount()) +" "+currencySign+" Approved."; return "PreAuth for Amount \n" + getDecimalAmountFormat(payDetail.getAmount()) + " " + currencySign + " Approved.";
} else if(payDetail.getTransactionType() == TransactionsType.PRE_AUTH_VOID.value) { } else if (payDetail.getTransactionType() == TransactionsType.PRE_AUTH_VOID.value) {
return "PreAuth Cancel for Amount \n"+getDecimalAmountFormat(payDetail.getAmount()) +" "+currencySign+" Approved."; return "PreAuth Cancel for Amount \n" + getDecimalAmountFormat(payDetail.getAmount()) + " " + currencySign + " Approved.";
} else if(payDetail.getTransactionType() == TransactionsType.PRE_AUTH_COMPLETE.value) { } else if (payDetail.getTransactionType() == TransactionsType.PRE_AUTH_COMPLETE.value) {
return "PreAuth Complete for Amount \n"+getDecimalAmountFormat(payDetail.getAmount()) +" "+currencySign+" Approved."; return "PreAuth Complete for Amount \n" + getDecimalAmountFormat(payDetail.getAmount()) + " " + currencySign + " Approved.";
} else if(payDetail.getTransactionType() == TransactionsType.PRE_AUTH_COMPLETE_VOID.value) { } else if (payDetail.getTransactionType() == TransactionsType.PRE_AUTH_COMPLETE_VOID.value) {
return "PreAuth Complete Cancel for Amount \n"+getDecimalAmountFormat(payDetail.getAmount()) +" "+currencySign+" Approved."; return "PreAuth Complete Cancel for Amount \n" + getDecimalAmountFormat(payDetail.getAmount()) + " " + currencySign + " Approved.";
} else if(payDetail.getTransactionType() == TransactionsType.CASH_OUT.value) { } else if (payDetail.getTransactionType() == TransactionsType.CASH_OUT.value) {
long totalAmount = payDetail.getAmount() + payDetail.getAdditionalAmount(); long totalAmount = payDetail.getAmount() + payDetail.getAdditionalAmount();
return "Transaction for Amount \n"+getDecimalAmountFormat(totalAmount) +" "+currencySign+" Received."; return "Transaction for Amount \n" + getDecimalAmountFormat(totalAmount) + " " + currencySign + " Received.";
} else {
return "Transaction for Amount \n" + getDecimalAmountFormat(payDetail.getAmount()) + " " + currencySign + " Received.";
} }
else { } else if (TextUtils.equals(payDetail.getAccountType(), "WALLET")) {
return "Transaction for Amount \n"+getDecimalAmountFormat(payDetail.getAmount()) +" "+currencySign+" Received."; if (payDetail.getQrTransStatus() == 1) {
} return "Transaction for Amount \n" + getDecimalAmountFormat(payDetail.getAmount()) + " MMK Received.";
} else if(TextUtils.equals(payDetail.getAccountType(),"WALLET")) { } else if (payDetail.getQrTransStatus() == 3) {
if(payDetail.getQrTransStatus() == 1) {
return "Transaction for Amount \n"+getDecimalAmountFormat(payDetail.getAmount()) +" MMK Received.";
} else if(payDetail.getQrTransStatus() == 3){
return "Declined \n COMMUNICATION ERROR"; return "Declined \n COMMUNICATION ERROR";
} else if(payDetail.getQrTransStatus() == 2) { } else if (payDetail.getQrTransStatus() == 2) {
if(isCurrentDateTimePassed(payDetail.getTransDate(),payDetail.getTransTime())) { if (isCurrentDateTimePassed(payDetail.getTransDate(), payDetail.getTransTime())) {
return "Declined \n expire"; return "Declined \n expire";
} else { } else {
return "Declined \n payment credit in-progress"; return "Declined \n payment credit in-progress";
@ -484,9 +488,9 @@ public class POSUtil {
} else { } else {
// return "Transaction failed"; // return "Transaction failed";
if(payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value) { if (payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value) {
if(payDetail.getTradeResultDes() != null && !payDetail.getTradeResultDes().isEmpty()) { if (payDetail.getTradeResultDes() != null && !payDetail.getTradeResultDes().isEmpty()) {
return "Declined \n "+payDetail.getTradeResultDes(); return "Declined \n " + payDetail.getTradeResultDes();
} else { } else {
return "Declined \n transaction fail"; return "Declined \n transaction fail";
} }
@ -496,20 +500,19 @@ public class POSUtil {
} }
} }
} } else {
else {
return checkResultCode(payDetail.getTradeAnswerCode()); return checkResultCode(payDetail.getTradeAnswerCode());
} }
} catch (Exception e){ } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return checkResultCode(""); return checkResultCode("");
} }
} }
public boolean checkBooleanResult(PayDetail payDetail){ public boolean checkBooleanResult(PayDetail payDetail) {
try { try {
return TextUtils.equals("00",payDetail.getTradeAnswerCode()) || TextUtils.equals("000",payDetail.getTradeAnswerCode()) || payDetail.getQrTransStatus() == 1; return TextUtils.equals("00", payDetail.getTradeAnswerCode()) || TextUtils.equals("000", payDetail.getTradeAnswerCode()) || payDetail.getQrTransStatus() == 1;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return false; return false;
@ -519,7 +522,7 @@ public class POSUtil {
public Date getCurrentDate() { public Date getCurrentDate() {
String dateFormatPattern = "dd/MM/yy"; String dateFormatPattern = "dd/MM/yy";
SimpleDateFormat formatter = new SimpleDateFormat(dateFormatPattern,Locale.getDefault()); SimpleDateFormat formatter = new SimpleDateFormat(dateFormatPattern, Locale.getDefault());
Date today = new Date(); Date today = new Date();
String to = formatter.format(today); String to = formatter.format(today);
@ -535,7 +538,7 @@ public class POSUtil {
public String getCurrentDateString() { public String getCurrentDateString() {
String dateFormatPattern = "dd/MM/yy"; String dateFormatPattern = "dd/MM/yy";
SimpleDateFormat formatter = new SimpleDateFormat(dateFormatPattern,Locale.getDefault()); SimpleDateFormat formatter = new SimpleDateFormat(dateFormatPattern, Locale.getDefault());
Date today = new Date(); Date today = new Date();
String to = formatter.format(today); String to = formatter.format(today);
@ -546,7 +549,7 @@ public class POSUtil {
public Date getYesterdayDate() { public Date getYesterdayDate() {
String dateFormatPattern = "dd/MM/yy"; String dateFormatPattern = "dd/MM/yy";
SimpleDateFormat formatter = new SimpleDateFormat(dateFormatPattern,Locale.getDefault()); SimpleDateFormat formatter = new SimpleDateFormat(dateFormatPattern, Locale.getDefault());
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_YEAR, -1); // Subtract one day calendar.add(Calendar.DAY_OF_YEAR, -1); // Subtract one day
@ -564,7 +567,7 @@ public class POSUtil {
public Date getLastInputDay(int num) { public Date getLastInputDay(int num) {
String dateFormatPattern = "dd/MM/yy"; String dateFormatPattern = "dd/MM/yy";
SimpleDateFormat formatter = new SimpleDateFormat(dateFormatPattern,Locale.getDefault()); SimpleDateFormat formatter = new SimpleDateFormat(dateFormatPattern, Locale.getDefault());
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_YEAR, -num); // Subtract one day calendar.add(Calendar.DAY_OF_YEAR, -num); // Subtract one day
@ -582,7 +585,7 @@ public class POSUtil {
public Date getDateByString(String date) { public Date getDateByString(String date) {
String dateFormatPattern = "dd/MM/yy"; String dateFormatPattern = "dd/MM/yy";
SimpleDateFormat formatter = new SimpleDateFormat(dateFormatPattern,Locale.getDefault()); SimpleDateFormat formatter = new SimpleDateFormat(dateFormatPattern, Locale.getDefault());
Date outDate; Date outDate;
try { try {
@ -600,8 +603,8 @@ public class POSUtil {
public String convertDateFormatByDateString(String date) { public String convertDateFormatByDateString(String date) {
String dateFormatPattern = "dd/MM/yy"; String dateFormatPattern = "dd/MM/yy";
String convertedDateFormat = "yyyy-MM-dd"; String convertedDateFormat = "yyyy-MM-dd";
SimpleDateFormat formatter = new SimpleDateFormat(dateFormatPattern,Locale.getDefault()); SimpleDateFormat formatter = new SimpleDateFormat(dateFormatPattern, Locale.getDefault());
SimpleDateFormat convertedFormatter = new SimpleDateFormat(convertedDateFormat,Locale.getDefault()); SimpleDateFormat convertedFormatter = new SimpleDateFormat(convertedDateFormat, Locale.getDefault());
Date outDate; Date outDate;
try { try {
@ -609,7 +612,7 @@ public class POSUtil {
} catch (ParseException e) { } catch (ParseException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
if(outDate != null) { if (outDate != null) {
return convertedFormatter.format(outDate); return convertedFormatter.format(outDate);
} else { } else {
return convertedDateFormat; return convertedDateFormat;
@ -617,13 +620,13 @@ public class POSUtil {
} }
public Date getDateByTransDateTime(String transDate,String transTime) { public Date getDateByTransDateTime(String transDate, String transTime) {
String dateFormatPattern = "dd/MM/yy HH:mm"; String dateFormatPattern = "dd/MM/yy HH:mm";
SimpleDateFormat formatter = new SimpleDateFormat(dateFormatPattern,Locale.getDefault()); SimpleDateFormat formatter = new SimpleDateFormat(dateFormatPattern, Locale.getDefault());
Date outDate; Date outDate;
try { try {
outDate = formatter.parse(transDate+" "+transTime); outDate = formatter.parse(transDate + " " + transTime);
} catch (ParseException e) { } catch (ParseException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -664,13 +667,13 @@ public class POSUtil {
// calendar.add(Calendar.DAY_OF_MONTH, 1); // calendar.add(Calendar.DAY_OF_MONTH, 1);
// } // }
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yy HH:mm",Locale.getDefault()); SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yy HH:mm", Locale.getDefault());
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yy",Locale.getDefault()); SimpleDateFormat format = new SimpleDateFormat("dd/MM/yy", Locale.getDefault());
String formattedDateTime = format.format(calendar.getTime()); String formattedDateTime = format.format(calendar.getTime());
Date date; Date date;
try { try {
date = formatter.parse(formattedDateTime+" "+time); date = formatter.parse(formattedDateTime + " " + time);
} catch (ParseException e) { } catch (ParseException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@ -691,8 +694,8 @@ public class POSUtil {
int year = calendar.get(Calendar.YEAR); int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1; // Months are 0-based int month = calendar.get(Calendar.MONTH) + 1; // Months are 0-based
int day = calendar.get(Calendar.DAY_OF_MONTH); int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = Integer.parseInt(time.substring(0,2)); int hour = Integer.parseInt(time.substring(0, 2));
int minute = Integer.parseInt(time.substring(3,5)); int minute = Integer.parseInt(time.substring(3, 5));
calendar.set(Calendar.YEAR, year); calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month - 1); calendar.set(Calendar.MONTH, month - 1);
@ -715,17 +718,18 @@ public class POSUtil {
} }
return date; return date;
} }
public boolean checkBooleanCardNo(String cardNo) { public boolean checkBooleanCardNo(String cardNo) {
return !cardNo.equals("-"); return !cardNo.equals("-");
} }
public boolean checkNumberField(String amount) { public boolean checkNumberField(String amount) {
LogUtil.d(TAG,"checkNumberField :"+amount); LogUtil.d(TAG, "checkNumberField :" + amount);
// String regex = "\\d+"; // String regex = "\\d+";
String regex = "^-?\\d+$"; String regex = "^-?\\d+$";
LogUtil.d(TAG,"checkNumberField regex :"+amount.matches(regex)); LogUtil.d(TAG, "checkNumberField regex :" + amount.matches(regex));
return amount.equals(" ") || amount.equals("0") || amount.equals("") || !amount.matches(regex); return amount.equals(" ") || amount.equals("0") || amount.equals("") || !amount.matches(regex);
} }
@ -733,10 +737,10 @@ public class POSUtil {
return approvalCode.equals(" ") || approvalCode.length() != 6; return approvalCode.equals(" ") || approvalCode.length() != 6;
} }
public int checkVisibilityForConfirm(TransactionsType transactionsType){ public int checkVisibilityForConfirm(TransactionsType transactionsType) {
if(transactionsType == TransactionsType.REFUND) { if (transactionsType == TransactionsType.REFUND) {
return 0; return 0;
} else if(transactionsType == TransactionsType.VOID) { } else if (transactionsType == TransactionsType.VOID) {
return 8; return 8;
} else { } else {
return 8; return 8;
@ -745,11 +749,11 @@ public class POSUtil {
public String formatTrace(String inputValue) { public String formatTrace(String inputValue) {
int traceNo = 0; int traceNo = 0;
if(!inputValue.equals("") && !inputValue.equals(" ")){ if (!inputValue.equals("") && !inputValue.equals(" ")) {
traceNo = Integer.parseInt(inputValue); traceNo = Integer.parseInt(inputValue);
} }
return String.format(Locale.getDefault(),"%06d",traceNo); return String.format(Locale.getDefault(), "%06d", traceNo);
} }
private boolean isOnlyDigit(String input) { private boolean isOnlyDigit(String input) {
@ -761,8 +765,8 @@ public class POSUtil {
long convertedAmount = 0; long convertedAmount = 0;
// need to check is contain decimal or not // need to check is contain decimal or not
if(amount != null && !amount.isEmpty() && isOnlyDigit(amount)) { if (amount != null && !amount.isEmpty() && isOnlyDigit(amount)) {
convertedAmount = Long.parseLong(amount+"00"); convertedAmount = Long.parseLong(amount + "00");
} }
return convertedAmount; return convertedAmount;
} }
@ -772,22 +776,22 @@ public class POSUtil {
long minAmount = convertStringToLong(minAmountStr); long minAmount = convertStringToLong(minAmountStr);
long maxAmount = convertStringToLong(maxAmountStr); long maxAmount = convertStringToLong(maxAmountStr);
LogUtil.d(TAG,"Min amount :"+minAmountStr+" - "+minAmount); LogUtil.d(TAG, "Min amount :" + minAmountStr + " - " + minAmount);
LogUtil.d(TAG,"Max amount :"+maxAmountStr+" - "+maxAmount); LogUtil.d(TAG, "Max amount :" + maxAmountStr + " - " + maxAmount);
LogUtil.d(TAG,"Input amount :"+inputAmount+" - "+input); LogUtil.d(TAG, "Input amount :" + inputAmount + " - " + input);
if(minAmount > input) { if (minAmount > input) {
return InvalidAmount.BELOW; return InvalidAmount.BELOW;
} else if(maxAmount <= input) { } else if (maxAmount <= input) {
return InvalidAmount.EXCEEDED; return InvalidAmount.EXCEEDED;
} else { } else {
return InvalidAmount.OKAY; return InvalidAmount.OKAY;
} }
} }
public boolean checkVoid(String configTime,String date,String time) { public boolean checkVoid(String configTime, String date, String time) {
Date yesterday = POSUtil.getInstance().getYesterdayConfigDateTime(configTime); Date yesterday = POSUtil.getInstance().getYesterdayConfigDateTime(configTime);
Date transDateTime = POSUtil.getInstance().getDateByTransDateTime(date,time); Date transDateTime = POSUtil.getInstance().getDateByTransDateTime(date, time);
Date configDate = POSUtil.getInstance().getDateTime(configTime); Date configDate = POSUtil.getInstance().getDateTime(configTime);
@ -796,10 +800,10 @@ public class POSUtil {
Date current = new Date(System.currentTimeMillis()); Date current = new Date(System.currentTimeMillis());
if(transDate.compareTo(today) == 0 ) { if (transDate.compareTo(today) == 0) {
// trans is today // trans is today
if(current.compareTo(configDate) > 0) { if (current.compareTo(configDate) > 0) {
// Trans is today ! config time is passed yet! can't do void! // Trans is today ! config time is passed yet! can't do void!
// return transDateTime.compareTo(configDate) < 0; // return transDateTime.compareTo(configDate) < 0;
return configDate.compareTo(transDateTime) < 0; return configDate.compareTo(transDateTime) < 0;
@ -812,7 +816,7 @@ public class POSUtil {
} else { } else {
Date yest; Date yest;
if(configTime.equals("00:00")) { if (configTime.equals("00:00")) {
yest = configDate; yest = configDate;
} else { } else {
yest = yesterday; yest = yesterday;

View File

@ -781,6 +781,11 @@ public class SystemParamsOperation {
return params.isAutoPrintCustomerCopy(); return params.isAutoPrintCustomerCopy();
} }
public boolean isPrintErrorSlip() {
SystemParamsSettings params = getSystemParamsSettings();
return params.isPrintErrorSlip();
}
public boolean getManualEntryStatus() { public boolean getManualEntryStatus() {
SystemParamsSettings params = getSystemParamsSettings(); SystemParamsSettings params = getSystemParamsSettings();
return params.getManualEntryStatus(); return params.getManualEntryStatus();
@ -897,6 +902,12 @@ public class SystemParamsOperation {
saveSystemParamsSettings(params); saveSystemParamsSettings(params);
} }
public void setPrintErrorSlip(boolean printErrorSlip) {
SystemParamsSettings params = getSystemParamsSettings();
params.setPrintErrorSlip(printErrorSlip);
saveSystemParamsSettings(params);
}
public void setReceiptHeader(String receiptHeader) { public void setReceiptHeader(String receiptHeader) {
SystemParamsSettings params = getSystemParamsSettings(); SystemParamsSettings params = getSystemParamsSettings();
params.setReceiptHeader(receiptHeader); params.setReceiptHeader(receiptHeader);

View File

@ -172,6 +172,8 @@ public class SystemParamsSettings implements Serializable {
private boolean isAutoPrintCustomerCopy = false; private boolean isAutoPrintCustomerCopy = false;
private boolean isPrintErrorSlip = false;
private boolean isRandomPinPad = false; private boolean isRandomPinPad = false;
private boolean auto_update_status = true; private boolean auto_update_status = true;
@ -420,6 +422,10 @@ public class SystemParamsSettings implements Serializable {
protected void setAutoPrintCustomerCopy(boolean flag) { this.isAutoPrintCustomerCopy = flag; } protected void setAutoPrintCustomerCopy(boolean flag) { this.isAutoPrintCustomerCopy = flag; }
protected boolean isPrintErrorSlip() { return isPrintErrorSlip; }
protected void setPrintErrorSlip(boolean flag) { this.isPrintErrorSlip = flag; }
protected boolean getWavePayInquiryStatus() { protected boolean getWavePayInquiryStatus() {
return wave_pay_inquiry_status; return wave_pay_inquiry_status;
} }