Compare commits

..

No commits in common. "a6db8970af9fb5bd6328c3ee03cac4b0884b8e90" and "315d37ca31716325a6ddbc46003a6c69492e6aac" have entirely different histories.

31 changed files with 62 additions and 414 deletions

File diff suppressed because one or more lines are too long

View File

@ -136,6 +136,7 @@ public class MainFragment extends DataBindingFragment {
sharedViewModel.setCardDataExist(false);
sharedViewModel.setTransMenu(null);
PrintXReceipt.getInstance().setSignatureBitmap(null);
updateButtonStatus();
delayFunctionCall(this::checkTerminalStatus);

View File

@ -224,9 +224,8 @@ 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.setValue(sharedViewModel.transactionsType.getValue());
transProcessViewModel.transType.postValue(sharedViewModel.transactionsType.getValue());
transProcessViewModel.setOldTransPayDetail(payDetail);
transProcessViewModel.setPayDetail(payDetail);
} else {

View File

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

View File

@ -12,9 +12,6 @@ import androidx.navigation.NavDestination;
import com.utsmm.kbz.util.tms.TMSUtil;
import com.utsmyanmar.baselib.fragment.DataBindingFragment;
import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptCardRequest;
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;
@ -175,17 +172,14 @@ 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 {
@ -213,7 +207,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()) || "000".equals(payDetail.getTradeAnswerCode());
boolean isSuccessful = "00".equals(payDetail.getTradeAnswerCode());
// You can customize this logic based on your business requirements
return isSuccessful && !isEmvTrans(); // Require signature for successful non-EMV transactions
@ -283,7 +277,6 @@ public class ProcessingFragment extends DataBindingFragment {
},1500);
} else {
// updateData();
sharedViewModel.dismissLoadingMsg();
callNextScreen();
}

View File

@ -16,11 +16,9 @@ import com.utsmm.kbz.R;
import com.utsmm.kbz.config.Constants;
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.utils.LogUtil;
import com.utsmyanmar.paylibs.utils.print_utils.BitmapUtils;
public class SignatureFragment extends DataBindingFragment {
@ -134,12 +132,6 @@ public class SignatureFragment extends DataBindingFragment {
safeNavigateToRouteId();
}
private void updateData() {
PayDetail payDetail = sharedViewModel.payDetail.getValue();
payDetail.setESignHexData(BitmapUtils.bitmapToHexString(mSignaturePad.getSignatureBitmap()));
sharedViewModel.payDetail.setValue(payDetail);
}
public class ClickEvent {
@ -148,8 +140,7 @@ public class SignatureFragment extends DataBindingFragment {
// Handle digital signature
if (isSigned) {
sharedViewModel.signBitmap = mSignaturePad.getSignatureBitmap();
updateData();
PrintXReceipt.getInstance().setSignatureBitmap(mSignaturePad.getSignatureBitmap());
LogUtil.d(TAG, "Digital signature confirmed and stored");
callNextScreen();
} else {
@ -158,6 +149,7 @@ public class SignatureFragment extends DataBindingFragment {
} else {
// Handle manual signature on paper
sharedViewModel.signBitmap = null; // No digital signature
PrintXReceipt.getInstance().setSignatureBitmap(null);
LogUtil.d(TAG, "Manual signature on paper selected - no digital signature stored");
callNextScreen();
}

View File

@ -211,14 +211,6 @@ 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,7 +1,9 @@
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;
@ -9,11 +11,11 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.utsmm.kbz.util.EReceiptUtil;
import com.utsmm.kbz.util.enums.TransResultStatus;
import com.utsmm.kbz.util.tms.TMSUtil;
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.EReceiptRequest;
import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptQRRequest;
import com.utsmyanmar.baselib.util.DataBindingConfig;
import com.utsmyanmar.baselib.util.TimeoutCallback;
import com.utsmyanmar.ecr.ECRHelper;
@ -28,6 +30,10 @@ 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;
@ -124,7 +130,6 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
terminalId = TransactionUtil.getInstance().getQRTerminalId();
merchantId = TransactionUtil.getInstance().getQRMerchantId();
refLabel = sharedViewModel.qrRefNum.getValue();
// tradeData = waveViewModel.getTradeData();
@ -134,7 +139,6 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
sharedViewModel.insertPayDetail(payDetail);
}
@ -187,8 +191,6 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
setUpCountDown();
}
private void setUpCountDown() {
@ -313,8 +315,7 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
retrievedUpdatePayDetail(refLabel, payDetail,false);
EReceiptRequest request = EReceiptUtil.getInstance().generateQRReceipt(payDetail, TransResultStatus.SUCCESS);
sharedViewModel.pushReceipt(request);
sharedViewModel.pushReceipt(buildEReceiptQRReceipt(payDetail, true, "QR Pay Success"));
return;
}
@ -324,10 +325,7 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
if(payDetail.getQrTransStatus() != -1) {
payDetail.setQrTransStatus(2);
}
EReceiptRequest request = EReceiptUtil.getInstance().generateQRReceipt(payDetail, TransResultStatus.FAIL);
sharedViewModel.pushReceipt(request);
sharedViewModel.pushReceipt(buildEReceiptQRReceipt(payDetail, false, "QR Expired!"));
sharedViewModel.payDetail.postValue(payDetail);
safeNavigateToRouteId();
@ -337,8 +335,6 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
LogUtil.d(TAG, "On Exception::");
sharedViewModel.pushReceipt(buildEReceiptQRReceipt(payDetail, false, "QR Failed! :" + e.getMessage()));
e.printStackTrace();
EReceiptRequest request = EReceiptUtil.getInstance().generateQRReceipt(payDetail, TransResultStatus.TIME_OUT);
sharedViewModel.pushReceipt(request);
if (count == totalCount) {
if(payDetail.getQrTransStatus() != -1) {

View File

@ -8,9 +8,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
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.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.model.TradeData;
@ -319,7 +317,7 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
updateData();
if (!SystemParamsOperation.getInstance().getDemoStatus()) {
networkCutOver(); // bpc
// networkCutOver(); // bpc
navigateToNext();
} else {
navigateToNext();
@ -340,10 +338,6 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
private void updateData() {
sharedViewModel.payDetail.setValue(settlementViewModel.getPayDetail());
EReceiptRequest request = EReceiptUtil.getInstance().generateMPUReceipt(sharedViewModel.payDetail.getValue());
sharedViewModel.pushReceipt(request);
}
@Override

View File

@ -7,8 +7,6 @@ import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import com.utsmm.kbz.util.EReceiptUtil;
import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptRequest;
import com.utsmyanmar.baselib.repo.Repository;
import com.utsmyanmar.paylibs.Constant;
import com.utsmyanmar.paylibs.batch_upload.BatchListener;
@ -501,12 +499,8 @@ public class SettlementViewModel extends ViewModel {
// to leave data for testing
// if (settlementType.getValue() == SettlementType.NORMAL) {
updateDB();
// }
insertPayDetail(payDetail);
if (errorFlag) {

View File

@ -1,171 +0,0 @@
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.model.SettleData;
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 batchNumber;
private String packageName;
private EReceiptUtil(){
terminalId = SystemParamsOperation.getInstance().getTerminalId();
merchantId = SystemParamsOperation.getInstance().getMerchantId();
traceNo = SystemParamsOperation.getInstance().getCurrentSerialNum();
invoiceNo = SystemParamsOperation.getInstance().getCurrentInvoiceNum();
batchNumber = SystemParamsOperation.getInstance().getCurrentBatchNum();
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.setDE3(convertTransactionType(payDetail.getTransactionType()));
if(payDetail.getTransactionType() == TransactionsType.SETTLEMENT.value) {
SettleData settleData = payDetail.getSettleDataObj();
request.setDE63_01(settleData.getSaleCount()+"");
request.setDE63_02(settleData.getSaleAmount()+"");
request.setDE63_03(settleData.getRefundCount()+"");
request.setDE63_04(settleData.getRefundAmount()+"");
request.setBatchNumber(batchNumber);
request.setDescription("success");
request.setDE39("A");
} else {
request.setDE2(POSUtil.getInstance().getCardNumMasking(payDetail.getCardNo()));
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.setInvoiceNumber(payDetail.getInvoiceNo());
request.setCardLabel("MPU");
if(payDetail.getTradeAnswerCode().equals("000") || payDetail.getTradeAnswerCode().equals("00") ) {
request.setDescription("success");
request.setDE39("A");
} else {
request.setDescription(BaseErrorCode.getErrorMessage(payDetail.getTradeAnswerCode()));
request.setDE39("E");
}
}
request.setDE41(terminalId);
request.setDE42(merchantId);
request.setSerial(serialNum);
request.setAppId(packageName);
return request;
}
public String convertTransactionType(int transactionType) {
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,7 +26,6 @@ public enum TransResultStatus {
RETRY_AGAIN,
NEXT_SCREEN,
EMPTY_PIN,
NETWORK_ERROR,
TIME_OUT
NETWORK_ERROR
}

View File

@ -212,11 +212,12 @@ 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,7 +437,6 @@
<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,66 +1,23 @@
package com.utsmyanmar.baselib.network.model.e_receipt;
public class EReceiptRequest {
private String DE2;
public class EReceiptQRRequest {
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 DE49;
private String DE63_01;
private String DE63_02;
private String DE63_03;
private String DE63_04;
private String serial;
private String DE49;
private String DE37;
private String DE7;
private String DE4;
private String appId;
private String invoiceNumber;
private String DE11;
private String description;
private String cardLabel;
private String batchNumber;
public EReceiptRequest() {}
public EReceiptQRRequest() {}
// 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;
}
@ -111,18 +68,6 @@ public class EReceiptRequest {
public String getDescription(){
return description;
}
public String getCardLabel() {
return cardLabel;
}
public String getBatchNumber() {
return batchNumber;
}
public void setBatchNumber(String batchNumber) {
this.batchNumber = batchNumber;
}
// SETTERS
public void setDE3(String DE3) {
this.DE3 = DE3;
@ -175,34 +120,4 @@ public class EReceiptRequest {
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

@ -1,7 +1,5 @@
package com.utsmyanmar.paylibs.model;
import android.graphics.Bitmap;
import androidx.room.Embedded;
import androidx.room.Entity;
import androidx.room.Ignore;
@ -700,8 +698,6 @@ public class PayDetail implements Serializable {
this.tradeDateTime = tradeDateTime;
}
public long getAmount() {
return this.amount;
}

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.print_kbz_logo, opts);
bitmap = BitmapFactory.decodeResource(resources, R.drawable.primary_print_logo_yoma_bank, opts);
}

View File

@ -80,9 +80,11 @@ public abstract class BaseXPrint {
protected FontEntity fontBold = new FontEntity(DotMatrixFontEnum.CH_SONG_24X24, DotMatrixFontEnum.ASC_SONG_BOLD_16X24);
protected FontEntity fontBig = new FontEntity(DotMatrixFontEnum.CH_SONG_24X24, DotMatrixFontEnum.ASC_SONG_12X24, false, true);
protected Bitmap signatureBitmap;
public void setSignatureBitmap(Bitmap signatureBitmap) {
this.signatureBitmap = signatureBitmap;
}
public static byte[] boldOn() {
byte[] result = new byte[3];
@ -723,7 +725,7 @@ public abstract class BaseXPrint {
break;
}
addSignatureBitmap(payDetail);
addSignatureBitmap();
printer.appendPrnStr(cvmText, fontBold, AlignEnum.CENTER);
@ -755,9 +757,8 @@ public abstract class BaseXPrint {
}
private void addSignatureBitmap(PayDetail payDetail) {
if (payDetail.getESignHexData() != null) {
Bitmap signatureBitmap = BitmapUtils.hexStringToBitmap(payDetail.getESignHexData());
private void addSignatureBitmap() {
if (signatureBitmap != null) {
printer.appendImage(signatureBitmap, AlignEnum.CENTER);
}
}

View File

@ -23,4 +23,5 @@ public interface PrintX {
void printKeyStatus();
void setSignatureBitmap(Bitmap signatureBitmap);
}

View File

@ -41,10 +41,15 @@ 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_kbz_logo, opts);
bitmap = BitmapFactory.decodeResource(resources, R.drawable.print_logo_mpu, opts);
}
@Override
public void setSignatureBitmap(Bitmap signatureBitmap) {
super.setSignatureBitmap(signatureBitmap);
}
@Override
public void printSimple() {

View File

@ -25,7 +25,9 @@ public class PrintXReceipt {
}
public void setSignatureBitmap(Bitmap signatureBitmap) {
printX.setSignatureBitmap(signatureBitmap);
}
public void printSmileReceipt(PayDetail payDetail,boolean isMerchantCopy,PrintXStatus printXStatus) {
printX.printSmileReceipt(payDetail,isMerchantCopy,printXStatus);

View File

@ -369,8 +369,6 @@ 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,8 +107,7 @@ 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 = "7234058008C09000"; // for KBZ MPU added DE 14
public static final String BPC_PRE_AUTH_SALE_VOID_REVERSAL = "7230058008C09000"; // for KBZ MPU
// 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, 6, 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 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'},
@ -295,7 +295,7 @@ public class FieldConfig {
/* FLD 62 */ {2, SDK_8583_LEN_BCD, 255, SDK_8583_DATA_ASC, SDK_8583_ALIGN_L, '0'}, // Jun 1 2023
// /* FLD 62 */ {2, SDK_8583_LEN_BCD, 255, SDK_8583_DATA_ASC, SDK_8583_ALIGN_L, ' '},
// /* FLD 62 */ {2, SDK_8583_LEN_BCD, 255, SDK_8583_DATA_BCD, SDK_8583_ALIGN_R, '0'},
/* FLD 63 */ {2, SDK_8583_LEN_BCD, 255, SDK_8583_DATA_ASC, SDK_8583_ALIGN_L, ' '},
// /* FLD 63 */ {3, SDK_8583_LEN_BCD, 255, SDK_8583_DATA_ASC, SDK_8583_ALIGN_L, '0'},
/* FLD 64 */ {0, SDK_8583_LEN_BCD, 8, SDK_8583_DATA_BIT, SDK_8583_ALIGN_L, 0},

View File

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

View File

@ -1,14 +1,11 @@
package com.utsmyanmar.paylibs.utils.print_utils;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Rect;
import android.util.Log;
import java.io.ByteArrayOutputStream;
public class BitmapUtils {
private static final String TAG = "BitmapUtils";
@ -197,55 +194,4 @@ public class BitmapUtils {
}
return yuv;
}
/**
* Converts a Bitmap to a hexadecimal string
* @param bitmap The bitmap to convert
* @return Hexadecimal string representation
*/
public static String bitmapToHexString(Bitmap bitmap) {
if (bitmap == null) {
return null;
}
// Compress bitmap to byte array
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] bytes = baos.toByteArray();
// Convert bytes to hex string
StringBuilder hexString = new StringBuilder();
for (byte b : bytes) {
String hex = Integer.toHexString(0xFF & b);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
}
/**
* Converts a hexadecimal string back to a Bitmap
* @param hexString The hex string to convert
* @return Bitmap object
*/
public static Bitmap hexStringToBitmap(String hexString) {
if (hexString == null || hexString.length() % 2 != 0) {
return null;
}
// Convert hex string to byte array
int len = hexString.length();
byte[] bytes = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
bytes[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4)
+ Character.digit(hexString.charAt(i + 1), 16));
}
// Decode byte array to bitmap
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB