diff --git a/app/src/main/java/com/utsmm/kbz/MainActivity.java b/app/src/main/java/com/utsmm/kbz/MainActivity.java index 90bdb46..e1db8b0 100644 --- a/app/src/main/java/com/utsmm/kbz/MainActivity.java +++ b/app/src/main/java/com/utsmm/kbz/MainActivity.java @@ -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 diff --git a/app/src/main/java/com/utsmm/kbz/MainFragment.java b/app/src/main/java/com/utsmm/kbz/MainFragment.java index da6fd1e..59e0887 100644 --- a/app/src/main/java/com/utsmm/kbz/MainFragment.java +++ b/app/src/main/java/com/utsmm/kbz/MainFragment.java @@ -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 imgList = new ArrayList<>(); private Observer 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 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 getAvailableCardSaleCurrencies() { + cachePrimaryCardHostIfNeeded(); + LinkedHashSet 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 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() { diff --git a/app/src/main/java/com/utsmm/kbz/ui/dashboard/DashboardTransFragment.java b/app/src/main/java/com/utsmm/kbz/ui/dashboard/DashboardTransFragment.java index 2302283..44e1a75 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/dashboard/DashboardTransFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/dashboard/DashboardTransFragment.java @@ -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 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 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 getAvailableCardSaleCurrencies() { + cachePrimaryCardHostIfNeeded(); + LinkedHashSet 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 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); } } diff --git a/app/src/main/java/com/utsmm/kbz/ui/management/ReprintReceiptFragment.java b/app/src/main/java/com/utsmm/kbz/ui/management/ReprintReceiptFragment.java index 82ee67b..dbda7fb 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/management/ReprintReceiptFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/management/ReprintReceiptFragment.java @@ -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() { diff --git a/app/src/main/java/com/utsmm/kbz/ui/qr_pay/RefundCertificateManager.java b/app/src/main/java/com/utsmm/kbz/ui/qr_pay/RefundCertificateManager.java index 136ab3f..009c5ea 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/qr_pay/RefundCertificateManager.java +++ b/app/src/main/java/com/utsmm/kbz/ui/qr_pay/RefundCertificateManager.java @@ -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(); diff --git a/app/src/main/java/com/utsmm/kbz/ui/settings/HostConfigFragment.java b/app/src/main/java/com/utsmm/kbz/ui/settings/HostConfigFragment.java index 0be3a35..a09f165 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/settings/HostConfigFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/settings/HostConfigFragment.java @@ -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); } } } diff --git a/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementViewModel.java b/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementViewModel.java index 951443f..8a3afbb 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementViewModel.java +++ b/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementViewModel.java @@ -77,6 +77,10 @@ public class SettlementViewModel extends ViewModel { public SingleLiveEvent sale_count = new SingleLiveEvent<>(); public SingleLiveEvent sale_amount = new SingleLiveEvent<>(); public SingleLiveEvent sale_breakdown = new SingleLiveEvent<>(); + + public SingleLiveEvent void_count = new SingleLiveEvent<>(); + public SingleLiveEvent void_amount = new SingleLiveEvent<>(); + public SingleLiveEvent void_breakdown = new SingleLiveEvent<>(); public SingleLiveEvent pre_count = new SingleLiveEvent<>(); public SingleLiveEvent pre_amount = new SingleLiveEvent<>(); diff --git a/app/src/main/java/com/utsmm/kbz/util/tms/TMSSetupsImpl.java b/app/src/main/java/com/utsmm/kbz/util/tms/TMSSetupsImpl.java index 1716d6c..7deeab2 100644 --- a/app/src/main/java/com/utsmm/kbz/util/tms/TMSSetupsImpl.java +++ b/app/src/main/java/com/utsmm/kbz/util/tms/TMSSetupsImpl.java @@ -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()); diff --git a/app/src/main/res/layout/fragment_capture_card_screen.xml b/app/src/main/res/layout/fragment_capture_card_screen.xml index 72c9d20..6b25b95 100644 --- a/app/src/main/res/layout/fragment_capture_card_screen.xml +++ b/app/src/main/res/layout/fragment_capture_card_screen.xml @@ -142,7 +142,9 @@ android:weightSum="3"> + - + + @@ -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"> - + - + - + - + - + - + - + - + @@ -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"> - + - - + + + android:text='@{": " + viewModel.thirdHostShortCode}'/> - - - - - - + - + - + - + - + @@ -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"/> @@ -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"> - + - + - + - + - + - + - + @@ -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"/> @@ -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" diff --git a/app/src/main/res/layout/fragment_view_batch_screen.xml b/app/src/main/res/layout/fragment_view_batch_screen.xml index 7643b27..c84c785 100644 --- a/app/src/main/res/layout/fragment_view_batch_screen.xml +++ b/app/src/main/res/layout/fragment_view_batch_screen.xml @@ -127,6 +127,63 @@ + + + + + + + + + + + + + + + Count Totals Sale + Void Sale Completion Refund Amount diff --git a/app/uat/release/baselineProfiles/0/app-uat-release.dm b/app/uat/release/baselineProfiles/0/app-uat-release.dm index 5279a49..a76f01b 100644 Binary files a/app/uat/release/baselineProfiles/0/app-uat-release.dm and b/app/uat/release/baselineProfiles/0/app-uat-release.dm differ diff --git a/app/uat/release/baselineProfiles/1/app-uat-release.dm b/app/uat/release/baselineProfiles/1/app-uat-release.dm index 9f46aca..2dffc85 100644 Binary files a/app/uat/release/baselineProfiles/1/app-uat-release.dm and b/app/uat/release/baselineProfiles/1/app-uat-release.dm differ diff --git a/app/uat/release/output-metadata.json b/app/uat/release/output-metadata.json index 8b7cf73..b498057 100644 --- a/app/uat/release/output-metadata.json +++ b/app/uat/release/output-metadata.json @@ -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" } ], diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/TerminalKeyUtil.java b/baselib/src/main/java/com/utsmyanmar/baselib/TerminalKeyUtil.java index c9af341..7e3c49b 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/TerminalKeyUtil.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/TerminalKeyUtil.java @@ -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); // 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 c8732f3..426b8a0 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/di/NetworkModule.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/di/NetworkModule.java @@ -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(); diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/network/KPayApiService.java b/baselib/src/main/java/com/utsmyanmar/baselib/network/KPayApiService.java index c361087..55d8cb8 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/network/KPayApiService.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/network/KPayApiService.java @@ -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 checkStatus(@Body KPayQRQueryRequest.QRQueryRequest waveStatusRequest); - //this accept "url" bez this api start with https and other are http in uat - @POST - Observable 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 closeOrder(@Url String url, @Body KPayQRRequest.CloseOrderRequest closeOrderRequest); //this 2 is for production -// @POST("closeorder") -// Observable closeOrder(@Body KPayQRRequest.CloseOrderRequest closeOrderRequest); + @POST("closeorder") + Observable closeOrder(@Body KPayQRRequest.CloseOrderRequest closeOrderRequest); } 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 f1de488..011203c 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/repo/Repository.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/repo/Repository.java @@ -86,9 +86,9 @@ public class Repository { } public Observable 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 qrStatusCheck(KPayQRQueryRequest.QRQueryRequest request) { diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/BaseXPrint.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/BaseXPrint.java index 1eb0046..cfa4828 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/BaseXPrint.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/BaseXPrint.java @@ -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(); } } diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java index 4acbb91..3f0a970 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java @@ -193,7 +193,8 @@ public class PrintXImpl extends BaseXPrint implements PrintX { printMerchantHeader(); printTransHeader(payDetail); printTransDetailSettlement(payDetail); - printTransFooterSummary(); +// printTransFooterSummary(); + printTransFooterForSettlement(); emptyLine(1); startPrintNex(); 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 104ba9c..59c75d8 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 @@ -39,13 +39,11 @@ public class SystemParamsSettings implements Serializable { private boolean manualEntryPinEnable = false; 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 = "";