diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml index 1af3b86..67995af 100644 --- a/.idea/deploymentTargetSelector.xml +++ b/.idea/deploymentTargetSelector.xml @@ -13,39 +13,6 @@ - - - - - - \ No newline at end of file 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 8299239..b134df8 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 @@ -212,6 +212,9 @@ public class SettlementTransactionFragment extends DataBindingFragment implement caCount = payDetail.getSettleDataObj().getCashAdvanceCount(); caAmount = payDetail.getSettleDataObj().getCashAdvanceAmount(); + voidCount = payDetail.getSettleDataObj().getVoidSaleCount(); + voidAmount = payDetail.getSettleDataObj().getVoidSaleAmount(); + applyStoredCurrencyBreakdown(payDetail); settlementViewModel.isNoData.setValue(false); @@ -294,6 +297,7 @@ public class SettlementTransactionFragment extends DataBindingFragment implement setSettlementViewModelData(saleCount,saleAmount,preCount,preAmount,refundCount,refundAmount,caCount,caAmount); settlementViewModel.setPayDetails(payDetails); + applyDeleteTransToUi(settlementViewModel.deleteTrans); } else { @@ -302,6 +306,7 @@ public class SettlementTransactionFragment extends DataBindingFragment implement sharedViewModel.setAmount(POSUtil.getInstance().getDecimalAmountSeparatorFormat(0)); setSettlementViewModelData(saleCount,saleAmount,preCount,preAmount,refundCount,refundAmount,caCount,caAmount); + applyDeleteTransToUi(settlementViewModel.deleteTrans); } }); @@ -348,22 +353,83 @@ public class SettlementTransactionFragment extends DataBindingFragment implement @Override public void onChanged(List payDetails) { settlementViewModel.deleteTrans.clear(); - voidCount = 0; - voidAmount = 0L; - if(payDetails != null) { + if (payDetails != null) { settlementViewModel.deleteTrans.addAll(payDetails); - for (PayDetail pay : payDetails) { - if (pay.getTransactionType() == TransactionType.VOID && !pay.isCanceled) { - voidCount++; - voidAmount += pay.getAmount(); - } - } - if (voidCount > 0 && Boolean.TRUE.equals(settlementViewModel.isNoData.getValue())) { - settlementViewModel.isNoData.setValue(false); + } + applyDeleteTransToUi(settlementViewModel.deleteTrans); + } + }); + } + + private void applyDeleteTransToUi(List deleteList) { + voidCount = 0; + voidAmount = 0L; + mmkBucket.voidCount = 0; + mmkBucket.voidAmount = 0L; + usdBucket.voidCount = 0; + usdBucket.voidAmount = 0L; + + int canceledSaleCount = 0; + long canceledSaleAmount = 0L; + int canceledMmkCount = 0; + long canceledMmkAmount = 0L; + int canceledUsdCount = 0; + long canceledUsdAmount = 0L; + + if (deleteList != null) { + for (PayDetail pay : deleteList) { + if (pay.getTransactionType() == TransactionType.VOID && !pay.isCanceled) { + voidCount++; + voidAmount += pay.getAmount(); + CurrencyBucket bucket = getCurrencyBucket(pay.getCurrencyCode()); + bucket.voidCount++; + bucket.voidAmount += pay.getAmount(); + } else if (pay.getTransactionType() == TransactionType.SALE && pay.isCanceled) { + canceledSaleCount++; + canceledSaleAmount += pay.getAmount(); + if ("USD".equals(normalizeCurrency(pay.getCurrencyCode()))) { + canceledUsdCount++; + canceledUsdAmount += pay.getAmount(); + } else { + canceledMmkCount++; + canceledMmkAmount += pay.getAmount(); } } } - }); + } + + settlementViewModel.sale_count.setValue(saleCount + canceledSaleCount); + settlementViewModel.sale_amount.setValue(saleAmount + canceledSaleAmount); + settlementViewModel.sale_breakdown.setValue(buildBreakdownText( + mmkBucket.saleCount + canceledMmkCount, + mmkBucket.saleAmount + canceledMmkAmount, + usdBucket.saleCount + canceledUsdCount, + usdBucket.saleAmount + canceledUsdAmount)); + + settlementViewModel.void_count.setValue(voidCount); + settlementViewModel.void_amount.setValue(voidAmount); + settlementViewModel.void_breakdown.setValue(buildVoidBreakdownText( + mmkBucket.voidCount, mmkBucket.voidAmount, + usdBucket.voidCount, usdBucket.voidAmount)); + + if (sharedViewModel.getTransMenu().getValue() == TransMenu.REVIEW_BATCH) { + SettleData settleData = new SettleData( + saleCount + canceledSaleCount, + saleAmount + canceledSaleAmount, + preCount, preAmount, refundCount, refundAmount, caCount, caAmount); + settleData.setVoidSaleCount(voidCount); + settleData.setVoidSaleAmount(voidAmount); + TradeData tradeData = Params.newTrade(false); + PayDetail payDetail = tradeData.getPayDetail(); + payDetail.setSettleDataObj(settleData); + payDetail.setTransactionType(TransactionsType.BATCH_TOTAL.value); + payDetail.setTransType(TransactionsType.BATCH_TOTAL.name); + sharedViewModel.payDetail.setValue(payDetail); + } + + if (voidCount > 0 && Boolean.TRUE.equals(settlementViewModel.isNoData.getValue())) { + settlementViewModel.isNoData.setValue(false); + } } private void resetSettlementCounters() { @@ -384,6 +450,8 @@ public class SettlementTransactionFragment extends DataBindingFragment implement private void setSettlementViewModelData(int saleCount,long saleAmount,int preCount,long preAmount,int refundCount,long refundAmount,int caCount,long caAmount) { settlementViewModel.sale_count.setValue(saleCount); settlementViewModel.sale_amount.setValue(saleAmount); + settlementViewModel.void_count.setValue(voidCount); + settlementViewModel.void_amount.setValue(voidAmount); settlementViewModel.pre_count.setValue(preCount); settlementViewModel.pre_amount.setValue(preAmount); settlementViewModel.refund_count.setValue(refundCount); @@ -391,11 +459,14 @@ public class SettlementTransactionFragment extends DataBindingFragment implement settlementViewModel.ca_count.setValue(caCount); settlementViewModel.ca_amount.setValue(caAmount); settlementViewModel.sale_breakdown.setValue(buildBreakdownText(mmkBucket.saleCount, mmkBucket.saleAmount, usdBucket.saleCount, usdBucket.saleAmount)); + settlementViewModel.void_breakdown.setValue(buildVoidBreakdownText(mmkBucket.voidCount, mmkBucket.voidAmount, usdBucket.voidCount, usdBucket.voidAmount)); settlementViewModel.pre_breakdown.setValue(buildBreakdownText(mmkBucket.preCount, mmkBucket.preAmount, usdBucket.preCount, usdBucket.preAmount)); settlementViewModel.refund_breakdown.setValue(buildBreakdownText(mmkBucket.refundCount, mmkBucket.refundAmount, usdBucket.refundCount, usdBucket.refundAmount)); settlementViewModel.ca_breakdown.setValue(buildBreakdownText(mmkBucket.caCount, mmkBucket.caAmount, usdBucket.caCount, usdBucket.caAmount)); if(sharedViewModel.getTransMenu().getValue() == TransMenu.REVIEW_BATCH) { SettleData settleData = new SettleData(saleCount,saleAmount,preCount,preAmount,refundCount,refundAmount,caCount,caAmount); + settleData.setVoidSaleCount(voidCount); + settleData.setVoidSaleAmount(voidAmount); TradeData tradeData = Params.newTrade(false); PayDetail payDetail = tradeData.getPayDetail(); payDetail.setSettleDataObj(settleData); @@ -418,6 +489,8 @@ public class SettlementTransactionFragment extends DataBindingFragment implement private void resetCurrencyBucket(CurrencyBucket bucket) { bucket.saleCount = 0; bucket.saleAmount = 0L; + bucket.voidCount = 0; + bucket.voidAmount = 0L; bucket.preCount = 0; bucket.preAmount = 0L; bucket.refundCount = 0; @@ -454,6 +527,11 @@ public class SettlementTransactionFragment extends DataBindingFragment implement + " USD " + usdCount + " / " + POSUtil.getInstance().getDecimalAmountSeparatorFormat(usdAmount); } + private String buildVoidBreakdownText(int mmkCount, long mmkAmount, int usdCount, long usdAmount) { + return "MMK " + mmkCount + " / - " + POSUtil.getInstance().getDecimalAmountSeparatorFormat(mmkAmount) + + " USD " + usdCount + " / - " + POSUtil.getInstance().getDecimalAmountSeparatorFormat(usdAmount); + } + private CurrencyBucket getCurrencyBucket(String currencyCode) { return "USD".equals(normalizeCurrency(currencyCode)) ? usdBucket : mmkBucket; } @@ -474,6 +552,8 @@ public class SettlementTransactionFragment extends DataBindingFragment implement CurrencyBucket bucket = "USD".equals(normalizedCurrency) ? usdBucket : mmkBucket; bucket.saleCount = saleCount; bucket.saleAmount = saleAmount; + bucket.voidCount = voidCount; + bucket.voidAmount = voidAmount; bucket.preCount = preCount; bucket.preAmount = preAmount; bucket.refundCount = refundCount; @@ -489,6 +569,9 @@ public class SettlementTransactionFragment extends DataBindingFragment implement if ("SALE".equals(transType)) { bucket.saleCount++; bucket.saleAmount += item.getAmount(); + } else if ("VOID SALE".equals(transType) || "VOID_SALE".equals(transType)) { + bucket.voidCount++; + bucket.voidAmount += item.getAmount(); } else if ("PREAUTH COMPLETION".equals(transType) || "PRE_AUTH_COMPLETE".equals(transType)) { bucket.preCount++; bucket.preAmount += item.getAmount(); @@ -619,8 +702,19 @@ public class SettlementTransactionFragment extends DataBindingFragment implement private void updateData() { PayDetail payDetail = settlementViewModel.getPayDetail(); + List cardSettleSource = new ArrayList<>(); if (cardTransactionsList != null && !cardTransactionsList.isEmpty()) { - payDetail.setCardSettleData(CardSettleData.convertFromPayDetail(cardTransactionsList)); + cardSettleSource.addAll(cardTransactionsList); + } + for (PayDetail pay : settlementViewModel.deleteTrans) { + if (pay.getTransactionType() == TransactionType.VOID && !pay.isCanceled) { + cardSettleSource.add(pay); + } else if (pay.getTransactionType() == TransactionType.SALE && pay.isCanceled) { + cardSettleSource.add(pay); + } + } + if (!cardSettleSource.isEmpty()) { + payDetail.setCardSettleData(CardSettleData.convertFromPayDetail(cardSettleSource)); } if (qrTransactionsList != null && !qrTransactionsList.isEmpty()) { 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 2928fca..61dc606 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 @@ -135,6 +135,9 @@ public class SettlementViewModel extends ViewModel { sale_count.setValue(0); sale_amount.setValue(0L); sale_breakdown.setValue(""); + void_count.setValue(0); + void_amount.setValue(0L); + void_breakdown.setValue(""); pre_count.setValue(0); pre_amount.setValue(0L); pre_breakdown.setValue(""); diff --git a/app/src/main/java/com/utsmm/kbz/ui/settlement/model/CurrencyBucket.java b/app/src/main/java/com/utsmm/kbz/ui/settlement/model/CurrencyBucket.java index 1baee36..f0d75d6 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/settlement/model/CurrencyBucket.java +++ b/app/src/main/java/com/utsmm/kbz/ui/settlement/model/CurrencyBucket.java @@ -3,6 +3,8 @@ package com.utsmm.kbz.ui.settlement.model; public class CurrencyBucket { public int saleCount; public long saleAmount; + public int voidCount; + public long voidAmount; public int preCount; public long preAmount; public int refundCount; @@ -31,6 +33,14 @@ public class CurrencyBucket { this.saleAmount = saleAmount; } + public void setVoidCount(int voidCount) { + this.voidCount = voidCount; + } + + public void setVoidAmount(long voidAmount) { + this.voidAmount = voidAmount; + } + public void setPreCount(int preCount) { this.preCount = preCount; } @@ -63,6 +73,14 @@ public class CurrencyBucket { return saleAmount; } + public int getVoidCount() { + return voidCount; + } + + public long getVoidAmount() { + return voidAmount; + } + public int getPreCount() { return preCount; } diff --git a/app/src/main/res/layout/fragment_view_batch_screen.xml b/app/src/main/res/layout/fragment_view_batch_screen.xml index 7643b27..1b0c75c 100644 --- a/app/src/main/res/layout/fragment_view_batch_screen.xml +++ b/app/src/main/res/layout/fragment_view_batch_screen.xml @@ -127,6 +127,69 @@ + + + + + + + + + + + + + + + + + currencyMap = buildCurrencySummaries(cardSettleDataList); - if (currencyMap.size() > 1) { - for (Map.Entry entry : currencyMap.entrySet()) { - printSettlementCurrencySection(entry.getKey(), entry.getValue()); - } - dotBreak(); - } else { - printSingleSettleSummary(cardSettleDataList, isDecimalEnabled); - } - } else { - printSingleSettleSummary(cardSettleDataList, isDecimalEnabled); + Map currencyMap = buildCurrencySummaries(cardSettleDataList); + for (Map.Entry entry : orderedCurrencySummaries(currencyMap)) { + printSettlementCurrencySection(entry.getKey(), entry.getValue()); } emptyLine(1); } - private void printSingleSettleSummary(List cardSettleDataList, boolean isDecimalEnabled) { - Map currencyMap = buildCurrencySummaries(cardSettleDataList); - SystemParamsOperation sp = SystemParamsOperation.getInstance(); - if (currencyMap.size() == 1) { - Map.Entry entry = currencyMap.entrySet().iterator().next(); - printSettlementCurrencySection(entry.getKey(), entry.getValue()); - } else { - SettleData settleData = new SettleData(); - for (CardSettleData csd : cardSettleDataList) { - applyCardSettlementSummary(settleData, csd); - } - print3ColumnsString("TRX TYPE ", "CNT", "AMOUNT"); - print3ColumnsString("SALE ", countStringFormat(settleData.getSaleCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getSaleAmount(), isDecimalEnabled)); - if(sp.getVoidStatus()){ - print3ColumnsString("VOID SALE ", countStringFormat(settleData.getVoidSaleCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getVoidSaleAmount(), isDecimalEnabled)); - } - if(sp.getPreAuthStatus()){ - print3ColumnsString("PREAUTH COMP ", countStringFormat(settleData.getPreAuthCompCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getPreAuthCompAmount(), isDecimalEnabled)); - } - if(sp.getCashAdvanceStatus()){ - print3ColumnsString("CASH ADV ", countStringFormat(settleData.getCashAdvanceCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getCashAdvanceAmount(), isDecimalEnabled)); - } - if(sp.getRefundStatus()){ - print3ColumnsString("REFUND ", countStringFormat(settleData.getRefundCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getRefundAmount(), isDecimalEnabled)); - } - dotBreak(); - long totalAmount = settleData.getSaleAmount() + settleData.getPreAuthCompAmount() + settleData.getCashAdvanceAmount() - - settleData.getVoidSaleAmount() - settleData.getRefundAmount(); - print2ColumnsString("TOTAL", PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isDecimalEnabled)); - } + private List> orderedCurrencySummaries( + Map currencyMap) { + List> entries = new ArrayList<>(currencyMap.entrySet()); + entries.sort((left, right) -> { + int leftOrder = "MMK".equals(left.getKey()) ? 0 : ("USD".equals(left.getKey()) ? 1 : 2); + int rightOrder = "MMK".equals(right.getKey()) ? 0 : ("USD".equals(right.getKey()) ? 1 : 2); + return Integer.compare(leftOrder, rightOrder); + }); + return entries; } private Map buildCurrencySummaries(List cardSettleDataList) { @@ -332,25 +300,6 @@ public abstract class BaseXPrint { return currencyMap; } - private void applyCardSettlementSummary(SettleData settleData, CardSettleData cardSettleData) { - String transType = cardSettleData.getTransType() == null ? "" : cardSettleData.getTransType().trim().toUpperCase(Locale.getDefault()); - long amount = cardSettleData.getAmount(); - - if ("SALE".equals(transType)) { - settleData.setSaleCount(settleData.getSaleCount() + 1); - settleData.setSaleAmount(settleData.getSaleAmount() + amount); - } else if ("PREAUTH COMPLETION".equals(transType) || "PRE_AUTH_COMPLETE".equals(transType)) { - settleData.setPreAuthCompCount(settleData.getPreAuthCompCount() + 1); - settleData.setPreAuthCompAmount(settleData.getPreAuthCompAmount() + amount); - } else if ("REFUND".equals(transType)) { - settleData.setRefundCount(settleData.getRefundCount() + 1); - settleData.setRefundAmount(settleData.getRefundAmount() + amount); - } else if ("CASH_OUT".equals(transType) || "CASH_ADVANCE".equals(transType)) { - settleData.setCashAdvanceCount(settleData.getCashAdvanceCount() + 1); - settleData.setCashAdvanceAmount(settleData.getCashAdvanceAmount() + amount); - } - } - protected void printMMQRReport(List qrList) { if (qrList == null || qrList.isEmpty()) return; @@ -395,30 +344,35 @@ public abstract class BaseXPrint { } private void printSettlementCurrencySection(String currencyLabel, CurrencySettlementSummary summary) { -// if (!summary.hasAnyValue()) { -// return; -// } boolean isDecimalEnabled = SystemParamsOperation.getInstance().getDecimalEnable(); SystemParamsOperation sp = SystemParamsOperation.getInstance(); - int totalCount = summary.saleCount + summary.preAuthCompCount + summary.refundCount + summary.cashAdvanceCount; - long totalAmount = summary.saleAmount + summary.preAuthCompAmount + summary.cashAdvanceAmount - summary.refundAmount; + long totalAmount = summary.saleAmount + summary.preAuthCompAmount + summary.cashAdvanceAmount + - summary.voidSaleAmount - summary.refundAmount; + emptyLine(1); - printString("CURRENCY : " + currencyLabel, true); - print3ColumnsString("TRX TYPE ", "CNT", "AMOUNT"); - print3ColumnsString("SALE ", countStringFormat(summary.saleCount), PrintUtils.getInstance().getSeparatorNumberFormat(summary.saleAmount, isDecimalEnabled)); - if(sp.getPreAuthStatus()){ - print3ColumnsString("PREAUTH COMP ", countStringFormat(summary.preAuthCompCount), PrintUtils.getInstance().getSeparatorNumberFormat(summary.preAuthCompAmount, isDecimalEnabled)); + printString("Currency = '" + currencyLabel + "'", true); + print3ColumnsString("TXN Type ", "CNT", "AMOUNT"); + print3ColumnsString("SALE ", countStringFormat(summary.saleCount), + PrintUtils.getInstance().getSeparatorNumberFormat(summary.saleAmount, isDecimalEnabled)); + if (sp.getVoidStatus()) { + print3ColumnsString("VOID SALE ", countStringFormat(summary.voidSaleCount), + "- " + PrintUtils.getInstance().getSeparatorNumberFormat(summary.voidSaleAmount, isDecimalEnabled)); } - if (summary.cashAdvanceCount != 0) { - if(sp.getCashAdvanceStatus()){ - print3ColumnsString("CASH ADV ", countStringFormat(summary.cashAdvanceCount), PrintUtils.getInstance().getSeparatorNumberFormat(summary.cashAdvanceAmount, isDecimalEnabled)); - } + if (sp.getPreAuthStatus()) { + print3ColumnsString("PREAUTH COMP ", countStringFormat(summary.preAuthCompCount), + PrintUtils.getInstance().getSeparatorNumberFormat(summary.preAuthCompAmount, isDecimalEnabled)); } - if(sp.getRefundStatus()){ - print3ColumnsString("REFUND ", countStringFormat(summary.refundCount), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(summary.refundAmount, isDecimalEnabled)); + if (sp.getCashAdvanceStatus()) { + print3ColumnsString("CASH ADV ", countStringFormat(summary.cashAdvanceCount), + PrintUtils.getInstance().getSeparatorNumberFormat(summary.cashAdvanceAmount, isDecimalEnabled)); } - print3ColumnsString("TOTAL(" + currencyLabel + ") ", countStringFormat(totalCount), PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isDecimalEnabled)); + if (sp.getRefundStatus()) { + print3ColumnsString("REFUND ", countStringFormat(summary.refundCount), + "- " + PrintUtils.getInstance().getSeparatorNumberFormat(summary.refundAmount, isDecimalEnabled)); + } + dotBreak(); + print2ColumnsString("TOTAL", PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isDecimalEnabled)); } private void applyCardSettlementSummary(CurrencySettlementSummary summary, CardSettleData cardSettleData) { @@ -428,6 +382,9 @@ public abstract class BaseXPrint { if ("SALE".equals(transType)) { summary.saleCount++; summary.saleAmount += amount; + } else if ("VOID SALE".equals(transType) || "VOID_SALE".equals(transType)) { + summary.voidSaleCount++; + summary.voidSaleAmount += amount; } else if ("PREAUTH COMPLETION".equals(transType) || "PRE_AUTH_COMPLETE".equals(transType)) { summary.preAuthCompCount++; summary.preAuthCompAmount += amount; @@ -455,6 +412,8 @@ public abstract class BaseXPrint { private static class CurrencySettlementSummary { int saleCount; long saleAmount; + int voidSaleCount; + long voidSaleAmount; int preAuthCompCount; long preAuthCompAmount; int refundCount; @@ -463,8 +422,8 @@ public abstract class BaseXPrint { long cashAdvanceAmount; boolean hasAnyValue() { - return saleCount > 0 || preAuthCompCount > 0 || refundCount > 0 || cashAdvanceCount > 0 - || saleAmount > 0 || preAuthCompAmount > 0 || refundAmount > 0 || cashAdvanceAmount > 0; + return saleCount > 0 || voidSaleCount > 0 || preAuthCompCount > 0 || refundCount > 0 || cashAdvanceCount > 0 + || saleAmount > 0 || voidSaleAmount > 0 || preAuthCompAmount > 0 || refundAmount > 0 || cashAdvanceAmount > 0; } }