diff --git a/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementTransactionFragment.java b/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementTransactionFragment.java index fca4edf..fb21302 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementTransactionFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementTransactionFragment.java @@ -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(); } 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 bb034ae..246b020 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 @@ -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 buildCardPayDetailList() { + String settleCurrency = isLast ? "104" : "840"; List 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); diff --git a/app/src/main/java/com/utsmm/kbz/util/CurrencySelectionHelper.java b/app/src/main/java/com/utsmm/kbz/util/CurrencySelectionHelper.java index 8b82825..f98f113 100644 --- a/app/src/main/java/com/utsmm/kbz/util/CurrencySelectionHelper.java +++ b/app/src/main/java/com/utsmm/kbz/util/CurrencySelectionHelper.java @@ -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 ""; }