diff --git a/.kotlin/sessions/kotlin-compiler-14813118053369288560.salive b/.kotlin/sessions/kotlin-compiler-14813118053369288560.salive
new file mode 100644
index 0000000..e69de29
diff --git a/app/build.gradle b/app/build.gradle
index d79bdcf..bf6632e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -11,7 +11,7 @@ android {
compileSdk 34
defaultConfig {
- applicationId "com.utsmm.kbz" //mpu
+ applicationId "com.utsmm.kbz.uat" //mpu
minSdk 24
targetSdk 33
versionCode 10
diff --git a/app/src/main/java/com/utsmm/kbz/ui/kpay/QRTransactionFragment.java b/app/src/main/java/com/utsmm/kbz/ui/kpay/QRTransactionFragment.java
index bc8d8ea..f55e7c9 100644
--- a/app/src/main/java/com/utsmm/kbz/ui/kpay/QRTransactionFragment.java
+++ b/app/src/main/java/com/utsmm/kbz/ui/kpay/QRTransactionFragment.java
@@ -325,7 +325,7 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
if(payDetail.getQrTransStatus() != -1) {
payDetail.setQrTransStatus(2);
}
-
+ sharedViewModel.pushReceipt(buildEReceiptQRReceipt(payDetail, false, "QR Expired!"));
sharedViewModel.payDetail.postValue(payDetail);
safeNavigateToRouteId();
@@ -333,6 +333,7 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
} catch (Exception e) {
LogUtil.d(TAG, "On Exception::");
+ sharedViewModel.pushReceipt(buildEReceiptQRReceipt(payDetail, false, "QR Failed! :" + e.getMessage()));
e.printStackTrace();
if (count == totalCount) {
diff --git a/app/src/main/java/com/utsmm/kbz/ui/navigation/NaviMainFragment.java b/app/src/main/java/com/utsmm/kbz/ui/navigation/NaviMainFragment.java
index 102eed2..bf3b6c9 100644
--- a/app/src/main/java/com/utsmm/kbz/ui/navigation/NaviMainFragment.java
+++ b/app/src/main/java/com/utsmm/kbz/ui/navigation/NaviMainFragment.java
@@ -2,8 +2,20 @@ package com.utsmm.kbz.ui.navigation;
import android.content.Context;
import android.text.TextUtils;
+import android.util.Log;
+import com.nexgo.oaf.apiv3.APIProxy;
+import com.nexgo.oaf.apiv3.DeviceEngine;
+import com.nexgo.oaf.apiv3.DeviceInfo;
+import com.nexgo.oaf.apiv3.SdkResult;
+import com.nexgo.oaf.apiv3.device.printer.AlignEnum;
+import com.nexgo.oaf.apiv3.device.printer.GrayLevelEnum;
+import com.nexgo.oaf.apiv3.device.printer.LineOptionEntity;
+import com.nexgo.oaf.apiv3.device.printer.Printer;
import com.utsmyanmar.baselib.fragment.DataBindingFragment;
+import com.utsmyanmar.baselib.network.model.sirius.SiriusHost;
+import com.utsmyanmar.baselib.network.model.sirius.SiriusMerchant;
+import com.utsmyanmar.baselib.network.model.sirius.SiriusResponse;
import com.utsmyanmar.baselib.util.DataBindingConfig;
import com.utsmyanmar.paylibs.Constant;
import com.utsmyanmar.paylibs.sign_on.EchoTestProcess;
@@ -13,6 +25,8 @@ import com.utsmm.kbz.BR;
import com.utsmm.kbz.R;
import com.utsmm.kbz.ui.core_viewmodel.SharedViewModel;
+import java.util.List;
+
public class NaviMainFragment extends DataBindingFragment {
private OnFragmentInteractionListener mListener;
@@ -137,6 +151,7 @@ public class NaviMainFragment extends DataBindingFragment {
});
}
+
public void onClickLogOff() {
showLoadingDialog("Sending LogOff!");
@@ -176,6 +191,148 @@ public class NaviMainFragment extends DataBindingFragment {
mListener.onClickFunction();
}
+ private GrayLevelEnum getGrayLevel() {
+ int gray = 2;
+ GrayLevelEnum grayLevelEnum = GrayLevelEnum.LEVEL_1;
+
+
+ switch (gray) {
+ case 0:
+ grayLevelEnum = GrayLevelEnum.LEVEL_0;
+ break;
+ case 1:
+ grayLevelEnum = GrayLevelEnum.LEVEL_1;
+ break;
+ case 2:
+ grayLevelEnum = GrayLevelEnum.LEVEL_2;
+ break;
+ case 3:
+ grayLevelEnum = GrayLevelEnum.LEVEL_3;
+ break;
+ case 4:
+ grayLevelEnum = GrayLevelEnum.LEVEL_4;
+ break;
+ default:
+ grayLevelEnum = GrayLevelEnum.LEVEL_1;
+ break;
+ }
+
+ return grayLevelEnum;
+ }
+
+ public void onClickPrintConfig() {
+
+ DeviceEngine deviceEngine = APIProxy.getDeviceEngine(requireContext());
+ Printer printer = deviceEngine.getPrinter();
+ DeviceInfo deviceInfo = deviceEngine.getDeviceInfo();
+
+ int FONT_NORMAL = 24;
+ int FONT_HEADER = 32;
+
+ int status = printer.getStatus();
+ if (status != SdkResult.Success) {
+ Log.d("Printer", "Printer error: " + status);
+ return;
+ }
+
+ SystemParamsOperation sp = SystemParamsOperation.getInstance();
+
+ String addr1 = sp.getMerchantAddress();
+ String addr2 = sp.getMerchantAddress2();
+ String phone = sp.getMerchantPhoneNo();
+ if (addr2 == null) addr2 = "";
+ if (phone == null || phone.trim().isEmpty()) phone = "";
+
+ printer.setGray(getGrayLevel());
+
+ // ================== Header ==================
+ printer.appendPrnStr("==== Device Configs ====", FONT_HEADER, AlignEnum.CENTER, true);
+ printer.appendPrnStr(" ", FONT_NORMAL, AlignEnum.CENTER, false);
+
+ if(!TextUtils.isEmpty(addr1))
+ printer.appendPrnStr(addr1, FONT_NORMAL, AlignEnum.CENTER, true);
+ if(!TextUtils.isEmpty(addr2))
+ printer.appendPrnStr(addr2, FONT_NORMAL, AlignEnum.CENTER, true);
+ if(!TextUtils.isEmpty(phone))
+ printer.appendPrnStr(phone, FONT_NORMAL, AlignEnum.CENTER, true);
+
+ printer.appendPrnStr(" ", FONT_NORMAL, AlignEnum.CENTER, false);
+
+
+ // ================== Device Info ==================
+ printer.appendPrnStr("Device S/N", deviceInfo.getSn(), FONT_NORMAL, true);
+ printer.appendPrnStr(" ", FONT_NORMAL, AlignEnum.CENTER, false);
+
+
+ // ================== Host Section ==================
+ printer.appendPrnStr("HOSTS", FONT_HEADER, AlignEnum.LEFT, true);
+ printer.appendPrnStr(" ", FONT_NORMAL, AlignEnum.CENTER, false);
+
+ // ---- Primary Host ----
+ printer.appendPrnStr("Name :", sp.getHostName(), FONT_NORMAL, false);
+ printTwoColWrapped(printer, "IP :", sp.getIpAddress(), FONT_NORMAL, false);
+ printTwoColWrapped(printer, "Sec IP :", sp.getSecIpAddress(), FONT_NORMAL, false);
+ printer.appendPrnStr("MID :", sp.getMerchantId(), FONT_NORMAL, false);
+ printer.appendPrnStr("TID :", sp.getTerminalId(), FONT_NORMAL, false);
+
+ printer.appendPrnStr("--------------------------------", FONT_NORMAL, AlignEnum.LEFT, false);
+
+ // ---- Secondary Host ----
+ if (!TextUtils.isEmpty(sp.getSecHostName())) {
+
+ printer.appendPrnStr("Name :", sp.getSecHostName(), FONT_NORMAL, false);
+ printTwoColWrapped(printer, "IP :", sp.getSecHostIpAddress(), FONT_NORMAL, false);
+ printTwoColWrapped(printer, "Sec IP :", sp.getSecHostSecIpAddress(), FONT_NORMAL, false);
+ printer.appendPrnStr("MID :", sp.getSecHostMerchantId(), FONT_NORMAL, false);
+ printer.appendPrnStr("TID :", sp.getSecHostTerminalId(), FONT_NORMAL, false);
+
+ printer.appendPrnStr("--------------------------------", FONT_NORMAL, AlignEnum.LEFT, false);
+ }
+
+ // ================== Start Printing ==================
+ printer.startPrint(true, ret -> {
+ if(ret == SdkResult.Success){
+ Log.d("Printer", "Print success");
+ } else {
+ Log.d("Printer", "Print failed: " + ret);
+ }
+ });
+ }
+
+
+ private void printTwoColWrapped(Printer p, String left, String right, int font, Boolean isBold) {
+
+ if (right == null) right = "";
+
+ int maxRight = 24; // recommended width for right column
+
+ // If right text fits → print normally
+ if (right.length() <= maxRight) {
+ p.appendPrnStr(left, right, font, isBold);
+ return;
+ }
+
+ // Otherwise wrap it
+ int start = 0;
+ boolean firstLine = true;
+
+ while (start < right.length()) {
+ int end = Math.min(start + maxRight, right.length());
+ String part = right.substring(start, end);
+
+ if (firstLine) {
+ p.appendPrnStr(left, part, font, isBold);
+ firstLine = false;
+ } else {
+ // subsequent lines: blank left column
+ p.appendPrnStr(" ", part, font, isBold);
+ }
+
+ start += maxRight;
+ }
+ }
+
+
public void onClickVersion(){
mListener.onClickVersion();
}
@@ -184,7 +341,6 @@ public class NaviMainFragment extends DataBindingFragment {
mListener.onClickExit();
}
-
}
public interface OnFragmentInteractionListener {
@@ -195,5 +351,6 @@ public class NaviMainFragment extends DataBindingFragment {
void onClickVersion();
void onClickExit();
+
}
}
diff --git a/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefundProcessFragment.java b/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefundProcessFragment.java
index efd5222..4bf196f 100644
--- a/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefundProcessFragment.java
+++ b/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefundProcessFragment.java
@@ -150,7 +150,6 @@ public class QRRefundProcessFragment extends DataBindingFragment {
} else {
LogUtil.d(TAG, "Refund failed!");
-
payDetail.setQrTransStatus(-1);
payDetail.setQrReferNo(referenceNo);
payDetail.setReferNo(referenceNo);
@@ -160,7 +159,8 @@ public class QRRefundProcessFragment extends DataBindingFragment {
errorMsg = response.getResponse().getMsg();
}
payDetail.setTradeResultDes(errorMsg);
-
+ sharedViewModel.pushReceipt(buildEReceiptQRReceipt(payDetail, false, "Refund Failed! "+errorMsg));
+
sharedViewModel.payDetail.setValue(payDetail);
navigateToNext();
}
diff --git a/app/src/main/res/drawable/ic_mmqr.png b/app/src/main/res/drawable/ic_mmqr.png
new file mode 100644
index 0000000..376941f
Binary files /dev/null and b/app/src/main/res/drawable/ic_mmqr.png differ
diff --git a/app/src/main/res/layout/fragment_dashboard_screen.xml b/app/src/main/res/layout/fragment_dashboard_screen.xml
index 7c00102..8705e73 100644
--- a/app/src/main/res/layout/fragment_dashboard_screen.xml
+++ b/app/src/main/res/layout/fragment_dashboard_screen.xml
@@ -266,8 +266,7 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- KBZ
+ KBZ UAT
SMILE-SIT
SMILE-UAT
SMILE-PLUS
diff --git a/baselib/build.gradle b/baselib/build.gradle
index a9136d6..1c599ae 100644
--- a/baselib/build.gradle
+++ b/baselib/build.gradle
@@ -14,6 +14,8 @@ android {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
+ buildConfigField "String", "ERECEIPT_SECRET", "\"${ERECEIPT_SECRET}\""
+
// Room compiler options
javaCompileOptions {
diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/di/NetworkModule.java b/baselib/src/main/java/com/utsmyanmar/baselib/di/NetworkModule.java
index bc0eb17..a885129 100644
--- a/baselib/src/main/java/com/utsmyanmar/baselib/di/NetworkModule.java
+++ b/baselib/src/main/java/com/utsmyanmar/baselib/di/NetworkModule.java
@@ -285,8 +285,8 @@ public class NetworkModule {
tmsAddress = getTMSUrlFromNative();
}
- String baseUrl = tmsAddress.trim() + "/api/v1/";
-// String baseUrl = tmsAddress.trim() + "/";
+// String baseUrl = tmsAddress.trim() + "/api/v1/";
+ String baseUrl = tmsAddress.trim() + "/";
final Gson gson =
@@ -398,9 +398,11 @@ public class NetworkModule {
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.build();
+// String baseUrl = "http://receipt-nest.utsmyanmar.com/";
+ String baseUrl = "https://api-tms-uat.kbzbank.com:8443/receipt/";
return new Retrofit.Builder()
- .baseUrl("http://receipt-nest.utsmyanmar.com/") // base URL
+ .baseUrl(baseUrl)
.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(client)
diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/repo/Repository.java b/baselib/src/main/java/com/utsmyanmar/baselib/repo/Repository.java
index b95370a..5988cc3 100644
--- a/baselib/src/main/java/com/utsmyanmar/baselib/repo/Repository.java
+++ b/baselib/src/main/java/com/utsmyanmar/baselib/repo/Repository.java
@@ -6,6 +6,7 @@ import androidx.lifecycle.LiveData;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
+import com.utsmyanmar.baselib.BuildConfig;
import com.utsmyanmar.baselib.db.dao.EmvDetailDao;
import com.utsmyanmar.baselib.db.dao.PayDetailDao;
import com.utsmyanmar.baselib.db.model.EmvDetail;
@@ -106,7 +107,8 @@ public class Repository {
return siriusApiService.getParams(siriusRequest);
}
public Observable sendReceipt(Object body){
- String apiSecret = "8f4df38d1001bcc4620b5c736c66a03eef4653eb3ba31105faa2f2ee294c4a46";
+// String apiSecret = "y812J21lhha11OS";
+ String apiSecret = BuildConfig.ERECEIPT_SECRET;
String timestamp = String.valueOf(System.currentTimeMillis());
String bodyString = new Gson().toJson(body);
String dataToHash = bodyString + apiSecret + timestamp;
diff --git a/gradle.properties b/gradle.properties
index ef03384..afcdd41 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -28,4 +28,5 @@ android.useAndroidX=true
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true
# Disable Android Studio's Jetifier to avoid conflicts
-android.enableJetifier=false
\ No newline at end of file
+android.enableJetifier=false
+ERECEIPT_SECRET=y812J21lhha11OS
diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java
index c916e82..8a6dc29 100644
--- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java
+++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java
@@ -42,8 +42,8 @@ public class SystemParamsSettings implements Serializable {
// private String tmsAddress = "https://tms.smile-mm.com";
// private String tmsAddress = "http://128.199.170.203";
- private String tmsAddress = "http://sirius-nest.utsmyanmar.com";
-// private String tmsAddress = "https://api-tms-uat.kbzbank.com:8443/sirius";
+// private String tmsAddress = "http://sirius-nest.utsmyanmar.com";
+ private String tmsAddress = "https://api-tms-uat.kbzbank.com:8443/sirius";
private String terminalCapability = "E0E8C8";