Compare commits
16 Commits
d9de201e88
...
daba685f40
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
daba685f40 | ||
|
|
31705e6a9f | ||
|
|
c3246b907a | ||
| b8f85b3693 | |||
| 5e40b948de | |||
|
|
8f218b5c99 | ||
|
|
75fb969740 | ||
| bab8390ba4 | |||
|
|
d32dd1ce5b | ||
| 77b8d1956a | |||
| a04e008c5b | |||
| 781d7a0fce | |||
|
|
528bcbb004 | ||
|
|
34b88f81b3 | ||
|
|
e4bb3df554 | ||
|
|
999b26de2b |
@ -116,8 +116,8 @@ public class MainActivity extends AppCompatActivity implements
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
// BaseApplication.getInstance().deviceEngine.getPlatform().hideNavigationBar();
|
||||
BaseApplication.getInstance().deviceEngine.getPlatform().showNavigationBar();
|
||||
BaseApplication.getInstance().deviceEngine.getPlatform().hideNavigationBar();
|
||||
// BaseApplication.getInstance().deviceEngine.getPlatform().showNavigationBar();
|
||||
|
||||
// Keep screen on
|
||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
@ -160,10 +160,10 @@ public class MainActivity extends AppCompatActivity implements
|
||||
}
|
||||
|
||||
private void initKey(){
|
||||
// SystemParamsOperation.getInstance().setTmsAddress("https://api-tms-uat.kbzbank.com:8443/sirius");
|
||||
SystemParamsOperation.getInstance().setTmsAddress("https://sirius-nest.utsmyanmar.com/api/v1");
|
||||
// SystemParamsOperation.getInstance().setEReceiptAddress("https://api-tms-uat.kbzbank.com:8443/receipt");
|
||||
SystemParamsOperation.getInstance().setEReceiptAddress("https://receipt-nest.utsmyanmar.com/api/v1");
|
||||
// SystemParamsOperation.getInstance().setTmsAddress("https://api-tms.kbzbank.com/sirius");
|
||||
// SystemParamsOperation.getInstance().setEReceiptAddress("https://api-tms.kbzbank.com/receipt");
|
||||
SystemParamsOperation.getInstance().setTmsAddress("https://api-tms-uat.kbzbank.com:8443/sirius");
|
||||
SystemParamsOperation.getInstance().setEReceiptAddress("https://api-tms-uat.kbzbank.com:8443/receipt");
|
||||
|
||||
PinPad pinPad = MyApplication.getInstance().deviceEngine.getPinPad();
|
||||
byte[] encryptedPIK = SystemParamsOperation.getInstance().getPIK();
|
||||
@ -436,8 +436,8 @@ public class MainActivity extends AppCompatActivity implements
|
||||
SystemParamsOperation.getInstance().setDownloadedParams(false);
|
||||
|
||||
handleAutoSettlementIntent(getIntent());
|
||||
// BaseApplication.getInstance().deviceEngine.getPlatform().hideNavigationBar();
|
||||
BaseApplication.getInstance().deviceEngine.getPlatform().showNavigationBar();
|
||||
BaseApplication.getInstance().deviceEngine.getPlatform().hideNavigationBar();
|
||||
// BaseApplication.getInstance().deviceEngine.getPlatform().showNavigationBar();
|
||||
}
|
||||
|
||||
|
||||
@ -445,8 +445,6 @@ public class MainActivity extends AppCompatActivity implements
|
||||
public void onStop(){
|
||||
super.onStop();
|
||||
BaseApplication.getInstance().deviceEngine.getPlatform().showNavigationBar();
|
||||
// BaseApplication.getInstance().deviceEngine.getPlatform().enableHomeButton();
|
||||
// BaseApplication.getInstance().deviceEngine.getPlatform().enableTaskButton();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -564,9 +562,6 @@ public class MainActivity extends AppCompatActivity implements
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
// BaseApplication.getInstance().deviceEngine.getPlatform().showNavigationBar();
|
||||
// BaseApplication.getInstance().deviceEngine.getPlatform().enableHomeButton();
|
||||
// BaseApplication.getInstance().deviceEngine.getPlatform().enableTaskButton();
|
||||
// Clean up RxJava disposables
|
||||
compositeDisposable.clear();
|
||||
// Reset screen mode
|
||||
|
||||
@ -4,18 +4,25 @@ import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
|
||||
import android.os.Bundle;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
|
||||
import android.os.RemoteException;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
import android.view.Gravity;
|
||||
import android.widget.Toast;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import androidx.lifecycle.Observer;
|
||||
import androidx.appcompat.widget.AppCompatButton;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.denzcoskun.imageslider.ImageSlider;
|
||||
import com.denzcoskun.imageslider.constants.ScaleTypes;
|
||||
@ -71,6 +78,7 @@ import java.nio.charset.StandardCharsets;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.LinkedHashSet;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
@ -100,6 +108,13 @@ public class MainFragment extends DataBindingFragment {
|
||||
private final ArrayList<SlideModel> imgList = new ArrayList<>();
|
||||
private Observer<PayDetail> observeLastTrans;
|
||||
private PayDetail lastPay;
|
||||
private boolean cardPrimaryHostCached = false;
|
||||
private String cardPrimaryHostName = "";
|
||||
private String cardPrimaryTid = "";
|
||||
private String cardPrimaryMid = "";
|
||||
private String cardPrimaryIp = "";
|
||||
private String cardPrimarySecIp = "";
|
||||
private CurrencyType cardPrimaryCurrency = CurrencyType.MMK;
|
||||
private CurrencySelectionHelper currencySelectionHelper;
|
||||
|
||||
@Inject
|
||||
@ -162,18 +177,10 @@ public class MainFragment extends DataBindingFragment {
|
||||
NexGoSDK.getInstance().cancelCheckCard();
|
||||
NexGoSDK.getInstance().closeReader();
|
||||
enableHomeButton();
|
||||
// enablePinPadSound(false);
|
||||
// disableTaskButton();
|
||||
// BaseApplication.getInstance().deviceEngine.getPlatform().hideNavigationBar();
|
||||
// BaseApplication.getInstance().deviceEngine.getPlatform().showNavigationBar();
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
// private void enablePinPadSound(boolean flag) {n
|
||||
// int result = BaseApplication.getInstance().deviceEngine.getPlatform().enablePinpadBeep(flag);
|
||||
// LogUtil.d(TAG, "Pin Pad Beep Result:" + result);
|
||||
// }
|
||||
|
||||
private void disableHomeButton() {
|
||||
int result = BaseApplication.getInstance().deviceEngine.getPlatform().disableHomeButton();
|
||||
LogUtil.d(TAG, "Disable Home Button Result:" + result);
|
||||
@ -447,7 +454,190 @@ public class MainFragment extends DataBindingFragment {
|
||||
}
|
||||
|
||||
private void showCurrencyChooserForCardSale() {
|
||||
currencySelectionHelper.showCardCurrencyChooser(this::startCardSaleFlow);
|
||||
List<String> currencies = getAvailableCardSaleCurrencies();
|
||||
if (currencies.isEmpty()) {
|
||||
applyCardCurrencyAndHost("MMK");
|
||||
startCardSaleFlow();
|
||||
return;
|
||||
}
|
||||
|
||||
if (currencies.size() == 1) {
|
||||
applyCardCurrencyAndHost(currencies.get(0));
|
||||
startCardSaleFlow();
|
||||
return;
|
||||
}
|
||||
|
||||
showCurrencyPickerDialog("Choose Currency", currencies, currency -> {
|
||||
applyCardCurrencyAndHost(currency);
|
||||
startCardSaleFlow();
|
||||
});
|
||||
}
|
||||
|
||||
private List<String> getAvailableCardSaleCurrencies() {
|
||||
cachePrimaryCardHostIfNeeded();
|
||||
LinkedHashSet<String> values = new LinkedHashSet<>();
|
||||
|
||||
if (cardPrimaryCurrency != null && !TextUtils.isEmpty(cardPrimaryCurrency.name)) {
|
||||
values.add(normalizeCurrency(cardPrimaryCurrency.name));
|
||||
}
|
||||
|
||||
String secondaryCurrency = normalizeCurrency(SystemParamsOperation.getInstance().getThirdHostCurrency());
|
||||
if (!TextUtils.isEmpty(SystemParamsOperation.getInstance().getThirdHostName()) && !TextUtils.isEmpty(secondaryCurrency)) {
|
||||
values.add(secondaryCurrency);
|
||||
}
|
||||
|
||||
return new ArrayList<>(values);
|
||||
}
|
||||
|
||||
private void applyCardCurrencyAndHost(String selectedCurrency) {
|
||||
cachePrimaryCardHostIfNeeded();
|
||||
|
||||
String selected = normalizeCurrency(selectedCurrency);
|
||||
String secondaryCurrency = normalizeCurrency(SystemParamsOperation.getInstance().getThirdHostCurrency());
|
||||
|
||||
boolean useSecondaryCardHost = !TextUtils.isEmpty(SystemParamsOperation.getInstance().getThirdHostName())
|
||||
&& !TextUtils.isEmpty(secondaryCurrency)
|
||||
&& secondaryCurrency.equals(selected);
|
||||
|
||||
if (useSecondaryCardHost) {
|
||||
SystemParamsOperation.getInstance().setHostName(SystemParamsOperation.getInstance().getThirdHostName());
|
||||
SystemParamsOperation.getInstance().setTerminalId(SystemParamsOperation.getInstance().getThirdHostTerminalId());
|
||||
SystemParamsOperation.getInstance().setMerchantId(SystemParamsOperation.getInstance().getThirdHostMerchantId());
|
||||
SystemParamsOperation.getInstance().setIpAddress(SystemParamsOperation.getInstance().getThirdHostIpAddress());
|
||||
SystemParamsOperation.getInstance().setSecIpAddress(SystemParamsOperation.getInstance().getThirdHostSecIpAddress());
|
||||
} else {
|
||||
SystemParamsOperation.getInstance().setHostName(cardPrimaryHostName);
|
||||
SystemParamsOperation.getInstance().setTerminalId(cardPrimaryTid);
|
||||
SystemParamsOperation.getInstance().setMerchantId(cardPrimaryMid);
|
||||
SystemParamsOperation.getInstance().setIpAddress(cardPrimaryIp);
|
||||
SystemParamsOperation.getInstance().setSecIpAddress(cardPrimarySecIp);
|
||||
}
|
||||
|
||||
CurrencyType currencyType = useSecondaryCardHost ? toCurrencyType(selected) : cardPrimaryCurrency;
|
||||
SystemParamsOperation.getInstance().setCurrencyType(currencyType);
|
||||
sharedViewModel.set_currencyText(currencyType.name);
|
||||
}
|
||||
|
||||
private void cachePrimaryCardHostIfNeeded() {
|
||||
if (cardPrimaryHostCached) {
|
||||
return;
|
||||
}
|
||||
|
||||
cardPrimaryHostName = SystemParamsOperation.getInstance().getHostName();
|
||||
cardPrimaryTid = SystemParamsOperation.getInstance().getTerminalId();
|
||||
cardPrimaryMid = SystemParamsOperation.getInstance().getMerchantId();
|
||||
cardPrimaryIp = SystemParamsOperation.getInstance().getIpAddress();
|
||||
cardPrimarySecIp = SystemParamsOperation.getInstance().getSecIpAddress();
|
||||
CurrencyType activeCurrency = SystemParamsOperation.getInstance().getCurrencyType();
|
||||
cardPrimaryCurrency = activeCurrency == null ? CurrencyType.MMK : activeCurrency;
|
||||
cardPrimaryHostCached = true;
|
||||
}
|
||||
|
||||
private void showCurrencyPickerDialog(String title, List<String> currencies, CurrencySelectCallback callback) {
|
||||
LinearLayout root = new LinearLayout(requireContext());
|
||||
root.setOrientation(LinearLayout.VERTICAL);
|
||||
root.setPadding(dp(20), dp(20), dp(20), dp(12));
|
||||
|
||||
TextView tvTitle = new TextView(requireContext());
|
||||
tvTitle.setText(title);
|
||||
tvTitle.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
|
||||
tvTitle.setTextColor(ContextCompat.getColor(requireContext(), R.color.colorTextTitle));
|
||||
tvTitle.setPadding(0, 0, 0, dp(16));
|
||||
root.addView(tvTitle);
|
||||
|
||||
final AlertDialog[] dialogHolder = new AlertDialog[1];
|
||||
for (String currency : currencies) {
|
||||
AppCompatButton button = new AppCompatButton(requireContext());
|
||||
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT,
|
||||
dp(56)
|
||||
);
|
||||
lp.bottomMargin = dp(10);
|
||||
button.setLayoutParams(lp);
|
||||
button.setAllCaps(false);
|
||||
button.setText(currency);
|
||||
button.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
|
||||
button.setGravity(Gravity.CENTER);
|
||||
button.setBackgroundResource(R.drawable.bg_rounded_btn_cv);
|
||||
button.setTextColor(ContextCompat.getColor(requireContext(), R.color.white));
|
||||
button.setOnClickListener(v -> {
|
||||
if (dialogHolder[0] != null) {
|
||||
dialogHolder[0].dismiss();
|
||||
}
|
||||
callback.onSelected(currency);
|
||||
});
|
||||
root.addView(button);
|
||||
}
|
||||
|
||||
AppCompatButton cancel = new AppCompatButton(requireContext());
|
||||
LinearLayout.LayoutParams cancelLp = new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT,
|
||||
dp(52)
|
||||
);
|
||||
cancel.setLayoutParams(cancelLp);
|
||||
cancel.setAllCaps(false);
|
||||
cancel.setText("Cancel");
|
||||
cancel.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
|
||||
cancel.setBackgroundResource(R.drawable.bg_rounded_btn_cancel_cv);
|
||||
cancel.setTextColor(ContextCompat.getColor(requireContext(), R.color.colorPrimary));
|
||||
cancel.setOnClickListener(v -> {
|
||||
if (dialogHolder[0] != null) {
|
||||
dialogHolder[0].dismiss();
|
||||
}
|
||||
});
|
||||
root.addView(cancel);
|
||||
|
||||
AlertDialog dialog = new AlertDialog.Builder(requireContext())
|
||||
.setView(root)
|
||||
.create();
|
||||
dialogHolder[0] = dialog;
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
private int dp(int value) {
|
||||
return Math.round(value * requireContext().getResources().getDisplayMetrics().density);
|
||||
}
|
||||
|
||||
private interface CurrencySelectCallback {
|
||||
void onSelected(String currency);
|
||||
}
|
||||
|
||||
private CurrencyType toCurrencyType(String value) {
|
||||
String normalized = normalizeCurrency(value);
|
||||
try {
|
||||
return CurrencyType.valueOf(normalized);
|
||||
} catch (Exception ignored) {
|
||||
return CurrencyType.MMK;
|
||||
}
|
||||
}
|
||||
|
||||
private String normalizeCurrency(String raw) {
|
||||
if (TextUtils.isEmpty(raw)) {
|
||||
return "";
|
||||
}
|
||||
|
||||
String value = raw.trim().toUpperCase();
|
||||
switch (value) {
|
||||
case "104":
|
||||
case "MMK":
|
||||
return "MMK";
|
||||
case "840":
|
||||
case "USD":
|
||||
return "USD";
|
||||
case "156":
|
||||
case "CNY":
|
||||
case "RMB":
|
||||
return "CNY";
|
||||
case "764":
|
||||
case "THB":
|
||||
return "THB";
|
||||
case "643":
|
||||
case "RUB":
|
||||
return "RUB";
|
||||
default:
|
||||
return value;
|
||||
}
|
||||
// currencySelectionHelper.showCardCurrencyChooser(this::startCardSaleFlow);
|
||||
}
|
||||
|
||||
private void showCurrencyChooserForSignOn() {
|
||||
|
||||
@ -2,16 +2,25 @@ package com.utsmm.kbz.ui.dashboard;
|
||||
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
import android.view.Gravity;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.widget.AppCompatButton;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.utsmm.kbz.util.enums.SettlementType;
|
||||
import com.utsmyanmar.baselib.fragment.DataBindingFragment;
|
||||
import com.utsmyanmar.baselib.util.DataBindingConfig;
|
||||
import com.utsmyanmar.paylibs.utils.LogUtil;
|
||||
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
|
||||
import com.utsmyanmar.paylibs.utils.enums.CurrencyType;
|
||||
import com.utsmyanmar.paylibs.utils.enums.TransMenu;
|
||||
import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType;
|
||||
import com.utsmm.kbz.BR;
|
||||
@ -25,6 +34,8 @@ import com.utsmm.kbz.util.CurrencySelectionHelper;
|
||||
import com.utsmm.kbz.util.tms.TMSUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
|
||||
public class DashboardTransFragment extends DataBindingFragment {
|
||||
|
||||
@ -36,6 +47,13 @@ public class DashboardTransFragment extends DataBindingFragment {
|
||||
private ArrayList<Features> featuresList = new ArrayList<>();
|
||||
|
||||
MainAdapter mainAdapter;
|
||||
private boolean cardPrimaryHostCached = false;
|
||||
private String cardPrimaryHostName = "";
|
||||
private String cardPrimaryTid = "";
|
||||
private String cardPrimaryMid = "";
|
||||
private String cardPrimaryIp = "";
|
||||
private String cardPrimarySecIp = "";
|
||||
private CurrencyType cardPrimaryCurrency = CurrencyType.MMK;
|
||||
|
||||
private static final int hostId = Constants.NAV_HOST_ID;
|
||||
private int routeId;
|
||||
@ -290,7 +308,190 @@ public class DashboardTransFragment extends DataBindingFragment {
|
||||
}
|
||||
|
||||
private void showCurrencyChooserForCardFlow(Runnable onSelected) {
|
||||
currencySelectionHelper.showCardCurrencyChooser(onSelected);
|
||||
List<String> currencies = getAvailableCardSaleCurrencies();
|
||||
if (currencies.isEmpty()) {
|
||||
applyCardCurrencyAndHost("MMK");
|
||||
onSelected.run();
|
||||
return;
|
||||
}
|
||||
|
||||
if (currencies.size() == 1) {
|
||||
applyCardCurrencyAndHost(currencies.get(0));
|
||||
onSelected.run();
|
||||
return;
|
||||
}
|
||||
|
||||
showCurrencyPickerDialog("Choose Currency", currencies, currency -> {
|
||||
applyCardCurrencyAndHost(currency);
|
||||
onSelected.run();
|
||||
});
|
||||
}
|
||||
|
||||
private List<String> getAvailableCardSaleCurrencies() {
|
||||
cachePrimaryCardHostIfNeeded();
|
||||
LinkedHashSet<String> values = new LinkedHashSet<>();
|
||||
|
||||
if (cardPrimaryCurrency != null && !TextUtils.isEmpty(cardPrimaryCurrency.name)) {
|
||||
values.add(normalizeCurrency(cardPrimaryCurrency.name));
|
||||
}
|
||||
|
||||
String secondaryCurrency = normalizeCurrency(SystemParamsOperation.getInstance().getThirdHostCurrency());
|
||||
if (!TextUtils.isEmpty(SystemParamsOperation.getInstance().getThirdHostName()) && !TextUtils.isEmpty(secondaryCurrency)) {
|
||||
values.add(secondaryCurrency);
|
||||
}
|
||||
|
||||
return new ArrayList<>(values);
|
||||
}
|
||||
|
||||
private void applyCardCurrencyAndHost(String selectedCurrency) {
|
||||
cachePrimaryCardHostIfNeeded();
|
||||
|
||||
String selected = normalizeCurrency(selectedCurrency);
|
||||
String secondaryCurrency = normalizeCurrency(SystemParamsOperation.getInstance().getThirdHostCurrency());
|
||||
|
||||
boolean useSecondaryCardHost = !TextUtils.isEmpty(SystemParamsOperation.getInstance().getThirdHostName())
|
||||
&& !TextUtils.isEmpty(secondaryCurrency)
|
||||
&& secondaryCurrency.equals(selected);
|
||||
|
||||
if (useSecondaryCardHost) {
|
||||
SystemParamsOperation.getInstance().setHostName(SystemParamsOperation.getInstance().getThirdHostName());
|
||||
SystemParamsOperation.getInstance().setTerminalId(SystemParamsOperation.getInstance().getThirdHostTerminalId());
|
||||
SystemParamsOperation.getInstance().setMerchantId(SystemParamsOperation.getInstance().getThirdHostMerchantId());
|
||||
SystemParamsOperation.getInstance().setIpAddress(SystemParamsOperation.getInstance().getThirdHostIpAddress());
|
||||
SystemParamsOperation.getInstance().setSecIpAddress(SystemParamsOperation.getInstance().getThirdHostSecIpAddress());
|
||||
} else {
|
||||
SystemParamsOperation.getInstance().setHostName(cardPrimaryHostName);
|
||||
SystemParamsOperation.getInstance().setTerminalId(cardPrimaryTid);
|
||||
SystemParamsOperation.getInstance().setMerchantId(cardPrimaryMid);
|
||||
SystemParamsOperation.getInstance().setIpAddress(cardPrimaryIp);
|
||||
SystemParamsOperation.getInstance().setSecIpAddress(cardPrimarySecIp);
|
||||
}
|
||||
|
||||
CurrencyType currencyType = useSecondaryCardHost ? toCurrencyType(selected) : cardPrimaryCurrency;
|
||||
SystemParamsOperation.getInstance().setCurrencyType(currencyType);
|
||||
sharedViewModel.set_currencyText(currencyType.name);
|
||||
}
|
||||
|
||||
private void cachePrimaryCardHostIfNeeded() {
|
||||
if (cardPrimaryHostCached) {
|
||||
return;
|
||||
}
|
||||
|
||||
cardPrimaryHostName = SystemParamsOperation.getInstance().getHostName();
|
||||
cardPrimaryTid = SystemParamsOperation.getInstance().getTerminalId();
|
||||
cardPrimaryMid = SystemParamsOperation.getInstance().getMerchantId();
|
||||
cardPrimaryIp = SystemParamsOperation.getInstance().getIpAddress();
|
||||
cardPrimarySecIp = SystemParamsOperation.getInstance().getSecIpAddress();
|
||||
CurrencyType activeCurrency = SystemParamsOperation.getInstance().getCurrencyType();
|
||||
cardPrimaryCurrency = activeCurrency == null ? CurrencyType.MMK : activeCurrency;
|
||||
cardPrimaryHostCached = true;
|
||||
}
|
||||
|
||||
private CurrencyType toCurrencyType(String value) {
|
||||
String normalized = normalizeCurrency(value);
|
||||
try {
|
||||
return CurrencyType.valueOf(normalized);
|
||||
} catch (Exception ignored) {
|
||||
return CurrencyType.MMK;
|
||||
}
|
||||
}
|
||||
|
||||
private String normalizeCurrency(String raw) {
|
||||
if (TextUtils.isEmpty(raw)) {
|
||||
return "";
|
||||
}
|
||||
|
||||
String value = raw.trim().toUpperCase();
|
||||
switch (value) {
|
||||
case "104":
|
||||
case "MMK":
|
||||
return "MMK";
|
||||
case "840":
|
||||
case "USD":
|
||||
return "USD";
|
||||
case "156":
|
||||
case "CNY":
|
||||
case "RMB":
|
||||
return "CNY";
|
||||
case "764":
|
||||
case "THB":
|
||||
return "THB";
|
||||
case "643":
|
||||
case "RUB":
|
||||
return "RUB";
|
||||
default:
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
private void showCurrencyPickerDialog(String title, List<String> currencies, CurrencySelectCallback callback) {
|
||||
LinearLayout root = new LinearLayout(requireContext());
|
||||
root.setOrientation(LinearLayout.VERTICAL);
|
||||
root.setPadding(dp(20), dp(20), dp(20), dp(12));
|
||||
|
||||
TextView tvTitle = new TextView(requireContext());
|
||||
tvTitle.setText(title);
|
||||
tvTitle.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
|
||||
tvTitle.setTextColor(ContextCompat.getColor(requireContext(), R.color.colorTextTitle));
|
||||
tvTitle.setPadding(0, 0, 0, dp(16));
|
||||
root.addView(tvTitle);
|
||||
|
||||
final AlertDialog[] dialogHolder = new AlertDialog[1];
|
||||
for (String currency : currencies) {
|
||||
AppCompatButton button = new AppCompatButton(requireContext());
|
||||
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT,
|
||||
dp(56)
|
||||
);
|
||||
lp.bottomMargin = dp(10);
|
||||
button.setLayoutParams(lp);
|
||||
button.setAllCaps(false);
|
||||
button.setText(currency);
|
||||
button.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
|
||||
button.setGravity(Gravity.CENTER);
|
||||
button.setBackgroundResource(R.drawable.bg_rounded_btn_cv);
|
||||
button.setTextColor(ContextCompat.getColor(requireContext(), R.color.white));
|
||||
button.setOnClickListener(v -> {
|
||||
if (dialogHolder[0] != null) {
|
||||
dialogHolder[0].dismiss();
|
||||
}
|
||||
callback.onSelected(currency);
|
||||
});
|
||||
root.addView(button);
|
||||
}
|
||||
|
||||
AppCompatButton cancel = new AppCompatButton(requireContext());
|
||||
LinearLayout.LayoutParams cancelLp = new LinearLayout.LayoutParams(
|
||||
LinearLayout.LayoutParams.MATCH_PARENT,
|
||||
dp(52)
|
||||
);
|
||||
cancel.setLayoutParams(cancelLp);
|
||||
cancel.setAllCaps(false);
|
||||
cancel.setText("Cancel");
|
||||
cancel.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
|
||||
cancel.setBackgroundResource(R.drawable.bg_rounded_btn_cancel_cv);
|
||||
cancel.setTextColor(ContextCompat.getColor(requireContext(), R.color.colorPrimary));
|
||||
cancel.setOnClickListener(v -> {
|
||||
if (dialogHolder[0] != null) {
|
||||
dialogHolder[0].dismiss();
|
||||
}
|
||||
});
|
||||
root.addView(cancel);
|
||||
|
||||
AlertDialog dialog = new AlertDialog.Builder(requireContext())
|
||||
.setView(root)
|
||||
.create();
|
||||
dialogHolder[0] = dialog;
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
private int dp(int value) {
|
||||
return Math.round(value * requireContext().getResources().getDisplayMetrics().density);
|
||||
}
|
||||
|
||||
private interface CurrencySelectCallback {
|
||||
void onSelected(String currency);
|
||||
// currencySelectionHelper.showCardCurrencyChooser(onSelected);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package com.utsmm.kbz.ui.management;
|
||||
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.animation.ValueAnimator;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
@ -40,6 +42,8 @@ public class ReprintReceiptFragment extends DataBindingFragment {
|
||||
private static final String TAG = ReprintReceiptFragment.class.getSimpleName();
|
||||
|
||||
private PayDetail payDetail;
|
||||
private ObjectAnimator slideUpAnimator;
|
||||
private View printingCard;
|
||||
|
||||
@Override
|
||||
protected void initViewModel() {
|
||||
@ -76,6 +80,7 @@ public class ReprintReceiptFragment extends DataBindingFragment {
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
stopPrintingAnimation();
|
||||
|
||||
}
|
||||
|
||||
@ -105,7 +110,7 @@ public class ReprintReceiptFragment extends DataBindingFragment {
|
||||
@Override
|
||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
printingCard = mBinding.getRoot().findViewById(R.id.printingCard);
|
||||
}
|
||||
|
||||
private void updateUIPrintReceiptFailure(PayDetail payDetail) {
|
||||
@ -140,6 +145,7 @@ public class ReprintReceiptFragment extends DataBindingFragment {
|
||||
}
|
||||
|
||||
} else if (PrintHelper.getInstance().paperRollStatus() == SdkResult.Success) {
|
||||
startPrintingAnimation();
|
||||
printReceipt(payDetail);
|
||||
}
|
||||
}
|
||||
@ -195,17 +201,44 @@ public class ReprintReceiptFragment extends DataBindingFragment {
|
||||
private PrintXStatus printXStatus = new PrintXStatus() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
stopPrintingAnimation();
|
||||
delayFunctionCall(ReprintReceiptFragment.this::navigateMainScreen);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure() {
|
||||
stopPrintingAnimation();
|
||||
updateUIPrintReceiptFailure(payDetail);
|
||||
|
||||
// checkPaperExists(payDetail);
|
||||
}
|
||||
};
|
||||
|
||||
private void startPrintingAnimation() {
|
||||
if (printingCard == null) {
|
||||
return;
|
||||
}
|
||||
if (slideUpAnimator != null && slideUpAnimator.isRunning()) {
|
||||
return;
|
||||
}
|
||||
|
||||
slideUpAnimator = ObjectAnimator.ofFloat(printingCard, View.TRANSLATION_Y, 0f, -20f);
|
||||
slideUpAnimator.setDuration(420);
|
||||
slideUpAnimator.setRepeatMode(ValueAnimator.REVERSE);
|
||||
slideUpAnimator.setRepeatCount(ValueAnimator.INFINITE);
|
||||
slideUpAnimator.start();
|
||||
}
|
||||
|
||||
private void stopPrintingAnimation() {
|
||||
if (slideUpAnimator != null) {
|
||||
slideUpAnimator.cancel();
|
||||
slideUpAnimator = null;
|
||||
}
|
||||
if (printingCard != null) {
|
||||
printingCard.setTranslationY(0f);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
private void navigateMainScreen() {
|
||||
|
||||
@ -42,8 +42,7 @@ 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() + "/file/download?filePath=";
|
||||
|
||||
String certUrl = SystemParamsOperation.getInstance().getCertificateUrl();
|
||||
String clientCertUrl = SystemParamsOperation.getInstance().getCertificateClientUrl();
|
||||
|
||||
@ -1,6 +1,10 @@
|
||||
package com.utsmm.kbz.ui.settings;
|
||||
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.animation.ValueAnimator;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.animation.LinearInterpolator;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
@ -15,6 +19,8 @@ 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.print.printx.PrintXReceipt;
|
||||
import com.utsmyanmar.paylibs.print.printx.PrintXStatus;
|
||||
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
|
||||
|
||||
|
||||
@ -26,6 +32,9 @@ public class HostConfigFragment extends DataBindingFragment {
|
||||
protected Printer printer;
|
||||
int FONT_NORMAL = 20;
|
||||
int FONT_HEADER = 24;
|
||||
private ObjectAnimator rollUpAnimator;
|
||||
private View hostCardView;
|
||||
private volatile boolean isPrintingHostConfig = false;
|
||||
|
||||
@Override
|
||||
protected void initViewModel() {
|
||||
@ -45,6 +54,7 @@ public class HostConfigFragment extends DataBindingFragment {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
FragmentHostConfigBinding binding = (FragmentHostConfigBinding) this.binding;
|
||||
hostCardView = binding.getRoot().findViewById(R.id.hostCard);
|
||||
viewModel.loadConfig();
|
||||
}
|
||||
|
||||
@ -56,6 +66,13 @@ public class HostConfigFragment extends DataBindingFragment {
|
||||
sharedViewModel.printerDisabled.setValue(!SystemParamsOperation.getInstance().getPrinterEnabled());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
stopRollUpAnimation();
|
||||
isPrintingHostConfig = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int currentId() {
|
||||
return R.id.hostConfigFragment;
|
||||
@ -81,7 +98,72 @@ public class HostConfigFragment extends DataBindingFragment {
|
||||
showDeclineDialog("Printer is disabled!");
|
||||
return;
|
||||
}
|
||||
sharedViewModel.printTerminalHostConfigs();
|
||||
if (isPrintingHostConfig) {
|
||||
return;
|
||||
}
|
||||
startHostConfigPrint();
|
||||
}
|
||||
}
|
||||
|
||||
private void startHostConfigPrint() {
|
||||
isPrintingHostConfig = true;
|
||||
startRollUpAnimation();
|
||||
|
||||
PrintXReceipt.getInstance().printTerminalHostConfig(new PrintXStatus() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
requireActivity().runOnUiThread(() -> {
|
||||
isPrintingHostConfig = false;
|
||||
stopRollUpAnimation();
|
||||
Log.d("PrintConfig", "Print Terminal Config Success.");
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure() {
|
||||
requireActivity().runOnUiThread(() -> {
|
||||
isPrintingHostConfig = false;
|
||||
stopRollUpAnimation();
|
||||
Log.e("PrintConfig", "Print Terminal Config Failure.");
|
||||
showDeclineDialog("Failed to print host config.");
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void startRollUpAnimation() {
|
||||
if (hostCardView == null) {
|
||||
return;
|
||||
}
|
||||
if (rollUpAnimator != null && rollUpAnimator.isRunning()) {
|
||||
return;
|
||||
}
|
||||
hostCardView.post(() -> {
|
||||
int cardTop = hostCardView.getTop();
|
||||
int cardHeight = hostCardView.getHeight();
|
||||
if (cardHeight <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Move past the top edge so the card fully leaves the screen.
|
||||
float offScreenDistance = cardTop + cardHeight + 80f;
|
||||
|
||||
rollUpAnimator = ObjectAnimator.ofFloat(hostCardView, View.TRANSLATION_Y, 0f, -offScreenDistance);
|
||||
rollUpAnimator.setDuration(3000);
|
||||
rollUpAnimator.setInterpolator(new LinearInterpolator());
|
||||
rollUpAnimator.setRepeatMode(ValueAnimator.RESTART);
|
||||
rollUpAnimator.setRepeatCount(ValueAnimator.INFINITE);
|
||||
rollUpAnimator.start();
|
||||
});
|
||||
}
|
||||
|
||||
private void stopRollUpAnimation() {
|
||||
if (rollUpAnimator != null) {
|
||||
rollUpAnimator.cancel();
|
||||
rollUpAnimator = null;
|
||||
}
|
||||
if (hostCardView != null) {
|
||||
hostCardView.setTranslationY(0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -78,6 +78,10 @@ public class SettlementViewModel extends ViewModel {
|
||||
public SingleLiveEvent<Long> sale_amount = new SingleLiveEvent<>();
|
||||
public SingleLiveEvent<String> sale_breakdown = new SingleLiveEvent<>();
|
||||
|
||||
public SingleLiveEvent<Integer> void_count = new SingleLiveEvent<>();
|
||||
public SingleLiveEvent<Long> void_amount = new SingleLiveEvent<>();
|
||||
public SingleLiveEvent<String> void_breakdown = new SingleLiveEvent<>();
|
||||
|
||||
public SingleLiveEvent<Integer> pre_count = new SingleLiveEvent<>();
|
||||
public SingleLiveEvent<Long> pre_amount = new SingleLiveEvent<>();
|
||||
public SingleLiveEvent<String> pre_breakdown = new SingleLiveEvent<>();
|
||||
|
||||
@ -210,7 +210,7 @@ public class TMSSetupsImpl implements TMSSetups{
|
||||
}
|
||||
|
||||
// For dual-currency card flow, prefer MMK as PRIMARY HOST.
|
||||
if (isDualCurrencyEnabled && cardHosts.size() >= 2) {
|
||||
if (cardHosts.size() >= 2) {
|
||||
SiriusHost first = cardHosts.get(0);
|
||||
SiriusHost second = cardHosts.get(1);
|
||||
boolean firstIsMMK = "MMK".equalsIgnoreCase(first.getCurrency());
|
||||
@ -240,7 +240,7 @@ public class TMSSetupsImpl implements TMSSetups{
|
||||
}
|
||||
|
||||
// SECONDARY HOST (Card #2)
|
||||
if (isDualCurrencyEnabled && cardHosts.size() > 1) {
|
||||
if (cardHosts.size() > 1) {
|
||||
SiriusHost secondaryCard = cardHosts.get(1);
|
||||
SystemParamsOperation.getInstance().setThirdHostName(secondaryCard.getName() == null ? "" : secondaryCard.getName());
|
||||
SystemParamsOperation.getInstance().setThirdHostTerminalId(secondaryCard.getTid() == null ? "" : secondaryCard.getTid());
|
||||
|
||||
@ -142,7 +142,9 @@
|
||||
android:weightSum="3">
|
||||
|
||||
<!-- Tap Card -->
|
||||
<!-- android:onClick="@{()->click.onClickTap()}"-->
|
||||
<androidx.cardview.widget.CardView
|
||||
android:onClick="@{()->click.onClickTap()}"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="96dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
@ -150,7 +152,6 @@
|
||||
android:layout_weight="1"
|
||||
app:cardCornerRadius="12dp"
|
||||
app:cardElevation="2dp"
|
||||
android:onClick="@{()->click.onClickTap()}"
|
||||
android:backgroundTint="#fff"
|
||||
android:foreground="?android:attr/selectableItemBackground"
|
||||
android:focusable="true"
|
||||
|
||||
@ -4,8 +4,9 @@
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<data>
|
||||
<import type="android.text.TextUtils"/>
|
||||
<import type="android.view.View"/>
|
||||
<import type="android.text.TextUtils"/>
|
||||
|
||||
<variable
|
||||
name="viewModel"
|
||||
type="com.utsmm.kbz.ui.settings.HostConfigViewModel"/>
|
||||
@ -99,7 +100,8 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.hostName) ? View.GONE : View.VISIBLE}">
|
||||
android:visibility='@{!TextUtils.isEmpty(viewModel.hostName) ? View.VISIBLE : View.GONE}'
|
||||
tools:visibility="visible">
|
||||
|
||||
<TextView
|
||||
android:text="PRIMARY HOST"
|
||||
@ -113,56 +115,48 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:stretchColumns="1">
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.hostName) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Name"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.hostName}'/>
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.tid) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow android:visibility='@{!TextUtils.isEmpty(viewModel.tid) ? View.VISIBLE : View.GONE}'>
|
||||
<TextView style="@style/HostLabelStyle" android:text="TID"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.tid}'/>
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.mid) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow android:visibility='@{!TextUtils.isEmpty(viewModel.mid) ? View.VISIBLE : View.GONE}'>
|
||||
<TextView style="@style/HostLabelStyle" android:text="MID"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.mid}'/>
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.primaryIp) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow android:visibility='@{!TextUtils.isEmpty(viewModel.primaryIp) ? View.VISIBLE : View.GONE}'>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Primary IP"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.primaryIp}'/>
|
||||
</TableRow>
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.primaryPort) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow android:visibility='@{!TextUtils.isEmpty(viewModel.primaryPort) ? View.VISIBLE : View.GONE}'>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Primary Port"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.primaryPort}'/>
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.secondaryIp) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow android:visibility='@{!TextUtils.isEmpty(viewModel.secondaryIp) ? View.VISIBLE : View.GONE}'>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Secondary IP"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.secondaryIp}'/>
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.secondaryPort) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow android:visibility='@{!TextUtils.isEmpty(viewModel.secondaryPort) ? View.VISIBLE : View.GONE}'>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Secondary Port"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.secondaryPort}'/>
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.currencyCode) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow android:visibility='@{!TextUtils.isEmpty(viewModel.currencyCode) ? View.VISIBLE : View.GONE}'>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Currency"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.currencyCode}'/>
|
||||
@ -174,7 +168,6 @@
|
||||
android:text="--------------------------------------------------------------------------"
|
||||
android:gravity="left"
|
||||
android:paddingVertical="8dp"
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.hostName) ? View.GONE : View.VISIBLE}"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"/>
|
||||
|
||||
@ -183,7 +176,8 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.thirdHostName) ? View.GONE : View.VISIBLE}">
|
||||
android:visibility='@{!TextUtils.isEmpty(viewModel.thirdHostName) ? View.VISIBLE : View.GONE}'
|
||||
tools:visibility="gone">
|
||||
|
||||
<TextView
|
||||
android:text="SECONDARY HOST"
|
||||
@ -200,57 +194,43 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:stretchColumns="1">
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.thirdHostName) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Name"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.thirdHostName}'/>
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.thirdHostTid) ? View.GONE : View.VISIBLE}">
|
||||
<TextView style="@style/HostLabelStyle" android:text="TID"/>
|
||||
<TableRow android:visibility='@{!TextUtils.isEmpty(viewModel.thirdHostShortCode) ? View.VISIBLE : View.GONE}'>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Short Code"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.thirdHostTid}'/>
|
||||
android:text='@{": " + viewModel.thirdHostShortCode}'/>
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.thirdHostMid) ? View.GONE : View.VISIBLE}">
|
||||
<TextView style="@style/HostLabelStyle" android:text="MID"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.thirdHostMid}'/>
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.thirdHostPrimaryIp) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow android:visibility='@{!TextUtils.isEmpty(viewModel.thirdHostPrimaryIp) ? View.VISIBLE : View.GONE}'>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Primary IP"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.thirdHostPrimaryIp}'/>
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.thirdHostPrimaryPort) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow android:visibility='@{!TextUtils.isEmpty(viewModel.thirdHostPrimaryPort) ? View.VISIBLE : View.GONE}'>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Primary Port"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.thirdHostPrimaryPort}'/>
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.thirdHostSecondaryIp) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow android:visibility='@{!TextUtils.isEmpty(viewModel.thirdHostSecondaryIp) ? View.VISIBLE : View.GONE}'>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Secondary IP"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.thirdHostSecondaryIp}'/>
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.thirdHostSecondaryPort) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow android:visibility='@{!TextUtils.isEmpty(viewModel.thirdHostSecondaryPort) ? View.VISIBLE : View.GONE}'>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Secondary Port"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.thirdHostSecondaryPort}'/>
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.thirdHostCurrency) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow android:visibility='@{!TextUtils.isEmpty(viewModel.thirdHostCurrency) ? View.VISIBLE : View.GONE}'>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Currency"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.thirdHostCurrency}'/>
|
||||
@ -261,7 +241,6 @@
|
||||
android:text="--------------------------------------------------------------------------"
|
||||
android:gravity="left"
|
||||
android:paddingVertical="8dp"
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.thirdHostName) ? View.GONE : View.VISIBLE}"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"/>
|
||||
</LinearLayout>
|
||||
@ -271,7 +250,8 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.secHostName) ? View.GONE : View.VISIBLE}">
|
||||
android:visibility='@{!TextUtils.isEmpty(viewModel.secHostName) ? View.VISIBLE : View.GONE}'
|
||||
tools:visibility="visible">
|
||||
|
||||
<TextView
|
||||
android:text="QR HOST"
|
||||
@ -288,50 +268,43 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:stretchColumns="1">
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.secHostName) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Name"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.secHostName}'/>
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.shortCode) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow android:visibility='@{!TextUtils.isEmpty(viewModel.shortCode) ? View.VISIBLE : View.GONE}'>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Short Code"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.shortCode}'/>
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.secHostPrimaryIp) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow android:visibility='@{!TextUtils.isEmpty(viewModel.secHostPrimaryIp) ? View.VISIBLE : View.GONE}'>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Primary IP"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.secHostPrimaryIp}'/>
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.secHostPrimaryPort) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow android:visibility='@{!TextUtils.isEmpty(viewModel.secHostPrimaryPort) ? View.VISIBLE : View.GONE}'>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Primary Port"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.secHostPrimaryPort}'/>
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.secHostSecondaryIp) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow android:visibility='@{!TextUtils.isEmpty(viewModel.secHostSecondaryIp) ? View.VISIBLE : View.GONE}'>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Secondary IP"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.secHostSecondaryIp}'/>
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.secHostSecondaryPort) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow android:visibility='@{!TextUtils.isEmpty(viewModel.secHostSecondaryPort) ? View.VISIBLE : View.GONE}'>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Secondary Port"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.secHostSecondaryPort}'/>
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.secHostCurrency) ? View.GONE : View.VISIBLE}">
|
||||
<TableRow android:visibility='@{!TextUtils.isEmpty(viewModel.secHostCurrency) ? View.VISIBLE : View.GONE}'>
|
||||
<TextView style="@style/HostLabelStyle" android:text="Currency"/>
|
||||
<TextView style="@style/HostValueStyle"
|
||||
android:text='@{": " + viewModel.secHostCurrency}'/>
|
||||
@ -342,7 +315,6 @@
|
||||
android:text="--------------------------------------------------------------------------"
|
||||
android:gravity="left"
|
||||
android:paddingVertical="8dp"
|
||||
android:visibility="@{TextUtils.isEmpty(viewModel.secHostName) ? View.GONE : View.VISIBLE}"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"/>
|
||||
</LinearLayout>
|
||||
@ -367,6 +339,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:visibility="@{sharedViewModel.printerDisabled ? View.GONE : View.VISIBLE}"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent">
|
||||
|
||||
@ -386,7 +359,6 @@
|
||||
android:layout_height="52dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_marginStart="8dp"
|
||||
android:visibility="@{sharedViewModel.printerDisabled ? View.GONE : View.VISIBLE}"
|
||||
android:text="Print"
|
||||
android:onClick="@{()-> click.onPrint()}"
|
||||
android:background="@drawable/bg_rounded_btn_cv"
|
||||
|
||||
@ -127,6 +127,63 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_marginTop="19dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="2"
|
||||
android:textColor="@color/black"
|
||||
android:fontFamily="@font/rubik_regular"
|
||||
android:text="@string/txt_subtitle_void"
|
||||
android:textSize="16sp" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:textColor="@color/black"
|
||||
android:fontFamily="@font/rubik_regular"
|
||||
android:text="@={settleViewModel.sale_count+``}"
|
||||
tools:text="5"
|
||||
android:textSize="16sp" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="2"
|
||||
android:textColor="@color/black"
|
||||
android:fontFamily="@font/rubik_regular"
|
||||
android:text="@{POSUtil.getInstance().getDecimalAmountSeparatorFormat(settleViewModel.sale_amount)}"
|
||||
tools:text="65.00"
|
||||
android:textAlignment="textEnd"
|
||||
android:textSize="16sp" />
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="6dp"
|
||||
android:fontFamily="@font/rubik_regular"
|
||||
android:text="@{settleViewModel.sale_breakdown}"
|
||||
android:textColor="@color/colorTextContent"
|
||||
android:textSize="12sp"
|
||||
tools:text="MMK 2 / 10,000.00 USD 1 / 25.00" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<FrameLayout
|
||||
android:layout_marginTop="15dp"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@ -255,6 +255,7 @@
|
||||
<string name="txt_title_count">Count</string>
|
||||
<string name="txt_title_totals">Totals</string>
|
||||
<string name="txt_subtitle_sale">Sale</string>
|
||||
<string name="txt_subtitle_void">Void</string>
|
||||
<string name="txt_subtitle_sale_completion">Sale Completion</string>
|
||||
<string name="txt_subtitle_refund">Refund</string>
|
||||
<string name="txt_subtitle_amount">Amount</string>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@ -11,8 +11,8 @@
|
||||
"type": "SINGLE",
|
||||
"filters": [],
|
||||
"attributes": [],
|
||||
"versionCode": 1,
|
||||
"versionName": "1.00-uat",
|
||||
"versionCode": 33,
|
||||
"versionName": "2.13-uat",
|
||||
"outputFile": "app-uat-release.apk"
|
||||
}
|
||||
],
|
||||
|
||||
@ -27,10 +27,6 @@ public final class TerminalKeyUtil {
|
||||
private static final byte[] main_key_data = ByteUtil.hexStr2Bytes("875f63741753d18811a3449090d1777b".toUpperCase());
|
||||
// private static final byte[] main_key_data = ByteUtil.hexStr2Bytes("e121249099a677e8b7d4f6a9d49fe8d1".toUpperCase()); // MPU
|
||||
private static final byte[] work_key_data = new byte[16];
|
||||
|
||||
|
||||
|
||||
|
||||
public static void initNexKey() {
|
||||
byte[] IPEKByte = ByteUtil.hexStr2Bytes("5A4CFF6DE93F0488926166F3317EFD2F"); // IPEK
|
||||
byte[] IPEKKCVByte = ByteUtil.hexStr2Bytes("1F0C18");
|
||||
@ -54,8 +50,8 @@ public final class TerminalKeyUtil {
|
||||
// int result = pinPad.dukptKeyInject(9, DukptKeyTypeEnum.IPEK,IPEKByte,16,KSNByte);
|
||||
// int result = pinPad.dukptKeyInject(9, DukptKeyTypeEnum.BDK,IPEKByte,16,ksn);
|
||||
|
||||
LogUtil.d(TAG, "save tmk key result: "+result);
|
||||
LogUtil.d(TAG, "save tmk kcv: "+ByteUtil.bytes2HexStr(kcv));
|
||||
// LogUtil.d(TAG, "save tmk key result: "+result);
|
||||
// LogUtil.d(TAG, "save tmk kcv: "+ByteUtil.bytes2HexStr(kcv));
|
||||
|
||||
// byte[] encryptedPIK = SystemParamsOperation.getInstance().getKeyPIK().get(0);
|
||||
//
|
||||
|
||||
@ -254,7 +254,8 @@ public class NetworkModule {
|
||||
}
|
||||
|
||||
if (baseUrl.isEmpty()) {
|
||||
baseUrl = "http://api-uat.kbzpay.com/payment/gateway/uat/";
|
||||
// baseUrl = "http://api-uat.kbzpay.com/payment/gateway/uat/"; //UAT
|
||||
baseUrl = "https://api.kbzpay.com/payment/gateway/"; //Prod
|
||||
}
|
||||
return new Retrofit.Builder()
|
||||
.baseUrl(baseUrl)
|
||||
@ -310,8 +311,8 @@ public Retrofit provideKPayRefundRetrofit(@ApplicationContext Context context) {
|
||||
|
||||
// char[] password = "test123".toCharArray();
|
||||
|
||||
// String refundBaseUrl = "https://api.kbzpay.com:8008/payment/gateway/";
|
||||
String refundBaseUrl = "https://api-uat.kbzpay.com:18008/payment/gateway/uat/";
|
||||
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();
|
||||
|
||||
|
||||
@ -325,7 +326,7 @@ public Retrofit provideKPayRefundRetrofit(@ApplicationContext Context context) {
|
||||
|
||||
String pass = SystemParamsOperation.getInstance().getCertificatePassword();
|
||||
if (TextUtils.isEmpty(pass)) {
|
||||
pass = "test123";
|
||||
pass = "";
|
||||
}
|
||||
|
||||
char[] password = pass.toCharArray();
|
||||
|
||||
@ -3,15 +3,10 @@ package com.utsmyanmar.baselib.network;
|
||||
import com.utsmyanmar.baselib.network.model.KPayQRQueryRequest;
|
||||
import com.utsmyanmar.baselib.network.model.KPayQRRequest;
|
||||
import com.utsmyanmar.baselib.network.model.KPayQRResponse;
|
||||
import com.utsmyanmar.baselib.network.model.MMQRStatusResponse;
|
||||
import com.utsmyanmar.baselib.network.model.WaveQRRequest;
|
||||
import com.utsmyanmar.baselib.network.model.WaveQRResponse;
|
||||
import com.utsmyanmar.baselib.network.model.WaveStatusRequest;
|
||||
|
||||
import io.reactivex.rxjava3.core.Observable;
|
||||
import retrofit2.http.Body;
|
||||
import retrofit2.http.POST;
|
||||
import retrofit2.http.Url;
|
||||
|
||||
public interface KPayApiService {
|
||||
|
||||
@ -23,13 +18,13 @@ public interface KPayApiService {
|
||||
Observable<KPayQRQueryRequest.QRQueryResponse> checkStatus(@Body KPayQRQueryRequest.QRQueryRequest waveStatusRequest);
|
||||
|
||||
|
||||
//this accept "url" bez this api start with https and other are http in uat
|
||||
@POST
|
||||
Observable<KPayQRRequest.CloseOrderResponse> closeOrder(@Url String url, @Body KPayQRRequest.CloseOrderRequest closeOrderRequest);
|
||||
//this accepts "url" bez this api start with https and other are http in uat
|
||||
// @POST
|
||||
// Observable<KPayQRRequest.CloseOrderResponse> closeOrder(@Url String url, @Body KPayQRRequest.CloseOrderRequest closeOrderRequest);
|
||||
|
||||
|
||||
//this 2 is for production
|
||||
// @POST("closeorder")
|
||||
// Observable<KPayQRRequest.CloseOrderResponse> closeOrder(@Body KPayQRRequest.CloseOrderRequest closeOrderRequest);
|
||||
@POST("closeorder")
|
||||
Observable<KPayQRRequest.CloseOrderResponse> closeOrder(@Body KPayQRRequest.CloseOrderRequest closeOrderRequest);
|
||||
|
||||
}
|
||||
|
||||
@ -86,9 +86,9 @@ public class Repository {
|
||||
}
|
||||
|
||||
public Observable<KPayQRRequest.CloseOrderResponse> qrCloseOrder(KPayQRRequest.CloseOrderRequest request){
|
||||
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
|
||||
// String url = "https://api-uat.kbzpay.com/payment/gateway/uat/closeorder"; //close this in prod
|
||||
// return kPayApiService.closeOrder(url, request); // this is for uat
|
||||
return kPayApiService.closeOrder(request); //this is for prod
|
||||
}
|
||||
|
||||
public Observable<KPayQRQueryRequest.QRQueryResponse> qrStatusCheck(KPayQRQueryRequest.QRQueryRequest request) {
|
||||
|
||||
@ -290,9 +290,9 @@ public abstract class BaseXPrint {
|
||||
}
|
||||
|
||||
private void printSettlementCurrencySection(String currencyLabel, CurrencySettlementSummary summary) {
|
||||
if (!summary.hasAnyValue()) {
|
||||
return;
|
||||
}
|
||||
// if (!summary.hasAnyValue()) {
|
||||
// return;
|
||||
// }
|
||||
boolean isDecimalEnabled = SystemParamsOperation.getInstance().getDecimalEnable();
|
||||
|
||||
int totalCount = summary.saleCount + summary.preAuthCompCount + summary.refundCount + summary.cashAdvanceCount;
|
||||
@ -390,6 +390,13 @@ public abstract class BaseXPrint {
|
||||
|
||||
|
||||
}
|
||||
protected void printTransFooterForSettlement() {
|
||||
String receiptFooter = SystemParamsOperation.getInstance().getReceiptFooter();
|
||||
String finalVersion = SystemParamsOperation.getInstance().getFinalVersion();
|
||||
printer.appendPrnStr("***** SETTLEMENT CONFIRM *****", fontNormal, AlignEnum.CENTER,false);
|
||||
printer.appendPrnStr(receiptFooter, fontNormal, AlignEnum.CENTER,false);
|
||||
}
|
||||
|
||||
|
||||
protected void printTransDetail(PayDetail payDetail) {
|
||||
|
||||
@ -1600,10 +1607,10 @@ public abstract class BaseXPrint {
|
||||
}else{
|
||||
|
||||
if(isSettlement && isDuelCurrency){
|
||||
printer.appendPrnStr("MID :" + safe(SystemParamsOperation.getInstance().getMerchantId()), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("TID :" + safe(SystemParamsOperation.getInstance().getTerminalId()), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("MID :" + safe(SystemParamsOperation.getInstance().getThirdHostMerchantId()), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("TID :" + safe(SystemParamsOperation.getInstance().getThirdHostTerminalId()), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("MID :" + SystemParamsOperation.getInstance().getMerchantId(), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("TID :" + SystemParamsOperation.getInstance().getTerminalId(), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("MID :" + SystemParamsOperation.getInstance().getThirdHostMerchantId(), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("TID :" + SystemParamsOperation.getInstance().getThirdHostTerminalId(), fontNormal, AlignEnum.LEFT, false);
|
||||
}else{
|
||||
printer.appendPrnStr("MID :" + payDetail.getMerchantNo(), fontNormal, AlignEnum.LEFT,false);
|
||||
printer.appendPrnStr("TID :" + payDetail.getTerminalNo(), fontNormal, AlignEnum.LEFT,false);
|
||||
@ -1739,74 +1746,48 @@ public abstract class BaseXPrint {
|
||||
|
||||
// ---------- PRIMARY HOST ----------
|
||||
printer.appendPrnStr("PRIMARY HOST", fontNormal, AlignEnum.LEFT, true);
|
||||
printer.appendPrnStr("Name : " + safe(sp.getHostName()), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("TID : " + safe(sp.getTerminalId()), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("MID : " + safe(sp.getMerchantId()), fontNormal, AlignEnum.LEFT, false);
|
||||
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 : " + normalizeHostCurrency(sp.getCurrencyType() == null ? "" : sp.getCurrencyType().toString()), fontNormal, AlignEnum.LEFT, false);
|
||||
sp.getCurrencyType();
|
||||
printer.appendPrnStr(sp.getCurrencyType().toString(), fontNormal, AlignEnum.LEFT, false);
|
||||
dotBreak();
|
||||
// ---------- SECONDARY HOST (optional) ----------
|
||||
if (!TextUtils.isEmpty(sp.getSecHostName())) {
|
||||
printer.appendPrnStr("QR 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);
|
||||
String qrHostCurrency = TextUtils.isEmpty(sp.getSecHostCurrency()) ? String.valueOf(sp.getCurrencyType()) : sp.getSecHostCurrency();
|
||||
printer.appendPrnStr("Currency Code : " + qrHostCurrency, fontNormal, AlignEnum.LEFT, false);
|
||||
dotBreak();
|
||||
printer.appendPrnStr("App Version : " + getAppVersion(), fontNormal, AlignEnum.LEFT, false);
|
||||
}
|
||||
|
||||
// ---------- SECONDARY HOST ----------
|
||||
printer.appendPrnStr("SECONDARY HOST", fontNormal, AlignEnum.LEFT, true);
|
||||
printer.appendPrnStr("Name : " + safe(sp.getThirdHostName()), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("TID : " + safe(sp.getThirdHostTerminalId()), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("MID : " + safe(sp.getThirdHostMerchantId()), fontNormal, AlignEnum.LEFT, false);
|
||||
String[] thirdHostIp = splitIpAndPort(sp.getThirdHostIpAddress());
|
||||
printer.appendPrnStr("Primary IP : " + thirdHostIp[0], fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("Primary Port : " + thirdHostIp[1], fontNormal, AlignEnum.LEFT, false);
|
||||
String[] thirdHostSecIp = splitIpAndPort(sp.getThirdHostSecIpAddress());
|
||||
printer.appendPrnStr("Secondary IP : " + thirdHostSecIp[0], fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("Secondary Port: " + thirdHostSecIp[1], fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("Currency : " + normalizeHostCurrency(safe(sp.getThirdHostCurrency())), fontNormal, AlignEnum.LEFT, false);
|
||||
dotBreak();
|
||||
|
||||
// ---------- QR HOST ----------
|
||||
printer.appendPrnStr("QR HOST", fontNormal, AlignEnum.LEFT, true);
|
||||
printer.appendPrnStr("Name : " + safe(sp.getSecHostName()), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("Short Code : " + safe(sp.getShortCode()), fontNormal, AlignEnum.LEFT, false);
|
||||
String[] qrHostIp = splitIpAndPort(sp.getSecHostIpAddress());
|
||||
printer.appendPrnStr("Primary IP : " + qrHostIp[0], fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("Primary Port : " + qrHostIp[1], fontNormal, AlignEnum.LEFT, false);
|
||||
String[] qrHostSecIp = splitIpAndPort(sp.getSecHostSecIpAddress());
|
||||
printer.appendPrnStr("Secondary IP : " + qrHostSecIp[0], fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("Secondary Port: " + qrHostSecIp[1], fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("Currency : " + normalizeHostCurrency(safe(sp.getSecHostCurrency())), fontNormal, AlignEnum.LEFT, false);
|
||||
dotBreak();
|
||||
|
||||
printer.appendPrnStr("App Version : " + getAppVersion(), fontNormal, AlignEnum.LEFT, false);
|
||||
}
|
||||
|
||||
private String safe(String value) {
|
||||
return value == null ? "" : value;
|
||||
}
|
||||
|
||||
private String normalizeHostCurrency(String raw) {
|
||||
if (TextUtils.isEmpty(raw)) return "";
|
||||
String value = raw.trim().toUpperCase();
|
||||
switch (value) {
|
||||
case "104":
|
||||
case "MMK":
|
||||
return "MMK";
|
||||
case "840":
|
||||
case "USD":
|
||||
return "USD";
|
||||
case "156":
|
||||
case "CNY":
|
||||
case "RMB":
|
||||
return "CNY";
|
||||
case "764":
|
||||
case "THB":
|
||||
return "THB";
|
||||
case "643":
|
||||
case "RUB":
|
||||
return "RUB";
|
||||
default:
|
||||
return value;
|
||||
// ---------- THIRD HOST (optional) ----------
|
||||
if (!TextUtils.isEmpty(sp.getThirdHostName())) {
|
||||
printer.appendPrnStr("SECONDARY HOST", fontNormal, AlignEnum.LEFT, true);
|
||||
printer.appendPrnStr("Name : " + sp.getThirdHostName(), fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("SHORT CODE : " + sp.getThirdHostShortCode(), fontNormal, AlignEnum.LEFT, false);
|
||||
String[] thirdHostIp = splitIpAndPort(sp.getThirdHostIpAddress());
|
||||
printer.appendPrnStr("Primary Ip : " + thirdHostIp[0], fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("Primary Port : " + thirdHostIp[1], fontNormal, AlignEnum.LEFT, false);
|
||||
String[] thirdHostSecIp = splitIpAndPort(sp.getThirdHostSecIpAddress());
|
||||
printer.appendPrnStr("Secondary Ip : " + thirdHostSecIp[0], fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("Secondary Port: " + thirdHostSecIp[1], fontNormal, AlignEnum.LEFT, false);
|
||||
printer.appendPrnStr("Currency Code : " + sp.getThirdHostCurrency(), fontNormal, AlignEnum.LEFT, false);
|
||||
dotBreak();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -193,7 +193,8 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
|
||||
printMerchantHeader();
|
||||
printTransHeader(payDetail);
|
||||
printTransDetailSettlement(payDetail);
|
||||
printTransFooterSummary();
|
||||
// printTransFooterSummary();
|
||||
printTransFooterForSettlement();
|
||||
|
||||
emptyLine(1);
|
||||
startPrintNex();
|
||||
|
||||
@ -40,12 +40,10 @@ public class SystemParamsSettings implements Serializable {
|
||||
|
||||
private boolean checkExpSwitch = false;
|
||||
|
||||
// private String tmsAddress = "https://tms.smile-mm.com";
|
||||
// private String tmsAddress = "http://128.199.170.203";
|
||||
private String tmsAddress = "https://sirius-nest.utsmyanmar.com/api/v1";
|
||||
// private String tmsAddress = "https://api-tms-uat.kbzbank.com:8443/sirius"; //for uat
|
||||
private String ereceiptAddress = "https://receipt-nest.utsmyanmar.com/api/v1"; //for on prime
|
||||
// private String ereceiptAddress = "https://api-tms-uat.kbzbank.com:8443/receipt"; //for uat
|
||||
// private String tmsAddress = "https://api-tms.kbzbank.com/sirius";
|
||||
// private String ereceiptAddress = "https://api-tms.kbzbank.com/receipt";
|
||||
private String tmsAddress = "https://api-tms-uat.kbzbank.com:8443/sirius";
|
||||
private String ereceiptAddress = "https://api-tms-uat.kbzbank.com:8443/receipt";
|
||||
|
||||
private String binValues = "";
|
||||
private String restrictedBinValues = "";
|
||||
|
||||
Loading…
Reference in New Issue
Block a user