diff --git a/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementTransactionFragment.java b/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementTransactionFragment.java index fae2aac..f064fa5 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementTransactionFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementTransactionFragment.java @@ -54,10 +54,12 @@ public class SettlementTransactionFragment extends DataBindingFragment implement int preCount = 0; int refundCount = 0; int caCount = 0; + int voidCount = 0; long saleAmount = 0; long preAmount = 0; long refundAmount = 0; long caAmount = 0; + long voidAmount = 0; private final CurrencyBucket mmkBucket = new CurrencyBucket(); private final CurrencyBucket usdBucket = new CurrencyBucket(); @@ -279,8 +281,20 @@ public class SettlementTransactionFragment extends DataBindingFragment implement settlementViewModel.getDeleteTrans(SystemParamsOperation.getInstance().getCurrentBatchNum()).observe(getViewLifecycleOwner(), new Observer>() { @Override public void onChanged(List payDetails) { + settlementViewModel.deleteTrans.clear(); + voidCount = 0; + voidAmount = 0L; if(payDetails != null) { settlementViewModel.deleteTrans.addAll(payDetails); + for (PayDetail pay : payDetails) { + if (pay.getTransactionType() == TransactionType.VOID && !pay.isCanceled) { + voidCount++; + voidAmount += pay.getAmount(); + } + } + if (voidCount > 0 && Boolean.TRUE.equals(settlementViewModel.isNoData.getValue())) { + settlementViewModel.isNoData.setValue(false); + } } } }); @@ -291,10 +305,12 @@ public class SettlementTransactionFragment extends DataBindingFragment implement preCount = 0; refundCount = 0; caCount = 0; + voidCount = 0; saleAmount = 0L; preAmount = 0L; refundAmount = 0L; caAmount = 0L; + voidAmount = 0L; resetCurrencyBucket(mmkBucket); resetCurrencyBucket(usdBucket); } diff --git a/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementViewModel.java b/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementViewModel.java index 8a3afbb..3ca5918 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementViewModel.java +++ b/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementViewModel.java @@ -271,7 +271,12 @@ public class SettlementViewModel extends ViewModel { this.isLast = isLast; SystemParamsOperation.getInstance().getIncrementBatchNo(); - if(SystemParamsOperation.getInstance().getDemoStatus()) { + boolean bucketIsEmpty = currencyBucket.saleCount == 0 + && currencyBucket.preCount == 0 + && currencyBucket.refundCount == 0 + && currencyBucket.caCount == 0; + + if (bucketIsEmpty || SystemParamsOperation.getInstance().getDemoStatus()) { requestDemoProcessSettlement(currencyBucket); } else { requestOnlineProcessSettlement(currencyBucket); @@ -318,7 +323,9 @@ public class SettlementViewModel extends ViewModel { payDetail.setSettleList(currencyBucket.saleCount+ ":" + currencyBucket.saleAmount + "-" + currencyBucket.caCount + ":" + currencyBucket.caAmount + "-" + currencyBucket.refundCount + ":" + currencyBucket.refundAmount + "-" + currencyBucket.preCount + ":" + currencyBucket.preAmount); // for print receipt /*POS*/ SettleData settleData = new SettleData(currencyBucket.saleCount, currencyBucket.saleAmount, currencyBucket.preCount, currencyBucket.preAmount, currencyBucket.refundCount, currencyBucket.refundAmount, currencyBucket.caCount, currencyBucket.caAmount); + enrichSettleDataWithVoids(settleData); payDetail.setSettleDataObj(settleData); + payDetail.setCardSettleData(CardSettleData.convertFromPayDetail(buildCardPayDetailList())); long totalAmount = currencyBucket.saleAmount + currencyBucket.preAmount + currencyBucket.refundAmount + currencyBucket.caAmount; @@ -409,10 +416,9 @@ public class SettlementViewModel extends ViewModel { payDetail.setSettleList(currencyBucket.saleCount+ ":" + currencyBucket.saleAmount + "-" + currencyBucket.caCount + ":" + currencyBucket.caAmount + "-" + currencyBucket.refundCount + ":" + currencyBucket.refundAmount + "-" + currencyBucket.preCount + ":" + currencyBucket.preAmount); // for print receipt /*POS*/ SettleData settleData = new SettleData(currencyBucket.saleCount, currencyBucket.saleAmount, currencyBucket.preCount, currencyBucket.preAmount, currencyBucket.refundCount, currencyBucket.refundAmount, currencyBucket.caCount, currencyBucket.caAmount); + enrichSettleDataWithVoids(settleData); payDetail.setSettleDataObj(settleData); - - if(payDetails != null) - payDetail.setCardSettleData(CardSettleData.convertFromPayDetail(payDetails)); + payDetail.setCardSettleData(CardSettleData.convertFromPayDetail(buildCardPayDetailList())); if(hostName == HostName.BPC) { long totalAmount = currencyBucket.saleAmount + currencyBucket.preAmount + currencyBucket.refundAmount + currencyBucket.caAmount; @@ -539,6 +545,31 @@ public class SettlementViewModel extends ViewModel { }); } + private void enrichSettleDataWithVoids(SettleData settleData) { + for (PayDetail pay : deleteTrans) { + if (pay.getTransactionType() == TransactionType.VOID && !pay.isCanceled) { + settleData.setVoidSaleCount(settleData.getVoidSaleCount() + 1); + settleData.setVoidSaleAmount(settleData.getVoidSaleAmount() + pay.getAmount()); + } else if (pay.getTransactionType() == TransactionType.SALE && pay.isCanceled) { + settleData.setSaleCount(settleData.getSaleCount() + 1); + settleData.setSaleAmount(settleData.getSaleAmount() + pay.getAmount()); + } + } + } + + private List buildCardPayDetailList() { + List list = new ArrayList<>(); + if (payDetails != null) list.addAll(payDetails); + for (PayDetail pay : deleteTrans) { + if (pay.getTransactionType() == TransactionType.VOID && !pay.isCanceled) { + list.add(pay); + } else if (pay.getTransactionType() == TransactionType.SALE && pay.isCanceled) { + list.add(pay); + } + } + return list; + } + private void batchUploadProcess(boolean isLast) { resultString.postValue(TransactionStatus.ON_BATCH_UPLOAD); 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 df00844..62a401a 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 @@ -160,7 +160,7 @@ public abstract class BaseXPrint { protected void emptyLine(int no) { for (int i = 0; i < no; i++) { - printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT, false); } @@ -192,23 +192,23 @@ public abstract class BaseXPrint { } protected void lineBreak() { - printer.appendPrnStr("*****************************", fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("*****************************", fontNormal, AlignEnum.LEFT, false); } protected void dashBreak() { - printer.appendPrnStr("-----------------------------", fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("-----------------------------", fontNormal, AlignEnum.LEFT, false); } protected void dashBreakEnding() { - printer.appendPrnStr("--------X----------X---------", fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("--------X----------X---------", fontNormal, AlignEnum.LEFT, false); } protected void breakingLine() { - printer.appendPrnStr("******************************", fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("******************************", fontNormal, AlignEnum.LEFT, false); } @@ -247,43 +247,36 @@ public abstract class BaseXPrint { boolean isDecimalEnabled = SystemParamsOperation.getInstance().getDecimalEnable(); lineBreak(); - print2SideStringMargin("CARD TYPE ","CARD NUMBER"); - print2SideStringMargin("EXP DATE ","INVOICE NUM"); - print2SideStringMargin("TRANSACTION ","AMOUNT"); - print2SideStringMargin("APPR CODE ","DATE/TIME"); + print2SideStringMargin("CARD TYPE ", "CARD NUMBER"); + print2SideStringMargin("EXP DATE ", "INVOICE NUM"); + print2SideStringMargin("TRANSACTION ", "AMOUNT"); + print2SideStringMargin("APPR CODE ", "DATE/TIME"); lineBreak(); - for (CardSettleData cardSettleData:cardSettleDataList) { - print2SideStringMargin(cardSettleData.getCardType(),PrintUtils.getInstance().maskCardNumberPciDss(cardSettleData.getCardNum())); - print2SideStringMargin("XX/XX",cardSettleData.getInvoiceNum()); - print2SideStringMargin(cardSettleData.getTransType(),"MMK "+PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount(), isDecimalEnabled)); - print2SideStringMargin(cardSettleData.getApprovalCode(),cardSettleData.getTransDate() + " " + cardSettleData.getTransTime() ); + for (CardSettleData cardSettleData : cardSettleDataList) { + print2SideStringMargin(cardSettleData.getCardType(), PrintUtils.getInstance().maskCardNumberPciDss(cardSettleData.getCardNum())); + print2SideStringMargin("INV NO", cardSettleData.getInvoiceNum()); + String cardCurrency = currencyCodeToText(cardSettleData.getCurrencyCode()); + print2SideStringMargin(cardSettleData.getTransType(), cardCurrency + " " + PrintUtils.getInstance().getSeparatorNumberFormat(cardSettleData.getAmount(), isDecimalEnabled)); + print2SideStringMargin(cardSettleData.getApprovalCode(), cardSettleData.getTransDate() + " " + cardSettleData.getTransTime()); emptyLine(1); } lineBreak(); SettleData settleData = payDetail.getSettleDataObj(); - int totalCount = settleData.getSaleCount() + settleData.getPreAuthCompCount() + settleData.getRefundCount() + settleData.getCashAdvanceCount(); - long totalAmount = settleData.getSaleAmount() + settleData.getPreAuthCompAmount() + settleData.getCashAdvanceAmount(); + long totalAmount = settleData.getSaleAmount() + settleData.getPreAuthCompAmount() + settleData.getCashAdvanceAmount() + - settleData.getVoidSaleAmount() - settleData.getRefundAmount(); + printer.appendPrnStr("GRAND TOTAL", fontLarge, AlignEnum.LEFT, true); + emptyLine(1); print3ColumnsString("TRX TYPE ", "CNT", "AMOUNT"); print3ColumnsString("SALE ", countStringFormat(settleData.getSaleCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getSaleAmount(), isDecimalEnabled)); - print3ColumnsString("VOID SALE ", countStringFormat(settleData.getVoidSaleCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getVoidSaleAmount(), isDecimalEnabled)); + print3ColumnsString("VOID SALE ", countStringFormat(settleData.getVoidSaleCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getVoidSaleAmount(), isDecimalEnabled)); print3ColumnsString("PREAUTH COMP ", countStringFormat(settleData.getPreAuthCompCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getPreAuthCompAmount(), isDecimalEnabled)); - if (settleData.getCashAdvanceCount() != 0) - print3ColumnsString("CASH ADV ", countStringFormat(settleData.getCashAdvanceCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getCashAdvanceAmount(), isDecimalEnabled)); - print3ColumnsString("REFUND ", countStringFormat(settleData.getRefundCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getRefundAmount(), isDecimalEnabled)); - emptyLine(1); - printer.appendPrnStr("GRAND TOTAL", fontLarge, AlignEnum.LEFT,true); - emptyLine(1); -// print3ColumnsString("TOTAL(MMK) ", countStringFormat(totalCount), PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount)); - print3ColumnsString("TRX TYPE ", "CNT", "AMOUNT"); - print3ColumnsString("SALE ", countStringFormat(settleData.getSaleCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getSaleAmount(), isDecimalEnabled)); - print3ColumnsString("VOID SALE ", countStringFormat(settleData.getVoidSaleCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getVoidSaleAmount(), isDecimalEnabled)); - print3ColumnsString("PREAUTH COMP ", countStringFormat(settleData.getPreAuthCompCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getPreAuthCompAmount(), isDecimalEnabled)); - if (settleData.getCashAdvanceCount() != 0) - print3ColumnsString("CASH ADV ", countStringFormat(settleData.getCashAdvanceCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getCashAdvanceAmount(), isDecimalEnabled)); + print3ColumnsString("CASH ADV ", countStringFormat(settleData.getCashAdvanceCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getCashAdvanceAmount(), isDecimalEnabled)); print3ColumnsString("REFUND ", countStringFormat(settleData.getRefundCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getRefundAmount(), isDecimalEnabled)); + dotBreak(); + print3ColumnsString("TOTAL ", "", PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isDecimalEnabled)); emptyLine(2); @@ -384,19 +377,20 @@ public abstract class BaseXPrint { String receiptFooter = SystemParamsOperation.getInstance().getReceiptFooter(); String finalVersion = SystemParamsOperation.getInstance().getFinalVersion(); - printer.appendPrnStr("***** MERCHANT COPY *****", fontNormal, AlignEnum.CENTER,false); + printer.appendPrnStr("***** MERCHANT COPY *****", fontNormal, AlignEnum.CENTER, false); // printer.appendPrnStr(finalVersion, fontNormal, AlignEnum.CENTER,false); - printer.appendPrnStr(receiptFooter, fontNormal, AlignEnum.CENTER,false); + printer.appendPrnStr(receiptFooter, fontNormal, AlignEnum.CENTER, false); } + protected void printTransFooterForSettlement() { String receiptFooter = SystemParamsOperation.getInstance().getReceiptFooter(); String finalVersion = SystemParamsOperation.getInstance().getFinalVersion(); - printer.appendPrnStr("***** SETTLEMENT CONFIRM *****", fontNormal, AlignEnum.CENTER,false); - printer.appendPrnStr(receiptFooter, fontNormal, AlignEnum.CENTER,false); + printer.appendPrnStr("***** SETTLEMENT CONFIRM *****", fontNormal, AlignEnum.CENTER, false); + printer.appendPrnStr(receiptFooter, fontNormal, AlignEnum.CENTER, false); } - + protected void printTransDetail(PayDetail payDetail) { @@ -409,7 +403,7 @@ public abstract class BaseXPrint { print2ColumnsStringNoSpace("CARD NUM :", PrintUtils.getInstance().maskCardNumberPciDss(payDetail.getCardNo())); print2ColumnsStringNoSpace("ENTRY MODE :", PrintUtils.getInstance().getEntryType(payDetail.getCardType())); - print2ColumnsStringNoSpace("EXP DATE :",PrintUtils.getInstance().getFormatExpDate(payDetail.getEXPDate())); + print2ColumnsStringNoSpace("EXP DATE :", PrintUtils.getInstance().getFormatExpDate(payDetail.getEXPDate())); print2ColumnsStringNoSpace("CARD TYPE :", payDetail.getAccountType()); print2ColumnsStringNoSpace("TRACE NUM :", payDetail.getInvoiceNo()); @@ -421,7 +415,7 @@ public abstract class BaseXPrint { } if (payDetail.getTradeAnswerCode().equals(Constant.ANSWER_CODE_ACCEPT) || payDetail.getTradeAnswerCode().equals(Constant.ANSWER_CODE_APPROVED)) { - print2ColumnsStringNoSpace( "APPR CODE :" ,payDetail.getApprovalCode()); + print2ColumnsStringNoSpace("APPR CODE :", payDetail.getApprovalCode()); } print2ColumnsStringNoSpace("TRANS REF :", payDetail.getReferNo()); @@ -436,7 +430,6 @@ public abstract class BaseXPrint { // } - boolean isDecimalEnabled = SystemParamsOperation.getInstance().getDecimalEnable(); if (payDetail.getTradeAnswerCode().equals("00") || payDetail.getTradeAnswerCode().equals("000")) { if (payDetail.getTransactionType() == TransactionType.CASH_ADVANCE) { @@ -449,7 +442,7 @@ public abstract class BaseXPrint { if (payDetail.getTradeAnswerCode().equals("00") || payDetail.getTradeAnswerCode().equals("000")) { String currencySign = currencyCodeToText(payDetail.getCurrencyCode()); if (payDetail.getTransactionType() == TransactionType.BALANCE_INQUIRY) { - printer.appendPrnStr("MMK " + PrintUtils.getInstance().getBalanceInquiryNumberFormat(payDetail.getAmount()), fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("MMK " + PrintUtils.getInstance().getBalanceInquiryNumberFormat(payDetail.getAmount()), fontNormal, AlignEnum.LEFT, false); } else if (payDetail.getTransactionType() == TransactionType.VOID || payDetail.getTransactionType() == TransactionType.REFUND || payDetail.getTransactionType() == TransactionType.PRE_SALE_CANCEL || payDetail.getTransactionType() == TransactionType.PRE_SALE_COMPLETE_VOID) { print2SideString("AMT:" + currencySign, "- " + PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount(), isDecimalEnabled)); @@ -464,8 +457,8 @@ public abstract class BaseXPrint { dotBreak(); emptyLine(2); - printer.appendPrnStr("TRANSACTION FAIL", fontNormal, AlignEnum.CENTER,true); - printer.appendPrnStr(BaseErrorCode.getCode(payDetail.getTradeAnswerCode()), fontNormal, AlignEnum.CENTER,true); + printer.appendPrnStr("TRANSACTION FAIL", fontNormal, AlignEnum.CENTER, true); + printer.appendPrnStr(BaseErrorCode.getCode(payDetail.getTradeAnswerCode()), fontNormal, AlignEnum.CENTER, true); emptyLine(2); dotBreak(); @@ -526,20 +519,20 @@ public abstract class BaseXPrint { } else { hostName = HOST_NAME_VM; } - printer.appendPrnStr("HOST :" + hostName, fontNormal, AlignEnum.LEFT,false); - printer.appendPrnStr("TID :" + payDetail.getTerminalNo(), fontNormal, AlignEnum.LEFT,false); - printer.appendPrnStr("MID :" + payDetail.getMerchantNo(), fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("HOST :" + hostName, fontNormal, AlignEnum.LEFT, false); + printer.appendPrnStr("TID :" + payDetail.getTerminalNo(), fontNormal, AlignEnum.LEFT, false); + printer.appendPrnStr("MID :" + payDetail.getMerchantNo(), fontNormal, AlignEnum.LEFT, false); if (payDetail.getTransType().equals("SUMMARY_REPORT")) { - printer.appendPrnStr("BTH NO:" + batchNum, fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("BTH NO:" + batchNum, fontNormal, AlignEnum.LEFT, false); } else { // printer.printColumnsString(new String[]{"BATCH NO :" + batchNum, "INV NO: " + invoiceNo}, new int[]{2, 2}, new int[]{0, 2}, null); - printer.appendPrnStr("BTH NO:" + batchNum + " INV NO:" + traceNo, fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("BTH NO:" + batchNum + " INV NO:" + traceNo, fontNormal, AlignEnum.LEFT, false); } // printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false); - printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false); - printer.appendPrnStr(transType.replace("_", " "), fontNormal, AlignEnum.CENTER,true); + printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT, false); + printer.appendPrnStr(transType.replace("_", " "), fontNormal, AlignEnum.CENTER, true); // printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false); // printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false); @@ -578,10 +571,10 @@ public abstract class BaseXPrint { print2ColumnsStringNoSpace("CARD NUM :", PrintUtils.getInstance().maskCardNumberPciDss(payDetail.getCardNo())); if (payDetail.getCardType() != -1 || payDetail.getTransactionType() != TransactionsType.REFUND.value) { // printer.appendPrnStr("AID :" + payDetail.getAID(), fontNormal, AlignEnum.LEFT,false); - printer.appendPrnStr("APP LABEL :" + payDetail.getAppLabel(), fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("APP LABEL :" + payDetail.getAppLabel(), fontNormal, AlignEnum.LEFT, false); } print2ColumnsStringNoSpace("ENTRY MODE:", PrintUtils.getInstance().getEntryType(payDetail.getCardType())); - print2ColumnsStringNoSpace("EXP DATE :",PrintUtils.getInstance().getFormatExpDate(payDetail.getEXPDate())); + print2ColumnsStringNoSpace("EXP DATE :", PrintUtils.getInstance().getFormatExpDate(payDetail.getEXPDate())); print2ColumnsStringNoSpace("CARD TYPE :", payDetail.getAccountType()); print2ColumnsStringNoSpace("TRACE NUM :", payDetail.getInvoiceNo()); @@ -593,7 +586,7 @@ public abstract class BaseXPrint { } if (payDetail.getTradeAnswerCode().equals(Constant.ANSWER_CODE_ACCEPT) || payDetail.getTradeAnswerCode().equals(Constant.ANSWER_CODE_APPROVED)) { - print2ColumnsStringNoSpace( "APPR CODE :" ,payDetail.getApprovalCode()); + print2ColumnsStringNoSpace("APPR CODE :", payDetail.getApprovalCode()); } @@ -611,7 +604,7 @@ public abstract class BaseXPrint { String currencySign = currencyCodeToText(payDetail.getCurrencyCode()); // CurrencyType currencySign = currencyTextToCurrencyType(payDetail.getCurrencyCode()); if (payDetail.getTransactionType() == TransactionType.BALANCE_INQUIRY) { - printer.appendPrnStr("MMK " + PrintUtils.getInstance().getBalanceInquiryNumberFormat(payDetail.getAmount()), fontNormal, AlignEnum.LEFT,true); + printer.appendPrnStr("MMK " + PrintUtils.getInstance().getBalanceInquiryNumberFormat(payDetail.getAmount()), fontNormal, AlignEnum.LEFT, true); } else { print2SideString("AMT:" + currencySign, PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount(), isDecimalEnabled)); // printer.appendPrnStr("AMOUNT:" + currencySign + " " + PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount()), fontNormal, AlignEnum.LEFT,true); @@ -621,7 +614,7 @@ public abstract class BaseXPrint { // lineBreak(); emptyLine(1); - printer.appendPrnStr(BaseErrorCode.getCode(payDetail.getTradeAnswerCode()), fontNormal, AlignEnum.CENTER,true); + printer.appendPrnStr(BaseErrorCode.getCode(payDetail.getTradeAnswerCode()), fontNormal, AlignEnum.CENTER, true); emptyLine(1); dotBreak(); } @@ -638,7 +631,7 @@ public abstract class BaseXPrint { if (isNegative) { amountString = "-" + amountString; } - printer.appendPrnStr(label + countStringFormat(count) + MMK + " " + amountString, fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr(label + countStringFormat(count) + MMK + " " + amountString, fontNormal, AlignEnum.LEFT, false); } } @@ -656,14 +649,14 @@ public abstract class BaseXPrint { if (settleData.getSaleCount() == 0 && settleData.getVoidSaleCount() == 0 && settleData.getWavePayCount() == 0 && settleData.getCashAdvanceCount() == 0) { printErrorBlock("NO TRANSACTION FOUND"); - printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT, false); return; } if (payDetail.getAccountType().equals("WALLET")) { // 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("CARD NAME:" + payDetail.getAccountType(), fontNormal, AlignEnum.LEFT, false); } // printer.appendPrnStr(" " + "COUNT " + " " + " TOTAL", fontNormal, AlignEnum.LEFT,false); // printer.appendPrnStr("COUNT", "TOTAL", fontNormal, false); @@ -717,18 +710,18 @@ public abstract class BaseXPrint { } } if (isWallet) { - if (settleData.getWavePayCount() > 0){ - printer.appendPrnStr( "(" + settleData.getWavePayCount() + ")" + "QR PAY" , PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getWavePayAmount(), isQrDecimalEnabled) , fontNormal, false); + if (settleData.getWavePayCount() > 0) { + printer.appendPrnStr("(" + settleData.getWavePayCount() + ")" + "QR PAY", PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getWavePayAmount(), isQrDecimalEnabled), fontNormal, false); } if (settleData.getWaveRefundCount() > 0) { - printer.appendPrnStr( "(" + settleData.getWaveRefundCount() + ")" + "QR REFUND", "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getWaveRefundAmount(), isQrDecimalEnabled) , fontNormal, false); + printer.appendPrnStr("(" + settleData.getWaveRefundCount() + ")" + "QR REFUND", "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getWaveRefundAmount(), isQrDecimalEnabled), fontNormal, false); } } // dashBreak(); dotBreak(); // printColumnString("TOTAL", totalCount, totalAmount, 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("TOTAL", PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isQrDecimalEnabled), fontNormal, false); // printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false); // printer.appendPrnStr("GRAND TOTAL", fontNormal, AlignEnum.LEFT,false); @@ -940,7 +933,7 @@ public abstract class BaseXPrint { if (list == null || list.isEmpty()) { printErrorBlock("NO TRANSACTION FOUND"); - printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT, false); return; } @@ -964,19 +957,19 @@ public abstract class BaseXPrint { if (currencyMap.isEmpty()) { printErrorBlock("NO TRANSACTION FOUND"); - printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT, false); return; } boolean isQrDecimalEnabled = SystemParamsOperation.getInstance().isQrDecimalEnable(); boolean isDecimalEnabled = SystemParamsOperation.getInstance().getDecimalEnable(); - + for (String currency : currencyMap.keySet()) { TempSummary data = currencyMap.get(currency); boolean isQrHost = hostType == HostType.QR; - printer.appendPrnStr( currencyCodeToText(currency) + " " +"Transactions", fontNormal, AlignEnum.LEFT, false); + printer.appendPrnStr(currencyCodeToText(currency) + " " + "Transactions", fontNormal, AlignEnum.LEFT, false); emptyLine(1); // printer.appendPrnStr("(COUNT)TRANS", "AMOUNT(" + currencyCodeToText(currency) + ")", fontNormal, false); @@ -1052,9 +1045,9 @@ public abstract class BaseXPrint { long totalAmount = isQrHost ? data.qrPayAmount - data.qrRefundAmount : (data.saleAmount + data.cashOutAmount + data.preAuthSaleAmount + data.preAuthCompAmount) - - (data.voidSaleAmount + data.preAuthVoidAmount + data.refundAmount + data.preAuthCompVoidAmount); + - (data.voidSaleAmount + data.preAuthVoidAmount + data.refundAmount + data.preAuthCompVoidAmount); - printer.appendPrnStr( "TOTAL"+ " " + currencyCodeToText(currency), + printer.appendPrnStr("TOTAL" + " " + currencyCodeToText(currency), PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isQrHost ? isQrDecimalEnabled : isDecimalEnabled), fontNormal, false); @@ -1101,66 +1094,65 @@ public abstract class BaseXPrint { }*/ protected void printString(String text) { - printer.appendPrnStr(text, fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr(text, fontNormal, AlignEnum.LEFT, false); } protected void printString(String text, Boolean isBold) { - printer.appendPrnStr(text, fontNormal, AlignEnum.LEFT,isBold); + printer.appendPrnStr(text, fontNormal, AlignEnum.LEFT, isBold); } protected void print2ColumnsString(String first, String second) { - printer.appendPrnStr(first + " " + second, fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr(first + " " + second, fontNormal, AlignEnum.LEFT, false); } protected void print2SideString(String first, String second) { - printer.appendPrnStr(first,second, fontLarge,true); + printer.appendPrnStr(first, second, fontLarge, true); } protected void print2SideStringMargin(String first, String second) { LineOptionEntity lineOption = new LineOptionEntity(); lineOption.setMarginLeft(2); lineOption.setUnderline(false); - printer.appendPrnStr(first,second, fontNormal, lineOption); + printer.appendPrnStr(first, second, fontNormal, lineOption); } protected void print2ColumnsStringNoSpace(String first, String second) { - printer.appendPrnStr(first + " " + second, fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr(first + " " + second, fontNormal, AlignEnum.LEFT, false); } protected void print2ColumnsStringBold(String first, String second) { - printer.appendPrnStr(first + " " + second, fontNormal, AlignEnum.LEFT,true); + printer.appendPrnStr(first + " " + second, fontNormal, AlignEnum.LEFT, true); } protected void print2ColumnsStringBoldCenter(String first, String second) { - printer.appendPrnStr(first + " " + second, fontNormal, AlignEnum.CENTER,true); + printer.appendPrnStr(first + " " + second, fontNormal, AlignEnum.CENTER, true); } protected void print2ColumnsStringBoldCenter(String first, String second, AlignEnum align) { - printer.appendPrnStr(first + " " + second, fontNormal, align,true); + printer.appendPrnStr(first + " " + second, fontNormal, align, true); } - protected void print2ColumnsStringBoldCenter(String first, String second, int fontSize, AlignEnum align) { - printer.appendPrnStr(first + " " + second, fontSize, align,true); + protected void print2ColumnsStringBoldCenter(String first, String second, int fontSize, AlignEnum align) { + 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); + printer.appendPrnStr(first + " " + second + " " + third, fontNormal, AlignEnum.LEFT, false); } protected void print3ColumnsString(String first, String second, String third, Boolean isBold) { // printer.appendPrnStr(first + " " + second + " " + third, fontNormal, AlignEnum.LEFT,false); - printer.appendPrnStr(first + " " + second + " " + third, fontNormal, AlignEnum.LEFT,isBold); + printer.appendPrnStr(first + " " + second + " " + third, fontNormal, AlignEnum.LEFT, isBold); } - - protected void print3ColumnsStringWithAlign(String first, String second, String third, int font, boolean isBold){ + + protected void print3ColumnsStringWithAlign(String first, String second, String third, int font, boolean isBold) { String fixedSizeString = String.format("%-5s", first); printer.appendPrnStr(fixedSizeString + " " + second, third, font, isBold); } - protected void dotBreak(){ + protected void dotBreak() { printer.appendPrnStr(new String(new char[29]).replace("\0", "."), fontNormal, AlignEnum.CENTER, false); } @@ -1168,6 +1160,7 @@ public abstract class BaseXPrint { long total = 0; int count = 0; } + protected void printTransDetailReport(List lists, HostType hostType) { // ✅ Summary holder (total + count per currency) @@ -1386,13 +1379,13 @@ public abstract class BaseXPrint { cvmText = "NO SIGNATURE REQUIRED"; break; } - if(payDetail.getTransactionType() == TransactionsType.MMQR.value || payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value){ + if (payDetail.getTransactionType() == TransactionsType.MMQR.value || payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value) { cvmText = ""; } addSignatureBitmap(payDetail); - printer.appendPrnStr(cvmText, fontNormal, AlignEnum.CENTER,true); + printer.appendPrnStr(cvmText, fontNormal, AlignEnum.CENTER, true); // if (payDetail.getIsFreeSign()) { @@ -1404,17 +1397,17 @@ public abstract class BaseXPrint { emptyLine(0); // printer.appendPrnStr("I AGREE TO PAY THE ABOVE TOTAL AMOUNT", fontSmall, AlignEnum.CENTER,false); 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); + 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); } if (isMerchantCopy) { - printer.appendPrnStr("***** MERCHANT COPY *****", fontSmall, AlignEnum.CENTER,false); + printer.appendPrnStr("***** MERCHANT COPY *****", fontSmall, AlignEnum.CENTER, false); } else { - printer.appendPrnStr("***** CUSTOMER COPY *****", fontSmall, AlignEnum.CENTER,false); + printer.appendPrnStr("***** CUSTOMER COPY *****", fontSmall, AlignEnum.CENTER, false); } // printer.appendPrnStr(finalVersion, fontSmall, AlignEnum.CENTER,false); - printer.appendPrnStr(receiptFooter, fontSmall, AlignEnum.CENTER,false); + printer.appendPrnStr(receiptFooter, fontSmall, AlignEnum.CENTER, false); } @@ -1536,22 +1529,21 @@ public abstract class BaseXPrint { } protected void printKeyInfo() { - String keyIndex = SystemParamsOperation.getInstance().getTMKIndex(); - byte[] ksnData = new byte[10]; - int result = PayLibNex.getInstance().deviceEngine.getPinPad().getRandomNum(ksnData); + String keyIndex = SystemParamsOperation.getInstance().getTMKIndex(); + byte[] ksnData = new byte[10]; + int result = PayLibNex.getInstance().deviceEngine.getPinPad().getRandomNum(ksnData); - String ksn = ByteUtil.bytes2HexStr(ksnData); + String ksn = ByteUtil.bytes2HexStr(ksnData); - printer.appendPrnStr("<<< DUKPT Key Information >>>", fontNormal, AlignEnum.CENTER,true); + printer.appendPrnStr("<<< DUKPT Key Information >>>", fontNormal, AlignEnum.CENTER, true); - lineBreak(); - printer.appendPrnStr("Key Index (" + keyIndex + ")", fontNormal, AlignEnum.LEFT,false); - printer.appendPrnStr("KSN :" + ksn, fontNormal, AlignEnum.LEFT,false); + lineBreak(); + printer.appendPrnStr("Key Index (" + keyIndex + ")", fontNormal, AlignEnum.LEFT, false); + printer.appendPrnStr("KSN :" + ksn, fontNormal, AlignEnum.LEFT, false); - lineBreak(); - emptyLine(4); + lineBreak(); + emptyLine(4); - } @@ -1596,43 +1588,43 @@ public abstract class BaseXPrint { 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 , fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("TRACE NO :" + traceNum, 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:" + traceNum, fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("BTH NO:" + batchNum + " INV NO:" + traceNum, 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); - }else{ - - if(isSettlement && isDuelCurrency){ + if (payDetail.getTransactionType() == TransactionsType.MMQR.value || payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value) { + printer.appendPrnStr("SHORT CODE :" + payDetail.getMerchantNo(), fontNormal, AlignEnum.LEFT, false); + } else { + + if (isSettlement && isDuelCurrency) { printer.appendPrnStr("MID :" + SystemParamsOperation.getInstance().getMerchantId(), fontNormal, AlignEnum.LEFT, false); printer.appendPrnStr("TID :" + SystemParamsOperation.getInstance().getTerminalId(), fontNormal, AlignEnum.LEFT, false); printer.appendPrnStr("MID :" + SystemParamsOperation.getInstance().getThirdHostMerchantId(), fontNormal, AlignEnum.LEFT, false); printer.appendPrnStr("TID :" + SystemParamsOperation.getInstance().getThirdHostTerminalId(), fontNormal, AlignEnum.LEFT, false); - }else{ - printer.appendPrnStr("MID :" + payDetail.getMerchantNo(), fontNormal, AlignEnum.LEFT,false); - printer.appendPrnStr("TID :" + payDetail.getTerminalNo(), fontNormal, AlignEnum.LEFT,false); + } else { + printer.appendPrnStr("MID :" + payDetail.getMerchantNo(), fontNormal, AlignEnum.LEFT, false); + printer.appendPrnStr("TID :" + payDetail.getTerminalNo(), fontNormal, AlignEnum.LEFT, false); } } - if(isSettlement) { - printer.appendPrnStr("BATCH :" + batchNum, fontNormal, AlignEnum.LEFT,false); - printer.appendPrnStr("HOST :" + "KBZ Bank "+currencySign, fontNormal, AlignEnum.LEFT,false); + if (isSettlement) { + printer.appendPrnStr("BATCH :" + batchNum, fontNormal, AlignEnum.LEFT, false); + printer.appendPrnStr("HOST :" + "KBZ Bank " + currencySign, fontNormal, AlignEnum.LEFT, false); } - if(isCardTransaction) { + if (isCardTransaction) { dotBreak(); } else { emptyLine(1); } - printer.appendPrnStr(transType.replace("_", " "),fontNormal, AlignEnum.CENTER,true); + 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))) { @@ -1641,7 +1633,7 @@ public abstract class BaseXPrint { } - protected void printDetailReportHeader(){ + protected void printDetailReportHeader() { SimpleDateFormat date = new SimpleDateFormat("dd MMM yyyy", Locale.getDefault()); String printedDate = date.format(new Date()); @@ -1650,11 +1642,11 @@ public abstract class BaseXPrint { printer.appendPrnStr("PRINTED DATE", printedDate, fontNormal, false); printer.appendPrnStr("", printedTime, fontNormal, false); - printer.appendPrnStr("DETAIL REPORT", fontNormal , AlignEnum.CENTER, false); + printer.appendPrnStr("DETAIL REPORT", fontNormal, AlignEnum.CENTER, false); dotBreak(); } - protected void printTranHeader(String title){ + protected void printTranHeader(String title) { SimpleDateFormat date = new SimpleDateFormat("dd MMM yyyy", Locale.getDefault()); String printedDate = date.format(new Date()); @@ -1663,10 +1655,11 @@ public abstract class BaseXPrint { printer.appendPrnStr("PRINTED DATE", printedDate, fontNormal, false); printer.appendPrnStr("", printedTime, fontNormal, false); - printer.appendPrnStr(title, fontNormal , AlignEnum.CENTER, false); + printer.appendPrnStr(title, fontNormal, AlignEnum.CENTER, false); dotBreak(); } + protected void printTransHeader(PayDetail payDetail, HostType hostType) { String invoiceNo = payDetail.getInvoiceNo().isEmpty() ? SystemParamsOperation.getInstance().getCurrentInvoiceNum() : payDetail.getInvoiceNo(); String transType = payDetail.getTransType(); @@ -1685,24 +1678,24 @@ public abstract class BaseXPrint { 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("TRACE NO :" + traceNum , fontNormal, AlignEnum.LEFT,false); + printer.appendPrnStr("TRACE NO :" + traceNum, 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:" + traceNum, 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 (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); + 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); + 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); @@ -1835,11 +1828,11 @@ public abstract class BaseXPrint { } // No port → do NOT split - return new String[]{ raw, "" }; + return new String[]{raw, ""}; } catch (Exception e) { // fail-safe: do not split - return new String[]{ raw, "" }; + return new String[]{raw, ""}; } } @@ -1847,7 +1840,7 @@ public abstract class BaseXPrint { int idx = raw.lastIndexOf(":"); if (idx == -1) { - return new String[]{ raw, "" }; + return new String[]{raw, ""}; } return new String[]{ 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 3f0a970..6f62857 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 @@ -192,7 +192,12 @@ public class PrintXImpl extends BaseXPrint implements PrintX { printLogo(); printMerchantHeader(); printTransHeader(payDetail); - printTransDetailSettlement(payDetail); + List cardSettleDataList = payDetail.getCardSettleData(); + if (cardSettleDataList != null && !cardSettleDataList.isEmpty()) { + printTransDetailSettlement(payDetail, cardSettleDataList); + } else { + printTransDetailSettlement(payDetail); + } // printTransFooterSummary(); printTransFooterForSettlement();