physical receipt fix decimal for print summery

This commit is contained in:
MooN 2025-12-23 21:31:54 +06:30
parent 063805e77a
commit bbabe9b824
5 changed files with 83 additions and 42 deletions

View File

@ -385,7 +385,7 @@ public class TransactionSummaryFragment extends DataBindingFragment {
private void printReceipt(PayDetail payDetail) {
try {
LogUtil.d(TAG, "Starting receipt print");
PrintXReceipt.getInstance().printSmileSummaryReport(payDetail, new PrintXStatus() {
PrintXReceipt.getInstance().printSmileSummaryReport(payDetail, sharedViewModel.hostType.getValue(), new PrintXStatus() {
@Override
public void onSuccess() {
LogUtil.d(TAG, "Receipt printed successfully");

View File

@ -90,7 +90,7 @@ public abstract class BaseXPrint {
protected int fontNormal = 21;
protected int fontLarge = 22;
// protected FontEntity fontNormal = new FontEntity(DotMatrixFontEnum.CH_SONG_24X24, DotMatrixFontEnum.ASC_SONG_12X24);
// protected FontEntity fontNormal = new FontEntity(DotMatrixFontEnum.CH_SONG_24X24, DotMatrixFontEnum.ASC_SONG_12X24);
protected FontEntity fontBold = new FontEntity(DotMatrixFontEnum.CH_SONG_24X24, DotMatrixFontEnum.ASC_SONG_BOLD_16X24);
protected FontEntity fontBig = new FontEntity(DotMatrixFontEnum.CH_SONG_24X24, DotMatrixFontEnum.ASC_SONG_12X24, false, true);
@ -494,6 +494,7 @@ public abstract class BaseXPrint {
String MMK = "MMK";
SettleData settleData = payDetail.getSettleDataObj();
boolean isQrDecimalEnabled = SystemParamsOperation.getInstance().isQrDecimalEnable();
int totalCount = settleData.getSaleCount() + settleData.getWavePayCount() + settleData.getVoidSaleCount() + settleData.getCashAdvanceCount() + settleData.getRefundCount() + settleData.getPreAuthCompCount() + settleData.getPreAuthCompVoidCount() + settleData.getWaveRefundCount();
long totalAmount = (settleData.getCashAdvanceAmount() + settleData.getSaleAmount() + settleData.getWavePayAmount() + settleData.getPreAuthCompAmount()) - (settleData.getVoidSaleAmount() + settleData.getRefundAmount() + settleData.getPreAuthCompVoidAmount() + settleData.getWaveRefundAmount());
@ -509,37 +510,8 @@ public abstract class BaseXPrint {
} else {
printer.appendPrnStr("CARD NAME:" + payDetail.getAccountType(), fontNormal, AlignEnum.LEFT,false);
}
printer.appendPrnStr(" " + "COUNT " + " " + " TOTAL", fontNormal, AlignEnum.LEFT,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);
if (settleData.getWaveRefundCount() > 0)
printColumnString("QR REFUND", settleData.getWaveRefundCount(), settleData.getWaveRefundAmount(), true);
dashBreak();
printColumnString("TOTAL", totalCount, totalAmount, 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, 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)
@ -559,15 +531,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)
printColumnString("QR PAY", settleData.getWavePayCount(), settleData.getWavePayAmount(), false);
if (settleData.getWaveRefundCount() > 0)
printColumnString("QR REFUND", settleData.getWaveRefundCount(), settleData.getWaveRefundAmount(), 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.getWaveRefundCount(), isQrDecimalEnabled) , fontNormal, false);
}
dashBreak();
printColumnString("TOTAL", totalCount, totalAmount, false);
// 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);
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.getWaveRefundCount(), 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);
// printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false);
}
@ -725,10 +738,15 @@ public abstract class BaseXPrint {
long refundTotal = 0;
for (PayDetail pay : lists) {
// printer.appendPrnStr("DATE :" + POSUtil.getInstance().formatDisplayDate(payDetail.getTransDate()), fontNormal, AlignEnum.LEFT, false);
// printer.appendPrnStr("TIME :" + payDetail.getTransTime(), fontNormal, AlignEnum.LEFT, false);
printString("Trans Id: " + pay.getQrTransId());
printString("Status : " + pay.getTC());
printString("Date : " + PrintUtils.getInstance().formatTimestamp(Long.parseLong(pay.getTradeDateAndTime())));
// printString("Date : " + PrintUtils.getInstance().formatTimestamp(Long.parseLong(pay.getTradeDateAndTime())));
printString("Date : " + POSUtil.getInstance().formatDisplayDate(pay.getTradeDate()));
printString("Time : " + pay.getTransTime());
printString("Amount : " + "MMK " + PrintUtils.getInstance().getSeparatorOnlyNumberFormat(pay.getAmount()));
if (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value) {

View File

@ -17,6 +17,8 @@ public interface PrintX {
void printSmileSummaryReport(PayDetail payDetail,PrintXStatus printXStatus);
void printSmileSummaryReport(PayDetail payDetail, HostType hostType, PrintXStatus printXStatus);
void printSmileSettlementReport(PayDetail payDetail,PrintXStatus printXStatus);
void printQRSettlementReport(PayDetail payDetail,List<PayDetail> list,PrintXStatus printXStatus);

View File

@ -415,15 +415,32 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
printTransDetailSummary(payDetail);
// printTransFooterSummary();
emptyLine(2);
// emptyLine(2);
startPrintNex();
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void printSmileSummaryReport(PayDetail payDetail, HostType hostType, PrintXStatus printXStatus) {
this.callbackStatus = printXStatus;
try {
// LogUtil.d(TAG, payDetail.getSettleDataObj().toString());
setHeight(0x12);
printLogo();
printMerchantHeader();
printTransHeader(payDetail, hostType);
printTransDetailSummary(payDetail);
// printTransFooterSummary();
// emptyLine(2);
startPrintNex();
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void printTerminalConfig(PrintXStatus printXStatus) {

View File

@ -55,6 +55,10 @@ public class PrintXReceipt {
printX.printDetailReport(payDetail,lists,hostType,printXStatus);
}
public void printSmileSummaryReport(PayDetail payDetail, HostType hostType, PrintXStatus printXStatus) {
printX.printSmileSummaryReport(payDetail, hostType, printXStatus);
}
public void printTerminalHostConfig(PrintXStatus printXStatus){
printX.printTerminalConfig(printXStatus);
}