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() { 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() { private void networkCutOver() {
EchoTestProcess.getInstance().enqueueCutOver().startSignOn(new SignOnListener() { EchoTestProcess.getInstance().enqueueCutOver().startSignOn(new SignOnListener() {
@Override @Override
public void onSuccessSignOn() { public void onSuccessSignOn() {
@ -693,6 +695,8 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
currencySelectionHelper.applyCardCurrencyAndHost("MMK"); currencySelectionHelper.applyCardCurrencyAndHost("MMK");
settlementViewModel.startSettlementProcess(mmkBucket,true); settlementViewModel.startSettlementProcess(mmkBucket,true);
} else { } else {
currencySelectionHelper.applyCardCurrencyAndHost("MMK");
navigateToNext(); navigateToNext();
} }

View File

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

View File

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