balance Inquiry ready !!!

This commit is contained in:
kizzy 2026-08-23 19:05:23 +07:00
parent 54c7a2e28b
commit 088dbd0d96
14 changed files with 91 additions and 12 deletions

View File

@ -36,6 +36,8 @@ import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmm.kbz.util.ecr.CoreUtils; import com.utsmm.kbz.util.ecr.CoreUtils;
import com.utsmyanmar.paylibs.utils.LogUtil; import com.utsmyanmar.paylibs.utils.LogUtil;
import com.utsmyanmar.paylibs.utils.POSUtil;
import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType;
import java.text.DecimalFormat; import java.text.DecimalFormat;
@ -229,14 +231,23 @@ public class ProcessingFragment extends DataBindingFragment {
private void updateData(){ private void updateData(){
PayDetail payDetail;
if(isEmvTrans()) { if(isEmvTrans()) {
LogUtil.d(TAG,"Updated sharedViewmodel payDetail for emv"); LogUtil.d(TAG,"Updated sharedViewmodel payDetail for emv");
sharedViewModel.payDetail.setValue(emvTransactionProcessViewModel.payDetailResult.getValue()); payDetail = emvTransactionProcessViewModel.payDetailResult.getValue();
} else { } else {
LogUtil.d(TAG,"Updated sharedViewmodel payDetail for non emv"); 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) { // if(sharedViewModel.payDetail.getValue() != null) {
// EReceiptRequest request = EReceiptUtil.getInstance().generateMPUReceipt(sharedViewModel.payDetail.getValue()); // EReceiptRequest request = EReceiptUtil.getInstance().generateMPUReceipt(sharedViewModel.payDetail.getValue());

View File

@ -98,6 +98,7 @@ public class DashboardTransFragment extends DataBindingFragment {
Boolean isVoidEnabled = SystemParamsOperation.getInstance().getVoidStatus(); Boolean isVoidEnabled = SystemParamsOperation.getInstance().getVoidStatus();
Boolean isPreAuthEnabled = SystemParamsOperation.getInstance().getPreAuthStatus(); Boolean isPreAuthEnabled = SystemParamsOperation.getInstance().getPreAuthStatus();
Boolean isCashAdvanceEnabled = SystemParamsOperation.getInstance().getCashAdvanceStatus(); Boolean isCashAdvanceEnabled = SystemParamsOperation.getInstance().getCashAdvanceStatus();
Boolean isBalanceInquiryEnabled = SystemParamsOperation.getInstance().getBalanceInquiryStatus();
private void initData() { private void initData() {
featuresList.clear(); featuresList.clear();
@ -137,6 +138,11 @@ public class DashboardTransFragment extends DataBindingFragment {
} }
break; break;
// case BALANCE_INQUIRY:
// if(isBalanceInquiryEnabled){
// featuresList.add(feature);
// }
// break;
default: default:
featuresList.add(feature); featuresList.add(feature);
break; break;
@ -184,6 +190,9 @@ public class DashboardTransFragment extends DataBindingFragment {
case DEVICE_CONFIG: case DEVICE_CONFIG:
new DashboardTransFragment.ClickEvent().onClickDeviceConfig(); new DashboardTransFragment.ClickEvent().onClickDeviceConfig();
break; 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() { public void onClickClearReversal() {
sharedViewModel.transactionsType.postValue(TransactionsType.CLEAR_REVERSAL); sharedViewModel.transactionsType.postValue(TransactionsType.CLEAR_REVERSAL);
sharedViewModel.setTransMenu(TransMenu.CLEAR_REVERSAL); sharedViewModel.setTransMenu(TransMenu.CLEAR_REVERSAL);

View File

@ -11,6 +11,7 @@ public enum FeaturesType {
PRE_AUTH_COMPLETE, PRE_AUTH_COMPLETE,
PRE_AUTH_COMPLETE_VOID, PRE_AUTH_COMPLETE_VOID,
REFUND, REFUND,
BALANCE_INQUIRY,
MANAGEMENT_FEATURES, MANAGEMENT_FEATURES,
TIP_ADJUSTMENT, TIP_ADJUSTMENT,
QR_PAY, QR_PAY,

View File

@ -204,7 +204,7 @@ public class TMSUtil {
boolean preAuthCancelStatus = true; boolean preAuthCancelStatus = true;
boolean preAuthCompleteStatus = true; boolean preAuthCompleteStatus = true;
boolean preAuthCompleteCancelStatus = true; boolean preAuthCompleteCancelStatus = true;
boolean balanceInquiryStatus = true;
preAuthStatus = SystemParamsOperation.getInstance().getPreAuthStatus(); preAuthStatus = SystemParamsOperation.getInstance().getPreAuthStatus();
voidStatus = SystemParamsOperation.getInstance().getVoidStatus(); 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(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(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(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(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)); featuresList.add(new Features(10, "Configs", R.drawable.ic_host, FeaturesType.DEVICE_CONFIG, true));
} }

View File

@ -634,6 +634,12 @@
app:popUpToInclusive="true" app:popUpToInclusive="true"
android:id="@+id/action_dashboardTransFragment_to_deviceConfig" android:id="@+id/action_dashboardTransFragment_to_deviceConfig"
app:destination="@id/hostConfigFragment" /> app:destination="@id/hostConfigFragment" />
<action
app:launchSingleTop="true"
app:popUpTo="@+id/dashboardTransFragment"
app:popUpToInclusive="true"
android:id="@+id/action_dashboardTransFragment_to_cardWaitingFragment"
app:destination="@id/cardWaitingFragment" />
</fragment> </fragment>
<dialog <dialog
tools:layout="@layout/fragment_dashboard_bottom_sheet_pre_auth" tools:layout="@layout/fragment_dashboard_bottom_sheet_pre_auth"

View File

@ -54,6 +54,12 @@ public class GeneralTest {
System.out.println(binParser(input3)); // Output: [55555] System.out.println(binParser(input3)); // Output: [55555]
} }
@Test
public void testAmount() {
long data = Long.parseLong("000190294744");
System.out.println("data : "+data);
}
public static List<String> binParser(String input) { public static List<String> binParser(String input) {
if (input == null || input.trim().isEmpty()) { if (input == null || input.trim().isEmpty()) {

View File

@ -1,6 +1,7 @@
package com.utsmm.kbz; package com.utsmm.kbz;
import com.kizzy.xpay.util.Sign; import com.kizzy.xpay.util.Sign;
import com.utsmyanmar.baselib.util.EReceiptHelper;
import org.junit.Test; import org.junit.Test;
import static org.junit.Assert.*; import static org.junit.Assert.*;

View File

@ -83,7 +83,7 @@ public class TransactionsOperation {
isoMsgX = new ISOMsgX.ISOMsgXBuilder(ISOVersion.VERSION_1993, ISOMode.BOTH_HEADER_TPDU, hostName) isoMsgX = new ISOMsgX.ISOMsgXBuilder(ISOVersion.VERSION_1993, ISOMode.BOTH_HEADER_TPDU, hostName)
.build(); .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); transTradeData = setUpNormalTransaction(tradeData, transactionsType, hostName);
} else { } else {
transTradeData = setUpRebuildTransactions(tradeData, transactionsType, hostName); transTradeData = setUpRebuildTransactions(tradeData, transactionsType, hostName);
@ -139,8 +139,10 @@ public class TransactionsOperation {
transPayDetail.setIsSettle(false); transPayDetail.setIsSettle(false);
if (responseMap.get("F04") != null) { MsgField amountField = responseMap.get("F004");
transPayDetail.setAmount(Long.parseLong(Objects.requireNonNull(responseMap.get("F04")).getDataStr())); 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) { if (responseMap.get("F012") != null) {
@ -255,8 +257,9 @@ public class TransactionsOperation {
listener.onReversal(transTradeData); listener.onReversal(transTradeData);
} else { } else {
listener.onSuccess(transTradeData);
transTradeData.setPayDetail(transPayDetail); transTradeData.setPayDetail(transPayDetail);
listener.onSuccess(transTradeData);
} }
// else if (!transPayDetail.getIsNeedReversal()) { // else if (!transPayDetail.getIsNeedReversal()) {

View File

@ -402,6 +402,8 @@ public class POSUtil {
} else if(payDetail.getTransactionType() == TransactionsType.CASH_OUT.value) { } else if(payDetail.getTransactionType() == TransactionsType.CASH_OUT.value) {
long totalAmount = payDetail.getAmount() + payDetail.getAdditionalAmount(); long totalAmount = payDetail.getAmount() + payDetail.getAdditionalAmount();
return "Transaction for Amount \n"+getDecimalAmountFormat(totalAmount) +" "+currencySign+" Received."; 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 { else {
return "Transaction for Amount \n"+getDecimalAmountFormat(payDetail.getAmount()) +" "+currencySign+" Received."; return "Transaction for Amount \n"+getDecimalAmountFormat(payDetail.getAmount()) +" "+currencySign+" Received.";

View File

@ -1265,6 +1265,17 @@ public class SystemParamsOperation {
return params.getCashAdvanceStatus(); 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() { public boolean getFullVoidPreauthStatus() {
SystemParamsSettings params = getSystemParamsSettings(); SystemParamsSettings params = getSystemParamsSettings();
return params.getFullVoidPreauthStatus(); return params.getFullVoidPreauthStatus();

View File

@ -218,6 +218,7 @@ public class SystemParamsSettings implements Serializable {
private boolean cash_advance_status = true; private boolean cash_advance_status = true;
private boolean balance_inquiry_status = true;
private boolean decimal_enable = false; private boolean decimal_enable = false;
private boolean refund_status = true; 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 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 boolean getCashAdvanceStatus() { return cash_advance_status;}
protected void setCashAdvanceStatus(boolean cash_advance_status) { this.cash_advance_status = cash_advance_status;} protected void setCashAdvanceStatus(boolean cash_advance_status) { this.cash_advance_status = cash_advance_status;}

View File

@ -23,5 +23,6 @@ public enum TransMenu {
PRE_AUTH, PRE_AUTH,
PRE_AUTH_FULL_VOID, PRE_AUTH_FULL_VOID,
PRE_AUTH_PARTIAL_VOID, PRE_AUTH_PARTIAL_VOID,
TIP_ADJUSTMENT TIP_ADJUSTMENT,
BALANCE_INQUIRY
} }

View File

@ -93,7 +93,13 @@ public class HostUtils {
bitmap = BitmapConfig.FINEXUS_SALE; bitmap = BitmapConfig.FINEXUS_SALE;
} }
break; break;
case BALANCE_INQUIRY:
if (hostName == HostName.BPC) {
bitmap = BitmapConfig.BPC_BALANCE_INQUIRY;
} else {
bitmap = BitmapConfig.FINEXUS_SALE;
}
break;
default: default:
bitmap = BitmapConfig.DEFAULT; bitmap = BitmapConfig.DEFAULT;
break; break;
@ -106,6 +112,14 @@ public class HostUtils {
public MessageType getMessageType(HostName hostName, TransactionsType transactionsType) { public MessageType getMessageType(HostName hostName, TransactionsType transactionsType) {
final MessageType msgType; final MessageType msgType;
switch (transactionsType) { switch (transactionsType) {
case BALANCE_INQUIRY:
if (hostName == HostName.BPC) {
msgType = MessageType.AUTHORIZATION;
} else {
msgType = MessageType.AUTHORIZATION;
}
break;
case PRE_AUTH_SALE: case PRE_AUTH_SALE:
if (hostName == HostName.BPC) { if (hostName == HostName.BPC) {
msgType = MessageType.FINANCIAL; msgType = MessageType.FINANCIAL;

View File

@ -52,7 +52,7 @@ public class BitmapConfig {
public static final String BPC_LOG_ON = "2220010000800000"; // TID,MID 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_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 = "7230058020C09201";
// public static final String BPC_SALE = "7230058020C09000"; // public static final String BPC_SALE = "7230058020C09000";