Compare commits
No commits in common. "aa1cf12d9370409152ce81404fded3cd7c618243" and "05eed5776d71edee0c298b9a77db5ab497190741" have entirely different histories.
aa1cf12d93
...
05eed5776d
@ -496,18 +496,5 @@ public class SharedViewModel extends ViewModel {
|
||||
}
|
||||
|
||||
|
||||
public void printTerminalHostConfigs(){
|
||||
PrintXReceipt.getInstance().printTerminalHostConfig(new PrintXStatus() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
Log.d("PrintConfig", "Print Terminal Config Success.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure() {
|
||||
Log.e("PrintConfig", "Print Terminal Config Success.");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -34,7 +34,6 @@ import com.utsmm.kbz.BR;
|
||||
import com.utsmm.kbz.R;
|
||||
import com.utsmm.kbz.config.Constants;
|
||||
import com.utsmm.kbz.databinding.FragmentHostConfigBinding;
|
||||
import com.utsmm.kbz.ui.core_viewmodel.SharedViewModel;
|
||||
import com.utsmyanmar.baselib.fragment.DataBindingFragment;
|
||||
import com.utsmyanmar.baselib.util.DataBindingConfig;
|
||||
import com.utsmyanmar.baselib.util.DialogCallback;
|
||||
@ -50,8 +49,6 @@ import java.util.Objects;
|
||||
public class HostConfigFragment extends DataBindingFragment {
|
||||
|
||||
private HostConfigViewModel viewModel;
|
||||
|
||||
private SharedViewModel sharedViewModel;
|
||||
protected Printer printer;
|
||||
int FONT_NORMAL = 20;
|
||||
int FONT_HEADER = 24;
|
||||
@ -59,7 +56,6 @@ public class HostConfigFragment extends DataBindingFragment {
|
||||
@Override
|
||||
protected void initViewModel() {
|
||||
viewModel = new ViewModelProvider(this).get(HostConfigViewModel.class);
|
||||
sharedViewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -104,7 +100,146 @@ public class HostConfigFragment extends DataBindingFragment {
|
||||
}
|
||||
|
||||
public void onPrint(){
|
||||
sharedViewModel.printTerminalHostConfigs();
|
||||
startPrintProcess();
|
||||
}
|
||||
}
|
||||
private void startPrintProcess() {
|
||||
|
||||
DeviceEngine engine = APIProxy.getDeviceEngine(requireContext());
|
||||
printer = engine.getPrinter();
|
||||
int printerStatus = printer.getStatus();
|
||||
if(printerStatus != SdkResult.Success){
|
||||
Log.e("Print Config", "Printer Error: " + printerStatus);
|
||||
return;
|
||||
}
|
||||
printer.setGray(GrayLevelEnum.LEVEL_1);
|
||||
Typeface typeface = ResourcesCompat.getFont(requireContext(), R.font.firacode);
|
||||
printer.setTypeface(typeface);
|
||||
SystemParamsOperation sp = SystemParamsOperation.getInstance();
|
||||
|
||||
Bitmap bitmap = BitmapFactory.decodeResource(requireContext().getResources(), R.drawable.kbz_receipt_logo);
|
||||
printLogo(bitmap);
|
||||
printer.appendPrnStr("TERMINAL CONFIGURATION", FONT_HEADER, AlignEnum.CENTER, true);
|
||||
printer.appendPrnStr("\n", FONT_NORMAL, AlignEnum.CENTER, false);
|
||||
printer.appendPrnStr(sp.getMerchantName(), FONT_NORMAL, AlignEnum.CENTER, false);
|
||||
printer.appendPrnStr(sp.getMerchantAddress(), FONT_NORMAL, AlignEnum.CENTER, false);
|
||||
printer.appendPrnStr(sp.getMerchantAddress2(), FONT_NORMAL, AlignEnum.CENTER, false);
|
||||
printer.appendPrnStr("TERMINAL : " + sp.getTerminalName(), FONT_NORMAL, AlignEnum.LEFT, true);
|
||||
printer.appendPrnStr("\n---------------------------\n", FONT_NORMAL, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("PRIMARY HOST", FONT_NORMAL, AlignEnum.LEFT, true);
|
||||
printer.appendPrnStr("Name : " + sp.getHostName(), FONT_NORMAL, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("TID : " + sp.getTerminalId(), FONT_NORMAL, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("MID : " + sp.getMerchantId(), FONT_NORMAL, AlignEnum.LEFT, false);
|
||||
String ipAddress = sp.getIpAddress();
|
||||
String[] ipAndPort = splitIpAndPort(ipAddress);
|
||||
String ip = ipAndPort[0];
|
||||
String port = ipAndPort[1];
|
||||
printer.appendPrnStr("Primary Ip : " + ip, FONT_NORMAL, AlignEnum.LEFT, true);
|
||||
printer.appendPrnStr("Primary Port : " + port, FONT_NORMAL, AlignEnum.LEFT, true);
|
||||
String secIpAddress = sp.getSecIpAddress();
|
||||
String[] secIpAndPort = splitIpAndPort(secIpAddress);
|
||||
String secIp = secIpAndPort[0];
|
||||
String secPort = secIpAndPort[1];
|
||||
printer.appendPrnStr("Secondary Ip : " + secIp, FONT_NORMAL, AlignEnum.LEFT, true);
|
||||
printer.appendPrnStr("Secondary Port: " + secPort, FONT_NORMAL, AlignEnum.LEFT, true);
|
||||
printer.appendPrnStr("Currency Code : " + sp.getCurrencyType(), FONT_NORMAL, AlignEnum.LEFT, true);
|
||||
printer.appendPrnStr("\n---------------------------\n", FONT_NORMAL, AlignEnum.LEFT, false);
|
||||
|
||||
if (!TextUtils.isEmpty(sp.getSecHostName())) {
|
||||
printer.appendPrnStr("SECONDARY HOST", FONT_NORMAL, AlignEnum.LEFT, true);
|
||||
printer.appendPrnStr("Name : " + sp.getSecHostName(), FONT_NORMAL, AlignEnum.LEFT, false);
|
||||
// printer.appendPrnStr("TID : " + sp.getSecHostTerminalId(), FONT_NORMAL, AlignEnum.LEFT, false);
|
||||
// printer.appendPrnStr("MID : " + sp.getSecHostMerchantId(), FONT_NORMAL, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("SHORT CODE : " + sp.getShortCode(), FONT_NORMAL, AlignEnum.LEFT, false);
|
||||
String secHostIpAddress = sp.getSecHostIpAddress();
|
||||
String[] secHostIpAndPort = splitIpAndPort(secHostIpAddress);
|
||||
String secHostIp = secHostIpAndPort[0];
|
||||
String secHostPort = secHostIpAndPort[1];
|
||||
printer.appendPrnStr("Primary Ip : " + secHostIp, FONT_NORMAL, AlignEnum.LEFT, true);
|
||||
printer.appendPrnStr("Primary Port : " + secHostPort, FONT_NORMAL, AlignEnum.LEFT, true);
|
||||
String secHostSecIpAddress = sp.getSecHostSecIpAddress();
|
||||
String[] SecHostSecIpAndPort = splitIpAndPort(secHostSecIpAddress);
|
||||
String secHostSecIp = SecHostSecIpAndPort[0];
|
||||
String secHostSecPort = SecHostSecIpAndPort[1];
|
||||
printer.appendPrnStr("Secondary Ip : " + secHostSecIp, FONT_NORMAL, AlignEnum.LEFT, true);
|
||||
printer.appendPrnStr("Secondary Port: " + secHostSecPort, FONT_NORMAL, AlignEnum.LEFT, true);
|
||||
printer.appendPrnStr("Currency Code : " + sp.getCurrencyType(), FONT_NORMAL, AlignEnum.LEFT, true);
|
||||
printer.appendPrnStr("\n---------------------------\n", FONT_NORMAL, AlignEnum.LEFT, false);
|
||||
}
|
||||
|
||||
printer.startPrint(true, ret -> {
|
||||
Log.d("Print", "Print result = " + ret);
|
||||
});
|
||||
}
|
||||
|
||||
private String[] splitIpAndPort(String raw) {
|
||||
if (raw == null || raw.trim().isEmpty()) {
|
||||
return new String[]{"", ""};
|
||||
}
|
||||
|
||||
raw = raw.trim();
|
||||
|
||||
// If starts with http/https
|
||||
if (raw.startsWith("http://") || raw.startsWith("https://")) {
|
||||
|
||||
// Attempt to extract host + port via URL
|
||||
try {
|
||||
java.net.URL url = new java.net.URL(raw);
|
||||
|
||||
String host = url.getHost(); // hostname or IP
|
||||
int port = url.getPort(); // -1 if no port
|
||||
String path = url.getPath(); // /api or /
|
||||
|
||||
// If port exists → split normally
|
||||
if (port != -1) {
|
||||
return new String[]{
|
||||
host, // e.g. 10.10.10.10
|
||||
String.valueOf(port) // e.g. 5000
|
||||
};
|
||||
}
|
||||
|
||||
// No port → do NOT split
|
||||
return new String[]{ raw, "" };
|
||||
|
||||
} catch (Exception e) {
|
||||
// fail-safe: do not split
|
||||
return new String[]{ raw, "" };
|
||||
}
|
||||
}
|
||||
|
||||
// Normal "IP:Port" split
|
||||
int idx = raw.lastIndexOf(":");
|
||||
|
||||
if (idx == -1) {
|
||||
return new String[]{ raw, "" };
|
||||
}
|
||||
|
||||
return new String[]{
|
||||
raw.substring(0, idx),
|
||||
raw.substring(idx + 1)
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
private void printLogo(Bitmap logoBitmap) {
|
||||
try {
|
||||
if (logoBitmap == null || printer == null) return;
|
||||
|
||||
Bitmap bmp = logoBitmap;
|
||||
|
||||
// Max printable width = 384px
|
||||
if (bmp.getWidth() > 384) {
|
||||
int newHeight = (int) (bmp.getHeight() * (384f / bmp.getWidth()));
|
||||
bmp = Bitmap.createScaledBitmap(bmp, 384, newHeight, true);
|
||||
}
|
||||
|
||||
printer.appendPrnStr("\n", FONT_NORMAL, AlignEnum.CENTER, false);
|
||||
printer.appendImage(bmp, AlignEnum.CENTER);
|
||||
printer.appendPrnStr("\n", FONT_NORMAL, AlignEnum.CENTER, false);
|
||||
|
||||
} catch (Exception e) {
|
||||
Log.e("PRINT", "Logo error: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Binary file not shown.
@ -51,7 +51,16 @@
|
||||
android:orientation="vertical">
|
||||
|
||||
<!-- HEADER -->
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="TERMINAL CONFIGURATION"
|
||||
android:fontFamily="@font/rubik_regular"
|
||||
android:textSize="16sp"
|
||||
android:textStyle="bold"
|
||||
android:textAlignment="center"
|
||||
android:paddingBottom="12dp"
|
||||
tools:text="TERMINAL CONFIGURATION"/>
|
||||
|
||||
<!-- Merchant Info -->
|
||||
<TextView
|
||||
@ -95,21 +104,10 @@
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="*************************************************"
|
||||
android:text="--------------------------------------------------------------------------"
|
||||
android:paddingTop="8dp"
|
||||
android:paddingBottom="8dp"
|
||||
tools:text="*********************************************************"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="TERMINAL CONFIGURATION"
|
||||
android:fontFamily="@font/rubik_regular"
|
||||
android:textSize="16sp"
|
||||
android:textStyle="bold"
|
||||
android:textAlignment="center"
|
||||
android:paddingBottom="12dp"
|
||||
tools:text="TERMINAL CONFIGURATION"/>
|
||||
tools:text="--------------------------------------------------------------------------"/>
|
||||
|
||||
<!-- PRIMARY HOST -->
|
||||
<TextView
|
||||
@ -196,10 +194,10 @@
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="*************************************************"
|
||||
android:text="--------------------------------------------------------------------------"
|
||||
android:paddingTop="8dp"
|
||||
android:paddingBottom="8dp"
|
||||
tools:text="********************************************************"/>
|
||||
tools:text="--------------------------------------------------------------------------"/>
|
||||
|
||||
<!-- SECONDARY HOST -->
|
||||
<LinearLayout
|
||||
|
||||
@ -192,7 +192,6 @@
|
||||
android:layout_height="24dp"
|
||||
android:layout_gravity="center"
|
||||
android:src="@drawable/ic_device_info"
|
||||
android:contentDescription="app version"
|
||||
app:tint="@color/white" />
|
||||
|
||||
</androidx.cardview.widget.CardView>
|
||||
@ -267,7 +266,7 @@
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_gravity="center"
|
||||
android:src="@drawable/ic_host"
|
||||
android:src="@drawable/ic_device_info"
|
||||
app:tint="@color/white" />
|
||||
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
BIN
paylibs/src/main/assets/fonts/consolab.ttf
Normal file
BIN
paylibs/src/main/assets/fonts/consolab.ttf
Normal file
Binary file not shown.
BIN
paylibs/src/main/assets/fonts/consolas.ttf
Normal file
BIN
paylibs/src/main/assets/fonts/consolas.ttf
Normal file
Binary file not shown.
Binary file not shown.
BIN
paylibs/src/main/assets/fonts/firacode_regular.ttf
Normal file
BIN
paylibs/src/main/assets/fonts/firacode_regular.ttf
Normal file
Binary file not shown.
@ -2,14 +2,12 @@ package com.utsmyanmar.paylibs.print.printx;
|
||||
|
||||
import static com.utsmyanmar.paylibs.utils.enums.CurrencyType.MMK;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Typeface;
|
||||
import android.os.Build;
|
||||
import android.os.RemoteException;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.core.content.res.ResourcesCompat;
|
||||
|
||||
@ -30,7 +28,6 @@ import com.utsmyanmar.paylibs.model.PayDetail;
|
||||
import com.utsmyanmar.paylibs.model.SettleData;
|
||||
import com.utsmyanmar.paylibs.print.PrintUtils;
|
||||
import com.utsmyanmar.paylibs.system.BaseErrorCode;
|
||||
import com.utsmyanmar.paylibs.utils.POSUtil;
|
||||
import com.utsmyanmar.paylibs.utils.core_utils.ByteUtil;
|
||||
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
|
||||
import com.utsmyanmar.paylibs.utils.enums.CardScheme;
|
||||
@ -87,8 +84,7 @@ public abstract class BaseXPrint {
|
||||
protected int fontSmall = 16;
|
||||
// protected FontEntity fontSmall = new FontEntity(DotMatrixFontEnum.CH_SONG_20X20, DotMatrixFontEnum.ASC_SONG_8X16);
|
||||
|
||||
protected int fontNormal = 21;
|
||||
protected int fontLarge = 22;
|
||||
protected int fontNormal = 20;
|
||||
|
||||
// protected FontEntity fontNormal = new FontEntity(DotMatrixFontEnum.CH_SONG_24X24, DotMatrixFontEnum.ASC_SONG_12X24);
|
||||
protected FontEntity fontBold = new FontEntity(DotMatrixFontEnum.CH_SONG_24X24, DotMatrixFontEnum.ASC_SONG_BOLD_16X24);
|
||||
@ -121,14 +117,13 @@ public abstract class BaseXPrint {
|
||||
Resources resources = PayLibsUtils.getInstance().context.getResources();
|
||||
// Typeface typeface = ResourcesCompat.getFont(PayLibsUtils.getInstance().context, R.font.consolas);
|
||||
// printer.setTypeface(typeface);
|
||||
// printer.setTypeface(Typeface.createFromAsset(PayLibsUtils.getInstance().context.getAssets(), "fonts/firacode_regular.ttf"));
|
||||
printer.setTypeface(Typeface.createFromAsset(PayLibsUtils.getInstance().context.getAssets(), "fonts/fira_code_semibold.ttf"));
|
||||
printer.setTypeface(Typeface.createFromAsset(PayLibsUtils.getInstance().context.getAssets(), "fonts/firacode_regular.ttf"));
|
||||
printer.setGray(getGrayLevel());
|
||||
|
||||
}
|
||||
|
||||
private GrayLevelEnum getGrayLevel() {
|
||||
int gray = 1;
|
||||
int gray = 2;
|
||||
GrayLevelEnum grayLevelEnum = GrayLevelEnum.LEVEL_1;
|
||||
|
||||
|
||||
@ -191,12 +186,12 @@ public abstract class BaseXPrint {
|
||||
}
|
||||
|
||||
protected void lineBreak() {
|
||||
printer.appendPrnStr("*****************************", fontNormal, AlignEnum.LEFT,false);
|
||||
printer.appendPrnStr("******************************", fontNormal, AlignEnum.LEFT,false);
|
||||
|
||||
}
|
||||
|
||||
protected void dashBreak() {
|
||||
printer.appendPrnStr("-----------------------------", fontNormal, AlignEnum.LEFT,false);
|
||||
printer.appendPrnStr("------------------------------", fontNormal, AlignEnum.LEFT,false);
|
||||
|
||||
}
|
||||
|
||||
@ -385,9 +380,7 @@ public abstract class BaseXPrint {
|
||||
batchNum = payDetail.getBatchNo();
|
||||
|
||||
|
||||
// printer.appendPrnStr("DATE :" + payDetail.getTransDate() + " TIME: " + payDetail.getTransTime(), fontNormal, AlignEnum.LEFT,false);
|
||||
printer.appendPrnStr("DATE :" + POSUtil.getInstance().formatDisplayDate(payDetail.getTransDate()), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("TIME :" + payDetail.getTransTime(), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("DATE :" + payDetail.getTransDate() + " TIME: " + payDetail.getTransTime(), fontNormal, AlignEnum.LEFT,false);
|
||||
if (Objects.equals(payDetail.getAccountType(), CardScheme.MPU_CTLS.name)) {
|
||||
hostName = HOST_NAME_MPU;
|
||||
} else {
|
||||
@ -634,10 +627,6 @@ public abstract class BaseXPrint {
|
||||
printer.appendPrnStr(first + " " + second, fontNormal, align,true);
|
||||
}
|
||||
|
||||
protected void print2ColumnsStringBoldCenter(String first, String second, int fontSize, AlignEnum align) {
|
||||
printer.appendPrnStr(first + " " + second, fontSize, align,true);
|
||||
}
|
||||
|
||||
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);
|
||||
@ -789,9 +778,6 @@ public abstract class BaseXPrint {
|
||||
cvmText = "NO SIGNATURE REQUIRED";
|
||||
break;
|
||||
}
|
||||
if(payDetail.getTransactionType() == TransactionsType.MMQR.value || payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value){
|
||||
cvmText = "";
|
||||
}
|
||||
|
||||
addSignatureBitmap(payDetail);
|
||||
|
||||
@ -805,11 +791,10 @@ public abstract class BaseXPrint {
|
||||
// }
|
||||
|
||||
emptyLine(0);
|
||||
// printer.appendPrnStr("I AGREE TO PAY THE ABOVE TOTAL AMOUNT", fontSmall, AlignEnum.CENTER,false);
|
||||
if (isQR) {
|
||||
// printer.appendPrnStr("ACCORDING TO THE ISSUER AGREEMENT", fontSmall, AlignEnum.CENTER,false);
|
||||
} else {
|
||||
printer.appendPrnStr("I AGREE TO PAY THE ABOVE TOTAL AMOUNT", fontSmall, AlignEnum.CENTER,false);
|
||||
if (isQR) {
|
||||
printer.appendPrnStr("ACCORDING TO THE ISSUER AGREEMENT", fontSmall, AlignEnum.CENTER,false);
|
||||
} else {
|
||||
printer.appendPrnStr("ACCORDING TO THE CARD ISSUER AGREEMENT", fontSmall, AlignEnum.CENTER,false);
|
||||
}
|
||||
|
||||
@ -861,14 +846,12 @@ public abstract class BaseXPrint {
|
||||
String merchantAddress = "";
|
||||
String merchantAddress2 = "";
|
||||
String merchantPhoneNo = "";
|
||||
String terminalName = "";
|
||||
|
||||
merchantName = SystemParamsOperation.getInstance().getMerchantName();
|
||||
receiptHeader = SystemParamsOperation.getInstance().getReceiptHeader();
|
||||
merchantAddress = SystemParamsOperation.getInstance().getMerchantAddress();
|
||||
merchantAddress2 = SystemParamsOperation.getInstance().getMerchantAddress2();
|
||||
merchantPhoneNo = SystemParamsOperation.getInstance().getMerchantPhoneNo();
|
||||
terminalName = SystemParamsOperation.getInstance().getTerminalName();
|
||||
|
||||
if (receiptHeader == null || TextUtils.equals(receiptHeader, "") || receiptHeader.trim().isEmpty()) {
|
||||
receiptHeader = merchantName;
|
||||
@ -882,18 +865,13 @@ public abstract class BaseXPrint {
|
||||
// if (TextUtils.equals(merchantPhoneNo, "") || merchantPhoneNo == null) {
|
||||
// merchantPhoneNo = "MERCHANT PHONENO";
|
||||
// }
|
||||
if(TextUtils.equals(terminalName, "") || terminalName == null){
|
||||
terminalName = "Terminal Name";
|
||||
}
|
||||
|
||||
|
||||
printer.appendPrnStr(receiptHeader, fontNormal, AlignEnum.CENTER,false);
|
||||
printer.appendPrnStr(merchantAddress, fontNormal, AlignEnum.CENTER,false);
|
||||
printer.appendPrnStr(merchantAddress2, fontNormal, AlignEnum.CENTER,false);
|
||||
printer.appendPrnStr(terminalName, fontNormal, AlignEnum.LEFT, false);
|
||||
// printer.appendPrnStr(merchantPhoneNo, fontNormal, AlignEnum.CENTER,false);
|
||||
// emptyLine(1);
|
||||
// dashBreak();
|
||||
lineBreak();
|
||||
emptyLine(1);
|
||||
}
|
||||
|
||||
protected void printKeyInfo() {
|
||||
@ -947,16 +925,16 @@ public abstract class BaseXPrint {
|
||||
batchNum = payDetail.getBatchNo();
|
||||
|
||||
|
||||
// printer.appendPrnStr("DATE :" + payDetail.getTransDate() + " TIME:" + payDetail.getTransTime(), fontNormal, AlignEnum.LEFT,false);
|
||||
printer.appendPrnStr("DATE :" + POSUtil.getInstance().formatDisplayDate(payDetail.getTransDate()), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("TIME :" + payDetail.getTransTime(), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("DATE :" + payDetail.getTransDate() + " TIME:" + payDetail.getTransTime(), fontNormal, AlignEnum.LEFT,false);
|
||||
|
||||
if (payDetail.getTransactionType() == TransactionsType.MMQR.value && payDetail.getQrTransStatus() == 1) {
|
||||
printer.appendPrnStr("TRACE NO:" + traceNum + " INV NO:" + invoiceNo, fontNormal, AlignEnum.LEFT,false);
|
||||
printer.appendPrnStr("TRACE NO:" + traceNum + " INV NO: " + invoiceNo, 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) {
|
||||
printer.appendPrnStr("BTH NO :" + batchNum + " INV NO:" + invoiceNo, fontNormal, AlignEnum.LEFT,false);
|
||||
printer.appendPrnStr("BTH NO :" + batchNum + " INV NO: " + invoiceNo, fontNormal, AlignEnum.LEFT,false);
|
||||
} else if (payDetail.getTransType().equals(SUMMARY)) {
|
||||
printer.appendPrnStr("HOST :" + HOST_NAME_MPU + "", fontNormal, AlignEnum.LEFT,false);
|
||||
}
|
||||
|
||||
/* 17 Sept 2024 Yoma requested to changed slip design for QR*/
|
||||
// printer.printColumnsString(new String[]{"MID :" + payDetail.getMerchantNo(), ""}, new int[]{3, 1}, new int[]{0, 2}, innerResultCallback);
|
||||
// printer.printColumnsString(new String[]{"TID :" + payDetail.getTerminalNo(), ""}, new int[]{3, 1}, new int[]{0, 2}, innerResultCallback);
|
||||
@ -971,6 +949,7 @@ public abstract class BaseXPrint {
|
||||
printer.appendPrnStr(transType.replace("_", " "),fontNormal, AlignEnum.CENTER,true);
|
||||
|
||||
if (!(payDetail.getQrTransStatus() != 1 && (payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value || payDetail.getTransactionType() == TransactionsType.MMQR.value))) {
|
||||
printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false);
|
||||
// printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT,false);
|
||||
}
|
||||
|
||||
@ -1005,126 +984,5 @@ public abstract class BaseXPrint {
|
||||
// LogUtil.d("lxy", "code:" + code + ",msg:" + msg);
|
||||
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
protected void printTerminalConfiguration() {
|
||||
|
||||
SystemParamsOperation sp = SystemParamsOperation.getInstance();
|
||||
// ---------- PRIMARY HOST ----------
|
||||
printer.appendPrnStr("PRIMARY HOST", fontNormal, AlignEnum.LEFT, true);
|
||||
printer.appendPrnStr("Name : " + sp.getHostName(), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("TID : " + sp.getTerminalId(), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("MID : " + sp.getMerchantId(), fontNormal, AlignEnum.LEFT, false);
|
||||
String[] ipPort = splitIpAndPort(sp.getIpAddress());
|
||||
printer.appendPrnStr("Primary Ip : " + ipPort[0], fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("Primary Port : " + ipPort[1], fontNormal, AlignEnum.LEFT, false);
|
||||
String[] secIpPort = splitIpAndPort(sp.getSecIpAddress());
|
||||
printer.appendPrnStr("Secondary Ip : " + secIpPort[0], fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("Secondary Port: " + secIpPort[1], fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("Currency Code : " + sp.getCurrencyType(), fontNormal, AlignEnum.LEFT, false);
|
||||
lineBreak();
|
||||
// ---------- SECONDARY HOST (optional) ----------
|
||||
if (!TextUtils.isEmpty(sp.getSecHostName())) {
|
||||
printer.appendPrnStr("SECONDARY HOST", fontNormal, AlignEnum.LEFT, true);
|
||||
printer.appendPrnStr("Name : " + sp.getSecHostName(), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("SHORT CODE : " + sp.getShortCode(), fontNormal, AlignEnum.LEFT, false);
|
||||
String[] secHostIp = splitIpAndPort(sp.getSecHostIpAddress());
|
||||
printer.appendPrnStr("Primary Ip : " + secHostIp[0], fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("Primary Port : " + secHostIp[1], fontNormal, AlignEnum.LEFT, false);
|
||||
String[] secHostSecIp = splitIpAndPort(sp.getSecHostSecIpAddress());
|
||||
printer.appendPrnStr("Secondary Ip : " + secHostSecIp[0], fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("Secondary Port: " + secHostSecIp[1], fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("Currency Code : " + sp.getCurrencyType(), fontNormal, AlignEnum.LEFT, false);
|
||||
lineBreak();
|
||||
printer.appendPrnStr("App Version : " + getAppVersion(), fontNormal, AlignEnum.LEFT, false);
|
||||
}
|
||||
}
|
||||
|
||||
private String getAppVersion() {
|
||||
try {
|
||||
return PayLibsUtils.getInstance().context
|
||||
.getPackageManager()
|
||||
.getPackageInfo(
|
||||
PayLibsUtils.getInstance().context.getPackageName(),
|
||||
0
|
||||
)
|
||||
.versionName;
|
||||
} catch (Exception e) {
|
||||
return "N/A";
|
||||
}
|
||||
}
|
||||
|
||||
private String[] splitIpAndPort(String raw) {
|
||||
if (raw == null || raw.trim().isEmpty()) {
|
||||
return new String[]{"", ""};
|
||||
}
|
||||
|
||||
raw = raw.trim();
|
||||
|
||||
// If starts with http/https
|
||||
if (raw.startsWith("http://") || raw.startsWith("https://")) {
|
||||
|
||||
// Attempt to extract host + port via URL
|
||||
try {
|
||||
java.net.URL url = new java.net.URL(raw);
|
||||
|
||||
String host = url.getHost(); // hostname or IP
|
||||
int port = url.getPort(); // -1 if no port
|
||||
String path = url.getPath(); // /api or /
|
||||
|
||||
// If port exists → split normally
|
||||
if (port != -1) {
|
||||
return new String[]{
|
||||
host, // e.g. 10.10.10.10
|
||||
String.valueOf(port) // e.g. 5000
|
||||
};
|
||||
}
|
||||
|
||||
// No port → do NOT split
|
||||
return new String[]{ raw, "" };
|
||||
|
||||
} catch (Exception e) {
|
||||
// fail-safe: do not split
|
||||
return new String[]{ raw, "" };
|
||||
}
|
||||
}
|
||||
|
||||
// Normal "IP:Port" split
|
||||
int idx = raw.lastIndexOf(":");
|
||||
|
||||
if (idx == -1) {
|
||||
return new String[]{ raw, "" };
|
||||
}
|
||||
|
||||
return new String[]{
|
||||
raw.substring(0, idx),
|
||||
raw.substring(idx + 1)
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
private void printLogo(Bitmap logoBitmap) {
|
||||
try {
|
||||
if (logoBitmap == null || printer == null) return;
|
||||
|
||||
Bitmap bmp = logoBitmap;
|
||||
|
||||
// Max printable width = 384px
|
||||
if (bmp.getWidth() > 384) {
|
||||
int newHeight = (int) (bmp.getHeight() * (384f / bmp.getWidth()));
|
||||
bmp = Bitmap.createScaledBitmap(bmp, 384, newHeight, true);
|
||||
}
|
||||
|
||||
printer.appendPrnStr("\n", fontNormal, AlignEnum.CENTER, false);
|
||||
printer.appendImage(bmp, AlignEnum.CENTER);
|
||||
printer.appendPrnStr("\n", fontNormal, AlignEnum.CENTER, false);
|
||||
|
||||
} catch (Exception e) {
|
||||
Log.e("PRINT", "Logo error: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -25,7 +25,4 @@ public interface PrintX {
|
||||
|
||||
void printKeyStatus();
|
||||
|
||||
void printTerminalConfig(PrintXStatus printXStatus);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -40,7 +40,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_kbz_logo_new, opts);
|
||||
bitmap = BitmapFactory.decodeResource(resources, R.drawable.print_kbz_logo_new_1, opts);
|
||||
}
|
||||
|
||||
|
||||
@ -172,7 +172,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
|
||||
|
||||
}
|
||||
|
||||
// emptyLine(1);
|
||||
emptyLine(1);
|
||||
startPrintNex();
|
||||
|
||||
} catch (RemoteException | NullPointerException e) {
|
||||
@ -234,7 +234,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
|
||||
printTransHeader(payDetail);
|
||||
printTransDetailReport(lists,hostType);
|
||||
|
||||
// emptyLine(1);
|
||||
emptyLine(1);
|
||||
startPrintNex();
|
||||
} catch (RemoteException e) {
|
||||
e.printStackTrace();
|
||||
@ -310,13 +310,16 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
|
||||
try {
|
||||
|
||||
// payDetail.getCustomerMobile() // as channel type
|
||||
|
||||
|
||||
|
||||
if(payDetail.getTransactionType() == TransactionsType.MMQR.value && payDetail.getQrTransStatus() == 1 ) {
|
||||
print2ColumnsStringNoSpace("PAYMENT TYPE ",": "+ (payDetail.getCustomerMobile() == null || payDetail.getCustomerMobile().isEmpty() ? "-": payDetail.getCustomerMobile().toUpperCase()));
|
||||
print2ColumnsStringNoSpace("TRXN REF ",": "+ payDetail.getReferNo());
|
||||
if(payDetail.getQrReferNo() != null && !payDetail.getQrReferNo().isEmpty()) {
|
||||
print2ColumnsStringNoSpace("MMQR REF ",": "+ payDetail.getQrReferNo());
|
||||
}
|
||||
print2ColumnsStringNoSpace("TRXN ID",":"+ (payDetail.getQrTransId() == null || payDetail.getQrTransId().isEmpty() ? "-": payDetail.getQrTransId()));
|
||||
print2ColumnsStringNoSpace("TRXN ID ",": "+ (payDetail.getQrTransId() == null || payDetail.getQrTransId().isEmpty() ? "-": payDetail.getQrTransId()));
|
||||
print2ColumnsStringNoSpace("STATUS ",": "+ PrintUtils.getInstance().getQrTransStatus(payDetail.getQrTransStatus()));
|
||||
|
||||
} else if(payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value && payDetail.getQrTransStatus() == 1) {
|
||||
@ -339,9 +342,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
|
||||
if (payDetail.getQrTransStatus() == 1) {
|
||||
|
||||
boolean isNeedMinusSign = payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value;
|
||||
lineBreak();
|
||||
print2ColumnsStringBoldCenter("TOTAL MMK", isNeedMinusSign? "- "+PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount()): PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount()),fontLarge, AlignEnum.LEFT);
|
||||
lineBreak();
|
||||
print2ColumnsStringBoldCenter("TOTAL MMK", isNeedMinusSign? "- "+PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount()): PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount()), AlignEnum.LEFT);
|
||||
|
||||
// if(payDetail.getTransactionType() == TransactionsType.MMQR.value) {
|
||||
// String data = payDetail.getReferNo()+"-"+payDetail.getAmount()+"-"+payDetail.getQrTransId()+"-"+payDetail.getMerchantNo()+"-"+payDetail.getCustomerMobile().toUpperCase()+"-"+payDetail.getOriginalTransDate();
|
||||
@ -423,21 +424,5 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void printTerminalConfig(PrintXStatus printXStatus) {
|
||||
this.callbackStatus = printXStatus;
|
||||
|
||||
try {
|
||||
setHeight(0x12);
|
||||
printLogo();
|
||||
printMerchantHeader();
|
||||
printer.appendPrnStr("TERMINAL CONFIGURATION", fontLarge, AlignEnum.CENTER, true);
|
||||
printTerminalConfiguration();
|
||||
startPrintNex();
|
||||
} catch (RemoteException e) {
|
||||
e.printStackTrace();
|
||||
callbackStatus.onFailure();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -54,8 +54,4 @@ public class PrintXReceipt {
|
||||
public void printDetailReport(PayDetail payDetail, List<PayDetail> lists, HostType hostType,PrintXStatus printXStatus) {
|
||||
printX.printDetailReport(payDetail,lists,hostType,printXStatus);
|
||||
}
|
||||
|
||||
public void printTerminalHostConfig(PrintXStatus printXStatus){
|
||||
printX.printTerminalConfig(printXStatus);
|
||||
}
|
||||
}
|
||||
|
||||
@ -553,21 +553,6 @@ public class POSUtil {
|
||||
|
||||
}
|
||||
|
||||
public String formatDisplayDate(String input){
|
||||
|
||||
SimpleDateFormat inputFormat = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
|
||||
SimpleDateFormat outputFormat = new SimpleDateFormat("dd MMM yyyy", Locale.getDefault());
|
||||
|
||||
try {
|
||||
Date date = inputFormat.parse(input);
|
||||
return outputFormat.format(date);
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return input;
|
||||
}
|
||||
|
||||
public Date getDateByTransDateTime(String transDate,String transTime) {
|
||||
String dateFormatPattern = "dd/MM/yy HH:mm";
|
||||
SimpleDateFormat formatter = new SimpleDateFormat(dateFormatPattern,Locale.getDefault());
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Loading…
Reference in New Issue
Block a user