Compare commits

...

8 Commits

Author SHA1 Message Date
MooN
2c98727f2e Transactions buttons show / hide with config 2026-01-26 12:01:58 +06:30
MooN
547c04e0ca re-unbind visible on hostConfig 2026-01-23 12:10:20 +06:30
MooN
4b10de477d uat url changed 2026-01-23 11:27:17 +06:30
MooN
f33f3463a8 Update BaseXPrint.java 2026-01-23 10:54:39 +06:30
MooN
133593a4d7 Update network_security_config.xml 2026-01-23 10:28:53 +06:30
MooN
2fedb6cee2 printer disable function 2026-01-23 10:28:10 +06:30
MooN
84f0620481 Update NetworkModule.java 2026-01-22 20:04:27 +06:30
MooN
b2a92f8cf8 changed to local server 2026-01-22 13:47:44 +06:30
17 changed files with 230 additions and 173 deletions

View File

@ -160,7 +160,7 @@ public class MainActivity extends AppCompatActivity implements
SystemParamsOperation.getInstance().setTmsAddress("https://api-tms-uat.kbzbank.com:8443/sirius");
// SystemParamsOperation.getInstance().setTmsAddress("https://sirius-nest.utsmyanmar.com");
SystemParamsOperation.getInstance().setEReceiptAddress("https://api-tms-uat.kbzbank.com:8443/receipt");
// SystemParamsOperation.getInstance().setEReceiptAddress("http://receipt-nest.utsmyanmar.com");
// SystemParamsOperation.getInstance().setEReceiptAddress("https://receipt-nest.utsmyanmar.com");
PinPad pinPad = MyApplication.getInstance().deviceEngine.getPinPad();
byte[] encryptedPIK = SystemParamsOperation.getInstance().getPIK();

View File

@ -28,6 +28,7 @@ import com.utsmm.kbz.ui.core_viewmodel.SharedViewModel;
public class PrintReceiptFragment extends DataBindingFragment implements DataBindingFragment.BackPressCallback {
private SharedViewModel sharedViewModel;
private static final String TAG = PrintReceiptFragment.class.getSimpleName();
private boolean printerDisabled = SystemParamsOperation.getInstance().getPrinterDisabled();
@Override
protected int currentId() {
@ -48,7 +49,6 @@ public class PrintReceiptFragment extends DataBindingFragment implements DataBin
@Override
protected void initViewModel() {
sharedViewModel = getFragmentScopeViewModel(SharedViewModel.class);
}
@Override
@ -76,6 +76,7 @@ public class PrintReceiptFragment extends DataBindingFragment implements DataBin
setToolBarTitleWithoutBackIcon(getResourceString(R.string.title_print_receipt));
sharedViewModel.printReceiptButtons.setValue(0);
sharedViewModel.printerDisabled.setValue(printerDisabled);
PayDetail payDetail = sharedViewModel.payDetail.getValue();
@ -122,7 +123,12 @@ public class PrintReceiptFragment extends DataBindingFragment implements DataBin
super.onViewCreated(view, savedInstanceState);
sharedViewModel.setPrintStatus(PrintStatus.NOT_PRINT);
sharedViewModel.postPrintReceiptMsg("Print Receipt for Merchant?");
if(printerDisabled){
sharedViewModel.postPrintReceiptMsg("Receipt is saved as E-receipt!");
}else{
sharedViewModel.postPrintReceiptMsg("Print Receipt for Merchant?");
}
observePrintProcess();
@ -278,6 +284,10 @@ public class PrintReceiptFragment extends DataBindingFragment implements DataBin
}
}
public void onContinue(){
isCardInside();
}
}
private void alertPaperRoll(String title, String message) {

View File

@ -115,6 +115,7 @@ public class SharedViewModel extends ViewModel {
public SingleLiveEvent<HostType> hostType = new SingleLiveEvent<>();
public MutableLiveData<Integer> printReceiptButtons = new MutableLiveData<>(0);
public SingleLiveEvent<Boolean> printerDisabled = new SingleLiveEvent<>();
public SingleLiveEvent<String> printReceiptMsg = new SingleLiveEvent<>();

View File

@ -68,8 +68,60 @@ public class DashboardTransFragment extends DataBindingFragment {
initData();
}
// private void initData() {
// TMSUtil.getInstance().checkFeaturesList(requireActivity(),featuresList);
// mainAdapter.notifyDataSetChanged();
// }
Boolean isRefundEnabled = SystemParamsOperation.getInstance().getRefundStatus();
Boolean isVoidEnabled = SystemParamsOperation.getInstance().getVoidStatus();
Boolean isPreAuthEnabled = SystemParamsOperation.getInstance().getPreAuthStatus();
Boolean isCashAdvanceEnabled = SystemParamsOperation.getInstance().getCashAdvanceStatus();
private void initData() {
TMSUtil.getInstance().checkFeaturesList(requireActivity(),featuresList);
featuresList.clear();
ArrayList<Features> allFeatures = new ArrayList<>();
TMSUtil.getInstance().checkFeaturesList(requireActivity(), allFeatures);
for (Features feature : allFeatures) {
switch (feature.getFeaturesType()) {
case REFUND:
if (isRefundEnabled) {
featuresList.add(feature);
}
break;
case VOID:
if (isVoidEnabled) {
featuresList.add(feature);
}
break;
case PRE_AUTH_SALE:
case PRE_AUTH_COMPLETE_VOID:
case PRE_AUTH_VOID:
case PRE_AUTH_COMPLETE:
if (isPreAuthEnabled) {
featuresList.add(feature);
}
break;
case CASH_ADVANCE:
if(isCashAdvanceEnabled){
featuresList.add(feature);
}
break;
default:
featuresList.add(feature);
break;
}
}
mainAdapter.notifyDataSetChanged();
}
@ -131,7 +183,6 @@ public class DashboardTransFragment extends DataBindingFragment {
super.onViewCreated(view, savedInstanceState);
Boolean demoStatus = SystemParamsOperation.getInstance().getDemoStatus();
LogUtil.d("KMK", "demo => " + demoStatus);
}
public class ClickEvent {

View File

@ -42,8 +42,8 @@ public class RefundCertificateManager {
return;
};
String downloadBase = tmsAddress.trim() + "/api/v1/file/download?filePath="; //local
// String downloadBase = tmsAddress.trim() + "/file/download?filePath="; // uat and prod
// String downloadBase = tmsAddress.trim() + "/api/v1/file/download?filePath="; //local
String downloadBase = tmsAddress.trim() + "/file/download?filePath="; // uat and prod
String certUrl = SystemParamsOperation.getInstance().getCertificateUrl();
String clientCertUrl = SystemParamsOperation.getInstance().getCertificateClientUrl();

View File

@ -15,6 +15,7 @@ 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.paylibs.utils.core_utils.SystemParamsOperation;
public class HostConfigFragment extends DataBindingFragment {

View File

@ -647,6 +647,9 @@ public class TMSSetupsImpl implements TMSSetups{
else if(TextUtils.equals(name,"bin_list")) {
SystemParamsOperation.getInstance().setBinValue(data);
}
else if(TextUtils.equals(name, "printer_disabled")){
SystemParamsOperation.getInstance().setPrinterDisabled(parseBoolean(data));
}
}
SystemParamsOperation.getInstance().setCarouselUrls(convertToString(imgUrls));

View File

@ -10,6 +10,9 @@
<variable
name="viewModel"
type="com.utsmm.kbz.ui.settings.HostConfigViewModel" />
<variable
name="sharedViewModel"
type="com.utsmm.kbz.ui.core_viewmodel.SharedViewModel" />
<variable
name="click"
type="com.utsmm.kbz.ui.settings.HostConfigFragment.ClickHandler" />

View File

@ -5,6 +5,7 @@
<data>
<import type="com.utsmyanmar.paylibs.utils.POSUtil" />
<import type="android.view.View"/>
<variable
name="sharedViewModel"
type="com.utsmm.kbz.ui.core_viewmodel.SharedViewModel" />
@ -296,92 +297,136 @@
</androidx.cardview.widget.CardView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="@{sharedViewModel.printReceiptButtons}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:padding="12dp">
<LinearLayout
android:layout_width="match_parent"
<!-- Cancel Button -->
<androidx.cardview.widget.CardView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="@{sharedViewModel.printReceiptButtons}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:padding="12dp">
android:layout_weight="1"
android:layout_marginEnd="6dp"
app:cardCornerRadius="12dp"
app:cardElevation="2dp"
android:foreground="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<!-- Cancel Button -->
<androidx.cardview.widget.CardView
android:layout_width="0dp"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginEnd="6dp"
app:cardCornerRadius="12dp"
app:cardElevation="2dp"
android:foreground="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
android:orientation="horizontal"
android:gravity="center"
android:background="@color/white"
android:padding="14dp"
android:onClick="@{()->click.onCancel()}">
<LinearLayout
android:layout_width="match_parent"
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:background="@color/white"
android:padding="14dp"
android:onClick="@{()->click.onCancel()}">
android:text="@string/layout_cancel"
android:textColor="@color/colorPrimary"
android:textSize="15sp"
android:textStyle="bold"
android:fontFamily="@font/rubik_medium" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- Confirm Button -->
<androidx.cardview.widget.CardView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="6dp"
app:cardCornerRadius="12dp"
app:cardElevation="4dp"
android:foreground="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/layout_cancel"
android:textColor="@color/colorPrimary"
android:textSize="15sp"
android:textStyle="bold"
android:fontFamily="@font/rubik_medium" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- Confirm Button -->
<androidx.cardview.widget.CardView
android:layout_width="0dp"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="6dp"
app:cardCornerRadius="12dp"
app:cardElevation="4dp"
android:foreground="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
android:orientation="horizontal"
android:gravity="center"
android:background="@color/colorPrimary"
android:padding="14dp"
android:onClick="@{()->click.onConfirm()}">
<LinearLayout
android:layout_width="match_parent"
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:background="@color/colorPrimary"
android:padding="14dp"
android:onClick="@{()->click.onConfirm()}">
android:text="@string/layout_print"
android:textColor="@color/white"
android:textSize="15sp"
android:textStyle="bold"
android:fontFamily="@font/rubik_medium" />
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="12dp"
android:visibility="@{sharedViewModel.printerDisabled ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/layout_print"
android:textColor="@color/white"
android:textSize="15sp"
android:textStyle="bold"
android:fontFamily="@font/rubik_medium" />
<!-- Confirm Button -->
<androidx.cardview.widget.CardView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"
app:cardCornerRadius="12dp"
app:cardElevation="4dp">
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:gravity="center"
android:onClick="@{()->click.onContinue()}"
android:orientation="horizontal"
android:padding="14dp">
</androidx.cardview.widget.CardView>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/rubik_medium"
android:text="@string/txt_continue"
android:textColor="@color/white"
android:textSize="15sp"
android:textStyle="bold" />
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -616,5 +616,6 @@
<string name="txt_no_qr_transactions_to_settle">No QR transactions to settle</string>
<string name="txt_settle_qr_transactions">Confirm</string>
<string name="txt_search_by_trace">Search By Trace No</string>
<string name="txt_continue">Continue</string>
</resources>

View File

@ -6,6 +6,7 @@
<domain includeSubdomains="true">128.199.170.203</domain>
<domain includeSubdomains="true">152.42.199.193</domain>
<domain includeSubdomains="true">api.kbzpay.com</domain>
<domain includeSubdomains="true">api-uat.kbzpay.com</domain>
<domain includeSubdomains="true">sirius-nest.utsmyanmar.com</domain>
</domain-config>

View File

@ -254,7 +254,7 @@ public class NetworkModule {
}
if (baseUrl.isEmpty()) {
baseUrl = "http://api.kbzpay.com/payment/gateway/uat/";
baseUrl = "http://api-uat.kbzpay.com/payment/gateway/uat/";
}
return new Retrofit.Builder()
.baseUrl(baseUrl)
@ -302,88 +302,6 @@ public class NetworkModule {
.create(SiriusApiService.class);
}
// @Provides
// @Singleton
// @KPayRefundRetrofit
// public Retrofit provideKPayRefundRetrofit(@ApplicationContext Context context) {
// char[] password = "test123".toCharArray();
//
// try {
//
// if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
// Security.addProvider(new BouncyCastleProvider());
// }
// // Client keystore
// KeyStore clientKeyStore = KeyStore.getInstance("PKCS12",new BouncyCastleProvider());
// InputStream clientStream = context.getResources().openRawResource(R.raw.client);
// clientKeyStore.load(clientStream, password);
// clientStream.close();
//
// KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
// kmf.init(clientKeyStore, password);
// KeyManager[] keyManagers = kmf.getKeyManagers();
//
// InputStream caInput = context.getResources().openRawResource(R.raw.certi);
// CertificateFactory cf = CertificateFactory.getInstance("X.509");
// Certificate ca = cf.generateCertificate(caInput);
//
// KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
// keyStore.load(null, null);
// keyStore.setCertificateEntry("ca", ca);
//
// TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
// tmf.init(keyStore);
// TrustManager[] trustManagers = tmf.getTrustManagers();
//
// X509TrustManager x509TrustManager = null;
// for (TrustManager tm : trustManagers) {
// if (tm instanceof X509TrustManager) {
// x509TrustManager = (X509TrustManager) tm;
// break;
// }
// }
//
// SSLContext sslContext = SSLContext.getInstance("TLS");
// sslContext.init(kmf.getKeyManagers(), new TrustManager[]{x509TrustManager}, null);
//
// HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
// loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
//
// OkHttpClient okHttp = new OkHttpClient.Builder()
// .sslSocketFactory(sslContext.getSocketFactory(), x509TrustManager)
// .addInterceptor(loggingInterceptor)
// .hostnameVerifier(new HostnameVerifier() {
// @Override
// public boolean verify(String hostname, SSLSession session) {
// return true;
// }
// })
// .build();
//
// return new Retrofit.Builder()
// .baseUrl(Refund_Base_Url)
// .client(okHttp)
// .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
// .addConverterFactory(GsonConverterFactory.create())
// .build();
//
// } catch (Exception e) {
// e.printStackTrace();
//
// OkHttpClient okHttp = new OkHttpClient();
// return new Retrofit.Builder()
// .baseUrl(Refund_Base_Url)
// .client(okHttp)
// .addConverterFactory(GsonConverterFactory.create())
// .build();
//
//// throw new RuntimeException("Failed to create Retrofit instance", e);
// }
//
// }
//@Reusable
//@KPayRefundRetrofit
@Provides
@ -392,10 +310,8 @@ public Retrofit provideKPayRefundRetrofit(@ApplicationContext Context context) {
// char[] password = "test123".toCharArray();
// public static String Refund_Base_Url = "https://api.kbzpay.com:18008/payment/gateway/uat/";
String refundBaseUrl = "https://api.kbzpay.com:8008/payment/gateway/";
// String refundBaseUrl = "https://api.kbzpay.com:8008/payment/gateway/";
String refundBaseUrl = "https://api-uat.kbzpay.com:18008/payment/gateway/uat/";
// String IpAddress = SystemParamsOperation.getInstance().getSecHostIpAddress();

View File

@ -24,12 +24,12 @@ public interface KPayApiService {
//this accept "url" bez this api start with https and other are http in uat
// @POST("closeorder")
// Observable<KPayQRRequest.CloseOrderResponse> closeOrder(@Body KPayQRRequest.CloseOrderRequest closeOrderRequest);
@POST
Observable<KPayQRRequest.CloseOrderResponse> closeOrder(@Url String url, @Body KPayQRRequest.CloseOrderRequest closeOrderRequest);
//this 2 is for production
@POST("closeorder")
Observable<KPayQRRequest.CloseOrderResponse> closeOrder(@Url String url, @Body KPayQRRequest.CloseOrderRequest closeOrderRequest);
// @POST("closeorder")
// Observable<KPayQRRequest.CloseOrderResponse> closeOrder(@Body KPayQRRequest.CloseOrderRequest closeOrderRequest);
}

View File

@ -86,7 +86,7 @@ public class Repository {
}
public Observable<KPayQRRequest.CloseOrderResponse> qrCloseOrder(KPayQRRequest.CloseOrderRequest request){
String url = "https://api.kbzpay.com/payment/gateway/uat/closeorder"; //close this in prod
String url = "https://api-uat.kbzpay.com/payment/gateway/uat/closeorder"; //close this in prod
return kPayApiService.closeOrder(url, request); // this is for local
// return kPayApiService.closeOrder(request); //this is for prod
}

View File

@ -877,8 +877,9 @@ public abstract class BaseXPrint {
printString("Status :" + pay.getStatus());
printString("Date :" + pay.getDate());
printString("Time :" + pay.getTime());
printString("Amount :" + "MMK " + PrintUtils.getInstance().getSeparatorOnlyNumberFormat(pay.getAmount()));
printString("Amount : MMK "
+ (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value ? "-" : "")
+ PrintUtils.getInstance().getSeparatorOnlyNumberFormat(pay.getAmount()));
if (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
refundTotal += pay.getAmount();
@ -892,7 +893,7 @@ public abstract class BaseXPrint {
dashBreak();
// print2ColumnsString("Refund Total:MMK", PrintUtils.getInstance().getSeparatorOnlyNumberFormat(refundTotal));
printer.appendPrnStr("Refund Total:MMK", PrintUtils.getInstance().getSeparatorOnlyNumberFormat(refundTotal) + " ", fontNormal, false);
printer.appendPrnStr("Refund Total:MMK", "- " + PrintUtils.getInstance().getSeparatorOnlyNumberFormat(refundTotal) + " ", fontNormal, false);
dashBreak();
// print2ColumnsString("Sale Total :MMK", PrintUtils.getInstance().getSeparatorOnlyNumberFormat(totalAmount));
printer.appendPrnStr("Sale Total :MMK", PrintUtils.getInstance().getSeparatorOnlyNumberFormat(totalAmount) + " ", fontNormal, false);

View File

@ -1750,4 +1750,15 @@ public class SystemParamsOperation {
paramsSettings.setCertificateClientUrl(url);
saveSystemParamsSettings(paramsSettings);
}
public void setPrinterDisabled(boolean printerDisabled) {
SystemParamsSettings paramsSettings = getSystemParamsSettings();
paramsSettings.setPrinterDisabled(printerDisabled);
saveSystemParamsSettings(paramsSettings);
}
public boolean getPrinterDisabled() {
SystemParamsSettings paramsSettings = getSystemParamsSettings();
return paramsSettings.getPrinterDisabled();
}
}

View File

@ -42,10 +42,10 @@ public class SystemParamsSettings implements Serializable {
// private String tmsAddress = "https://tms.smile-mm.com";
// private String tmsAddress = "http://128.199.170.203";
private String tmsAddress = "https://sirius-nest.utsmyanmar.com";
// private String tmsAddress = "https://api-tms-uat.kbzbank.com:8443/sirius"; //for uat
private String ereceiptAddress = "http://receipt-nest.utsmyanmar.com"; //for on prime
// private String ereceiptAddress = "https://api-tms-uat.kbzbank.com:8443/receipt"; //for uat
// private String tmsAddress = "https://sirius-nest.utsmyanmar.com";
private String tmsAddress = "https://api-tms-uat.kbzbank.com:8443/sirius"; //for uat
// private String ereceiptAddress = "https://receipt-nest.utsmyanmar.com"; //for on prime
private String ereceiptAddress = "https://api-tms-uat.kbzbank.com:8443/receipt"; //for uat
private String binValues = "";
@ -260,6 +260,7 @@ public class SystemParamsSettings implements Serializable {
private String terminalIdForEreceipt = "";
private String certificateUrl = "";
private String certificateClientUrl = "";
private boolean printerDisabled = false;
public boolean isQrPartialRefundEnable(){
return qrPartialRefundEnable;
@ -1067,6 +1068,18 @@ public class SystemParamsSettings implements Serializable {
this.certificateClientUrl = url;
}
public boolean isPrinterDisabled() {
return printerDisabled;
}
public void setPrinterDisabled(boolean printerDisabled) {
this.printerDisabled = printerDisabled;
}
public boolean getPrinterDisabled() {
return printerDisabled;
}
/* // 流水号起始
private String serialNum = Configs.getInstance().SERIAL_NUM();
// 批次号起始