diff --git a/app/build.gradle b/app/build.gradle index 5a76c6e..5feb754 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "com.utsmm.kbz" minSdk 24 targetSdk 33 - versionCode 4 - versionName "1.03" + versionCode 6 + versionName "1.05" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/com/utsmm/kbz/ui/kpay/QRTransactionFragment.java b/app/src/main/java/com/utsmm/kbz/ui/kpay/QRTransactionFragment.java index d616185..7a490ed 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/kpay/QRTransactionFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/kpay/QRTransactionFragment.java @@ -312,7 +312,7 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi if(response.getResponse().getWalletIdentifier() != null) { payDetail.setCustomerMobile(response.getResponse().getWalletIdentifier()); } else { - payDetail.setCustomerMobile("KBZ PAY"); + payDetail.setCustomerMobile("KBZPay"); } if(response.getResponse().getMmqrRef() != null) { diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/network/model/KPayRefund.java b/baselib/src/main/java/com/utsmyanmar/baselib/network/model/KPayRefund.java index 9785bbe..f48683b 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/network/model/KPayRefund.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/network/model/KPayRefund.java @@ -442,6 +442,8 @@ public class KPayRefund { } } + public static class CertificateDownloadRequest{ + } } diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/PrintUtils.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/PrintUtils.java index e85f47e..a766c52 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/PrintUtils.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/PrintUtils.java @@ -225,6 +225,16 @@ public class PrintUtils { double amounts = Double.parseDouble(scaled.toString()); return formatter.format(amounts); } + public String getSeparatorNumberFormat(long amount, boolean isDecimal) { + if (amount == 0) return isDecimal ? "0.00" : "0"; + + DecimalFormat formatter = new DecimalFormat(isDecimal ? "#,###.00" : "#,###"); + int x = 2; + BigDecimal unscaled = new BigDecimal(amount); + BigDecimal scaled = unscaled.scaleByPowerOfTen(-x); + double amounts = Double.parseDouble(scaled.toString()); + return formatter.format(amounts); + } public String getSeparatorOnlyNumberFormat(long amount) { if (amount == 0) return "0"; diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/BaseXPrint.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/BaseXPrint.java index bab1fd9..039acec 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/BaseXPrint.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/BaseXPrint.java @@ -649,13 +649,15 @@ public abstract class BaseXPrint { if (hostType == HostType.MPU || hostType == HostType.VISA_MASTER) { print2ColumnsString("CARD NAME", "CARD NUMBER"); print2ColumnsString("EXP DATE", "TRACE NO"); - print2ColumnsString("TRANSACTION", "AMOUNT"); + print2ColumnsString("TRANSACTION", ""); + print2ColumnsString("AMOUNT", ""); print2ColumnsString("REF NUM", ""); } else if (hostType == HostType.QR) { print2ColumnsString("PAYMENT NAME", ""); print2ColumnsString("EXP DATE", ""); print2ColumnsString("TRANSACTION", "TRACE NO"); - print2ColumnsString("TRXN ID", "AMOUNT"); + print2ColumnsString("TRXN ID", ""); + print2ColumnsString("AMOUNT", ""); } @@ -666,25 +668,26 @@ public abstract class BaseXPrint { for (PayDetail pay : lists) { boolean isNeedMinusSign = pay.getTransactionType() == TransactionsType.VOID.value || pay.getTransactionType() == TransactionsType.REFUND.value || pay.getTransactionType() == TransactionsType.MMQR_REFUND.value; - + boolean isDecimalEnabled = SystemParamsOperation.getInstance().isQrDecimalEnable(); if (hostType == HostType.MPU || hostType == HostType.VISA_MASTER) { print2ColumnsString(pay.getAccountType(), PrintUtils.getInstance().maskCardNumberPciDss(pay.getCardNo())); print2ColumnsString("**/**", pay.getVoucherNo()); - print2ColumnsString(pay.getTransType().replace("_", " "), isNeedMinusSign ? "-" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount()) : "" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount())); + print2ColumnsString(pay.getTransType().replace("_", " "), isNeedMinusSign ? "-" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount(), isDecimalEnabled) : "" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount(), isDecimalEnabled)); print2ColumnsString(pay.getReferNo(), ""); } else if (hostType == HostType.QR) { if (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value) { print2ColumnsString("QR PAYMENT", ""); } else { - print2ColumnsString(pay.getCustomerMobile().toUpperCase(), ""); + print2ColumnsString(pay.getCustomerMobile(), ""); } print2ColumnsString("**/**", ""); print2ColumnsString(pay.getTransType().replace("_", " "), pay.getVoucherNo()); if (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value) { - print2ColumnsString(pay.getReferNo() + "(RRN)", isNeedMinusSign ? "-" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount()) : "" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount())); + print2ColumnsString(pay.getReferNo() + "(RRN)", isNeedMinusSign ? "-" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount(), isDecimalEnabled) : "" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount(), isDecimalEnabled)); } else { - print2ColumnsString(pay.getQrTransId(), isNeedMinusSign ? "-" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount()) : "" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount())); + print2ColumnsString(pay.getQrTransId(), ""); + print2ColumnsString(isNeedMinusSign ? "-" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount(), isDecimalEnabled) : "" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount(), isDecimalEnabled) , ""); } } @@ -699,21 +702,20 @@ public abstract class BaseXPrint { } if (hostType == HostType.MPU || hostType == HostType.VISA_MASTER) { + boolean isDecimalEnabled = SystemParamsOperation.getInstance().getDecimalEnable(); print2ColumnsString("MPU", ""); print2ColumnsString("CARD TYPE", ""); print3ColumnsString("", "COUNT", "AMT"); emptyLine(1); - print3ColumnsString("MPU", countStringFormat(lists.size()), "MMK " + PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount)); + print3ColumnsString("MPU", countStringFormat(lists.size()), "MMK " + PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isDecimalEnabled)); } else if (hostType == HostType.QR) { + boolean isDecimalEnabled = SystemParamsOperation.getInstance().isQrDecimalEnable(); print2ColumnsString("PAYMENT", ""); print3ColumnsString("TYPE", "COUNT", "AMT"); emptyLine(1); - print3ColumnsString("QR PAY", countStringFormat(lists.size()), "MMK " + PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount)); + print3ColumnsString("QR PAY", countStringFormat(lists.size()), "MMK " + PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isDecimalEnabled)); } - emptyLine(2); - - } protected void printQRSettlementTransDetail(List lists) { @@ -806,9 +808,7 @@ public abstract class BaseXPrint { emptyLine(0); // printer.appendPrnStr("I AGREE TO PAY THE ABOVE TOTAL AMOUNT", fontSmall, AlignEnum.CENTER,false); - if (isQR) { -// printer.appendPrnStr("ACCORDING TO THE ISSUER AGREEMENT", fontSmall, AlignEnum.CENTER,false); - } else { + if (!isQR) { printer.appendPrnStr("I AGREE TO PAY THE ABOVE TOTAL AMOUNT", fontSmall, AlignEnum.CENTER,false); printer.appendPrnStr("ACCORDING TO THE CARD ISSUER AGREEMENT", fontSmall, AlignEnum.CENTER,false); } @@ -818,7 +818,7 @@ public abstract class BaseXPrint { } else { printer.appendPrnStr("***** CUSTOMER COPY *****", fontSmall, AlignEnum.CENTER,false); } - printer.appendPrnStr(finalVersion, fontSmall, AlignEnum.CENTER,false); +// printer.appendPrnStr(finalVersion, fontSmall, AlignEnum.CENTER,false); printer.appendPrnStr(receiptFooter, fontSmall, AlignEnum.CENTER,false); @@ -885,11 +885,11 @@ public abstract class BaseXPrint { if(TextUtils.equals(terminalName, "") || terminalName == null){ terminalName = "Terminal Name"; } - - printer.appendPrnStr(receiptHeader, fontNormal, AlignEnum.CENTER,false); + emptyLine(1); +// printer.appendPrnStr(receiptHeader, fontNormal, AlignEnum.CENTER,false); + printer.appendPrnStr(terminalName, fontNormal, AlignEnum.CENTER, false); printer.appendPrnStr(merchantAddress, fontNormal, AlignEnum.CENTER,false); printer.appendPrnStr(merchantAddress2, fontNormal, AlignEnum.CENTER,false); - printer.appendPrnStr(terminalName, fontNormal, AlignEnum.LEFT, false); // printer.appendPrnStr(merchantPhoneNo, fontNormal, AlignEnum.CENTER,false); // emptyLine(1); // dashBreak(); @@ -982,6 +982,47 @@ public abstract class BaseXPrint { } + protected void printTransHeader(PayDetail payDetail, HostType hostType) { + String invoiceNo = payDetail.getInvoiceNo().isEmpty() ? SystemParamsOperation.getInstance().getCurrentInvoiceNum() : payDetail.getInvoiceNo(); + String transType = payDetail.getTransType(); + String batchNum = ""; + String traceNum = payDetail.getVoucherNo(); +// String traceNum = SystemParamsOperation.getInstance().getCurrentSerialNum(); + String shortCode = SystemParamsOperation.getInstance().getShortCode(); + + + batchNum = payDetail.getBatchNo(); + + +// printer.appendPrnStr("DATE :" + payDetail.getTransDate() + " TIME:" + payDetail.getTransTime(), fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("DATE :" + POSUtil.getInstance().formatDisplayDate(payDetail.getTransDate()), fontNormal, AlignEnum.LEFT, false); + printer.appendPrnStr("TIME :" + payDetail.getTransTime(), fontNormal, AlignEnum.LEFT, false); + if (payDetail.getTransactionType() == TransactionsType.MMQR.value && payDetail.getQrTransStatus() == 1) { + printer.appendPrnStr("TRACE NO:" + traceNum + " INV NO:" + invoiceNo, fontNormal, AlignEnum.LEFT,false); + } else if (!payDetail.getTransType().equals(SETTLEMENT) && !payDetail.getTransType().equals(SUMMARY) && payDetail.getTransactionType() != TransactionsType.MMQR_REFUND.value && payDetail.getTransactionType() != TransactionsType.MMQR.value) { + printer.appendPrnStr("BTH NO :" + batchNum + " INV NO:" + invoiceNo, fontNormal, AlignEnum.LEFT,false); + } else if (payDetail.getTransType().equals(SUMMARY)) { + printer.appendPrnStr("HOST :" + HOST_NAME_MPU + "", fontNormal, AlignEnum.LEFT,false); + } + /* 17 Sept 2024 Yoma requested to changed slip design for QR*/ +// printer.printColumnsString(new String[]{"MID :" + payDetail.getMerchantNo(), ""}, new int[]{3, 1}, new int[]{0, 2}, innerResultCallback); +// printer.printColumnsString(new String[]{"TID :" + payDetail.getTerminalNo(), ""}, new int[]{3, 1}, new int[]{0, 2}, innerResultCallback); + if (hostType == HostType.QR){ + printer.appendPrnStr("SHORT CODE:" + shortCode, fontNormal, AlignEnum.LEFT,false); + }else{ + printer.appendPrnStr("MID :" + payDetail.getMerchantNo(), fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("TID :" + payDetail.getTerminalNo(), fontNormal, AlignEnum.LEFT,false); + } + + emptyLine(1); + printer.appendPrnStr(transType.replace("_", " "),fontNormal, AlignEnum.CENTER,true); + + if (!(payDetail.getQrTransStatus() != 1 && (payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value || payDetail.getTransactionType() == TransactionsType.MMQR.value))) { + printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false); + } + + } + protected InnerResultCallback innerResultCallback = new InnerResultCallback() { @Override public void onRunResult(boolean isSuccess) throws RemoteException { 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 f9d3902..2e370bf 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 @@ -231,7 +231,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX { setHeight(0x12); printLogo(); printMerchantHeader(); - printTransHeader(payDetail); + printTransHeader(payDetail, hostType); printTransDetailReport(lists,hostType); // emptyLine(1); @@ -311,7 +311,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX { // payDetail.getCustomerMobile() // as channel type if(payDetail.getTransactionType() == TransactionsType.MMQR.value && payDetail.getQrTransStatus() == 1 ) { - print2ColumnsStringNoSpace("PAYMENT TYPE ",": "+ (payDetail.getCustomerMobile() == null || payDetail.getCustomerMobile().isEmpty() ? "-": payDetail.getCustomerMobile().toUpperCase())); + print2ColumnsStringNoSpace("PAYMENT TYPE ",": "+ (payDetail.getCustomerMobile() == null || payDetail.getCustomerMobile().isEmpty() ? "-": payDetail.getCustomerMobile())); print2ColumnsStringNoSpace("TRXN REF ",": "+ payDetail.getReferNo()); if(payDetail.getQrReferNo() != null && !payDetail.getQrReferNo().isEmpty()) { print2ColumnsStringNoSpace("MMQR REF ",": "+ payDetail.getQrReferNo()); @@ -325,7 +325,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX { print2ColumnsStringNoSpace("STATUS ",":"+ PrintUtils.getInstance().getQrTransStatus(payDetail.getQrTransStatus())); } else if(payDetail.getTransactionType() == TransactionsType.MMQR.value && payDetail.getQrTransStatus() == -1) { - print2ColumnsStringNoSpace("PAYMENT TYPE ",":"+ (payDetail.getCustomerMobile() == null || payDetail.getCustomerMobile().isEmpty() ? "-": payDetail.getCustomerMobile().toUpperCase())); + print2ColumnsStringNoSpace("PAYMENT TYPE ",":"+ (payDetail.getCustomerMobile() == null || payDetail.getCustomerMobile().isEmpty() ? "-": payDetail.getCustomerMobile())); print2ColumnsStringNoSpace("TRXN REF ",":"+ payDetail.getReferNo()); print2ColumnsStringNoSpace("TXN TIME ",":"+ (payDetail.getOriginalTransDate() == null || payDetail.getOriginalTransDate().isEmpty() ? POSUtil.getInstance().getCurrentDateTimeForQR(): payDetail.getOriginalTransDate())); } @@ -339,8 +339,10 @@ public class PrintXImpl extends BaseXPrint implements PrintX { if (payDetail.getQrTransStatus() == 1) { boolean isNeedMinusSign = payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value; + boolean isQrDecimalEnable = SystemParamsOperation.getInstance().isQrDecimalEnable(); + lineBreak(); - print2ColumnsStringBoldCenter("TOTAL MMK", isNeedMinusSign? "- "+PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount()): PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount()),fontLarge, AlignEnum.LEFT); + print2ColumnsStringBoldCenter("TOTAL MMK", isNeedMinusSign? "- "+PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount(), isQrDecimalEnable): PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount(), isQrDecimalEnable),fontLarge, AlignEnum.LEFT); lineBreak(); // if(payDetail.getTransactionType() == TransactionsType.MMQR.value) { diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/POSUtil.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/POSUtil.java index 676d597..b5fab18 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/POSUtil.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/POSUtil.java @@ -281,7 +281,7 @@ public class POSUtil { if(payDetail != null) { if(payDetail.getTransactionType() == TransactionsType.MMQR.value) { - return payDetail.getCustomerMobile().toUpperCase(); + return payDetail.getCustomerMobile(); } else if(payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value) { return "QR PAYMENT"; } else { @@ -555,7 +555,7 @@ public class POSUtil { public String formatDisplayDate(String input){ - SimpleDateFormat inputFormat = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault()); + SimpleDateFormat inputFormat = new SimpleDateFormat("dd/MM/yy", Locale.getDefault()); SimpleDateFormat outputFormat = new SimpleDateFormat("dd MMM yyyy", Locale.getDefault()); try {