Compare commits
3 Commits
4ffdc1f679
...
1e29fd9fab
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1e29fd9fab | ||
|
|
0289013a58 | ||
|
|
2dd686d513 |
@ -345,8 +345,12 @@ public class ProcessingFragment extends DataBindingFragment {
|
||||
handleAfterTransaction();
|
||||
break;
|
||||
case SUCCESS:
|
||||
sharedViewModel.pushReceipt(buildEReceiptCardReceipt(payDetail, true, BaseErrorCode.getCode(payDetail.getTradeAnswerCode())));
|
||||
handleAfterTransaction();
|
||||
if(requiresSignature()){
|
||||
handleAfterTransaction();
|
||||
}else{
|
||||
sharedViewModel.pushReceipt(buildEReceiptCardReceipt(payDetail, true, BaseErrorCode.getCode(payDetail.getTradeAnswerCode())));
|
||||
handleAfterTransaction();
|
||||
}
|
||||
break;
|
||||
case OFFLINE_SUCCESS:
|
||||
if(SystemParamsOperation.getInstance().getDemoStatus()) {
|
||||
|
||||
@ -9,6 +9,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.github.gcacace.signaturepad.views.SignaturePad;
|
||||
import com.utsmm.kbz.util.helper.EReceiptHelper;
|
||||
import com.utsmyanmar.baselib.fragment.DataBindingFragment;
|
||||
import com.utsmyanmar.baselib.util.DataBindingConfig;
|
||||
import com.utsmm.kbz.BR;
|
||||
@ -19,6 +20,7 @@ import com.utsmm.kbz.ui.core_viewmodel.SharedViewModel;
|
||||
import com.utsmyanmar.paylibs.model.PayDetail;
|
||||
import com.utsmyanmar.paylibs.print.printx.PrintX;
|
||||
import com.utsmyanmar.paylibs.print.printx.PrintXReceipt;
|
||||
import com.utsmyanmar.paylibs.system.BaseErrorCode;
|
||||
import com.utsmyanmar.paylibs.utils.LogUtil;
|
||||
import com.utsmyanmar.paylibs.utils.print_utils.BitmapUtils;
|
||||
|
||||
@ -44,8 +46,8 @@ public class SignatureFragment extends DataBindingFragment {
|
||||
|
||||
@Override
|
||||
protected DataBindingConfig getDataBindingConfig() {
|
||||
return new DataBindingConfig(R.layout.fragment_signature_view, BR.vm,sharedViewModel)
|
||||
.addBindingParam(BR.click,new ClickEvent());
|
||||
return new DataBindingConfig(R.layout.fragment_signature_view, BR.vm, sharedViewModel)
|
||||
.addBindingParam(BR.click, new ClickEvent());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -127,7 +129,7 @@ public class SignatureFragment extends DataBindingFragment {
|
||||
setToolBarTitleWithoutBackIcon(getResourceString(R.string.signature_title));
|
||||
}
|
||||
|
||||
private void callNextScreen(){
|
||||
private void callNextScreen() {
|
||||
routeId = R.id.action_signatureFragment_to_transactionResultFragment;
|
||||
safeNavigateToRouteId();
|
||||
}
|
||||
@ -139,6 +141,14 @@ public class SignatureFragment extends DataBindingFragment {
|
||||
payDetail.setESignBlob(blob);
|
||||
sharedViewModel.payDetail.setValue(payDetail);
|
||||
sharedViewModel.updateESignBlob(payDetail.voucherNo, blob);
|
||||
sharedViewModel.pushReceipt(EReceiptHelper.buildEReceiptCardReceipt(
|
||||
requireContext(),
|
||||
payDetail,
|
||||
true,
|
||||
BaseErrorCode.getCode(payDetail.getTradeAnswerCode()),
|
||||
blob)
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
public class ClickEvent {
|
||||
|
||||
@ -287,7 +287,11 @@ public class EmvTransactionProcessViewModel extends EmvBaseViewModel implements
|
||||
/*Jun 15 2022*/
|
||||
PayDetail payDetailRes = tradeData.getPayDetail();
|
||||
|
||||
payDetailRes.setInvoiceNo(SystemParamsOperation.getInstance().getIncrementInvoiceNum());
|
||||
if (transType.getValue() == TransactionsType.VOID) {
|
||||
payDetailRes.setInvoiceNo(mPayDetail.getInvoiceNo());
|
||||
} else {
|
||||
payDetailRes.setInvoiceNo(SystemParamsOperation.getInstance().getIncrementInvoiceNum());
|
||||
}
|
||||
LogUtil.d(TAG,"Transaction Operation Success: "+payDetailRes.getTradeAnswerCode());
|
||||
LogUtil.d(TAG,"Transaction Type: "+payDetailRes.getTransactionType());
|
||||
|
||||
@ -388,13 +392,16 @@ public class EmvTransactionProcessViewModel extends EmvBaseViewModel implements
|
||||
|
||||
@Override
|
||||
public void startDemoProcess() {
|
||||
SystemParamsOperation.getInstance().getIncrementInvoiceNum();
|
||||
if (transType.getValue() != TransactionsType.VOID) {
|
||||
SystemParamsOperation.getInstance().getIncrementInvoiceNum();
|
||||
}
|
||||
|
||||
PayDetail payDetailRes;
|
||||
|
||||
if (transType.getValue() == TransactionsType.VOID) {
|
||||
|
||||
payDetailRes = DemoUtil.getInstance().builtDemoVoid(mPayDetail);
|
||||
payDetailRes.setInvoiceNo(mPayDetail.getInvoiceNo());
|
||||
processVoidDB(payDetailRes);
|
||||
|
||||
} else if (transType.getValue() == TransactionsType.REFUND) {
|
||||
|
||||
@ -139,7 +139,11 @@ public class TransProcessViewModel extends ViewModel implements ProcessingTransa
|
||||
LogUtil.d(TAG,"Transaction Operation Success: "+payDetailRes.getTradeAnswerCode());
|
||||
if (TextUtils.equals(payDetailRes.getTradeAnswerCode(),RC_APPROVED_V1) || TextUtils.equals(payDetailRes.getTradeAnswerCode(),RC_APPROVED_V2)) {
|
||||
|
||||
payDetailRes.setInvoiceNo(SystemParamsOperation.getInstance().getIncrementInvoiceNum());
|
||||
if (transType.getValue() == TransactionsType.VOID) {
|
||||
payDetailRes.setInvoiceNo(payDetail.getInvoiceNo());
|
||||
} else {
|
||||
payDetailRes.setInvoiceNo(SystemParamsOperation.getInstance().getIncrementInvoiceNum());
|
||||
}
|
||||
|
||||
LogUtil.d(TAG,"MPU Transaction type :"+transType.getValue());
|
||||
|
||||
@ -229,13 +233,16 @@ public class TransProcessViewModel extends ViewModel implements ProcessingTransa
|
||||
|
||||
@Override
|
||||
public void startDemoProcess() {
|
||||
SystemParamsOperation.getInstance().getIncrementInvoiceNum();
|
||||
if (transType.getValue() != TransactionsType.VOID) {
|
||||
SystemParamsOperation.getInstance().getIncrementInvoiceNum();
|
||||
}
|
||||
|
||||
PayDetail payDetailRes;
|
||||
|
||||
if (transType.getValue() == TransactionsType.VOID) {
|
||||
|
||||
payDetailRes = DemoUtil.getInstance().builtDemoVoid(payDetail);
|
||||
payDetailRes.setInvoiceNo(payDetail.getInvoiceNo());
|
||||
processVoidDB(payDetailRes);
|
||||
|
||||
} else if (transType.getValue() == TransactionsType.REFUND) {
|
||||
|
||||
@ -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<List<PayDetail>>() {
|
||||
@Override
|
||||
public void onChanged(List<PayDetail> 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);
|
||||
}
|
||||
|
||||
@ -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<PayDetail> buildCardPayDetailList() {
|
||||
List<PayDetail> 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);
|
||||
|
||||
|
||||
137
app/src/main/java/com/utsmm/kbz/util/helper/EReceiptHelper.java
Normal file
137
app/src/main/java/com/utsmm/kbz/util/helper/EReceiptHelper.java
Normal file
@ -0,0 +1,137 @@
|
||||
package com.utsmm.kbz.util.helper;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Base64;
|
||||
|
||||
import com.utsmm.kbz.util.tms.TMSUtil;
|
||||
import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptCardRequest;
|
||||
import com.utsmyanmar.paylibs.model.PayDetail;
|
||||
import com.utsmyanmar.paylibs.print.PrintUtils;
|
||||
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
|
||||
public class EReceiptHelper {
|
||||
public static EReceiptCardRequest buildEReceiptCardReceipt(Context context, PayDetail payDetail, boolean isSuccess, String reason , byte[] signature){
|
||||
//current timestamp
|
||||
String currentTimestamp = new java.text.SimpleDateFormat(
|
||||
"MMddHHmmss", java.util.Locale.getDefault()
|
||||
).format(new java.util.Date());
|
||||
|
||||
//DeviceInfo
|
||||
String serial = TMSUtil.getInstance().getSerialNumber();
|
||||
String appId = context.getPackageName();
|
||||
|
||||
//TerminalInfo
|
||||
String terminalId = SystemParamsOperation.getInstance().getTerminalId();
|
||||
String merchantId = SystemParamsOperation.getInstance().getMerchantId();
|
||||
|
||||
double realAmount = payDetail.getAmount() / 100.0;
|
||||
DecimalFormat df = new DecimalFormat("0.00");
|
||||
String amount = df.format(realAmount);
|
||||
|
||||
String rawName = PrintUtils.getInstance()
|
||||
.getCardHolderName(payDetail.getCardHolderName());
|
||||
|
||||
String secondLine = PrintUtils.getInstance()
|
||||
.processNameSpaceSecondLine(rawName);
|
||||
|
||||
String firstLine = PrintUtils.getInstance()
|
||||
.processNameSpaceFirstLine(rawName, secondLine);
|
||||
|
||||
|
||||
String cardHolderName = firstLine +
|
||||
(secondLine.isEmpty() ? "" : " " + secondLine);
|
||||
|
||||
EReceiptCardRequest request = new EReceiptCardRequest();
|
||||
request.setDE2(PrintUtils.getInstance().maskCardNumberPciDss(payDetail.getCardNo()));
|
||||
request.setDE3(mapTransactionType(payDetail.getTransactionType()));
|
||||
request.setDE4(amount);
|
||||
request.setDE7(currentTimestamp);
|
||||
request.setDE11(payDetail.getVoucherNo());
|
||||
// request.setDE22(mapTransactionType(payDetail.getTransactionType()));
|
||||
request.setDE22(PrintUtils.getInstance().getEntryType(payDetail.getCardType()));
|
||||
request.setDE37(payDetail.getReferNo());
|
||||
request.setDE38(payDetail.getApprovalCode());
|
||||
request.setDE39(isSuccess ? "A" : "E");
|
||||
request.setDE41(terminalId);
|
||||
request.setDE42(merchantId);
|
||||
request.setDE49(mapCurrency(payDetail.getCurrencyCode()));
|
||||
request.setSerial(serial);
|
||||
request.setInvoiceNumber(payDetail.getInvoiceNo());
|
||||
request.setAppId(appId);
|
||||
request.setDescription(reason);
|
||||
request.setBatchNumber(payDetail.batchNo);
|
||||
request.setDE55(payDetail.getAppLabel());
|
||||
request.setCardLabel(payDetail.getAccountType());
|
||||
request.setDE14(PrintUtils.getInstance().getFormatExpDate(payDetail.getEXPDate()));
|
||||
request.setDE43(formatDE43(cardHolderName));
|
||||
request.setDE48(payDetail.getAID());
|
||||
request.setDE115(signature != null ? Base64.encodeToString(signature, Base64.NO_WRAP) : "");
|
||||
|
||||
return request;
|
||||
}
|
||||
|
||||
public static String mapTransactionType(int type) {
|
||||
switch (type) {
|
||||
case 1: // SALE
|
||||
return "S";
|
||||
|
||||
case 2: // VOID SALE
|
||||
return "V";
|
||||
|
||||
case 4: // REFUND
|
||||
return "R";
|
||||
|
||||
case 5: // PRE-AUTH
|
||||
return "P";
|
||||
|
||||
case 6: // PRE-AUTH VOID
|
||||
return "PV";
|
||||
|
||||
case 7: // PRE-AUTH COMPLETE
|
||||
return "PC";
|
||||
|
||||
case 8: // PRE-AUTH COMPLETE VOID
|
||||
return "PCV";
|
||||
|
||||
case 9: // CASH OUT
|
||||
return "CAV";
|
||||
|
||||
case 18: // TIP ADJUST
|
||||
return "TA";
|
||||
|
||||
case 20: // QR PAYMENT
|
||||
return "QR";
|
||||
|
||||
case 34: // QR REFUND
|
||||
return "QRV";
|
||||
|
||||
default:
|
||||
return "UNK";
|
||||
}
|
||||
}
|
||||
|
||||
private static String mapCurrency(String currency) {
|
||||
if (currency == null) return "MMK";
|
||||
|
||||
switch (currency) {
|
||||
case "104": return "MMK";
|
||||
case "840": return "USD";
|
||||
case "764": return "THB";
|
||||
case "702": return "SGD";
|
||||
case "978": return "EUR";
|
||||
default: return currency; // Already alphabetic? return as-is
|
||||
}
|
||||
}
|
||||
|
||||
private static String formatDE43(String value) {
|
||||
if (value == null) value = "";
|
||||
|
||||
if (value.length() > 40) {
|
||||
return value.substring(0, 40);
|
||||
}
|
||||
|
||||
return String.format("%-40s", value); // right pad with space
|
||||
}
|
||||
}
|
||||
@ -24,7 +24,7 @@ public final class TerminalKeyUtil {
|
||||
|
||||
// private static final byte[] main_key_data = ByteUtil.hexStr2Bytes("B4D74774CC846CAFF6D1AAAC2EB79CFF".toUpperCase()); // KBZ UAT
|
||||
// private static final byte[] main_key_usd_data = ByteUtil.hexStr2Bytes("3f4bcac6cc559ab12bbbc5a51118f3f5".toUpperCase()); // KBZ UAT
|
||||
private static final byte[] main_key_data = ByteUtil.hexStr2Bytes("875f63741753d18811a3449090d1777b".toUpperCase());
|
||||
private static final byte[] main_key_data = ByteUtil.hexStr2Bytes("3F4BCAC6CC559AB12BBBC5A51118F3F5".toUpperCase());
|
||||
// private static final byte[] main_key_data = ByteUtil.hexStr2Bytes("e121249099a677e8b7d4f6a9d49fe8d1".toUpperCase()); // MPU
|
||||
private static final byte[] work_key_data = new byte[16];
|
||||
public static void initNexKey() {
|
||||
|
||||
@ -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,17 +377,18 @@ 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);
|
||||
}
|
||||
|
||||
|
||||
@ -409,9 +403,9 @@ 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());
|
||||
print2ColumnsStringNoSpace("TRACE NUM :", payDetail.getVoucherNo());
|
||||
|
||||
if (payDetail.getCardType() != BaseCardType.MAGNETIC.getValue()) {
|
||||
print2ColumnsStringNoSpace("CARD HOLDER:", firsLineName);
|
||||
@ -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:" + invoiceNo, 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,12 +571,12 @@ 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());
|
||||
print2ColumnsStringNoSpace("TRACE NUM :", payDetail.getVoucherNo());
|
||||
|
||||
if (payDetail.getCardType() != BaseCardType.MAGNETIC.getValue()) {
|
||||
print2ColumnsStringNoSpace("CARD HOLDER:", firsLineName);
|
||||
@ -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,7 +957,7 @@ 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;
|
||||
}
|
||||
|
||||
@ -976,7 +969,7 @@ public abstract class BaseXPrint {
|
||||
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<PayDetail> lists, HostType hostType) {
|
||||
|
||||
// ✅ Summary holder (total + count per currency)
|
||||
@ -1220,7 +1213,7 @@ public abstract class BaseXPrint {
|
||||
: pay.getCustomerMobile()));
|
||||
printString("DATE :" + POSUtil.getInstance().formatDisplayDate(pay.getTransDate()));
|
||||
printString(" " + pay.getTransTime());
|
||||
printString("INV NO :" + pay.getVoucherNo());
|
||||
printString("INV NO :" + pay.getInvoiceNo());
|
||||
|
||||
if (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
|
||||
printString("RRN :" + pay.getReferNo());
|
||||
@ -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,21 +1529,20 @@ 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();
|
||||
emptyLine(4);
|
||||
lineBreak();
|
||||
printer.appendPrnStr("Key Index (" + keyIndex + ")", fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("KSN :" + ksn, fontNormal, AlignEnum.LEFT, false);
|
||||
|
||||
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:" + invoiceNo, fontNormal, AlignEnum.LEFT, false);
|
||||
} else if (payDetail.getTransType().equals(SUMMARY)) {
|
||||
printer.appendPrnStr("HOST :" + HOST_NAME_MPU + "", fontNormal, AlignEnum.LEFT,false);
|
||||
printer.appendPrnStr("HOST :" + HOST_NAME_MPU + "", fontNormal, AlignEnum.LEFT, false);
|
||||
}
|
||||
/* 17 Sept 2024 Yoma requested to changed slip design for QR*/
|
||||
// printer.printColumnsString(new String[]{"MID :" + payDetail.getMerchantNo(), ""}, new int[]{3, 1}, new int[]{0, 2}, innerResultCallback);
|
||||
// printer.printColumnsString(new String[]{"TID :" + payDetail.getTerminalNo(), ""}, new int[]{3, 1}, new int[]{0, 2}, innerResultCallback);
|
||||
if (payDetail.getTransactionType() == TransactionsType.MMQR.value || payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value){
|
||||
printer.appendPrnStr("SHORT CODE :" + payDetail.getMerchantNo(), fontNormal, AlignEnum.LEFT,false);
|
||||
}else{
|
||||
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 (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[]{
|
||||
|
||||
@ -192,7 +192,12 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
|
||||
printLogo();
|
||||
printMerchantHeader();
|
||||
printTransHeader(payDetail);
|
||||
printTransDetailSettlement(payDetail);
|
||||
List<com.utsmyanmar.paylibs.model.CardSettleData> cardSettleDataList = payDetail.getCardSettleData();
|
||||
if (cardSettleDataList != null && !cardSettleDataList.isEmpty()) {
|
||||
printTransDetailSettlement(payDetail, cardSettleDataList);
|
||||
} else {
|
||||
printTransDetailSettlement(payDetail);
|
||||
}
|
||||
// printTransFooterSummary();
|
||||
printTransFooterForSettlement();
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user