fixed not switching tid/mid for each settlement

This commit is contained in:
kizzy 2026-08-05 17:31:58 +07:00
parent 1546e5dedc
commit 3833df3971
3 changed files with 92 additions and 32 deletions

View File

@ -682,9 +682,11 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
}
private boolean isUSDSettleNeeded() {
return (usdBucket.saleCount != 0 || usdBucket.preCount != 0 || usdBucket.refundCount != 0 || usdBucket.caCount != 0);
return (usdBucket.saleCount != 0 || usdBucket.preCount != 0 || usdBucket.refundCount != 0
|| usdBucket.caCount != 0 || usdBucket.voidCount != 0);
}
private void networkCutOver() {
EchoTestProcess.getInstance().enqueueCutOver().startSignOn(new SignOnListener() {
@Override
public void onSuccessSignOn() {
@ -693,6 +695,8 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
currencySelectionHelper.applyCardCurrencyAndHost("MMK");
settlementViewModel.startSettlementProcess(mmkBucket,true);
} else {
currencySelectionHelper.applyCardCurrencyAndHost("MMK");
navigateToNext();
}

View File

@ -8,6 +8,7 @@ import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import com.utsmm.kbz.ui.settlement.model.CurrencyBucket;
import com.utsmm.kbz.util.CurrencySelectionHelper;
import com.utsmm.kbz.util.EReceiptUtil;
import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptRequest;
import com.utsmyanmar.baselib.repo.Repository;
@ -335,6 +336,14 @@ public class SettlementViewModel extends ViewModel {
@SuppressWarnings("ConstantConditions")
public void startSettlementProcess(CurrencyBucket currencyBucket,boolean isLast) {
this.isLast = isLast;
// Switch TID/MID/IP/currency before building ISO
// isLast=false => USD pass; isLast=true => MMK pass.
CurrencySelectionHelper.applyHostForCurrency(isLast ? "MMK" : "USD");
LogUtil.d(TAG, "Settlement host switched for " + (isLast ? "MMK" : "USD")
+ " TID=" + SystemParamsOperation.getInstance().getTerminalId()
+ " MID=" + SystemParamsOperation.getInstance().getMerchantId());
SystemParamsOperation.getInstance().getIncrementBatchNo();
boolean bucketIsEmpty = currencyBucket.saleCount == 0
@ -369,6 +378,8 @@ public class SettlementViewModel extends ViewModel {
TradeData tradeData = Params.newTrade(true);
payDetail = tradeData.getPayDetail();
payDetail.setTerminalNo(SystemParamsOperation.getInstance().getTerminalId());
payDetail.setMerchantNo(SystemParamsOperation.getInstance().getMerchantId());
bitmap = BitmapConfig.BPC_SETTLEMENT;
@ -446,6 +457,9 @@ public class SettlementViewModel extends ViewModel {
TradeData tradeData = Params.newTrade(true);
payDetail = tradeData.getPayDetail();
payDetail.setTerminalNo(SystemParamsOperation.getInstance().getTerminalId());
payDetail.setMerchantNo(SystemParamsOperation.getInstance().getMerchantId());
//
if(hostName == HostName.BPC) {
@ -612,7 +626,11 @@ public class SettlementViewModel extends ViewModel {
}
private void enrichSettleDataWithVoids(SettleData settleData) {
String settleCurrency = isLast ? "104" : "840";
for (PayDetail pay : deleteTrans) {
if (!matchesSettlementCurrency(pay.getCurrencyCode(), settleCurrency)) {
continue;
}
if (pay.getTransactionType() == TransactionType.VOID && !pay.isCanceled) {
settleData.setVoidSaleCount(settleData.getVoidSaleCount() + 1);
settleData.setVoidSaleAmount(settleData.getVoidSaleAmount() + pay.getAmount());
@ -624,9 +642,19 @@ public class SettlementViewModel extends ViewModel {
}
private List<PayDetail> buildCardPayDetailList() {
String settleCurrency = isLast ? "104" : "840";
List<PayDetail> list = new ArrayList<>();
if (payDetails != null) list.addAll(payDetails);
if (payDetails != null) {
for (PayDetail pay : payDetails) {
if (matchesSettlementCurrency(pay.getCurrencyCode(), settleCurrency)) {
list.add(pay);
}
}
}
for (PayDetail pay : deleteTrans) {
if (!matchesSettlementCurrency(pay.getCurrencyCode(), settleCurrency)) {
continue;
}
if (pay.getTransactionType() == TransactionType.VOID && !pay.isCanceled) {
list.add(pay);
} else if (pay.getTransactionType() == TransactionType.SALE && pay.isCanceled) {
@ -636,6 +664,17 @@ public class SettlementViewModel extends ViewModel {
return list;
}
private boolean matchesSettlementCurrency(String currencyCode, String expectedNumeric) {
if (currencyCode == null || currencyCode.trim().isEmpty()) {
return "104".equals(expectedNumeric);
}
String value = currencyCode.trim().toUpperCase(Locale.getDefault());
if ("840".equals(expectedNumeric)) {
return "840".equals(value) || "USD".equals(value);
}
return "104".equals(value) || "MMK".equals(value) || (!"840".equals(value) && !"USD".equals(value));
}
private void batchUploadProcess(boolean isLast) {
resultString.postValue(TransactionStatus.ON_BATCH_UPLOAD);

View File

@ -89,39 +89,55 @@ public class CurrencySelectionHelper {
}
public void applyCardCurrencyAndHost(String selectedCurrency) {
cachePrimaryCardHostIfNeeded();
applyHostForCurrency(selectedCurrency);
if (sharedViewModel != null) {
CurrencyType currencyType = SystemParamsOperation.getInstance().getCurrencyType();
if (currencyType != null) {
sharedViewModel.set_currencyText(currencyType.name);
}
}
}
String selected = normalizeCurrency(selectedCurrency);
String secondaryCurrency = normalizeCurrency(SystemParamsOperation.getInstance().getThirdHostCurrency());
boolean dualCurrencyEnabled = SystemParamsOperation.getInstance().getDuelCurrencyStatus();
boolean useSecondaryCardHost = dualCurrencyEnabled
&& !TextUtils.isEmpty(SystemParamsOperation.getInstance().getThirdHostName())
public static void applyHostForCurrency(String selectedCurrency) {
cachePrimaryCardHostStatic();
SystemParamsOperation sp = SystemParamsOperation.getInstance();
String selected = normalizeCurrencyStatic(selectedCurrency);
String secondaryCurrency = normalizeCurrencyStatic(sp.getThirdHostCurrency());
boolean useSecondaryCardHost = !TextUtils.isEmpty(sp.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());
sp.setHostName(sp.getThirdHostName());
sp.setTerminalId(sp.getThirdHostTerminalId());
sp.setMerchantId(sp.getThirdHostMerchantId());
sp.setIpAddress(sp.getThirdHostIpAddress());
sp.setSecIpAddress(sp.getThirdHostSecIpAddress());
sp.setCurrencyType(toCurrencyTypeStatic(selected));
} else {
SystemParamsOperation.getInstance().setHostName(primaryHostName);
SystemParamsOperation.getInstance().setTerminalId(primaryTid);
SystemParamsOperation.getInstance().setMerchantId(primaryMid);
SystemParamsOperation.getInstance().setIpAddress(primaryIp);
SystemParamsOperation.getInstance().setSecIpAddress(primarySecIp);
}
CurrencyType currencyType = useSecondaryCardHost ? toCurrencyType(selected) : primaryCurrency;
SystemParamsOperation.getInstance().setCurrencyType(currencyType);
if (sharedViewModel != null) {
sharedViewModel.set_currencyText(currencyType.name);
sp.setHostName(globalPrimaryHostName);
sp.setTerminalId(globalPrimaryTid);
sp.setMerchantId(globalPrimaryMid);
sp.setIpAddress(globalPrimaryIp);
sp.setSecIpAddress(globalPrimarySecIp);
sp.setCurrencyType(globalPrimaryCurrency == null ? CurrencyType.MMK : globalPrimaryCurrency);
}
}
private void cachePrimaryCardHostIfNeeded() {
cachePrimaryCardHostStatic();
primaryHostName = globalPrimaryHostName;
primaryTid = globalPrimaryTid;
primaryMid = globalPrimaryMid;
primaryIp = globalPrimaryIp;
primarySecIp = globalPrimarySecIp;
primaryCurrency = globalPrimaryCurrency;
}
private static void cachePrimaryCardHostStatic() {
SystemParamsOperation sp = SystemParamsOperation.getInstance();
String currentHostName = sp.getHostName();
String secondaryHostName = sp.getThirdHostName();
@ -144,17 +160,14 @@ public class CurrencySelectionHelper {
globalPrimaryCurrency = activeCurrency == null ? CurrencyType.MMK : activeCurrency;
globalPrimaryHostCached = true;
}
primaryHostName = globalPrimaryHostName;
primaryTid = globalPrimaryTid;
primaryMid = globalPrimaryMid;
primaryIp = globalPrimaryIp;
primarySecIp = globalPrimarySecIp;
primaryCurrency = globalPrimaryCurrency;
}
private CurrencyType toCurrencyType(String value) {
String normalized = normalizeCurrency(value);
return toCurrencyTypeStatic(value);
}
private static CurrencyType toCurrencyTypeStatic(String value) {
String normalized = normalizeCurrencyStatic(value);
try {
return CurrencyType.valueOf(normalized);
} catch (Exception ignored) {
@ -163,6 +176,10 @@ public class CurrencySelectionHelper {
}
private String normalizeCurrency(String raw) {
return normalizeCurrencyStatic(raw);
}
private static String normalizeCurrencyStatic(String raw) {
if (TextUtils.isEmpty(raw)) {
return "";
}