e signature is now printing on paper
This commit is contained in:
parent
aa37e14ea4
commit
2f4db87441
@ -136,7 +136,6 @@ public class MainFragment extends DataBindingFragment {
|
||||
sharedViewModel.setCardDataExist(false);
|
||||
sharedViewModel.setTransMenu(null);
|
||||
|
||||
PrintXReceipt.getInstance().setSignatureBitmap(null);
|
||||
updateButtonStatus();
|
||||
|
||||
delayFunctionCall(this::checkTerminalStatus);
|
||||
|
||||
@ -16,9 +16,11 @@ 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 {
|
||||
|
||||
@ -132,6 +134,12 @@ 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 {
|
||||
|
||||
|
||||
@ -140,7 +148,8 @@ public class SignatureFragment extends DataBindingFragment {
|
||||
// Handle digital signature
|
||||
if (isSigned) {
|
||||
sharedViewModel.signBitmap = mSignaturePad.getSignatureBitmap();
|
||||
PrintXReceipt.getInstance().setSignatureBitmap(mSignaturePad.getSignatureBitmap());
|
||||
|
||||
updateData();
|
||||
LogUtil.d(TAG, "Digital signature confirmed and stored");
|
||||
callNextScreen();
|
||||
} else {
|
||||
@ -149,7 +158,6 @@ 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();
|
||||
}
|
||||
|
||||
@ -8,7 +8,9 @@ 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;
|
||||
@ -338,6 +340,10 @@ 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
|
||||
|
||||
@ -7,6 +7,8 @@ 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;
|
||||
@ -499,8 +501,12 @@ public class SettlementViewModel extends ViewModel {
|
||||
// to leave data for testing
|
||||
// if (settlementType.getValue() == SettlementType.NORMAL) {
|
||||
updateDB();
|
||||
|
||||
|
||||
// }
|
||||
|
||||
|
||||
|
||||
insertPayDetail(payDetail);
|
||||
|
||||
if (errorFlag) {
|
||||
|
||||
@ -5,6 +5,7 @@ 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;
|
||||
@ -30,6 +31,7 @@ public class EReceiptUtil {
|
||||
private String traceNo;
|
||||
private String invoiceNo;
|
||||
private String serialNum;
|
||||
private String batchNumber;
|
||||
|
||||
private String packageName;
|
||||
private EReceiptUtil(){
|
||||
@ -37,6 +39,7 @@ public class EReceiptUtil {
|
||||
merchantId = SystemParamsOperation.getInstance().getMerchantId();
|
||||
traceNo = SystemParamsOperation.getInstance().getCurrentSerialNum();
|
||||
invoiceNo = SystemParamsOperation.getInstance().getCurrentInvoiceNum();
|
||||
batchNumber = SystemParamsOperation.getInstance().getCurrentBatchNum();
|
||||
serialNum = TMSUtil.getInstance().getSerialNumber();
|
||||
packageName = BuildConfig.APPLICATION_ID;
|
||||
}
|
||||
@ -94,27 +97,35 @@ public class EReceiptUtil {
|
||||
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()));
|
||||
|
||||
|
||||
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.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");
|
||||
@ -123,9 +134,12 @@ public class EReceiptUtil {
|
||||
request.setDescription(BaseErrorCode.getErrorMessage(payDetail.getTradeAnswerCode()));
|
||||
request.setDE39("E");
|
||||
}
|
||||
}
|
||||
request.setDE41(terminalId);
|
||||
request.setDE42(merchantId);
|
||||
|
||||
|
||||
|
||||
request.setSerial(serialNum);
|
||||
request.setAppId(packageName);
|
||||
|
||||
return request;
|
||||
}
|
||||
|
||||
@ -30,6 +30,8 @@ public class EReceiptRequest {
|
||||
|
||||
private String cardLabel;
|
||||
|
||||
private String batchNumber;
|
||||
|
||||
public EReceiptRequest() {}
|
||||
|
||||
// GETTERS
|
||||
@ -113,6 +115,14 @@ public class EReceiptRequest {
|
||||
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;
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package com.utsmyanmar.paylibs.model;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
|
||||
import androidx.room.Embedded;
|
||||
import androidx.room.Entity;
|
||||
import androidx.room.Ignore;
|
||||
@ -698,6 +700,8 @@ public class PayDetail implements Serializable {
|
||||
this.tradeDateTime = tradeDateTime;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public long getAmount() {
|
||||
return this.amount;
|
||||
}
|
||||
|
||||
@ -80,11 +80,9 @@ 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];
|
||||
@ -725,7 +723,7 @@ public abstract class BaseXPrint {
|
||||
break;
|
||||
}
|
||||
|
||||
addSignatureBitmap();
|
||||
addSignatureBitmap(payDetail);
|
||||
|
||||
printer.appendPrnStr(cvmText, fontBold, AlignEnum.CENTER);
|
||||
|
||||
@ -757,8 +755,9 @@ public abstract class BaseXPrint {
|
||||
|
||||
}
|
||||
|
||||
private void addSignatureBitmap() {
|
||||
if (signatureBitmap != null) {
|
||||
private void addSignatureBitmap(PayDetail payDetail) {
|
||||
if (payDetail.getESignHexData() != null) {
|
||||
Bitmap signatureBitmap = BitmapUtils.hexStringToBitmap(payDetail.getESignHexData());
|
||||
printer.appendImage(signatureBitmap, AlignEnum.CENTER);
|
||||
}
|
||||
}
|
||||
|
||||
@ -23,5 +23,4 @@ public interface PrintX {
|
||||
|
||||
void printKeyStatus();
|
||||
|
||||
void setSignatureBitmap(Bitmap signatureBitmap);
|
||||
}
|
||||
|
||||
@ -45,11 +45,6 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setSignatureBitmap(Bitmap signatureBitmap) {
|
||||
super.setSignatureBitmap(signatureBitmap);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void printSimple() {
|
||||
|
||||
@ -25,9 +25,7 @@ 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);
|
||||
|
||||
@ -1,11 +1,14 @@
|
||||
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";
|
||||
|
||||
@ -194,4 +197,55 @@ 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);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user