Compare commits
No commits in common. "1e29fd9fab677019e677f7954ce430ee932de5e4" and "4ffdc1f67956e68f3834dbced7993c03371f05f0" have entirely different histories.
1e29fd9fab
...
4ffdc1f679
@ -345,12 +345,8 @@ public class ProcessingFragment extends DataBindingFragment {
|
|||||||
handleAfterTransaction();
|
handleAfterTransaction();
|
||||||
break;
|
break;
|
||||||
case SUCCESS:
|
case SUCCESS:
|
||||||
if(requiresSignature()){
|
|
||||||
handleAfterTransaction();
|
|
||||||
}else{
|
|
||||||
sharedViewModel.pushReceipt(buildEReceiptCardReceipt(payDetail, true, BaseErrorCode.getCode(payDetail.getTradeAnswerCode())));
|
sharedViewModel.pushReceipt(buildEReceiptCardReceipt(payDetail, true, BaseErrorCode.getCode(payDetail.getTradeAnswerCode())));
|
||||||
handleAfterTransaction();
|
handleAfterTransaction();
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case OFFLINE_SUCCESS:
|
case OFFLINE_SUCCESS:
|
||||||
if(SystemParamsOperation.getInstance().getDemoStatus()) {
|
if(SystemParamsOperation.getInstance().getDemoStatus()) {
|
||||||
|
|||||||
@ -9,7 +9,6 @@ import androidx.annotation.NonNull;
|
|||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import com.github.gcacace.signaturepad.views.SignaturePad;
|
import com.github.gcacace.signaturepad.views.SignaturePad;
|
||||||
import com.utsmm.kbz.util.helper.EReceiptHelper;
|
|
||||||
import com.utsmyanmar.baselib.fragment.DataBindingFragment;
|
import com.utsmyanmar.baselib.fragment.DataBindingFragment;
|
||||||
import com.utsmyanmar.baselib.util.DataBindingConfig;
|
import com.utsmyanmar.baselib.util.DataBindingConfig;
|
||||||
import com.utsmm.kbz.BR;
|
import com.utsmm.kbz.BR;
|
||||||
@ -20,7 +19,6 @@ import com.utsmm.kbz.ui.core_viewmodel.SharedViewModel;
|
|||||||
import com.utsmyanmar.paylibs.model.PayDetail;
|
import com.utsmyanmar.paylibs.model.PayDetail;
|
||||||
import com.utsmyanmar.paylibs.print.printx.PrintX;
|
import com.utsmyanmar.paylibs.print.printx.PrintX;
|
||||||
import com.utsmyanmar.paylibs.print.printx.PrintXReceipt;
|
import com.utsmyanmar.paylibs.print.printx.PrintXReceipt;
|
||||||
import com.utsmyanmar.paylibs.system.BaseErrorCode;
|
|
||||||
import com.utsmyanmar.paylibs.utils.LogUtil;
|
import com.utsmyanmar.paylibs.utils.LogUtil;
|
||||||
import com.utsmyanmar.paylibs.utils.print_utils.BitmapUtils;
|
import com.utsmyanmar.paylibs.utils.print_utils.BitmapUtils;
|
||||||
|
|
||||||
@ -141,14 +139,6 @@ public class SignatureFragment extends DataBindingFragment {
|
|||||||
payDetail.setESignBlob(blob);
|
payDetail.setESignBlob(blob);
|
||||||
sharedViewModel.payDetail.setValue(payDetail);
|
sharedViewModel.payDetail.setValue(payDetail);
|
||||||
sharedViewModel.updateESignBlob(payDetail.voucherNo, blob);
|
sharedViewModel.updateESignBlob(payDetail.voucherNo, blob);
|
||||||
sharedViewModel.pushReceipt(EReceiptHelper.buildEReceiptCardReceipt(
|
|
||||||
requireContext(),
|
|
||||||
payDetail,
|
|
||||||
true,
|
|
||||||
BaseErrorCode.getCode(payDetail.getTradeAnswerCode()),
|
|
||||||
blob)
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ClickEvent {
|
public class ClickEvent {
|
||||||
|
|||||||
@ -287,11 +287,7 @@ public class EmvTransactionProcessViewModel extends EmvBaseViewModel implements
|
|||||||
/*Jun 15 2022*/
|
/*Jun 15 2022*/
|
||||||
PayDetail payDetailRes = tradeData.getPayDetail();
|
PayDetail payDetailRes = tradeData.getPayDetail();
|
||||||
|
|
||||||
if (transType.getValue() == TransactionsType.VOID) {
|
|
||||||
payDetailRes.setInvoiceNo(mPayDetail.getInvoiceNo());
|
|
||||||
} else {
|
|
||||||
payDetailRes.setInvoiceNo(SystemParamsOperation.getInstance().getIncrementInvoiceNum());
|
payDetailRes.setInvoiceNo(SystemParamsOperation.getInstance().getIncrementInvoiceNum());
|
||||||
}
|
|
||||||
LogUtil.d(TAG,"Transaction Operation Success: "+payDetailRes.getTradeAnswerCode());
|
LogUtil.d(TAG,"Transaction Operation Success: "+payDetailRes.getTradeAnswerCode());
|
||||||
LogUtil.d(TAG,"Transaction Type: "+payDetailRes.getTransactionType());
|
LogUtil.d(TAG,"Transaction Type: "+payDetailRes.getTransactionType());
|
||||||
|
|
||||||
@ -392,16 +388,13 @@ public class EmvTransactionProcessViewModel extends EmvBaseViewModel implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startDemoProcess() {
|
public void startDemoProcess() {
|
||||||
if (transType.getValue() != TransactionsType.VOID) {
|
|
||||||
SystemParamsOperation.getInstance().getIncrementInvoiceNum();
|
SystemParamsOperation.getInstance().getIncrementInvoiceNum();
|
||||||
}
|
|
||||||
|
|
||||||
PayDetail payDetailRes;
|
PayDetail payDetailRes;
|
||||||
|
|
||||||
if (transType.getValue() == TransactionsType.VOID) {
|
if (transType.getValue() == TransactionsType.VOID) {
|
||||||
|
|
||||||
payDetailRes = DemoUtil.getInstance().builtDemoVoid(mPayDetail);
|
payDetailRes = DemoUtil.getInstance().builtDemoVoid(mPayDetail);
|
||||||
payDetailRes.setInvoiceNo(mPayDetail.getInvoiceNo());
|
|
||||||
processVoidDB(payDetailRes);
|
processVoidDB(payDetailRes);
|
||||||
|
|
||||||
} else if (transType.getValue() == TransactionsType.REFUND) {
|
} else if (transType.getValue() == TransactionsType.REFUND) {
|
||||||
|
|||||||
@ -139,11 +139,7 @@ public class TransProcessViewModel extends ViewModel implements ProcessingTransa
|
|||||||
LogUtil.d(TAG,"Transaction Operation Success: "+payDetailRes.getTradeAnswerCode());
|
LogUtil.d(TAG,"Transaction Operation Success: "+payDetailRes.getTradeAnswerCode());
|
||||||
if (TextUtils.equals(payDetailRes.getTradeAnswerCode(),RC_APPROVED_V1) || TextUtils.equals(payDetailRes.getTradeAnswerCode(),RC_APPROVED_V2)) {
|
if (TextUtils.equals(payDetailRes.getTradeAnswerCode(),RC_APPROVED_V1) || TextUtils.equals(payDetailRes.getTradeAnswerCode(),RC_APPROVED_V2)) {
|
||||||
|
|
||||||
if (transType.getValue() == TransactionsType.VOID) {
|
|
||||||
payDetailRes.setInvoiceNo(payDetail.getInvoiceNo());
|
|
||||||
} else {
|
|
||||||
payDetailRes.setInvoiceNo(SystemParamsOperation.getInstance().getIncrementInvoiceNum());
|
payDetailRes.setInvoiceNo(SystemParamsOperation.getInstance().getIncrementInvoiceNum());
|
||||||
}
|
|
||||||
|
|
||||||
LogUtil.d(TAG,"MPU Transaction type :"+transType.getValue());
|
LogUtil.d(TAG,"MPU Transaction type :"+transType.getValue());
|
||||||
|
|
||||||
@ -233,16 +229,13 @@ public class TransProcessViewModel extends ViewModel implements ProcessingTransa
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startDemoProcess() {
|
public void startDemoProcess() {
|
||||||
if (transType.getValue() != TransactionsType.VOID) {
|
|
||||||
SystemParamsOperation.getInstance().getIncrementInvoiceNum();
|
SystemParamsOperation.getInstance().getIncrementInvoiceNum();
|
||||||
}
|
|
||||||
|
|
||||||
PayDetail payDetailRes;
|
PayDetail payDetailRes;
|
||||||
|
|
||||||
if (transType.getValue() == TransactionsType.VOID) {
|
if (transType.getValue() == TransactionsType.VOID) {
|
||||||
|
|
||||||
payDetailRes = DemoUtil.getInstance().builtDemoVoid(payDetail);
|
payDetailRes = DemoUtil.getInstance().builtDemoVoid(payDetail);
|
||||||
payDetailRes.setInvoiceNo(payDetail.getInvoiceNo());
|
|
||||||
processVoidDB(payDetailRes);
|
processVoidDB(payDetailRes);
|
||||||
|
|
||||||
} else if (transType.getValue() == TransactionsType.REFUND) {
|
} else if (transType.getValue() == TransactionsType.REFUND) {
|
||||||
|
|||||||
@ -54,12 +54,10 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
|
|||||||
int preCount = 0;
|
int preCount = 0;
|
||||||
int refundCount = 0;
|
int refundCount = 0;
|
||||||
int caCount = 0;
|
int caCount = 0;
|
||||||
int voidCount = 0;
|
|
||||||
long saleAmount = 0;
|
long saleAmount = 0;
|
||||||
long preAmount = 0;
|
long preAmount = 0;
|
||||||
long refundAmount = 0;
|
long refundAmount = 0;
|
||||||
long caAmount = 0;
|
long caAmount = 0;
|
||||||
long voidAmount = 0;
|
|
||||||
|
|
||||||
private final CurrencyBucket mmkBucket = new CurrencyBucket();
|
private final CurrencyBucket mmkBucket = new CurrencyBucket();
|
||||||
private final CurrencyBucket usdBucket = new CurrencyBucket();
|
private final CurrencyBucket usdBucket = new CurrencyBucket();
|
||||||
@ -281,20 +279,8 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
|
|||||||
settlementViewModel.getDeleteTrans(SystemParamsOperation.getInstance().getCurrentBatchNum()).observe(getViewLifecycleOwner(), new Observer<List<PayDetail>>() {
|
settlementViewModel.getDeleteTrans(SystemParamsOperation.getInstance().getCurrentBatchNum()).observe(getViewLifecycleOwner(), new Observer<List<PayDetail>>() {
|
||||||
@Override
|
@Override
|
||||||
public void onChanged(List<PayDetail> payDetails) {
|
public void onChanged(List<PayDetail> payDetails) {
|
||||||
settlementViewModel.deleteTrans.clear();
|
|
||||||
voidCount = 0;
|
|
||||||
voidAmount = 0L;
|
|
||||||
if(payDetails != null) {
|
if(payDetails != null) {
|
||||||
settlementViewModel.deleteTrans.addAll(payDetails);
|
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -305,12 +291,10 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
|
|||||||
preCount = 0;
|
preCount = 0;
|
||||||
refundCount = 0;
|
refundCount = 0;
|
||||||
caCount = 0;
|
caCount = 0;
|
||||||
voidCount = 0;
|
|
||||||
saleAmount = 0L;
|
saleAmount = 0L;
|
||||||
preAmount = 0L;
|
preAmount = 0L;
|
||||||
refundAmount = 0L;
|
refundAmount = 0L;
|
||||||
caAmount = 0L;
|
caAmount = 0L;
|
||||||
voidAmount = 0L;
|
|
||||||
resetCurrencyBucket(mmkBucket);
|
resetCurrencyBucket(mmkBucket);
|
||||||
resetCurrencyBucket(usdBucket);
|
resetCurrencyBucket(usdBucket);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -271,12 +271,7 @@ public class SettlementViewModel extends ViewModel {
|
|||||||
this.isLast = isLast;
|
this.isLast = isLast;
|
||||||
SystemParamsOperation.getInstance().getIncrementBatchNo();
|
SystemParamsOperation.getInstance().getIncrementBatchNo();
|
||||||
|
|
||||||
boolean bucketIsEmpty = currencyBucket.saleCount == 0
|
if(SystemParamsOperation.getInstance().getDemoStatus()) {
|
||||||
&& currencyBucket.preCount == 0
|
|
||||||
&& currencyBucket.refundCount == 0
|
|
||||||
&& currencyBucket.caCount == 0;
|
|
||||||
|
|
||||||
if (bucketIsEmpty || SystemParamsOperation.getInstance().getDemoStatus()) {
|
|
||||||
requestDemoProcessSettlement(currencyBucket);
|
requestDemoProcessSettlement(currencyBucket);
|
||||||
} else {
|
} else {
|
||||||
requestOnlineProcessSettlement(currencyBucket);
|
requestOnlineProcessSettlement(currencyBucket);
|
||||||
@ -323,9 +318,7 @@ 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
|
payDetail.setSettleList(currencyBucket.saleCount+ ":" + currencyBucket.saleAmount + "-" + currencyBucket.caCount + ":" + currencyBucket.caAmount + "-" + currencyBucket.refundCount + ":" + currencyBucket.refundAmount + "-" + currencyBucket.preCount + ":" + currencyBucket.preAmount); // for print receipt
|
||||||
/*POS*/
|
/*POS*/
|
||||||
SettleData settleData = new SettleData(currencyBucket.saleCount, currencyBucket.saleAmount, currencyBucket.preCount, currencyBucket.preAmount, currencyBucket.refundCount, currencyBucket.refundAmount, currencyBucket.caCount, currencyBucket.caAmount);
|
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.setSettleDataObj(settleData);
|
||||||
payDetail.setCardSettleData(CardSettleData.convertFromPayDetail(buildCardPayDetailList()));
|
|
||||||
|
|
||||||
long totalAmount = currencyBucket.saleAmount + currencyBucket.preAmount + currencyBucket.refundAmount + currencyBucket.caAmount;
|
long totalAmount = currencyBucket.saleAmount + currencyBucket.preAmount + currencyBucket.refundAmount + currencyBucket.caAmount;
|
||||||
|
|
||||||
@ -416,9 +409,10 @@ 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
|
payDetail.setSettleList(currencyBucket.saleCount+ ":" + currencyBucket.saleAmount + "-" + currencyBucket.caCount + ":" + currencyBucket.caAmount + "-" + currencyBucket.refundCount + ":" + currencyBucket.refundAmount + "-" + currencyBucket.preCount + ":" + currencyBucket.preAmount); // for print receipt
|
||||||
/*POS*/
|
/*POS*/
|
||||||
SettleData settleData = new SettleData(currencyBucket.saleCount, currencyBucket.saleAmount, currencyBucket.preCount, currencyBucket.preAmount, currencyBucket.refundCount, currencyBucket.refundAmount, currencyBucket.caCount, currencyBucket.caAmount);
|
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.setSettleDataObj(settleData);
|
||||||
payDetail.setCardSettleData(CardSettleData.convertFromPayDetail(buildCardPayDetailList()));
|
|
||||||
|
if(payDetails != null)
|
||||||
|
payDetail.setCardSettleData(CardSettleData.convertFromPayDetail(payDetails));
|
||||||
|
|
||||||
if(hostName == HostName.BPC) {
|
if(hostName == HostName.BPC) {
|
||||||
long totalAmount = currencyBucket.saleAmount + currencyBucket.preAmount + currencyBucket.refundAmount + currencyBucket.caAmount;
|
long totalAmount = currencyBucket.saleAmount + currencyBucket.preAmount + currencyBucket.refundAmount + currencyBucket.caAmount;
|
||||||
@ -545,31 +539,6 @@ 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) {
|
private void batchUploadProcess(boolean isLast) {
|
||||||
resultString.postValue(TransactionStatus.ON_BATCH_UPLOAD);
|
resultString.postValue(TransactionStatus.ON_BATCH_UPLOAD);
|
||||||
|
|
||||||
|
|||||||
@ -1,137 +0,0 @@
|
|||||||
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_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_usd_data = ByteUtil.hexStr2Bytes("3f4bcac6cc559ab12bbbc5a51118f3f5".toUpperCase()); // KBZ UAT
|
||||||
private static final byte[] main_key_data = ByteUtil.hexStr2Bytes("3F4BCAC6CC559AB12BBBC5A51118F3F5".toUpperCase());
|
private static final byte[] main_key_data = ByteUtil.hexStr2Bytes("875f63741753d18811a3449090d1777b".toUpperCase());
|
||||||
// private static final byte[] main_key_data = ByteUtil.hexStr2Bytes("e121249099a677e8b7d4f6a9d49fe8d1".toUpperCase()); // MPU
|
// private static final byte[] main_key_data = ByteUtil.hexStr2Bytes("e121249099a677e8b7d4f6a9d49fe8d1".toUpperCase()); // MPU
|
||||||
private static final byte[] work_key_data = new byte[16];
|
private static final byte[] work_key_data = new byte[16];
|
||||||
public static void initNexKey() {
|
public static void initNexKey() {
|
||||||
|
|||||||
@ -255,28 +255,35 @@ public abstract class BaseXPrint {
|
|||||||
|
|
||||||
for (CardSettleData cardSettleData:cardSettleDataList) {
|
for (CardSettleData cardSettleData:cardSettleDataList) {
|
||||||
print2SideStringMargin(cardSettleData.getCardType(),PrintUtils.getInstance().maskCardNumberPciDss(cardSettleData.getCardNum()));
|
print2SideStringMargin(cardSettleData.getCardType(),PrintUtils.getInstance().maskCardNumberPciDss(cardSettleData.getCardNum()));
|
||||||
print2SideStringMargin("INV NO", cardSettleData.getInvoiceNum());
|
print2SideStringMargin("XX/XX",cardSettleData.getInvoiceNum());
|
||||||
String cardCurrency = currencyCodeToText(cardSettleData.getCurrencyCode());
|
print2SideStringMargin(cardSettleData.getTransType(),"MMK "+PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount(), isDecimalEnabled));
|
||||||
print2SideStringMargin(cardSettleData.getTransType(), cardCurrency + " " + PrintUtils.getInstance().getSeparatorNumberFormat(cardSettleData.getAmount(), isDecimalEnabled));
|
|
||||||
print2SideStringMargin(cardSettleData.getApprovalCode(),cardSettleData.getTransDate() + " " + cardSettleData.getTransTime() );
|
print2SideStringMargin(cardSettleData.getApprovalCode(),cardSettleData.getTransDate() + " " + cardSettleData.getTransTime() );
|
||||||
emptyLine(1);
|
emptyLine(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
lineBreak();
|
lineBreak();
|
||||||
SettleData settleData = payDetail.getSettleDataObj();
|
SettleData settleData = payDetail.getSettleDataObj();
|
||||||
long totalAmount = settleData.getSaleAmount() + settleData.getPreAuthCompAmount() + settleData.getCashAdvanceAmount()
|
int totalCount = settleData.getSaleCount() + settleData.getPreAuthCompCount() + settleData.getRefundCount() + settleData.getCashAdvanceCount();
|
||||||
- settleData.getVoidSaleAmount() - settleData.getRefundAmount();
|
long totalAmount = settleData.getSaleAmount() + settleData.getPreAuthCompAmount() + settleData.getCashAdvanceAmount();
|
||||||
|
|
||||||
printer.appendPrnStr("GRAND TOTAL", fontLarge, AlignEnum.LEFT, true);
|
|
||||||
emptyLine(1);
|
|
||||||
print3ColumnsString("TRX TYPE ", "CNT", "AMOUNT");
|
print3ColumnsString("TRX TYPE ", "CNT", "AMOUNT");
|
||||||
print3ColumnsString("SALE ", countStringFormat(settleData.getSaleCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getSaleAmount(), isDecimalEnabled));
|
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));
|
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));
|
print3ColumnsString("REFUND ", countStringFormat(settleData.getRefundCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getRefundAmount(), isDecimalEnabled));
|
||||||
dotBreak();
|
|
||||||
print3ColumnsString("TOTAL ", "", PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isDecimalEnabled));
|
|
||||||
emptyLine(2);
|
emptyLine(2);
|
||||||
|
|
||||||
|
|
||||||
@ -383,7 +390,6 @@ public abstract class BaseXPrint {
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void printTransFooterForSettlement() {
|
protected void printTransFooterForSettlement() {
|
||||||
String receiptFooter = SystemParamsOperation.getInstance().getReceiptFooter();
|
String receiptFooter = SystemParamsOperation.getInstance().getReceiptFooter();
|
||||||
String finalVersion = SystemParamsOperation.getInstance().getFinalVersion();
|
String finalVersion = SystemParamsOperation.getInstance().getFinalVersion();
|
||||||
@ -405,7 +411,7 @@ public abstract class BaseXPrint {
|
|||||||
print2ColumnsStringNoSpace("ENTRY MODE :", PrintUtils.getInstance().getEntryType(payDetail.getCardType()));
|
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("CARD TYPE :", payDetail.getAccountType());
|
||||||
print2ColumnsStringNoSpace("TRACE NUM :", payDetail.getVoucherNo());
|
print2ColumnsStringNoSpace("TRACE NUM :", payDetail.getInvoiceNo());
|
||||||
|
|
||||||
if (payDetail.getCardType() != BaseCardType.MAGNETIC.getValue()) {
|
if (payDetail.getCardType() != BaseCardType.MAGNETIC.getValue()) {
|
||||||
print2ColumnsStringNoSpace("CARD HOLDER:", firsLineName);
|
print2ColumnsStringNoSpace("CARD HOLDER:", firsLineName);
|
||||||
@ -430,6 +436,7 @@ public abstract class BaseXPrint {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
boolean isDecimalEnabled = SystemParamsOperation.getInstance().getDecimalEnable();
|
boolean isDecimalEnabled = SystemParamsOperation.getInstance().getDecimalEnable();
|
||||||
if (payDetail.getTradeAnswerCode().equals("00") || payDetail.getTradeAnswerCode().equals("000")) {
|
if (payDetail.getTradeAnswerCode().equals("00") || payDetail.getTradeAnswerCode().equals("000")) {
|
||||||
if (payDetail.getTransactionType() == TransactionType.CASH_ADVANCE) {
|
if (payDetail.getTransactionType() == TransactionType.CASH_ADVANCE) {
|
||||||
@ -527,7 +534,7 @@ public abstract class BaseXPrint {
|
|||||||
printer.appendPrnStr("BTH NO:" + batchNum, fontNormal, AlignEnum.LEFT,false);
|
printer.appendPrnStr("BTH NO:" + batchNum, fontNormal, AlignEnum.LEFT,false);
|
||||||
} else {
|
} else {
|
||||||
// printer.printColumnsString(new String[]{"BATCH NO :" + batchNum, "INV NO: " + invoiceNo}, new int[]{2, 2}, new int[]{0, 2}, null);
|
// 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:" + invoiceNo, fontNormal, AlignEnum.LEFT, false);
|
printer.appendPrnStr("BTH NO:" + batchNum + " INV NO:" + traceNo, fontNormal, AlignEnum.LEFT,false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false);
|
// printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false);
|
||||||
@ -576,7 +583,7 @@ public abstract class BaseXPrint {
|
|||||||
print2ColumnsStringNoSpace("ENTRY MODE:", PrintUtils.getInstance().getEntryType(payDetail.getCardType()));
|
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("CARD TYPE :", payDetail.getAccountType());
|
||||||
print2ColumnsStringNoSpace("TRACE NUM :", payDetail.getVoucherNo());
|
print2ColumnsStringNoSpace("TRACE NUM :", payDetail.getInvoiceNo());
|
||||||
|
|
||||||
if (payDetail.getCardType() != BaseCardType.MAGNETIC.getValue()) {
|
if (payDetail.getCardType() != BaseCardType.MAGNETIC.getValue()) {
|
||||||
print2ColumnsStringNoSpace("CARD HOLDER:", firsLineName);
|
print2ColumnsStringNoSpace("CARD HOLDER:", firsLineName);
|
||||||
@ -1137,6 +1144,7 @@ public abstract class BaseXPrint {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected void print3ColumnsString(String first, String second, String third) {
|
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);
|
printer.appendPrnStr(first + " " + second + " " + third, fontNormal, AlignEnum.LEFT,false);
|
||||||
@ -1160,7 +1168,6 @@ public abstract class BaseXPrint {
|
|||||||
long total = 0;
|
long total = 0;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void printTransDetailReport(List<PayDetail> lists, HostType hostType) {
|
protected void printTransDetailReport(List<PayDetail> lists, HostType hostType) {
|
||||||
|
|
||||||
// ✅ Summary holder (total + count per currency)
|
// ✅ Summary holder (total + count per currency)
|
||||||
@ -1213,7 +1220,7 @@ public abstract class BaseXPrint {
|
|||||||
: pay.getCustomerMobile()));
|
: pay.getCustomerMobile()));
|
||||||
printString("DATE :" + POSUtil.getInstance().formatDisplayDate(pay.getTransDate()));
|
printString("DATE :" + POSUtil.getInstance().formatDisplayDate(pay.getTransDate()));
|
||||||
printString(" " + pay.getTransTime());
|
printString(" " + pay.getTransTime());
|
||||||
printString("INV NO :" + pay.getInvoiceNo());
|
printString("INV NO :" + pay.getVoucherNo());
|
||||||
|
|
||||||
if (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
|
if (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
|
||||||
printString("RRN :" + pay.getReferNo());
|
printString("RRN :" + pay.getReferNo());
|
||||||
@ -1545,6 +1552,7 @@ public abstract class BaseXPrint {
|
|||||||
emptyLine(4);
|
emptyLine(4);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void startPrintNex() {
|
protected void startPrintNex() {
|
||||||
@ -1590,7 +1598,7 @@ public abstract class BaseXPrint {
|
|||||||
if (payDetail.getTransactionType() == TransactionsType.MMQR.value && payDetail.getQrTransStatus() == 1) {
|
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) {
|
} else if (!payDetail.getTransType().equals(SETTLEMENT) && !payDetail.getTransType().equals(SUMMARY) && payDetail.getTransactionType() != TransactionsType.MMQR_REFUND.value && payDetail.getTransactionType() != TransactionsType.MMQR.value) {
|
||||||
printer.appendPrnStr("BTH NO:" + batchNum + " INV NO:" + invoiceNo, fontNormal, AlignEnum.LEFT, false);
|
printer.appendPrnStr("BTH NO:" + batchNum + " INV NO:" + traceNum, fontNormal, AlignEnum.LEFT,false);
|
||||||
} else if (payDetail.getTransType().equals(SUMMARY)) {
|
} 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);
|
||||||
}
|
}
|
||||||
@ -1659,7 +1667,6 @@ public abstract class BaseXPrint {
|
|||||||
|
|
||||||
dotBreak();
|
dotBreak();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void printTransHeader(PayDetail payDetail, HostType hostType) {
|
protected void printTransHeader(PayDetail payDetail, HostType hostType) {
|
||||||
String invoiceNo = payDetail.getInvoiceNo().isEmpty() ? SystemParamsOperation.getInstance().getCurrentInvoiceNum() : payDetail.getInvoiceNo();
|
String invoiceNo = payDetail.getInvoiceNo().isEmpty() ? SystemParamsOperation.getInstance().getCurrentInvoiceNum() : payDetail.getInvoiceNo();
|
||||||
String transType = payDetail.getTransType();
|
String transType = payDetail.getTransType();
|
||||||
|
|||||||
@ -192,12 +192,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
|
|||||||
printLogo();
|
printLogo();
|
||||||
printMerchantHeader();
|
printMerchantHeader();
|
||||||
printTransHeader(payDetail);
|
printTransHeader(payDetail);
|
||||||
List<com.utsmyanmar.paylibs.model.CardSettleData> cardSettleDataList = payDetail.getCardSettleData();
|
|
||||||
if (cardSettleDataList != null && !cardSettleDataList.isEmpty()) {
|
|
||||||
printTransDetailSettlement(payDetail, cardSettleDataList);
|
|
||||||
} else {
|
|
||||||
printTransDetailSettlement(payDetail);
|
printTransDetailSettlement(payDetail);
|
||||||
}
|
|
||||||
// printTransFooterSummary();
|
// printTransFooterSummary();
|
||||||
printTransFooterForSettlement();
|
printTransFooterForSettlement();
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user