integrated E-Receipt for card transactions and

fixed some other issues
This commit is contained in:
kizzy 2025-12-01 05:46:01 +07:00
parent 1ac8c14b09
commit aa37e14ea4
23 changed files with 297 additions and 99 deletions

File diff suppressed because one or more lines are too long

View File

@ -224,8 +224,9 @@ public class InputRRNFragment extends DataBindingFragment {
newPay.setReferNo(rrnNo);
if(sharedViewModel.getTransMenu().getValue() == TransMenu.PRE_AUTH_FULL_VOID) {
newPay.setAmount(payDetail.getAmount());
}
}
sharedViewModel.setAmount(POSUtil.getInstance().getDecimalAmountFormat(payDetail.getAmount()));
newPay.setTradeDateTime(payDetail.getTradeDateTime());
if(isEmvTrans()) {

View File

@ -299,7 +299,7 @@ public class InputTraceNoFragment extends DataBindingFragment {
if(sharedViewModel.hostType.getValue() == HostType.MPU) {
sharedViewModel.isEmv.setValue(false);
transProcessViewModel.transType.postValue(sharedViewModel.transactionsType.getValue());
transProcessViewModel.transType.setValue(sharedViewModel.transactionsType.getValue());
transProcessViewModel.setOldTransPayDetail(payDetail);
transProcessViewModel.setPayDetail(payDetail);
} else {

View File

@ -130,18 +130,19 @@ public class ProcessingCardFragment extends DataBindingFragment {
public void onSuccess(CardDataX cardDataX) {
routeId = R.id.action_processingCardFragment_to_pinPadFragment;
transProcessViewModel.transType.postValue(sharedViewModel.transactionsType.getValue());
pinPadViewModel.transType.postValue(sharedViewModel.transactionsType.getValue());
transProcessViewModel.transType.setValue(sharedViewModel.transactionsType.getValue());
pinPadViewModel.transType.setValue(sharedViewModel.transactionsType.getValue());
TradeData tradeData = TransactionUtil.getInstance().initMPUTransaction(cardDataX, CardTypeX.IC);
transProcessViewModel.setTradeData(tradeData);
pinPadViewModel.setTradeData(tradeData);
if(sharedViewModel.getTransMenu().getValue() == TransMenu.PRE_AUTH_PARTIAL_VOID ) {
if(sharedViewModel.getTransactionsType().getValue() == TransactionsType.PRE_AUTH_VOID ) {
sharedViewModel.set_errorFragmentMsg(getResourceString(R.string.txt_function_not_supported));
sharedViewModel.set_errorFragmentMsg(getResourceString(R.string.txt_alert_pre_auth_cancel));
routeId = R.id.action_processingCardFragment_to_errorFragment;
safeNavigateToRouteId();
return;
}
// else if(sharedViewModel.transactionsType.getValue() == TransactionsType.REFUND) {
// sharedViewModel.set_errorFragmentMsg(getResourceString(R.string.txt_card_not_supported));
@ -182,7 +183,7 @@ public class ProcessingCardFragment extends DataBindingFragment {
// pin required scenario
routeId = R.id.action_processingCardFragment_to_pinPadFragment;
transProcessViewModel.transType.postValue(sharedViewModel.transactionsType.getValue());
transProcessViewModel.transType.setValue(sharedViewModel.transactionsType.getValue());
pinPadViewModel.transType.postValue(sharedViewModel.transactionsType.getValue());
/* need to check card scheme according to card number --!^--- check below function*/
@ -207,10 +208,11 @@ public class ProcessingCardFragment extends DataBindingFragment {
}
if(sharedViewModel.getTransMenu().getValue() == TransMenu.PRE_AUTH_PARTIAL_VOID ) {
// sharedViewModel.transMenu.postValue(null);
sharedViewModel.setTransMenu(null);
if(sharedViewModel.getTransactionsType().getValue() == TransactionsType.PRE_AUTH_VOID ) {
sharedViewModel.set_errorFragmentMsg(getResourceString(R.string.txt_alert_pre_auth_cancel));
routeId = R.id.action_processingCardFragment_to_errorFragment;
}
// else if(sharedViewModel.transactionsType.getValue() == TransactionsType.REFUND) {
// routeId = R.id.action_processingCardFragment_to_errorFragment;

View File

@ -9,7 +9,9 @@ import androidx.annotation.Nullable;
import androidx.navigation.NavController;
import androidx.navigation.NavDestination;
import com.utsmm.kbz.util.EReceiptUtil;
import com.utsmyanmar.baselib.fragment.DataBindingFragment;
import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptRequest;
import com.utsmyanmar.baselib.util.DataBindingConfig;
import com.utsmyanmar.baselib.util.TimeoutCallback;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
@ -168,14 +170,17 @@ public class ProcessingFragment extends DataBindingFragment {
} else {
LogUtil.d(TAG,"Updated sharedViewmodel payDetail for non emv");
sharedViewModel.payDetail.setValue(transProcessViewModel.payDetailResult.getValue());
}
EReceiptRequest request = EReceiptUtil.getInstance().generateMPUReceipt(sharedViewModel.payDetail.getValue());
sharedViewModel.pushReceipt(request);
// transProcessViewModel.payDetailResult.observe(getViewLifecycleOwner(), payDetail -> sharedViewModel.payDetail.postValue(payDetail));
}
private void callNextScreen(){
updateData();
// updateData();
if (requiresSignature()) {
routeId = R.id.action_processingFragment_to_signatureFragment;
} else {
@ -203,7 +208,7 @@ public class ProcessingFragment extends DataBindingFragment {
LogUtil.d(TAG,"tradeAnswerCode: "+payDetail.getTradeAnswerCode());
// For now, let's check if it's a card transaction and successful
boolean isSuccessful = "00".equals(payDetail.getTradeAnswerCode());
boolean isSuccessful = "00".equals(payDetail.getTradeAnswerCode()) || "000".equals(payDetail.getTradeAnswerCode());
// You can customize this logic based on your business requirements
return isSuccessful && !isEmvTrans(); // Require signature for successful non-EMV transactions
@ -262,6 +267,7 @@ public class ProcessingFragment extends DataBindingFragment {
},1500);
} else {
// updateData();
sharedViewModel.dismissLoadingMsg();
callNextScreen();
}

View File

@ -202,6 +202,14 @@ public class SharedViewModel extends ViewModel {
return transactionsType;
}
public void setAmount(String amount) {
this.amount.setValue(amount);
}
public SingleLiveEvent<String> getAmount() {
return amount;
}
public void setPrintReceiptMsg(String msg) { this.printReceiptMsg.setValue(msg);}
public void postPrintReceiptMsg(String msg) { this.printReceiptMsg.postValue(msg);}
public void setPrintStatus(PrintStatus printStatus) { this.printStatus.setValue(printStatus); }

View File

@ -1,9 +1,7 @@
package com.utsmm.kbz.ui.kpay;
import android.annotation.SuppressLint;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
@ -11,11 +9,11 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.utsmm.kbz.util.tms.TMSUtil;
import com.utsmm.kbz.util.EReceiptUtil;
import com.utsmm.kbz.util.enums.TransResultStatus;
import com.utsmyanmar.baselib.fragment.DataBindingFragment;
import com.utsmyanmar.baselib.network.model.DemoQRStatusRequest;
import com.utsmyanmar.baselib.network.model.KPayQRQueryRequest;
import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptQRRequest;
import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptRequest;
import com.utsmyanmar.baselib.util.DataBindingConfig;
import com.utsmyanmar.baselib.util.TimeoutCallback;
import com.utsmyanmar.ecr.ECRHelper;
@ -30,10 +28,6 @@ import com.utsmm.kbz.ui.core_viewmodel.SharedViewModel;
import com.utsmm.kbz.util.TransactionUtil;
import com.utsmm.kbz.util.ecr.CoreUtils;
import java.text.DecimalFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
@ -130,6 +124,7 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
terminalId = TransactionUtil.getInstance().getQRTerminalId();
merchantId = TransactionUtil.getInstance().getQRMerchantId();
refLabel = sharedViewModel.qrRefNum.getValue();
// tradeData = waveViewModel.getTradeData();
@ -139,6 +134,7 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
sharedViewModel.insertPayDetail(payDetail);
}
@ -191,6 +187,8 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
setUpCountDown();
}
private void setUpCountDown() {
@ -315,28 +313,7 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
retrievedUpdatePayDetail(refLabel, payDetail,false);
double realAmount = payDetail.getAmount() / 100.0;
DecimalFormat df = new DecimalFormat("0.00");
String amount = df.format(realAmount);
String currentTimeStamp = new java.text.SimpleDateFormat("MMddHHmmss", java.util.Locale.getDefault())
.format(new java.util.Date());
String serial = TMSUtil.getInstance().getSerialNumber();
String packageName = getActivity().getPackageName();
EReceiptQRRequest request = new EReceiptQRRequest();
request.setDE3("QR");
request.setDE4(amount);
request.setDE7(currentTimeStamp);
request.setDE37(payDetail.getReferNo());
request.setDE39("A");
request.setDE49("MMK");
request.setSerial(serial);
request.setAppId(packageName);
request.setDE41(terminalId);
request.setDE42(merchantId);
request.setInvoiceNumber(payDetail.getInvoiceNo());
request.setDE11(payDetail.getVoucherNo());
request.setDescription("qr pay success");
EReceiptRequest request = EReceiptUtil.getInstance().generateQRReceipt(payDetail, TransResultStatus.SUCCESS);
sharedViewModel.pushReceipt(request);
return;
@ -348,24 +325,7 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
payDetail.setQrTransStatus(2);
}
String currentTimeStamp = new java.text.SimpleDateFormat("MMddHHmmss", java.util.Locale.getDefault())
.format(new java.util.Date());
String serial = SystemParamsOperation.getInstance().getCurrentSerialNum();
String packageName = getActivity().getPackageName();
EReceiptQRRequest request = new EReceiptQRRequest();
request.setDE3("QR");
request.setDE4("0");
request.setDE7(currentTimeStamp);
request.setDE37(payDetail.getReferNo());
request.setDE39("D");
request.setDE49("MMK");
request.setSerial(serial);
request.setAppId(packageName);
request.setDE41(terminalId);
request.setDE42(merchantId);
request.setInvoiceNumber(payDetail.getInvoiceNo());
request.setDE11(payDetail.getVoucherNo());
request.setDescription("qr timeout");
EReceiptRequest request = EReceiptUtil.getInstance().generateQRReceipt(payDetail, TransResultStatus.FAIL);
sharedViewModel.pushReceipt(request);
sharedViewModel.payDetail.postValue(payDetail);
@ -376,24 +336,7 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
} catch (Exception e) {
LogUtil.d(TAG, "On Exception::");
e.printStackTrace();
String currentTimeStamp = new java.text.SimpleDateFormat("MMddHHmmss", java.util.Locale.getDefault())
.format(new java.util.Date());
String serial = SystemParamsOperation.getInstance().getCurrentSerialNum();
String packageName = getActivity().getPackageName();
EReceiptQRRequest request = new EReceiptQRRequest();
request.setDE3("QR");
request.setDE4("0");
request.setDE7(currentTimeStamp);
request.setDE37(payDetail.getReferNo());
request.setDE39("D");
request.setDE49("MMK");
request.setSerial(serial);
request.setAppId(packageName);
request.setDE41(terminalId);
request.setDE42(merchantId);
request.setInvoiceNumber(payDetail.getInvoiceNo());
request.setDE11(payDetail.getVoucherNo());
request.setDescription("qr failed");
EReceiptRequest request = EReceiptUtil.getInstance().generateQRReceipt(payDetail, TransResultStatus.TIME_OUT);
sharedViewModel.pushReceipt(request);
if (count == totalCount) {

View File

@ -317,7 +317,7 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
updateData();
if (!SystemParamsOperation.getInstance().getDemoStatus()) {
// networkCutOver(); // bpc
networkCutOver(); // bpc
navigateToNext();
} else {
navigateToNext();

View File

@ -0,0 +1,157 @@
package com.utsmm.kbz.util;
import com.utsmm.kbz.BuildConfig;
import com.utsmm.kbz.util.enums.TransResultStatus;
import com.utsmm.kbz.util.tms.TMSUtil;
import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptRequest;
import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.system.BaseErrorCode;
import com.utsmyanmar.paylibs.utils.POSUtil;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType;
import java.text.DecimalFormat;
public class EReceiptUtil {
private static EReceiptUtil instance;
public static EReceiptUtil getInstance(){
instance = new EReceiptUtil();
return instance;
}
private String terminalId;
private String merchantId;
private String traceNo;
private String invoiceNo;
private String serialNum;
private String packageName;
private EReceiptUtil(){
terminalId = SystemParamsOperation.getInstance().getTerminalId();
merchantId = SystemParamsOperation.getInstance().getMerchantId();
traceNo = SystemParamsOperation.getInstance().getCurrentSerialNum();
invoiceNo = SystemParamsOperation.getInstance().getCurrentInvoiceNum();
serialNum = TMSUtil.getInstance().getSerialNumber();
packageName = BuildConfig.APPLICATION_ID;
}
public EReceiptRequest generateQRReceipt(PayDetail payDetail, TransResultStatus status) {
double realAmount = payDetail.getAmount() / 100.0;
DecimalFormat df = new DecimalFormat("0.00");
String amount = df.format(realAmount);
String currentTimeStamp = new java.text.SimpleDateFormat("MMddHHmmss", java.util.Locale.getDefault())
.format(new java.util.Date());
EReceiptRequest request = new EReceiptRequest();
request.setDE3("QR");
request.setDE7(currentTimeStamp);
request.setDE37(payDetail.getReferNo());
request.setDE49("MMK");
request.setSerial(serialNum);
request.setAppId(packageName);
request.setDE41(terminalId);
request.setDE42(merchantId);
request.setInvoiceNumber(payDetail.getInvoiceNo());
request.setDE11(payDetail.getVoucherNo());
// need to add payment identifier field too
if(status == TransResultStatus.SUCCESS) {
request.setDE4(amount);
request.setDescription("qr pay success");
request.setDE39("A");
} else if(status == TransResultStatus.TIME_OUT) {
request.setDE4("0");
request.setDescription("qr timeout");
request.setDE39("D");
} else if(status == TransResultStatus.FAIL) {
request.setDE4("0");
request.setDescription("qr failed");
request.setDE39("E");
}
return request;
}
public EReceiptRequest generateMPUReceipt(PayDetail payDetail) {
double realAmount = payDetail.getAmount() / 100.0;
DecimalFormat df = new DecimalFormat("0.00");
String amount = df.format(realAmount);
String currentTimeStamp = new java.text.SimpleDateFormat("MMddHHmmss", java.util.Locale.getDefault())
.format(new java.util.Date());
EReceiptRequest request = new EReceiptRequest();
request.setDE2(POSUtil.getInstance().getCardNumMasking(payDetail.getCardNo()));
request.setDE3(convertTransactionType(payDetail.getTransactionType()));
request.setDE4(amount);
request.setDE7(currentTimeStamp);
request.setDE11(payDetail.getVoucherNo());
request.setDE37(payDetail.getReferNo());
request.setDE38(payDetail.getApprovalCode());
// will check it later for currency code
request.setDE49("MMK");
request.setDE41(terminalId);
request.setDE42(merchantId);
request.setSerial(serialNum);
request.setAppId(packageName);
request.setInvoiceNumber(payDetail.getInvoiceNo());
request.setCardLabel("MPU");
// need to add payment identifier field too
if(payDetail.getTradeAnswerCode().equals("000") || payDetail.getTradeAnswerCode().equals("00")) {
request.setDescription("success");
request.setDE39("A");
} else {
request.setDescription(BaseErrorCode.getErrorMessage(payDetail.getTradeAnswerCode()));
request.setDE39("E");
}
return request;
}
public String convertTransactionType(int transactionType) {
if(transactionType == TransactionsType.SALE.value) {
return "S";
} else if(transactionType == TransactionsType.VOID.value) {
return "V";
} else if(transactionType == TransactionsType.PRE_AUTH_SALE.value) {
return "P";
} else if(transactionType == TransactionsType.PRE_AUTH_VOID.value) {
return "PV";
} else if(transactionType == TransactionsType.PRE_AUTH_COMPLETE.value) {
return "PC";
} else if(transactionType == TransactionsType.PRE_AUTH_COMPLETE_VOID.value) {
return "PCV";
} else if(transactionType == TransactionsType.CASH_OUT.value) {
return "CAV";
} else if(transactionType == TransactionsType.REFUND.value) {
return "R";
} else if(transactionType == TransactionsType.SETTLEMENT.value) {
return "ST";
}
return "E";
}
}

View File

@ -26,6 +26,7 @@ public enum TransResultStatus {
RETRY_AGAIN,
NEXT_SCREEN,
EMPTY_PIN,
NETWORK_ERROR
NETWORK_ERROR,
TIME_OUT
}

View File

@ -212,12 +212,11 @@ public class TMSUtil {
settlementStatus = SystemParamsOperation.getInstance().getSettlementStatus();
featuresList.add(new Features(2, fragmentActivity.getString(R.string.menu_sale_void), R.drawable.ic_void_dash, FeaturesType.VOID, voidStatus));
featuresList.add(new Features(2, fragmentActivity.getString(R.string.menu_settlement), R.drawable.ic_settlement, FeaturesType.SETTLEMENT, settlementStatus));
// featuresList.add(new Features(2, fragmentActivity.getString(R.string.menu_settlement), R.drawable.ic_settlement, FeaturesType.SETTLEMENT, settlementStatus));
featuresList.add(new Features(4, fragmentActivity.getString(R.string.menu_refund), R.drawable.ic_refund, FeaturesType.REFUND, refundStatus));
featuresList.add(new Features(3, fragmentActivity.getString(R.string.menu_preauth), R.drawable.ic_pre_auth_dash, FeaturesType.PRE_AUTH_SALE, preAuthStatus));
featuresList.add(new Features(6, fragmentActivity.getString(R.string.menu_preauth_cancellation), R.drawable.ic_pre_auth_dash, FeaturesType.PRE_AUTH_VOID, preAuthCancelStatus));
featuresList.add(new Features(6, fragmentActivity.getString(R.string.menu_preauth_completion), R.drawable.ic_pre_auth_dash, FeaturesType.PRE_AUTH_COMPLETE, preAuthCompleteStatus));
featuresList.add(new Features(6, fragmentActivity.getString(R.string.menu_preauth_comp_cancellation), R.drawable.ic_pre_auth_dash, FeaturesType.PRE_AUTH_COMPLETE_VOID, preAuthCompleteCancelStatus));
// featuresList.add(new Features(5, fragmentActivity.getString(R.string.menu_wavepay_inquiry), R.drawable.ic_wave_status_dash, FeaturesType.WAVE_PAY_INQUIRY, wavePayInquiryStatus));
featuresList.add(new Features(1, fragmentActivity.getString(R.string.menu_cash_advance), R.drawable.ic_cash_advance, FeaturesType.CASH_ADVANCE, cashAdvanceStatus));
featuresList.add(new Features(9, fragmentActivity.getString(R.string.menu_history), R.drawable.ic_history, FeaturesType.HISTORY, true));

View File

@ -437,6 +437,7 @@
<string name="txt_printing_settlement_report">Printing Settlement Report</string>
<string name="txt_printing_settlement_report_failure">Printing Settlement Report Failed!\nPlease load paper roll.</string>
<string name="txt_function_not_supported">FUNCTION NOT SUPPORTED</string>
<string name="txt_alert_pre_auth_cancel">ONLY ALLOWS MANUAL ENTRY</string>
<string name="txt_card_not_supported">CARD NOT SUPPORTED</string>
<string name="title_ecr">ECR</string>
<string name="txt_connect">Connect</string>

View File

@ -383,7 +383,7 @@ public abstract class DataBindingFragment extends Fragment {
getNavController(hostId()).popBackStack();
}
protected void safeNavigateToRouteId(){
protected void safeNavigateToRouteId(){
Activity activity = getActivity();
if(activity != null && isAdded()) {
NavDestination currentDestination = getNavController(hostId()).getCurrentDestination();

View File

@ -1,23 +1,64 @@
package com.utsmyanmar.baselib.network.model.e_receipt;
public class EReceiptQRRequest {
public class EReceiptRequest {
private String DE2;
private String DE3;
private String DE4;
private String DE7;
private String DE11;
private String DE22;
private String DE37;
private String DE38;
private String DE39;
private String DE41;
private String DE42;
private String serial;
private String DE49;
private String DE37;
private String DE7;
private String DE4;
private String DE63_01;
private String DE63_02;
private String DE63_03;
private String DE63_04;
private String serial;
private String appId;
private String invoiceNumber;
private String DE11;
private String description;
public EReceiptQRRequest() {}
private String cardLabel;
public EReceiptRequest() {}
// GETTERS
public String getDE2() {
return DE2;
}
public String getDE38() {
return DE38;
}
public String getDE22() {
return DE22;
}
public String getDE63_01() {
return DE63_01;
}
public String getDE63_02() {
return DE63_02;
}
public String getDE63_03() {
return DE63_03;
}
public String getDE63_04() {
return DE63_04;
}
public String getDE3() {
return DE3;
}
@ -68,6 +109,10 @@ public class EReceiptQRRequest {
public String getDescription(){
return description;
}
public String getCardLabel() {
return cardLabel;
}
// SETTERS
public void setDE3(String DE3) {
this.DE3 = DE3;
@ -120,4 +165,34 @@ public class EReceiptQRRequest {
public void setDescription(String description){
this.description = description;
}
public void setDE2(String DE2) {
this.DE2 = DE2;
}
public void setDE38(String DE38) {
this.DE38 = DE38;
}
public void setDE22(String DE22) {
this.DE22 = DE22;
}
public void setDE63_01(String DE63_01) {
this.DE63_01 = DE63_01;
}
public void setDE63_02(String DE63_02) {
this.DE63_02 = DE63_02;
}
public void setDE63_03(String DE63_03) {
this.DE63_03 = DE63_03;
}
public void setDE63_04(String DE63_04) {
this.DE63_04 = DE63_04;
}
public void setCardLabel(String cardLabel) {
this.cardLabel = cardLabel;
}
}

View File

@ -71,7 +71,7 @@ public class PrintReceipt {
SimpleDateFormat dfm = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss", Locale.getDefault());
currentTime = dfm.format(new Date());
BitmapFactory.Options opts = new BitmapFactory.Options();
bitmap = BitmapFactory.decodeResource(resources, R.drawable.primary_print_logo_yoma_bank, opts);
bitmap = BitmapFactory.decodeResource(resources, R.drawable.print_kbz_logo, opts);
}

View File

@ -41,7 +41,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
SimpleDateFormat dfm = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss", Locale.getDefault());
currentTime = dfm.format(new Date());
BitmapFactory.Options opts = new BitmapFactory.Options();
bitmap = BitmapFactory.decodeResource(resources, R.drawable.print_logo_mpu, opts);
bitmap = BitmapFactory.decodeResource(resources, R.drawable.print_kbz_logo, opts);
}

View File

@ -369,6 +369,8 @@ public class TransactionsOperation {
newPay.setPINCipher(oldPay.getPINCipher());
newPay.setTempKSN(oldPay.getTempKSN());
newPay.setTransCVM(TransCVM.SIGNATURE);
newPay.setTradeDateTime(oldPay.getTradeDateTime());
newPay.setAmount(oldPay.getAmount());
// for manual entry reversal which need de 35
} else if (transactionsType == TransactionsType.TIP_ADJUSTMENT ) {

View File

@ -107,7 +107,8 @@ public class BitmapConfig {
// commented on Nov 13,2024
// public static final String BPC_PRE_AUTH_SALE_VOID_REVERSAL = "7230058028C19800"; // added DE 2
// public static final String BPC_PRE_AUTH_SALE_VOID_REVERSAL = "7234058008C09000"; // for tmk MPU
public static final String BPC_PRE_AUTH_SALE_VOID_REVERSAL = "7230058008C09000"; // for KBZ MPU
// public static final String BPC_PRE_AUTH_SALE_VOID_REVERSAL = "7230058008C09000"; // for KBZ MPU
public static final String BPC_PRE_AUTH_SALE_VOID_REVERSAL = "7234058008C09000"; // for KBZ MPU added DE 14
// public static final String BPC_PRE_AUTH_SALE_VOID_REVERSAL = "3230058028C19800";
// public static final String BPC_PRE_AUTH_SALE_VOID_REVERSAL = "3230058028C19A00"; //DE55
//

View File

@ -45,7 +45,7 @@ public class FieldConfig {
// /* FLD 12 */ {0, SDK_8583_LEN_BCD, 6, SDK_8583_DATA_BCD, SDK_8583_ALIGN_L, '0'},
/* FLD 12 */ {0, SDK_8583_LEN_BCD, 12, SDK_8583_DATA_ASC, SDK_8583_ALIGN_L, '0'}, // BPC HOST
/* FLD 13 */ {0, SDK_8583_LEN_BCD, 4, SDK_8583_DATA_ASC, SDK_8583_ALIGN_L, '0'},
/* FLD 14 */ {0, SDK_8583_LEN_BCD, 4, SDK_8583_DATA_ASC, SDK_8583_ALIGN_L, '0'},
/* FLD 14 */ {0, SDK_8583_LEN_BCD, 6, SDK_8583_DATA_ASC, SDK_8583_ALIGN_L, '0'},
/* FLD 15 */ {0, SDK_8583_LEN_BCD, 6, SDK_8583_DATA_ASC, SDK_8583_ALIGN_L, '0'},
/* FLD 16 */ {0, SDK_8583_LEN_BCD, 12, SDK_8583_DATA_BCD, SDK_8583_ALIGN_R, '0'},
/* FLD 17 */ {0, SDK_8583_LEN_BCD, 12, SDK_8583_DATA_BCD, SDK_8583_ALIGN_R, '0'},

View File

@ -63,5 +63,6 @@ public enum TransactionsType {
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB