From 48581e12917398a92f36f05d810c8dc934444e13 Mon Sep 17 00:00:00 2001 From: MooN <56061215+MgKyawLay@users.noreply.github.com> Date: Mon, 5 Jan 2026 20:46:18 +0630 Subject: [PATCH] receipt design change --- .../paylibs/print/printx/BaseXPrint.java | 227 ++++++++++++------ .../paylibs/print/printx/PrintXImpl.java | 41 ++-- 2 files changed, 171 insertions(+), 97 deletions(-) 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 6edd129..85faea5 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 @@ -6,6 +6,7 @@ import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Typeface; +import android.icu.util.LocaleData; import android.os.Build; import android.os.RemoteException; import android.text.TextUtils; @@ -40,7 +41,11 @@ import com.utsmyanmar.paylibs.utils.iso_utils.TransactionType; import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType; import com.utsmyanmar.paylibs.utils.print_utils.BitmapUtils; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.Comparator; +import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; @@ -196,6 +201,10 @@ public abstract class BaseXPrint { } + protected void dotBreak(){ + printer.appendPrnStr(new String(new char[29]).replace("\0", "."), fontNormal, AlignEnum.LEFT, false); + } + protected void dashBreak() { printer.appendPrnStr("-----------------------------", fontNormal, AlignEnum.LEFT,false); @@ -492,7 +501,6 @@ public abstract class BaseXPrint { protected void printTransDetailSummary(PayDetail payDetail) { - String MMK = "MMK"; SettleData settleData = payDetail.getSettleDataObj(); boolean isQrDecimalEnabled = SystemParamsOperation.getInstance().isQrDecimalEnable(); @@ -507,49 +515,19 @@ public abstract class BaseXPrint { return; } if (payDetail.getAccountType().equals("WALLET")) { - printer.appendPrnStr("PAYMENT NAME: QR", fontNormal, AlignEnum.LEFT,false); +// printer.appendPrnStr("PAYMENT NAME: PAY BY QR", fontNormal, AlignEnum.LEFT,false); + printString("TYPE : " + "PAY BY QR"); } else { printer.appendPrnStr("CARD NAME:" + payDetail.getAccountType(), fontNormal, AlignEnum.LEFT,false); } // printer.appendPrnStr(" " + "COUNT " + " " + " TOTAL", fontNormal, AlignEnum.LEFT,false); - printer.appendPrnStr("COUNT", "TOTAL", fontNormal, false); +// printer.appendPrnStr("COUNT", "TOTAL", fontNormal, false); // printer.printColumnsString(new String[]{"", "COUNT", "TOTAL"}, new int[]{2,1, 1}, new int[]{ 2,1, 2}, innerResultCallback); // emptyLine(1); - if (settleData.getSaleCount() > 0) - printColumnString("SALES", settleData.getSaleCount(), settleData.getSaleAmount(), false); -// printer.appendPrnStr("SALES "+ countStringFormat(settleData.getSaleCount())+MMK+" "+ PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getSaleAmount()), fontNormal, AlignEnum.LEFT,false); - if (settleData.getVoidSaleCount() > 0) - printColumnString("VOID SALES", settleData.getVoidSaleCount(), settleData.getVoidSaleAmount(), true); - if (settleData.getCashAdvanceCount() > 0) - printColumnString("CASH OUT", settleData.getCashAdvanceCount(), settleData.getCashAdvanceAmount(), false); - if (settleData.getPreAuthCount() > 0) - printColumnString("PRE AUTH", settleData.getPreAuthCount(), settleData.getPreAuthAmount(), false); - if (settleData.getPreAuthVoidCount() > 0) - printColumnString("VOID PREAUTH", settleData.getPreAuthVoidCount(), settleData.getPreAuthVoidAmount(), true); - if (settleData.getRefundCount() > 0) - printColumnString("REFUND", settleData.getRefundCount(), settleData.getRefundAmount(), true); - if (settleData.getPreAuthCompCount() > 0) - printColumnString("PREAUTH COMP", settleData.getPreAuthCompCount(), settleData.getPreAuthCompAmount(), false); - if (settleData.getPreAuthCompVoidCount() > 0) - printColumnString("VOID PREAUTH COMPLETE", settleData.getPreAuthCompVoidCount(), settleData.getPreAuthCompVoidAmount(), true); - if (settleData.getWavePayCount() > 0){ -// printColumnString("QR PAY", settleData.getWavePayCount(), settleData.getWavePayAmount(), false); - printer.appendPrnStr( "QR PAY " + countStringFormat(settleData.getWavePayCount()) + " " + "MMK" , PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getWavePayAmount(), isQrDecimalEnabled) , fontNormal, false); - } - if (settleData.getWaveRefundCount() > 0) { -// printColumnString("QR REFUND", settleData.getWaveRefundCount(), settleData.getWaveRefundAmount(), true); - printer.appendPrnStr( "QR REFUND " + countStringFormat(settleData.getWaveRefundCount()) + " " + "MMK" , PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getWaveRefundAmount(), isQrDecimalEnabled) , fontNormal, false); - } - dashBreak(); -// printColumnString("TOTAL", totalCount, totalAmount, false); - printer.appendPrnStr( "TOTAL " + countStringFormat(totalCount) + " " + "MMK", PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isQrDecimalEnabled) , fontNormal, false); + emptyLine(1); + + printer.appendPrnStr("(COUNT)TRANS", "AMOUNT(MMK)", fontNormal, false); - printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false); - printer.appendPrnStr("GRAND TOTAL", fontNormal, AlignEnum.LEFT,false); -// printer.appendPrnStr(" " + "COUNT " + " " + " TOTAL", fontNormal, AlignEnum.LEFT,false); - printer.appendPrnStr("COUNT", "TOTAL", fontNormal, false); -// printer.printColumnsString(new String[]{"", "COUNT", "TOTAL"}, new int[]{2,1, 1}, new int[]{ 2,1, 2}, innerResultCallback); -// emptyLine(1); if (settleData.getSaleCount() > 0) printColumnString("SALES", settleData.getSaleCount(), settleData.getSaleAmount(), false); // printer.appendPrnStr("SALES "+ countStringFormat(settleData.getSaleCount())+MMK+" "+ PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getSaleAmount()), fontNormal, AlignEnum.LEFT,false); @@ -567,17 +545,56 @@ public abstract class BaseXPrint { printColumnString("PREAUTH COMP", settleData.getPreAuthCompCount(), settleData.getPreAuthCompAmount(), false); if (settleData.getPreAuthCompVoidCount() > 0) printColumnString("VOID PREAUTH COMPLETE", settleData.getPreAuthCompVoidCount(), settleData.getPreAuthCompVoidAmount(), true); - if (settleData.getWavePayCount() > 0) { + if (settleData.getWavePayCount() >= 0){ // printColumnString("QR PAY", settleData.getWavePayCount(), settleData.getWavePayAmount(), false); - printer.appendPrnStr( "QR PAY " + countStringFormat(settleData.getWavePayCount()) + " " + "MMK" , PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getWavePayAmount(), isQrDecimalEnabled) , fontNormal, false); +// printer.appendPrnStr( "QR PAY " + countStringFormat(settleData.getWavePayCount()) + " " + "MMK" , PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getWavePayAmount(), isQrDecimalEnabled) , fontNormal, false); + printer.appendPrnStr( "(" + settleData.getWavePayCount() + ")" + "QR PAY" , PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getWavePayAmount(), isQrDecimalEnabled) , fontNormal, false); } - if (settleData.getWaveRefundCount() > 0){ + if (settleData.getWaveRefundCount() >= 0) { // printColumnString("QR REFUND", settleData.getWaveRefundCount(), settleData.getWaveRefundAmount(), true); - printer.appendPrnStr( "QR REFUND " + countStringFormat(settleData.getWaveRefundCount()) + " " + "MMK" , PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getWaveRefundAmount(), isQrDecimalEnabled) , fontNormal, false); +// printer.appendPrnStr( "QR REFUND " + countStringFormat(settleData.getWaveRefundCount()) + " " + "MMK" , PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getWaveRefundAmount(), isQrDecimalEnabled) , fontNormal, false); + printer.appendPrnStr( "(" + settleData.getWaveRefundCount() + ")" + "QR REFUND", "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getWaveRefundAmount(), isQrDecimalEnabled) , fontNormal, false); } - dashBreak(); +// dashBreak(); + dotBreak(); // printColumnString("TOTAL", totalCount, totalAmount, false); - printer.appendPrnStr( "TOTAL " + countStringFormat(totalCount) + " " + "MMK", PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isQrDecimalEnabled) , fontNormal, false); +// printer.appendPrnStr( "TOTAL " + countStringFormat(totalCount) + " " + "MMK", PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isQrDecimalEnabled) , fontNormal, false); + printer.appendPrnStr( "TOTAL", PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isQrDecimalEnabled) , fontNormal, false); + +// printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false); +// printer.appendPrnStr("GRAND TOTAL", fontNormal, AlignEnum.LEFT,false); +//// printer.appendPrnStr(" " + "COUNT " + " " + " TOTAL", fontNormal, AlignEnum.LEFT,false); +// printer.appendPrnStr("COUNT", "TOTAL", fontNormal, false); +//// printer.printColumnsString(new String[]{"", "COUNT", "TOTAL"}, new int[]{2,1, 1}, new int[]{ 2,1, 2}, innerResultCallback); +//// emptyLine(1); +// if (settleData.getSaleCount() > 0) +// printColumnString("SALES", settleData.getSaleCount(), settleData.getSaleAmount(), false); +//// printer.appendPrnStr("SALES "+ countStringFormat(settleData.getSaleCount())+MMK+" "+ PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getSaleAmount()), fontNormal, AlignEnum.LEFT,false); +// if (settleData.getVoidSaleCount() > 0) +// printColumnString("VOID SALES", settleData.getVoidSaleCount(), settleData.getVoidSaleAmount(), true); +// if (settleData.getCashAdvanceCount() > 0) +// printColumnString("CASH OUT", settleData.getCashAdvanceCount(), settleData.getCashAdvanceAmount(), false); +// if (settleData.getPreAuthCount() > 0) +// printColumnString("PRE AUTH", settleData.getPreAuthCount(), settleData.getPreAuthAmount(), false); +// if (settleData.getPreAuthVoidCount() > 0) +// printColumnString("VOID PREAUTH", settleData.getPreAuthVoidCount(), settleData.getPreAuthVoidAmount(), true); +// if (settleData.getRefundCount() > 0) +// printColumnString("REFUND", settleData.getRefundCount(), settleData.getRefundAmount(), true); +// if (settleData.getPreAuthCompCount() > 0) +// printColumnString("PREAUTH COMP", settleData.getPreAuthCompCount(), settleData.getPreAuthCompAmount(), false); +// if (settleData.getPreAuthCompVoidCount() > 0) +// printColumnString("VOID PREAUTH COMPLETE", settleData.getPreAuthCompVoidCount(), settleData.getPreAuthCompVoidAmount(), true); +// if (settleData.getWavePayCount() > 0) { +//// printColumnString("QR PAY", settleData.getWavePayCount(), settleData.getWavePayAmount(), false); +// printer.appendPrnStr( "QR PAY " + countStringFormat(settleData.getWavePayCount()) + " " + "MMK" , PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getWavePayAmount(), isQrDecimalEnabled) , fontNormal, false); +// } +// if (settleData.getWaveRefundCount() > 0){ +//// printColumnString("QR REFUND", settleData.getWaveRefundCount(), settleData.getWaveRefundAmount(), true); +// printer.appendPrnStr( "QR REFUND " + countStringFormat(settleData.getWaveRefundCount()) + " " + "MMK" , PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getWaveRefundAmount(), isQrDecimalEnabled) , fontNormal, false); +// } +// dashBreak(); +//// printColumnString("TOTAL", totalCount, totalAmount, false); +// printer.appendPrnStr( "TOTAL " + countStringFormat(totalCount) + " " + "MMK", PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isQrDecimalEnabled) , fontNormal, false); // printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false); @@ -653,9 +670,11 @@ public abstract class BaseXPrint { } protected void print2ColumnsStringBoldCenter(String first, String second, int fontSize, AlignEnum align) { - printer.appendPrnStr(first + " " + second, fontSize, align,true); + printer.appendPrnStr(first + " " + second, fontSize, align,true); } + + protected void print3ColumnsString(String first, String second, String third) { // printer.appendPrnStr(first + " " + second + " " + third, fontNormal, AlignEnum.LEFT,false); printer.appendPrnStr(first + " " + second + " " + third, fontNormal, AlignEnum.LEFT,false); @@ -676,23 +695,22 @@ public abstract class BaseXPrint { print2ColumnsString("AMOUNT", ""); print2ColumnsString("REF NUM", ""); } else if (hostType == HostType.QR) { - print2ColumnsString("PAYMENT NAME", ""); - print2ColumnsString("DATE", "TIME"); - print2ColumnsString("TRANSACTION", "TRACE NO"); - print2ColumnsString("TRXN ID", ""); - print2ColumnsString("AMOUNT", ""); +// print2ColumnsString("PAYMENT NAME", ""); +// print2ColumnsString("DATE", "TIME"); +// print2ColumnsString("TRANSACTION", "TRACE NO"); +// print2ColumnsString("TRXN ID", ""); +// print2ColumnsString("AMOUNT", ""); } // breakingLine(); - lineBreak(); long totalAmount = 0; 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()); @@ -700,20 +718,43 @@ public abstract class BaseXPrint { print2ColumnsString(pay.getReferNo(), ""); } else if (hostType == HostType.QR) { + + printString("TRANS ID:" + pay.getQrTransId()); + printString("STATUS :" + pay.getTC()); + printString("SOURCE :" + + (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value + ? "QR PAYMENT" + : pay.getCustomerMobile()) + ); +// printString("TXN NAME:" + pay.getTransType().replace("_", " ")); + printString("DATE :" + POSUtil.getInstance().formatDisplayDate(pay.getTransDate()) + " " + pay.getTransTime()); + printString("TRACE NO:" + pay.getVoucherNo()); if (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value) { - print2ColumnsString("QR PAYMENT", ""); - } else { - print2ColumnsString(pay.getCustomerMobile(), ""); - } - print2ColumnsString(pay.getTransDate(), pay.getTransTime()); - print2ColumnsString(pay.getTransType().replace("_", " "), pay.getVoucherNo()); - if (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value) { - print2ColumnsString(pay.getReferNo() + "(RRN)", ""); - print2ColumnsString(isNeedMinusSign ? "-" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount(), isDecimalEnabled) : "" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount(), isDecimalEnabled), ""); - } else { - print2ColumnsString(pay.getQrTransId(), ""); - print2ColumnsString(isNeedMinusSign ? "-" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount(), isDecimalEnabled) : "" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount(), isDecimalEnabled) , ""); + printString("RRN :" + pay.getReferNo()); } + printString("AMOUNT :" + + (isNeedMinusSign + ? "-" + PrintUtils.getInstance() + .getSeparatorNumberFormat(pay.getAmount(), isDecimalEnabled) + : PrintUtils.getInstance() + .getSeparatorNumberFormat(pay.getAmount(), isDecimalEnabled)) + + " " +"MMK"); + dotBreak(); + +// if (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value) { +// print2ColumnsString("QR PAYMENT", ""); +// } else { +// print2ColumnsString(pay.getCustomerMobile(), ""); +// } +// print2ColumnsString(pay.getTransDate(), pay.getTransTime()); +// print2ColumnsString(pay.getTransType().replace("_", " "), pay.getVoucherNo()); +// if (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value) { +// print2ColumnsString(pay.getReferNo() + "(RRN)", ""); +// print2ColumnsString(isNeedMinusSign ? "-" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount(), isDecimalEnabled) : "" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount(), isDecimalEnabled), ""); +// } else { +// print2ColumnsString(pay.getQrTransId(), ""); +// print2ColumnsString(isNeedMinusSign ? "-" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount(), isDecimalEnabled) : "" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount(), isDecimalEnabled) , ""); +// } } @@ -921,7 +962,7 @@ public abstract class BaseXPrint { // merchantPhoneNo = "MERCHANT PHONENO"; // } if(TextUtils.equals(terminalName, "") || terminalName == null){ - terminalName = "Terminal Name"; + terminalName = ""; } // emptyLine(1); // printer.appendPrnStr(receiptHeader, fontNormal, AlignEnum.CENTER,false); @@ -931,8 +972,7 @@ public abstract class BaseXPrint { printer.appendPrnStr(merchantAddress3, fontNormal, AlignEnum.CENTER,false); // printer.appendPrnStr(merchantPhoneNo, fontNormal, AlignEnum.CENTER,false); // emptyLine(1); -// dashBreak(); - lineBreak(); + dotBreak(); } protected void printKeyInfo() { @@ -988,33 +1028,32 @@ public abstract class BaseXPrint { String traceNum = payDetail.getVoucherNo(); // String traceNum = SystemParamsOperation.getInstance().getCurrentSerialNum(); - 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); + 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); - printer.appendPrnStr("INV NO :" + invoiceNo , fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("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); + 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); + 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 (payDetail.getTransactionType() == TransactionsType.MMQR.value || payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value){ - printer.appendPrnStr("SHORT CODE:" + payDetail.getMerchantNo(), fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("SHORT CODE :" + payDetail.getMerchantNo(), fontNormal, AlignEnum.LEFT,false); }else{ - printer.appendPrnStr("MID :" + payDetail.getMerchantNo(), fontNormal, AlignEnum.LEFT,false); - printer.appendPrnStr("TID :" + payDetail.getTerminalNo(), fontNormal, AlignEnum.LEFT,false); + 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); +// printer.appendPrnStr("TRAN TYPE :" + transType.replace("_", " "),fontNormal, AlignEnum.LEFT,false); if (!(payDetail.getQrTransStatus() != 1 && (payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value || payDetail.getTransactionType() == TransactionsType.MMQR.value))) { // printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false); @@ -1022,6 +1061,36 @@ public abstract class BaseXPrint { } + protected void printDetailReportHeader(){ + SimpleDateFormat date = new SimpleDateFormat("dd MMM yyyy", Locale.getDefault()); + String printedDate = date.format(new Date()); + + SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()); + String printedTime = time.format(new Date()); + + printer.appendPrnStr("PRINTED DATE", printedDate, fontNormal, false); + printer.appendPrnStr("", printedTime, fontNormal, false); + printer.appendPrnStr("DETAIL REPORT", fontNormal , AlignEnum.CENTER, false); + dotBreak(); + } + + protected void printTranHeader(String title){ + SimpleDateFormat date = new SimpleDateFormat("dd MMM yyyy", Locale.getDefault()); + String printedDate = date.format(new Date()); + + SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()); + String printedTime = time.format(new Date()); + + printer.appendPrnStr("PRINTED DATE", printedDate, fontNormal, false); + printer.appendPrnStr("", printedTime, fontNormal, false); + printer.appendPrnStr(title, fontNormal , AlignEnum.CENTER, false); + +// if (payDetail.getTransactionType() == TransactionsType.MMQR.value && payDetail.getQrTransStatus() == 1) { +//// printer.appendPrnStr("TRACE NO:" + traceNum + " INV NO:" + invoiceNo, fontNormal, AlignEnum.LEFT,false); +// printer.appendPrnStr("INV NO :" + invoiceNo , fontNormal, AlignEnum.LEFT,false); +// } + dotBreak(); + } protected void printTransHeader(PayDetail payDetail, HostType hostType) { String invoiceNo = payDetail.getInvoiceNo().isEmpty() ? SystemParamsOperation.getInstance().getCurrentInvoiceNum() : payDetail.getInvoiceNo(); String transType = payDetail.getTransType(); @@ -1112,11 +1181,11 @@ public abstract class BaseXPrint { printer.appendPrnStr("Secondary Ip : " + secIpPort[0], fontNormal, AlignEnum.LEFT, false); printer.appendPrnStr("Secondary Port: " + secIpPort[1], fontNormal, AlignEnum.LEFT, false); printer.appendPrnStr("Currency Code : " + sp.getCurrencyType(), fontNormal, AlignEnum.LEFT, false); - lineBreak(); + dotBreak(); // ---------- SECONDARY HOST (optional) ---------- if (!TextUtils.isEmpty(sp.getSecHostName())) { printer.appendPrnStr("SECONDARY HOST", fontNormal, AlignEnum.LEFT, true); - printer.appendPrnStr("Name : " + sp.getSecHostName(), fontNormal, AlignEnum.LEFT, false); + printer.appendPrnStr("Name : " + sp.getSecHostName(), fontNormal, AlignEnum.LEFT, false); printer.appendPrnStr("SHORT CODE : " + sp.getShortCode(), fontNormal, AlignEnum.LEFT, false); String[] secHostIp = splitIpAndPort(sp.getSecHostIpAddress()); printer.appendPrnStr("Primary Ip : " + secHostIp[0], fontNormal, AlignEnum.LEFT, false); @@ -1125,7 +1194,7 @@ public abstract class BaseXPrint { printer.appendPrnStr("Secondary Ip : " + secHostSecIp[0], fontNormal, AlignEnum.LEFT, false); printer.appendPrnStr("Secondary Port: " + secHostSecIp[1], fontNormal, AlignEnum.LEFT, false); printer.appendPrnStr("Currency Code : " + sp.getCurrencyType(), fontNormal, AlignEnum.LEFT, false); - lineBreak(); + dotBreak(); printer.appendPrnStr("App Version : " + getAppVersion(), fontNormal, AlignEnum.LEFT, false); } } 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 cdb5bb7..a7714a7 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 @@ -163,7 +163,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX { printMerchantHeader(); printTransHeader(payDetail); printTransDetailQR(payDetail); - LogUtil.d(TAG,"QR trans status:"+payDetail.getQrTransStatus()); +// LogUtil.d(TAG,"QR trans status:"+payDetail.getQrTransStatus()); if (payDetail.getQrTransStatus() == 1) { printTransFooter(true,payDetail, isMerchantCopy); } else { @@ -232,7 +232,8 @@ public class PrintXImpl extends BaseXPrint implements PrintX { setHeight(0x12); printLogo(); printMerchantHeader(); - printTransHeader(payDetail, hostType); +// printTransHeader(payDetail, hostType); + printTranHeader("DETAIL REPORT"); printTransDetailReport(lists,hostType); // emptyLine(1); startPrintNex(); @@ -311,23 +312,27 @@ 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())); - print2ColumnsStringNoSpace("TRXN REF ",": "+ payDetail.getReferNo()); + 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()); + print2ColumnsStringNoSpace("MMQR REF ",":"+ payDetail.getQrReferNo()); } - print2ColumnsStringNoSpace("TRXN ID",":"+ (payDetail.getQrTransId() == null || payDetail.getQrTransId().isEmpty() ? "-": payDetail.getQrTransId())); - print2ColumnsStringNoSpace("STATUS ",": "+ PrintUtils.getInstance().getQrTransStatus(payDetail.getQrTransStatus())); + print2ColumnsStringNoSpace("TRXN ID ",":"+ (payDetail.getQrTransId() == null || payDetail.getQrTransId().isEmpty() ? "-": payDetail.getQrTransId())); + print2ColumnsStringNoSpace("STATUS ",":"+ PrintUtils.getInstance().getQrTransStatus(payDetail.getQrTransStatus())); } else if(payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value && payDetail.getQrTransStatus() == 1) { - print2ColumnsStringNoSpace("TRXN REF ",":"+ payDetail.getReferNo()); - print2ColumnsStringNoSpace("TXN DATE/TIME",":"+ payDetail.getOriginalTransDate()); - print2ColumnsStringNoSpace("STATUS ",":"+ PrintUtils.getInstance().getQrTransStatus(payDetail.getQrTransStatus())); + String originalDate = payDetail.getOriginalTransDate(); + String tranDate = originalDate.split(" ")[0]; + String tranTime = originalDate.split(" ")[1]; + print2ColumnsStringNoSpace("TRXN REF ",":"+ payDetail.getReferNo()); + print2ColumnsStringNoSpace("TXN DATE ",":"+ tranDate); + print2ColumnsStringNoSpace("TXN TIME ",":"+ tranTime); + 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())); - print2ColumnsStringNoSpace("TRXN REF ",":"+ payDetail.getReferNo()); - print2ColumnsStringNoSpace("TXN TIME ",":"+ (payDetail.getOriginalTransDate() == null || payDetail.getOriginalTransDate().isEmpty() ? POSUtil.getInstance().getCurrentDateTimeForQR(): payDetail.getOriginalTransDate())); + 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())); } @@ -341,10 +346,9 @@ public class PrintXImpl extends BaseXPrint implements PrintX { boolean isNeedMinusSign = payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value; boolean isQrDecimalEnable = SystemParamsOperation.getInstance().isQrDecimalEnable(); - lineBreak(); - print2ColumnsStringBoldCenter("TOTAL MMK", isNeedMinusSign? "- "+PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount(), isQrDecimalEnable): PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount(), isQrDecimalEnable),fontLarge, AlignEnum.LEFT); - lineBreak(); - + dotBreak(); + print2ColumnsStringBoldCenter("AMOUNT :", isNeedMinusSign? "- "+PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount(), isQrDecimalEnable) + " MMK": PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount(), isQrDecimalEnable) + " MMK",fontLarge, AlignEnum.LEFT); + dotBreak(); // if(payDetail.getTransactionType() == TransactionsType.MMQR.value) { // String data = payDetail.getReferNo()+"-"+payDetail.getAmount()+"-"+payDetail.getQrTransId()+"-"+payDetail.getMerchantNo()+"-"+payDetail.getCustomerMobile().toUpperCase()+"-"+payDetail.getOriginalTransDate(); // @@ -431,7 +435,8 @@ public class PrintXImpl extends BaseXPrint implements PrintX { setHeight(0x12); printLogo(); printMerchantHeader(); - printTransHeader(payDetail, hostType); +// printTransHeader(payDetail, hostType); + printTranHeader("SUMMARY REPORT"); printTransDetailSummary(payDetail); // printTransFooterSummary();