From 088dbd0d9616287c398bd1b78130a06f3aca223a Mon Sep 17 00:00:00 2001 From: kizzy Date: Sun, 23 Aug 2026 19:05:23 +0700 Subject: [PATCH] balance Inquiry ready !!! --- .../kbz/ui/core_ui/ProcessingFragment.java | 17 ++++++++++++++--- .../ui/dashboard/DashboardTransFragment.java | 19 +++++++++++++++++++ .../utsmm/kbz/util/enums/FeaturesType.java | 1 + .../java/com/utsmm/kbz/util/tms/TMSUtil.java | 4 ++-- .../main/res/navigation/mobile_navigation.xml | 6 ++++++ .../test/java/com/utsmm/kbz/GeneralTest.java | 6 ++++++ .../java/com/utsmm/kbz/SignGenerateTest.java | 1 + .../transactions/TransactionsOperation.java | 11 +++++++---- .../com/utsmyanmar/paylibs/utils/POSUtil.java | 2 ++ .../core_utils/SystemParamsOperation.java | 11 +++++++++++ .../core_utils/SystemParamsSettings.java | 4 ++++ .../paylibs/utils/enums/TransMenu.java | 3 ++- .../paylibs/utils/host_utils/HostUtils.java | 16 +++++++++++++++- .../paylibs/utils/iso_utils/BitmapConfig.java | 2 +- 14 files changed, 91 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java index 1d07631..522ad55 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java @@ -36,6 +36,8 @@ import com.utsmyanmar.paylibs.model.PayDetail; import com.utsmm.kbz.util.ecr.CoreUtils; import com.utsmyanmar.paylibs.utils.LogUtil; +import com.utsmyanmar.paylibs.utils.POSUtil; +import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType; import java.text.DecimalFormat; @@ -229,14 +231,23 @@ public class ProcessingFragment extends DataBindingFragment { private void updateData(){ + PayDetail payDetail; if(isEmvTrans()) { LogUtil.d(TAG,"Updated sharedViewmodel payDetail for emv"); - sharedViewModel.payDetail.setValue(emvTransactionProcessViewModel.payDetailResult.getValue()); + payDetail = emvTransactionProcessViewModel.payDetailResult.getValue(); } else { LogUtil.d(TAG,"Updated sharedViewmodel payDetail for non emv"); - sharedViewModel.payDetail.setValue(transProcessViewModel.payDetailResult.getValue()); - + payDetail = transProcessViewModel.payDetailResult.getValue(); } + sharedViewModel.payDetail.setValue(payDetail); + if (sharedViewModel.transactionsType.getValue() == TransactionsType.BALANCE_INQUIRY && payDetail != null) { + sharedViewModel.amount.setValue(POSUtil.getInstance().getDecimalAmountSeparatorFormat(payDetail.getAmount())); + LogUtil.d(TAG,"amount :"+payDetail.getAmount()); + } + +// if(sharedViewModel.transactionsType.getValue() == TransactionsType.BALANCE_INQUIRY) { +// sharedViewModel.amount.setValue(Objects.requireNonNull(sharedViewModel.payDetail.getValue()).amount + ""); +// } // if(sharedViewModel.payDetail.getValue() != null) { // EReceiptRequest request = EReceiptUtil.getInstance().generateMPUReceipt(sharedViewModel.payDetail.getValue()); 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 44e1a75..629dc6f 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 @@ -98,6 +98,7 @@ public class DashboardTransFragment extends DataBindingFragment { Boolean isVoidEnabled = SystemParamsOperation.getInstance().getVoidStatus(); Boolean isPreAuthEnabled = SystemParamsOperation.getInstance().getPreAuthStatus(); Boolean isCashAdvanceEnabled = SystemParamsOperation.getInstance().getCashAdvanceStatus(); + Boolean isBalanceInquiryEnabled = SystemParamsOperation.getInstance().getBalanceInquiryStatus(); private void initData() { featuresList.clear(); @@ -137,6 +138,11 @@ public class DashboardTransFragment extends DataBindingFragment { } break; +// case BALANCE_INQUIRY: +// if(isBalanceInquiryEnabled){ +// featuresList.add(feature); +// } +// break; default: featuresList.add(feature); break; @@ -184,6 +190,9 @@ public class DashboardTransFragment extends DataBindingFragment { case DEVICE_CONFIG: new DashboardTransFragment.ClickEvent().onClickDeviceConfig(); break; + case BALANCE_INQUIRY: + new DashboardTransFragment.ClickEvent().onClickBalanceInquiry(); + break; } }); @@ -294,6 +303,16 @@ public class DashboardTransFragment extends DataBindingFragment { } + public void onClickBalanceInquiry() { + showCurrencyChooserForCardFlow(() -> { + sharedViewModel.setTransactionsType(TransactionsType.BALANCE_INQUIRY); + sharedViewModel.setTransMenu(TransMenu.BALANCE_INQUIRY); + routeId = R.id.action_dashboardTransFragment_to_cardWaitingFragment; + safeRouteTo(currentId, routeId, hostId); + }); + + } + public void onClickClearReversal() { sharedViewModel.transactionsType.postValue(TransactionsType.CLEAR_REVERSAL); sharedViewModel.setTransMenu(TransMenu.CLEAR_REVERSAL); diff --git a/app/src/main/java/com/utsmm/kbz/util/enums/FeaturesType.java b/app/src/main/java/com/utsmm/kbz/util/enums/FeaturesType.java index e1980f2..2e04748 100644 --- a/app/src/main/java/com/utsmm/kbz/util/enums/FeaturesType.java +++ b/app/src/main/java/com/utsmm/kbz/util/enums/FeaturesType.java @@ -11,6 +11,7 @@ public enum FeaturesType { PRE_AUTH_COMPLETE, PRE_AUTH_COMPLETE_VOID, REFUND, + BALANCE_INQUIRY, MANAGEMENT_FEATURES, TIP_ADJUSTMENT, QR_PAY, diff --git a/app/src/main/java/com/utsmm/kbz/util/tms/TMSUtil.java b/app/src/main/java/com/utsmm/kbz/util/tms/TMSUtil.java index bb85203..2479b2e 100644 --- a/app/src/main/java/com/utsmm/kbz/util/tms/TMSUtil.java +++ b/app/src/main/java/com/utsmm/kbz/util/tms/TMSUtil.java @@ -204,7 +204,7 @@ public class TMSUtil { boolean preAuthCancelStatus = true; boolean preAuthCompleteStatus = true; boolean preAuthCompleteCancelStatus = true; - + boolean balanceInquiryStatus = true; preAuthStatus = SystemParamsOperation.getInstance().getPreAuthStatus(); voidStatus = SystemParamsOperation.getInstance().getVoidStatus(); @@ -222,7 +222,7 @@ public class TMSUtil { featuresList.add(new Features(6, fragmentActivity.getString(R.string.menu_preauth_completion), R.drawable.ic_pre_auth_dash, FeaturesType.PRE_AUTH_COMPLETE, preAuthCompleteStatus)); // featuresList.add(new Features(5, fragmentActivity.getString(R.string.menu_wavepay_inquiry), R.drawable.ic_wave_status_dash, FeaturesType.WAVE_PAY_INQUIRY, wavePayInquiryStatus)); featuresList.add(new Features(1, fragmentActivity.getString(R.string.menu_cash_advance), R.drawable.ic_cash_advance, FeaturesType.CASH_ADVANCE, cashAdvanceStatus)); -// featuresList.add(new Features(9, fragmentActivity.getString(R.string.menu_history), R.drawable.ic_history, FeaturesType.HISTORY, true)); + featuresList.add(new Features(9, fragmentActivity.getString(R.string.menu_balance), R.drawable.ic_bank_card, FeaturesType.BALANCE_INQUIRY, balanceInquiryStatus)); featuresList.add(new Features(11, "Clear Reversal", R.drawable.ic_clear_all, FeaturesType.CLEAR_REVERSAL, true)); featuresList.add(new Features(10, "Configs", R.drawable.ic_host, FeaturesType.DEVICE_CONFIG, true)); } diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index 27b82ad..9713452 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -634,6 +634,12 @@ app:popUpToInclusive="true" android:id="@+id/action_dashboardTransFragment_to_deviceConfig" app:destination="@id/hostConfigFragment" /> + binParser(String input) { if (input == null || input.trim().isEmpty()) { diff --git a/app/src/test/java/com/utsmm/kbz/SignGenerateTest.java b/app/src/test/java/com/utsmm/kbz/SignGenerateTest.java index 5ec0c57..31f53f6 100644 --- a/app/src/test/java/com/utsmm/kbz/SignGenerateTest.java +++ b/app/src/test/java/com/utsmm/kbz/SignGenerateTest.java @@ -1,6 +1,7 @@ package com.utsmm.kbz; import com.kizzy.xpay.util.Sign; +import com.utsmyanmar.baselib.util.EReceiptHelper; import org.junit.Test; import static org.junit.Assert.*; diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/transactions/TransactionsOperation.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/transactions/TransactionsOperation.java index d5fc057..955f3e6 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/transactions/TransactionsOperation.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/transactions/TransactionsOperation.java @@ -83,7 +83,7 @@ public class TransactionsOperation { isoMsgX = new ISOMsgX.ISOMsgXBuilder(ISOVersion.VERSION_1993, ISOMode.BOTH_HEADER_TPDU, hostName) .build(); - if (transactionsType == TransactionsType.SALE || transactionsType == TransactionsType.PRE_AUTH_SALE || transactionsType == TransactionsType.CASH_OUT) { + if (transactionsType == TransactionsType.SALE || transactionsType == TransactionsType.PRE_AUTH_SALE || transactionsType == TransactionsType.CASH_OUT || transactionsType == TransactionsType.BALANCE_INQUIRY) { transTradeData = setUpNormalTransaction(tradeData, transactionsType, hostName); } else { transTradeData = setUpRebuildTransactions(tradeData, transactionsType, hostName); @@ -139,8 +139,10 @@ public class TransactionsOperation { transPayDetail.setIsSettle(false); - if (responseMap.get("F04") != null) { - transPayDetail.setAmount(Long.parseLong(Objects.requireNonNull(responseMap.get("F04")).getDataStr())); + MsgField amountField = responseMap.get("F004"); + if (amountField != null && amountField.getDataStr() != null) { + transPayDetail.setAmount(Long.parseLong(amountField.getDataStr())); + LogUtil.d(Constant.TAG, transactionsType.name + " PROCESS AMOUNT :" + transPayDetail.getAmount()); } if (responseMap.get("F012") != null) { @@ -255,8 +257,9 @@ public class TransactionsOperation { listener.onReversal(transTradeData); } else { - listener.onSuccess(transTradeData); transTradeData.setPayDetail(transPayDetail); + listener.onSuccess(transTradeData); + } // else if (!transPayDetail.getIsNeedReversal()) { diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/POSUtil.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/POSUtil.java index f22c086..1e64c91 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/POSUtil.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/POSUtil.java @@ -402,6 +402,8 @@ public class POSUtil { } else if(payDetail.getTransactionType() == TransactionsType.CASH_OUT.value) { long totalAmount = payDetail.getAmount() + payDetail.getAdditionalAmount(); return "Transaction for Amount \n"+getDecimalAmountFormat(totalAmount) +" "+currencySign+" Received."; + } else if(payDetail.getTransactionType() == TransactionsType.BALANCE_INQUIRY.value) { + return "Available Balance \n"+getDecimalAmountSeparatorFormat(payDetail.getAmount()) +" "+currencySign; } else { return "Transaction for Amount \n"+getDecimalAmountFormat(payDetail.getAmount()) +" "+currencySign+" Received."; diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsOperation.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsOperation.java index 9b7f43c..750b6f1 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsOperation.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsOperation.java @@ -1265,6 +1265,17 @@ public class SystemParamsOperation { return params.getCashAdvanceStatus(); } + public void setBalanceInquiryStatus(boolean status) { + SystemParamsSettings params = getSystemParamsSettings(); + params.setBalanceInquiryStatus(status); + saveSystemParamsSettings(params); + } + + public boolean getBalanceInquiryStatus() { + SystemParamsSettings params = getSystemParamsSettings(); + return params.getBalanceInquiryStatus(); + } + public boolean getFullVoidPreauthStatus() { SystemParamsSettings params = getSystemParamsSettings(); return params.getFullVoidPreauthStatus(); 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 172e37e..e07ff32 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 @@ -218,6 +218,7 @@ public class SystemParamsSettings implements Serializable { private boolean cash_advance_status = true; + private boolean balance_inquiry_status = true; private boolean decimal_enable = false; private boolean refund_status = true; @@ -634,6 +635,9 @@ public class SystemParamsSettings implements Serializable { protected void setVoidStatus(boolean void_status) { this.void_status = void_status; } + protected boolean getBalanceInquiryStatus() { return balance_inquiry_status;} + + protected void setBalanceInquiryStatus(boolean balance_inquiry_status) { this.balance_inquiry_status = balance_inquiry_status; } protected boolean getCashAdvanceStatus() { return cash_advance_status;} protected void setCashAdvanceStatus(boolean cash_advance_status) { this.cash_advance_status = cash_advance_status;} diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/enums/TransMenu.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/enums/TransMenu.java index 319174d..ab0bc48 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/enums/TransMenu.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/enums/TransMenu.java @@ -23,5 +23,6 @@ public enum TransMenu { PRE_AUTH, PRE_AUTH_FULL_VOID, PRE_AUTH_PARTIAL_VOID, - TIP_ADJUSTMENT + TIP_ADJUSTMENT, + BALANCE_INQUIRY } diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/host_utils/HostUtils.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/host_utils/HostUtils.java index bc877b9..f7f60d9 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/host_utils/HostUtils.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/host_utils/HostUtils.java @@ -93,7 +93,13 @@ public class HostUtils { bitmap = BitmapConfig.FINEXUS_SALE; } break; - + case BALANCE_INQUIRY: + if (hostName == HostName.BPC) { + bitmap = BitmapConfig.BPC_BALANCE_INQUIRY; + } else { + bitmap = BitmapConfig.FINEXUS_SALE; + } + break; default: bitmap = BitmapConfig.DEFAULT; break; @@ -106,6 +112,14 @@ public class HostUtils { public MessageType getMessageType(HostName hostName, TransactionsType transactionsType) { final MessageType msgType; switch (transactionsType) { + case BALANCE_INQUIRY: + if (hostName == HostName.BPC) { + msgType = MessageType.AUTHORIZATION; + } else { + msgType = MessageType.AUTHORIZATION; + } + + break; case PRE_AUTH_SALE: if (hostName == HostName.BPC) { msgType = MessageType.FINANCIAL; diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/iso_utils/BitmapConfig.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/iso_utils/BitmapConfig.java index fc24989..ab51ad0 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/iso_utils/BitmapConfig.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/iso_utils/BitmapConfig.java @@ -52,7 +52,7 @@ public class BitmapConfig { public static final String BPC_LOG_ON = "2220010000800000"; // TID,MID public static final String BPC_LOG_OFF = "2220010000C00000"; // TID,MID - public static final String BPC_BALANCE_INQUIRY = "3230058020C09000"; + public static final String BPC_BALANCE_INQUIRY = "3230058020C09200"; // public static final String BPC_SALE = "7230058020C09201"; // public static final String BPC_SALE = "7230058020C09000";