ereceipt push logic changed in signature receipt
This commit is contained in:
parent
4ffdc1f679
commit
2dd686d513
@ -345,8 +345,12 @@ public class ProcessingFragment extends DataBindingFragment {
|
|||||||
handleAfterTransaction();
|
handleAfterTransaction();
|
||||||
break;
|
break;
|
||||||
case SUCCESS:
|
case SUCCESS:
|
||||||
sharedViewModel.pushReceipt(buildEReceiptCardReceipt(payDetail, true, BaseErrorCode.getCode(payDetail.getTradeAnswerCode())));
|
if(requiresSignature()){
|
||||||
handleAfterTransaction();
|
handleAfterTransaction();
|
||||||
|
}else{
|
||||||
|
sharedViewModel.pushReceipt(buildEReceiptCardReceipt(payDetail, true, BaseErrorCode.getCode(payDetail.getTradeAnswerCode())));
|
||||||
|
handleAfterTransaction();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case OFFLINE_SUCCESS:
|
case OFFLINE_SUCCESS:
|
||||||
if(SystemParamsOperation.getInstance().getDemoStatus()) {
|
if(SystemParamsOperation.getInstance().getDemoStatus()) {
|
||||||
|
|||||||
@ -9,6 +9,7 @@ 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;
|
||||||
@ -19,6 +20,7 @@ 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;
|
||||||
|
|
||||||
@ -44,8 +46,8 @@ public class SignatureFragment extends DataBindingFragment {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected DataBindingConfig getDataBindingConfig() {
|
protected DataBindingConfig getDataBindingConfig() {
|
||||||
return new DataBindingConfig(R.layout.fragment_signature_view, BR.vm,sharedViewModel)
|
return new DataBindingConfig(R.layout.fragment_signature_view, BR.vm, sharedViewModel)
|
||||||
.addBindingParam(BR.click,new ClickEvent());
|
.addBindingParam(BR.click, new ClickEvent());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -127,7 +129,7 @@ public class SignatureFragment extends DataBindingFragment {
|
|||||||
setToolBarTitleWithoutBackIcon(getResourceString(R.string.signature_title));
|
setToolBarTitleWithoutBackIcon(getResourceString(R.string.signature_title));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void callNextScreen(){
|
private void callNextScreen() {
|
||||||
routeId = R.id.action_signatureFragment_to_transactionResultFragment;
|
routeId = R.id.action_signatureFragment_to_transactionResultFragment;
|
||||||
safeNavigateToRouteId();
|
safeNavigateToRouteId();
|
||||||
}
|
}
|
||||||
@ -139,6 +141,14 @@ 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 {
|
||||||
|
|||||||
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_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("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[] 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() {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user