Compare commits

..

4 Commits

Author SHA1 Message Date
MooN
83af914911 fix for refund decimal in summary and detail reports 2025-12-23 23:03:15 +06:30
MooN
bbabe9b824 physical receipt fix decimal for print summery 2025-12-23 21:31:54 +06:30
MooN
063805e77a fix detail report decimal 2025-12-23 20:06:27 +06:30
MooN
34b2fe8189 e-receipt fix for qr settlement 2025-12-23 12:05:46 +06:30
15 changed files with 301 additions and 115 deletions

View File

@ -14,8 +14,8 @@ android {
applicationId "com.utsmm.kbz" applicationId "com.utsmm.kbz"
minSdk 24 minSdk 24
targetSdk 33 targetSdk 33
versionCode 4 versionCode 6
versionName "1.03" versionName "1.05"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }

View File

@ -312,7 +312,7 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
if(response.getResponse().getWalletIdentifier() != null) { if(response.getResponse().getWalletIdentifier() != null) {
payDetail.setCustomerMobile(response.getResponse().getWalletIdentifier()); payDetail.setCustomerMobile(response.getResponse().getWalletIdentifier());
} else { } else {
payDetail.setCustomerMobile("KBZ PAY"); payDetail.setCustomerMobile("KBZPay");
} }
if(response.getResponse().getMmqrRef() != null) { if(response.getResponse().getMmqrRef() != null) {

View File

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

View File

@ -297,11 +297,8 @@ public class QRSettlementTransactionFragment extends DataBindingFragment impleme
} }
private void navigateToResult() { private void navigateToResult() {
routeId = R.id.action_QRSettlementTransactionFragment_to_transactionResultFragment; routeId = R.id.action_QRSettlementTransactionFragment_to_transactionResultFragment;
safeNavigateToRouteId(); safeNavigateToRouteId();
} }
private void processData() { private void processData() {
@ -333,7 +330,8 @@ public class QRSettlementTransactionFragment extends DataBindingFragment impleme
} }
} }
private void updateData() { private void updateData() {
EReceiptRequest request = EReceiptUtil.getInstance().generateMPUReceipt(sharedViewModel.payDetail.getValue()); // EReceiptRequest request = EReceiptUtil.getInstance().generateMPUReceipt(sharedViewModel.payDetail.getValue());
EReceiptRequest request = EReceiptUtil.getInstance().generateQRSettlement(sharedViewModel.payDetail.getValue());
sharedViewModel.pushReceipt(request); sharedViewModel.pushReceipt(request);
} }

View File

@ -92,8 +92,8 @@ public class SelectSettlementFragment extends DataBindingFragment implements Dat
public void onQRSettlement() { public void onQRSettlement() {
if (TMSUtil.getInstance().checkParams().isStatus() == ValidityStatus.FAILURE) { if (TMSUtil.getInstance().checkQRParams().isStatus() == ValidityStatus.FAILURE) {
showDeclineDialog(getResourceString(R.string.txt_please_download_config)+"\n"+TMSUtil.getInstance().checkParams().getMessage()); showDeclineDialog(getResourceString(R.string.txt_please_download_config)+"\n"+TMSUtil.getInstance().checkQRParams().getMessage());
} else if (!Connectivity.isConnectedWifi(getContext()) && !Connectivity.isConnectedMobile(getContext())) { } else if (!Connectivity.isConnectedWifi(getContext()) && !Connectivity.isConnectedMobile(getContext())) {
showSingleInfoDialog(getResourceString(R.string.txt_please_enable_internet)); showSingleInfoDialog(getResourceString(R.string.txt_please_enable_internet));
} else { } else {

View File

@ -17,9 +17,6 @@ public class DownloadUtil {
private static final String TAG = DownloadUtil.class.getSimpleName(); private static final String TAG = DownloadUtil.class.getSimpleName();
// ==============================
// CALLBACK INTERFACE
// ==============================
public interface DownloadCallback { public interface DownloadCallback {
void onDownloadSuccess(String path); void onDownloadSuccess(String path);
} }
@ -29,21 +26,21 @@ public class DownloadUtil {
// ============================== // ==============================
public static void downloadCertificateRx(String url, public static void downloadCertificateRx(String url,
String dynamicFilename, String dynamicFilename,
String timestamp,
String signature,
DownloadCallback callback) { DownloadCallback callback) {
Observable.fromCallable(() -> downloadCert(url, dynamicFilename)) Observable.fromCallable(() ->
.subscribeOn(Schedulers.io()) // download on background thread downloadCert(url, dynamicFilename, timestamp, signature)
.observeOn(AndroidSchedulers.mainThread()) // callback on main thread )
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(path -> { .subscribe(path -> {
if (path != null) { if (callback != null) {
LogUtil.d(TAG, "Certificate saved at: " + path); callback.onDownloadSuccess(path);
if (callback != null) callback.onDownloadSuccess(path);
} else {
LogUtil.e(TAG, "Certificate download failed.");
if (callback != null) callback.onDownloadSuccess(null);
} }
}, error -> { }, error -> {
error.printStackTrace(); LogUtil.e(TAG, "Download error : " + error);
if (callback != null) callback.onDownloadSuccess(null); if (callback != null) callback.onDownloadSuccess(null);
}); });
} }
@ -51,62 +48,71 @@ public class DownloadUtil {
// ============================== // ==============================
// ACTUAL DOWNLOAD LOGIC // ACTUAL DOWNLOAD LOGIC
// ============================== // ==============================
public static String downloadCert(String url, String dynamicFilename) { private static String downloadCert(String url,
try { String dynamicFilename,
OkHttpClient client = new OkHttpClient(); String timestamp,
Request request = new Request.Builder().url(url).build(); String signature) {
LogUtil.d(TAG, "cert timestamp => " + timestamp);
LogUtil.d(TAG, "cert signature => " + signature);
Response response = client.newCall(request).execute(); OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(30, java.util.concurrent.TimeUnit.SECONDS)
.readTimeout(30, java.util.concurrent.TimeUnit.SECONDS)
.build();
if (!response.isSuccessful()) { Request request = new Request.Builder()
.url(url)
.addHeader("x-timestamp", timestamp)
.addHeader("x-api-key", signature)
.build();
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful() || response.body() == null) {
LogUtil.e(TAG, "Download failed: " + response.code()); LogUtil.e(TAG, "Download failed: " + response.code());
return null; return null;
} }
// Detect extension (MIME or URL fallback)
String contentType = response.header("Content-Type", ""); String contentType = response.header("Content-Type", "");
String ext = getExtensionFromContentType(contentType); String ext = getExtensionFromContentType(contentType);
if (ext.isEmpty()) ext = getExtensionFromUrl(url); if (ext.isEmpty()) ext = getExtensionFromUrl(url);
if (ext.isEmpty()) ext = ".bin"; // final fallback if (ext.isEmpty()) ext = ".bin";
// build dynamic filename
String filename = dynamicFilename + ext; String filename = dynamicFilename + ext;
byte[] data = response.body().bytes(); byte[] data = response.body().bytes();
String savedPath = saveFile(filename, data);
return savedPath; return saveFile(filename, data);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); LogUtil.e(TAG, "Download exception : " + e);
return null; return null;
} }
} }
// ============================== // ==============================
// SAVE FILE TO INTERNAL STORAGE // SAVE FILE
// ============================== // ==============================
private static String saveFile(String filename, byte[] data) { private static String saveFile(String filename, byte[] data) {
try { try {
File dir = MyApplication.getInstance().getFilesDir(); File dir = MyApplication.getInstance().getFilesDir();
File file = new File(dir, filename); File file = new File(dir, filename);
FileOutputStream fos = new FileOutputStream(file); try (FileOutputStream fos = new FileOutputStream(file)) {
fos.write(data); fos.write(data);
fos.flush(); fos.flush();
fos.close(); }
return file.getAbsolutePath(); return file.getAbsolutePath();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); LogUtil.e(TAG, "File save failed : " + e);
return null; return null;
} }
} }
// ============================== // ==============================
// MIME TYPE EXTENSION // MIME EXTENSION
// ============================== // ==============================
private static String getExtensionFromContentType(String contentType) { private static String getExtensionFromContentType(String contentType) {
if (contentType == null) return ""; if (contentType == null) return "";
@ -120,15 +126,12 @@ public class DownloadUtil {
case "application/octet-stream": case "application/octet-stream":
return ".pem"; return ".pem";
case "application/x-pkcs12": case "application/x-pkcs12":
return ".pkcs12"; return ".p12";
default: default:
return ""; return "";
} }
} }
// ==============================
// URL EXTENSION PARSER
// ==============================
private static String getExtensionFromUrl(String url) { private static String getExtensionFromUrl(String url) {
if (url == null) return ""; if (url == null) return "";
int lastDot = url.lastIndexOf('.'); int lastDot = url.lastIndexOf('.');
@ -136,3 +139,4 @@ public class DownloadUtil {
return url.substring(lastDot); return url.substring(lastDot);
} }
} }

View File

@ -228,6 +228,81 @@ public class EReceiptUtil {
return request; return request;
} }
public EReceiptRequest generateQRSettlement(PayDetail payDetail) {
double realAmount = payDetail.getAmount() / 100.0;
DecimalFormat df = new DecimalFormat("0.00");
String amount = df.format(realAmount);
String currentTimeStamp = new java.text.SimpleDateFormat("MMddHHmmss", java.util.Locale.getDefault())
.format(new java.util.Date());
String terminalId = SystemParamsOperation.getInstance().getTerminalIdForEreceipt();
EReceiptRequest request = new EReceiptRequest();
request.setDE3(convertTransactionType(payDetail.getTransactionType()));
request.setDE7(currentTimeStamp);
request.setDE11(payDetail.getVoucherNo());
String hostId = SystemParamsOperation.getInstance().getSecHostId();
request.setHostId(hostId);
request.setTerminalId(terminalId);//terminalId is not tid
request.setShortCode(qrMerchantId);
if(payDetail.getTransactionType() == TransactionsType.SETTLEMENT.value) {
SettleData settleData = payDetail.getSettleDataObj();
long totalAmt = settleData.getSaleAmount() + settleData.getRefundAmount() + settleData.getPreAuthCompAmount() + settleData.getCashAdvanceAmount();
double realTotalAmount = totalAmt / 100.0;
String totalAmount = df.format(realTotalAmount);
request.setDE4(totalAmount);
request.setDE63_01(settleData.getSaleCount()+"");
request.setDE63_02(settleData.getSaleAmount()+"");
request.setDE63_03(settleData.getRefundCount()+"");
request.setDE63_04(settleData.getRefundAmount()+"");
request.setDE63_05(settleData.getPreAuthCompCount()+"");
request.setDE63_06(settleData.getPreAuthCompAmount()+"");
request.setDE63_07(settleData.getCashAdvanceCount()+"");
request.setDE63_08(settleData.getCashAdvanceAmount()+"");
invoiceNo = SystemParamsOperation.getInstance().getIncrementInvoiceNum();
request.setBatchNumber(batchNumber);
request.setInvoiceNumber(invoiceNo);
request.setDescription("success");
request.setDE39("A");
request.setDE37("0000");
request.setDE49("MMK");
} else {
request.setDE2(POSUtil.getInstance().getCardNumMasking(payDetail.getCardNo()));
request.setDE4(amount);
request.setDE37(payDetail.getReferNo());
request.setDE38(payDetail.getApprovalCode());
// will check it later for currency code
request.setDE49("MMK");
request.setInvoiceNumber(payDetail.getInvoiceNo());
request.setCardLabel("MPU");
if(payDetail.getTradeAnswerCode().equals("000") || payDetail.getTradeAnswerCode().equals("00") ) {
request.setDescription("success");
request.setDE39("A");
} else {
request.setDescription(BaseErrorCode.getErrorMessage(payDetail.getTradeAnswerCode()));
request.setDE39("E");
}
}
request.setDE41(terminalId);
request.setDE42(merchantId);
request.setSerial(serialNum);
request.setAppId(packageName);
return request;
}
public String convertTransactionType(int transactionType) { public String convertTransactionType(int transactionType) {
if(transactionType == TransactionsType.SALE.value) { if(transactionType == TransactionsType.SALE.value) {
return "S"; return "S";

View File

@ -11,6 +11,7 @@ import com.utsmyanmar.baselib.network.model.sirius.SiriusMerchant;
import com.utsmyanmar.baselib.network.model.sirius.SiriusProperty; import com.utsmyanmar.baselib.network.model.sirius.SiriusProperty;
import com.utsmyanmar.baselib.network.model.sirius.SiriusResponse; import com.utsmyanmar.baselib.network.model.sirius.SiriusResponse;
import com.utsmyanmar.baselib.network.model.sirius.SiriusTerminal; import com.utsmyanmar.baselib.network.model.sirius.SiriusTerminal;
import com.utsmyanmar.baselib.util.EReceiptHelper;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation; import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsSettings; import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsSettings;
import com.utsmyanmar.paylibs.utils.enums.CurrencyType; import com.utsmyanmar.paylibs.utils.enums.CurrencyType;
@ -34,6 +35,9 @@ public class TMSSetupsImpl implements TMSSetups{
private static final String JCB = "JCB"; private static final String JCB = "JCB";
private static final String VISA = "VISA"; private static final String VISA = "VISA";
private static final String MASTERCARD = "MASTERCARD"; private static final String MASTERCARD = "MASTERCARD";
private static final String E_RECEIPT_SECRET = com.utsmyanmar.baselib.BuildConfig.ERECEIPT_SECRET;
String timestamp = String.valueOf(System.currentTimeMillis());
String signature = generateSignature(E_RECEIPT_SECRET, timestamp);
private CurrencyType currencyTextToCurrencyType(String currencyTxt) { private CurrencyType currencyTextToCurrencyType(String currencyTxt) {
@ -630,7 +634,9 @@ public class TMSSetupsImpl implements TMSSetups{
// String url = tmsAddress+"/file/download?filePath="+data; // String url = tmsAddress+"/file/download?filePath="+data;
String url = tmsAddress+"/api/v1/file/download?filePath="+data; //for local String url = tmsAddress+"/api/v1/file/download?filePath="+data; //for local
DownloadUtil.downloadCertificateRx(url, "certificate_file", path -> {
DownloadUtil.downloadCertificateRx(url, "certificate_file", timestamp, signature, path -> {
if(path != null){ if(path != null){
SystemParamsOperation.getInstance().setCertFilePath(path); SystemParamsOperation.getInstance().setCertFilePath(path);
LogUtil.d(TAG, "Cert file path saved in SystemParams => " + path); LogUtil.d(TAG, "Cert file path saved in SystemParams => " + path);
@ -651,7 +657,7 @@ public class TMSSetupsImpl implements TMSSetups{
} }
// String url = tmsAddress+"/file/download?filePath="+data; // String url = tmsAddress+"/file/download?filePath="+data;
String url = tmsAddress+"/api/v1/file/download?filePath="+data; //for local String url = tmsAddress+"/api/v1/file/download?filePath="+data; //for local
DownloadUtil.downloadCertificateRx(url, "certificate_client", path -> { DownloadUtil.downloadCertificateRx(url, "certificate_client" , timestamp, signature, path -> {
if(path != null){ if(path != null){
SystemParamsOperation.getInstance().setCertClientFilePath(path); SystemParamsOperation.getInstance().setCertClientFilePath(path);
LogUtil.d(TAG, "Cert client file path saved in SystemParams => " + path); LogUtil.d(TAG, "Cert client file path saved in SystemParams => " + path);
@ -668,6 +674,12 @@ public class TMSSetupsImpl implements TMSSetups{
SystemParamsOperation.getInstance().setCarouselUrls(convertToString(imgUrls)); SystemParamsOperation.getInstance().setCarouselUrls(convertToString(imgUrls));
} }
private static String generateSignature(String apiSecret, String timestamp) {
String bodyString = "";
String dataToHash = bodyString + apiSecret + timestamp;
return EReceiptHelper.sha256(dataToHash);
}
private String convertToString(ArrayList<String> list) { private String convertToString(ArrayList<String> list) {

View File

@ -442,6 +442,8 @@ public class KPayRefund {
} }
} }
public static class CertificateDownloadRequest{
}
} }

View File

@ -225,6 +225,16 @@ public class PrintUtils {
double amounts = Double.parseDouble(scaled.toString()); double amounts = Double.parseDouble(scaled.toString());
return formatter.format(amounts); 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) { public String getSeparatorOnlyNumberFormat(long amount) {
if (amount == 0) return "0"; if (amount == 0) return "0";

View File

@ -494,6 +494,7 @@ public abstract class BaseXPrint {
String MMK = "MMK"; String MMK = "MMK";
SettleData settleData = payDetail.getSettleDataObj(); 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(); 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()); 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 { } 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, AlignEnum.LEFT,false);
// printer.printColumnsString(new String[]{"", "COUNT", "TOTAL"}, new int[]{2,1, 1}, new int[]{ 2,1, 2}, innerResultCallback); printer.appendPrnStr("COUNT", "TOTAL", fontNormal, false);
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.printColumnsString(new String[]{"", "COUNT", "TOTAL"}, new int[]{2,1, 1}, new int[]{ 2,1, 2}, innerResultCallback); // printer.printColumnsString(new String[]{"", "COUNT", "TOTAL"}, new int[]{2,1, 1}, new int[]{ 2,1, 2}, innerResultCallback);
// emptyLine(1); // emptyLine(1);
if (settleData.getSaleCount() > 0) if (settleData.getSaleCount() > 0)
@ -559,15 +531,56 @@ public abstract class BaseXPrint {
printColumnString("PREAUTH COMP", settleData.getPreAuthCompCount(), settleData.getPreAuthCompAmount(), false); printColumnString("PREAUTH COMP", settleData.getPreAuthCompCount(), settleData.getPreAuthCompAmount(), false);
if (settleData.getPreAuthCompVoidCount() > 0) if (settleData.getPreAuthCompVoidCount() > 0)
printColumnString("VOID PREAUTH COMPLETE", settleData.getPreAuthCompVoidCount(), settleData.getPreAuthCompVoidAmount(), true); 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); // printColumnString("QR PAY", settleData.getWavePayCount(), settleData.getWavePayAmount(), false);
if (settleData.getWaveRefundCount() > 0) printer.appendPrnStr( "QR PAY " + countStringFormat(settleData.getWavePayCount()) + " " + "MMK" , PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getWavePayAmount(), isQrDecimalEnabled) , fontNormal, false);
printColumnString("QR REFUND", settleData.getWaveRefundCount(), settleData.getWaveRefundAmount(), true); }
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(); 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("\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);
// printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false);
} }
@ -649,13 +662,15 @@ public abstract class BaseXPrint {
if (hostType == HostType.MPU || hostType == HostType.VISA_MASTER) { if (hostType == HostType.MPU || hostType == HostType.VISA_MASTER) {
print2ColumnsString("CARD NAME", "CARD NUMBER"); print2ColumnsString("CARD NAME", "CARD NUMBER");
print2ColumnsString("EXP DATE", "TRACE NO"); print2ColumnsString("EXP DATE", "TRACE NO");
print2ColumnsString("TRANSACTION", "AMOUNT"); print2ColumnsString("TRANSACTION", "");
print2ColumnsString("AMOUNT", "");
print2ColumnsString("REF NUM", ""); print2ColumnsString("REF NUM", "");
} else if (hostType == HostType.QR) { } else if (hostType == HostType.QR) {
print2ColumnsString("PAYMENT NAME", ""); print2ColumnsString("PAYMENT NAME", "");
print2ColumnsString("EXP DATE", ""); print2ColumnsString("EXP DATE", "");
print2ColumnsString("TRANSACTION", "TRACE NO"); print2ColumnsString("TRANSACTION", "TRACE NO");
print2ColumnsString("TRXN ID", "AMOUNT"); print2ColumnsString("TRXN ID", "");
print2ColumnsString("AMOUNT", "");
} }
@ -666,25 +681,27 @@ public abstract class BaseXPrint {
for (PayDetail pay : lists) { for (PayDetail pay : lists) {
boolean isNeedMinusSign = pay.getTransactionType() == TransactionsType.VOID.value || pay.getTransactionType() == TransactionsType.REFUND.value || pay.getTransactionType() == TransactionsType.MMQR_REFUND.value; 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) { if (hostType == HostType.MPU || hostType == HostType.VISA_MASTER) {
print2ColumnsString(pay.getAccountType(), PrintUtils.getInstance().maskCardNumberPciDss(pay.getCardNo())); print2ColumnsString(pay.getAccountType(), PrintUtils.getInstance().maskCardNumberPciDss(pay.getCardNo()));
print2ColumnsString("**/**", pay.getVoucherNo()); 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(), ""); print2ColumnsString(pay.getReferNo(), "");
} else if (hostType == HostType.QR) { } else if (hostType == HostType.QR) {
if (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value) { if (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
print2ColumnsString("QR PAYMENT", ""); print2ColumnsString("QR PAYMENT", "");
} else { } else {
print2ColumnsString(pay.getCustomerMobile().toUpperCase(), ""); print2ColumnsString(pay.getCustomerMobile(), "");
} }
print2ColumnsString("**/**", ""); print2ColumnsString("**/**", "");
print2ColumnsString(pay.getTransType().replace("_", " "), pay.getVoucherNo()); print2ColumnsString(pay.getTransType().replace("_", " "), pay.getVoucherNo());
if (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value) { 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)", "");
print2ColumnsString(isNeedMinusSign ? "-" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount(), isDecimalEnabled) : "" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount(), isDecimalEnabled), "");
} else { } 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 +716,20 @@ public abstract class BaseXPrint {
} }
if (hostType == HostType.MPU || hostType == HostType.VISA_MASTER) { if (hostType == HostType.MPU || hostType == HostType.VISA_MASTER) {
boolean isDecimalEnabled = SystemParamsOperation.getInstance().getDecimalEnable();
print2ColumnsString("MPU", ""); print2ColumnsString("MPU", "");
print2ColumnsString("CARD TYPE", ""); print2ColumnsString("CARD TYPE", "");
print3ColumnsString("", "COUNT", "AMT"); print3ColumnsString("", "COUNT", "AMT");
emptyLine(1); 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) { } else if (hostType == HostType.QR) {
boolean isDecimalEnabled = SystemParamsOperation.getInstance().isQrDecimalEnable();
print2ColumnsString("PAYMENT", ""); print2ColumnsString("PAYMENT", "");
print3ColumnsString("TYPE", "COUNT", "AMT"); print3ColumnsString("TYPE", "COUNT", "AMT");
emptyLine(1); 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); emptyLine(2);
} }
protected void printQRSettlementTransDetail(List<PayDetail> lists) { protected void printQRSettlementTransDetail(List<PayDetail> lists) {
@ -723,10 +739,15 @@ public abstract class BaseXPrint {
long refundTotal = 0; long refundTotal = 0;
for (PayDetail pay : lists) { 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("Trans Id: " + pay.getQrTransId());
printString("Status : " + pay.getTC()); 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())); printString("Amount : " + "MMK " + PrintUtils.getInstance().getSeparatorOnlyNumberFormat(pay.getAmount()));
if (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value) { if (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
@ -806,9 +827,7 @@ public abstract class BaseXPrint {
emptyLine(0); emptyLine(0);
// printer.appendPrnStr("I AGREE TO PAY THE ABOVE TOTAL AMOUNT", fontSmall, AlignEnum.CENTER,false); // printer.appendPrnStr("I AGREE TO PAY THE ABOVE TOTAL AMOUNT", fontSmall, AlignEnum.CENTER,false);
if (isQR) { if (!isQR) {
// printer.appendPrnStr("ACCORDING TO THE ISSUER AGREEMENT", fontSmall, AlignEnum.CENTER,false);
} else {
printer.appendPrnStr("I AGREE TO PAY THE ABOVE TOTAL AMOUNT", 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); printer.appendPrnStr("ACCORDING TO THE CARD ISSUER AGREEMENT", fontSmall, AlignEnum.CENTER,false);
} }
@ -818,7 +837,7 @@ public abstract class BaseXPrint {
} else { } 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(finalVersion, fontSmall, AlignEnum.CENTER,false);
printer.appendPrnStr(receiptFooter, fontSmall, AlignEnum.CENTER,false); printer.appendPrnStr(receiptFooter, fontSmall, AlignEnum.CENTER,false);
@ -885,11 +904,11 @@ public abstract class BaseXPrint {
if(TextUtils.equals(terminalName, "") || terminalName == null){ if(TextUtils.equals(terminalName, "") || terminalName == null){
terminalName = "Terminal Name"; terminalName = "Terminal Name";
} }
emptyLine(1);
printer.appendPrnStr(receiptHeader, fontNormal, AlignEnum.CENTER,false); // printer.appendPrnStr(receiptHeader, fontNormal, AlignEnum.CENTER,false);
printer.appendPrnStr(terminalName, fontNormal, AlignEnum.CENTER, false);
printer.appendPrnStr(merchantAddress, fontNormal, AlignEnum.CENTER,false); printer.appendPrnStr(merchantAddress, fontNormal, AlignEnum.CENTER,false);
printer.appendPrnStr(merchantAddress2, 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); // printer.appendPrnStr(merchantPhoneNo, fontNormal, AlignEnum.CENTER,false);
// emptyLine(1); // emptyLine(1);
// dashBreak(); // dashBreak();
@ -982,6 +1001,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() { protected InnerResultCallback innerResultCallback = new InnerResultCallback() {
@Override @Override
public void onRunResult(boolean isSuccess) throws RemoteException { public void onRunResult(boolean isSuccess) throws RemoteException {

View File

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

View File

@ -231,7 +231,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
setHeight(0x12); setHeight(0x12);
printLogo(); printLogo();
printMerchantHeader(); printMerchantHeader();
printTransHeader(payDetail); printTransHeader(payDetail, hostType);
printTransDetailReport(lists,hostType); printTransDetailReport(lists,hostType);
// emptyLine(1); // emptyLine(1);
@ -311,7 +311,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
// payDetail.getCustomerMobile() // as channel type // payDetail.getCustomerMobile() // as channel type
if(payDetail.getTransactionType() == TransactionsType.MMQR.value && payDetail.getQrTransStatus() == 1 ) { 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("TRXN REF ",": "+ payDetail.getReferNo());
if(payDetail.getQrReferNo() != null && !payDetail.getQrReferNo().isEmpty()) { if(payDetail.getQrReferNo() != null && !payDetail.getQrReferNo().isEmpty()) {
print2ColumnsStringNoSpace("MMQR REF ",": "+ payDetail.getQrReferNo()); print2ColumnsStringNoSpace("MMQR REF ",": "+ payDetail.getQrReferNo());
@ -325,7 +325,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
print2ColumnsStringNoSpace("STATUS ",":"+ PrintUtils.getInstance().getQrTransStatus(payDetail.getQrTransStatus())); print2ColumnsStringNoSpace("STATUS ",":"+ PrintUtils.getInstance().getQrTransStatus(payDetail.getQrTransStatus()));
} else if(payDetail.getTransactionType() == TransactionsType.MMQR.value && payDetail.getQrTransStatus() == -1) { } 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("TRXN REF ",":"+ payDetail.getReferNo());
print2ColumnsStringNoSpace("TXN TIME ",":"+ (payDetail.getOriginalTransDate() == null || payDetail.getOriginalTransDate().isEmpty() ? POSUtil.getInstance().getCurrentDateTimeForQR(): payDetail.getOriginalTransDate())); 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) { if (payDetail.getQrTransStatus() == 1) {
boolean isNeedMinusSign = payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value; boolean isNeedMinusSign = payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value;
boolean isQrDecimalEnable = SystemParamsOperation.getInstance().isQrDecimalEnable();
lineBreak(); 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(); lineBreak();
// if(payDetail.getTransactionType() == TransactionsType.MMQR.value) { // if(payDetail.getTransactionType() == TransactionsType.MMQR.value) {
@ -413,15 +415,32 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
printTransDetailSummary(payDetail); printTransDetailSummary(payDetail);
// printTransFooterSummary(); // printTransFooterSummary();
emptyLine(2); // emptyLine(2);
startPrintNex(); startPrintNex();
} catch (RemoteException e) { } catch (RemoteException e) {
e.printStackTrace(); 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 @Override
public void printTerminalConfig(PrintXStatus printXStatus) { public void printTerminalConfig(PrintXStatus printXStatus) {

View File

@ -55,6 +55,10 @@ public class PrintXReceipt {
printX.printDetailReport(payDetail,lists,hostType,printXStatus); 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){ public void printTerminalHostConfig(PrintXStatus printXStatus){
printX.printTerminalConfig(printXStatus); printX.printTerminalConfig(printXStatus);
} }

View File

@ -281,7 +281,7 @@ public class POSUtil {
if(payDetail != null) { if(payDetail != null) {
if(payDetail.getTransactionType() == TransactionsType.MMQR.value) { if(payDetail.getTransactionType() == TransactionsType.MMQR.value) {
return payDetail.getCustomerMobile().toUpperCase(); return payDetail.getCustomerMobile();
} else if(payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value) { } else if(payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
return "QR PAYMENT"; return "QR PAYMENT";
} else { } else {
@ -555,7 +555,7 @@ public class POSUtil {
public String formatDisplayDate(String input){ 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()); SimpleDateFormat outputFormat = new SimpleDateFormat("dd MMM yyyy", Locale.getDefault());
try { try {