settlement fix

This commit is contained in:
moon 2026-06-18 11:12:12 +06:30
parent 2dd686d513
commit 0289013a58
4 changed files with 182 additions and 137 deletions

View File

@ -54,10 +54,12 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
int preCount = 0; int preCount = 0;
int refundCount = 0; int refundCount = 0;
int caCount = 0; int caCount = 0;
int voidCount = 0;
long saleAmount = 0; long saleAmount = 0;
long preAmount = 0; long preAmount = 0;
long refundAmount = 0; long refundAmount = 0;
long caAmount = 0; long caAmount = 0;
long voidAmount = 0;
private final CurrencyBucket mmkBucket = new CurrencyBucket(); private final CurrencyBucket mmkBucket = new CurrencyBucket();
private final CurrencyBucket usdBucket = new CurrencyBucket(); private final CurrencyBucket usdBucket = new CurrencyBucket();
@ -279,8 +281,20 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
settlementViewModel.getDeleteTrans(SystemParamsOperation.getInstance().getCurrentBatchNum()).observe(getViewLifecycleOwner(), new Observer<List<PayDetail>>() { settlementViewModel.getDeleteTrans(SystemParamsOperation.getInstance().getCurrentBatchNum()).observe(getViewLifecycleOwner(), new Observer<List<PayDetail>>() {
@Override @Override
public void onChanged(List<PayDetail> payDetails) { public void onChanged(List<PayDetail> payDetails) {
settlementViewModel.deleteTrans.clear();
voidCount = 0;
voidAmount = 0L;
if(payDetails != null) { if(payDetails != null) {
settlementViewModel.deleteTrans.addAll(payDetails); 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);
}
} }
} }
}); });
@ -291,10 +305,12 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
preCount = 0; preCount = 0;
refundCount = 0; refundCount = 0;
caCount = 0; caCount = 0;
voidCount = 0;
saleAmount = 0L; saleAmount = 0L;
preAmount = 0L; preAmount = 0L;
refundAmount = 0L; refundAmount = 0L;
caAmount = 0L; caAmount = 0L;
voidAmount = 0L;
resetCurrencyBucket(mmkBucket); resetCurrencyBucket(mmkBucket);
resetCurrencyBucket(usdBucket); resetCurrencyBucket(usdBucket);
} }

View File

@ -271,7 +271,12 @@ public class SettlementViewModel extends ViewModel {
this.isLast = isLast; this.isLast = isLast;
SystemParamsOperation.getInstance().getIncrementBatchNo(); SystemParamsOperation.getInstance().getIncrementBatchNo();
if(SystemParamsOperation.getInstance().getDemoStatus()) { boolean bucketIsEmpty = currencyBucket.saleCount == 0
&& currencyBucket.preCount == 0
&& currencyBucket.refundCount == 0
&& currencyBucket.caCount == 0;
if (bucketIsEmpty || SystemParamsOperation.getInstance().getDemoStatus()) {
requestDemoProcessSettlement(currencyBucket); requestDemoProcessSettlement(currencyBucket);
} else { } else {
requestOnlineProcessSettlement(currencyBucket); requestOnlineProcessSettlement(currencyBucket);
@ -318,7 +323,9 @@ public class SettlementViewModel extends ViewModel {
payDetail.setSettleList(currencyBucket.saleCount+ ":" + currencyBucket.saleAmount + "-" + currencyBucket.caCount + ":" + currencyBucket.caAmount + "-" + currencyBucket.refundCount + ":" + currencyBucket.refundAmount + "-" + currencyBucket.preCount + ":" + currencyBucket.preAmount); // for print receipt payDetail.setSettleList(currencyBucket.saleCount+ ":" + currencyBucket.saleAmount + "-" + currencyBucket.caCount + ":" + currencyBucket.caAmount + "-" + currencyBucket.refundCount + ":" + currencyBucket.refundAmount + "-" + currencyBucket.preCount + ":" + currencyBucket.preAmount); // for print receipt
/*POS*/ /*POS*/
SettleData settleData = new SettleData(currencyBucket.saleCount, currencyBucket.saleAmount, currencyBucket.preCount, currencyBucket.preAmount, currencyBucket.refundCount, currencyBucket.refundAmount, currencyBucket.caCount, currencyBucket.caAmount); SettleData settleData = new SettleData(currencyBucket.saleCount, currencyBucket.saleAmount, currencyBucket.preCount, currencyBucket.preAmount, currencyBucket.refundCount, currencyBucket.refundAmount, currencyBucket.caCount, currencyBucket.caAmount);
enrichSettleDataWithVoids(settleData);
payDetail.setSettleDataObj(settleData); payDetail.setSettleDataObj(settleData);
payDetail.setCardSettleData(CardSettleData.convertFromPayDetail(buildCardPayDetailList()));
long totalAmount = currencyBucket.saleAmount + currencyBucket.preAmount + currencyBucket.refundAmount + currencyBucket.caAmount; long totalAmount = currencyBucket.saleAmount + currencyBucket.preAmount + currencyBucket.refundAmount + currencyBucket.caAmount;
@ -409,10 +416,9 @@ public class SettlementViewModel extends ViewModel {
payDetail.setSettleList(currencyBucket.saleCount+ ":" + currencyBucket.saleAmount + "-" + currencyBucket.caCount + ":" + currencyBucket.caAmount + "-" + currencyBucket.refundCount + ":" + currencyBucket.refundAmount + "-" + currencyBucket.preCount + ":" + currencyBucket.preAmount); // for print receipt payDetail.setSettleList(currencyBucket.saleCount+ ":" + currencyBucket.saleAmount + "-" + currencyBucket.caCount + ":" + currencyBucket.caAmount + "-" + currencyBucket.refundCount + ":" + currencyBucket.refundAmount + "-" + currencyBucket.preCount + ":" + currencyBucket.preAmount); // for print receipt
/*POS*/ /*POS*/
SettleData settleData = new SettleData(currencyBucket.saleCount, currencyBucket.saleAmount, currencyBucket.preCount, currencyBucket.preAmount, currencyBucket.refundCount, currencyBucket.refundAmount, currencyBucket.caCount, currencyBucket.caAmount); SettleData settleData = new SettleData(currencyBucket.saleCount, currencyBucket.saleAmount, currencyBucket.preCount, currencyBucket.preAmount, currencyBucket.refundCount, currencyBucket.refundAmount, currencyBucket.caCount, currencyBucket.caAmount);
enrichSettleDataWithVoids(settleData);
payDetail.setSettleDataObj(settleData); payDetail.setSettleDataObj(settleData);
payDetail.setCardSettleData(CardSettleData.convertFromPayDetail(buildCardPayDetailList()));
if(payDetails != null)
payDetail.setCardSettleData(CardSettleData.convertFromPayDetail(payDetails));
if(hostName == HostName.BPC) { if(hostName == HostName.BPC) {
long totalAmount = currencyBucket.saleAmount + currencyBucket.preAmount + currencyBucket.refundAmount + currencyBucket.caAmount; long totalAmount = currencyBucket.saleAmount + currencyBucket.preAmount + currencyBucket.refundAmount + currencyBucket.caAmount;
@ -539,6 +545,31 @@ public class SettlementViewModel extends ViewModel {
}); });
} }
private void enrichSettleDataWithVoids(SettleData settleData) {
for (PayDetail pay : deleteTrans) {
if (pay.getTransactionType() == TransactionType.VOID && !pay.isCanceled) {
settleData.setVoidSaleCount(settleData.getVoidSaleCount() + 1);
settleData.setVoidSaleAmount(settleData.getVoidSaleAmount() + pay.getAmount());
} else if (pay.getTransactionType() == TransactionType.SALE && pay.isCanceled) {
settleData.setSaleCount(settleData.getSaleCount() + 1);
settleData.setSaleAmount(settleData.getSaleAmount() + pay.getAmount());
}
}
}
private List<PayDetail> buildCardPayDetailList() {
List<PayDetail> list = new ArrayList<>();
if (payDetails != null) list.addAll(payDetails);
for (PayDetail pay : deleteTrans) {
if (pay.getTransactionType() == TransactionType.VOID && !pay.isCanceled) {
list.add(pay);
} else if (pay.getTransactionType() == TransactionType.SALE && pay.isCanceled) {
list.add(pay);
}
}
return list;
}
private void batchUploadProcess(boolean isLast) { private void batchUploadProcess(boolean isLast) {
resultString.postValue(TransactionStatus.ON_BATCH_UPLOAD); resultString.postValue(TransactionStatus.ON_BATCH_UPLOAD);

View File

@ -255,35 +255,28 @@ public abstract class BaseXPrint {
for (CardSettleData cardSettleData : cardSettleDataList) { for (CardSettleData cardSettleData : cardSettleDataList) {
print2SideStringMargin(cardSettleData.getCardType(), PrintUtils.getInstance().maskCardNumberPciDss(cardSettleData.getCardNum())); print2SideStringMargin(cardSettleData.getCardType(), PrintUtils.getInstance().maskCardNumberPciDss(cardSettleData.getCardNum()));
print2SideStringMargin("XX/XX",cardSettleData.getInvoiceNum()); print2SideStringMargin("INV NO", cardSettleData.getInvoiceNum());
print2SideStringMargin(cardSettleData.getTransType(),"MMK "+PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount(), isDecimalEnabled)); String cardCurrency = currencyCodeToText(cardSettleData.getCurrencyCode());
print2SideStringMargin(cardSettleData.getTransType(), cardCurrency + " " + PrintUtils.getInstance().getSeparatorNumberFormat(cardSettleData.getAmount(), isDecimalEnabled));
print2SideStringMargin(cardSettleData.getApprovalCode(), cardSettleData.getTransDate() + " " + cardSettleData.getTransTime()); print2SideStringMargin(cardSettleData.getApprovalCode(), cardSettleData.getTransDate() + " " + cardSettleData.getTransTime());
emptyLine(1); emptyLine(1);
} }
lineBreak(); lineBreak();
SettleData settleData = payDetail.getSettleDataObj(); SettleData settleData = payDetail.getSettleDataObj();
int totalCount = settleData.getSaleCount() + settleData.getPreAuthCompCount() + settleData.getRefundCount() + settleData.getCashAdvanceCount(); long totalAmount = settleData.getSaleAmount() + settleData.getPreAuthCompAmount() + settleData.getCashAdvanceAmount()
long totalAmount = settleData.getSaleAmount() + settleData.getPreAuthCompAmount() + settleData.getCashAdvanceAmount(); - settleData.getVoidSaleAmount() - settleData.getRefundAmount();
print3ColumnsString("TRX TYPE ", "CNT", "AMOUNT");
print3ColumnsString("SALE ", countStringFormat(settleData.getSaleCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getSaleAmount(), isDecimalEnabled));
print3ColumnsString("VOID SALE ", countStringFormat(settleData.getVoidSaleCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getVoidSaleAmount(), isDecimalEnabled));
print3ColumnsString("PREAUTH COMP ", countStringFormat(settleData.getPreAuthCompCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getPreAuthCompAmount(), isDecimalEnabled));
if (settleData.getCashAdvanceCount() != 0)
print3ColumnsString("CASH ADV ", countStringFormat(settleData.getCashAdvanceCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getCashAdvanceAmount(), isDecimalEnabled));
print3ColumnsString("REFUND ", countStringFormat(settleData.getRefundCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getRefundAmount(), isDecimalEnabled));
emptyLine(1);
printer.appendPrnStr("GRAND TOTAL", fontLarge, AlignEnum.LEFT, true); printer.appendPrnStr("GRAND TOTAL", fontLarge, AlignEnum.LEFT, true);
emptyLine(1); emptyLine(1);
// print3ColumnsString("TOTAL(MMK) ", countStringFormat(totalCount), PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount));
print3ColumnsString("TRX TYPE ", "CNT", "AMOUNT"); print3ColumnsString("TRX TYPE ", "CNT", "AMOUNT");
print3ColumnsString("SALE ", countStringFormat(settleData.getSaleCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getSaleAmount(), isDecimalEnabled)); print3ColumnsString("SALE ", countStringFormat(settleData.getSaleCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getSaleAmount(), isDecimalEnabled));
print3ColumnsString("VOID SALE ", countStringFormat(settleData.getVoidSaleCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getVoidSaleAmount(), isDecimalEnabled)); print3ColumnsString("VOID SALE ", countStringFormat(settleData.getVoidSaleCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getVoidSaleAmount(), isDecimalEnabled));
print3ColumnsString("PREAUTH COMP ", countStringFormat(settleData.getPreAuthCompCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getPreAuthCompAmount(), isDecimalEnabled)); print3ColumnsString("PREAUTH COMP ", countStringFormat(settleData.getPreAuthCompCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getPreAuthCompAmount(), isDecimalEnabled));
if (settleData.getCashAdvanceCount() != 0)
print3ColumnsString("CASH ADV ", countStringFormat(settleData.getCashAdvanceCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getCashAdvanceAmount(), isDecimalEnabled)); print3ColumnsString("CASH ADV ", countStringFormat(settleData.getCashAdvanceCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getCashAdvanceAmount(), isDecimalEnabled));
print3ColumnsString("REFUND ", countStringFormat(settleData.getRefundCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getRefundAmount(), isDecimalEnabled)); print3ColumnsString("REFUND ", countStringFormat(settleData.getRefundCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getRefundAmount(), isDecimalEnabled));
dotBreak();
print3ColumnsString("TOTAL ", "", PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isDecimalEnabled));
emptyLine(2); emptyLine(2);
@ -390,6 +383,7 @@ public abstract class BaseXPrint {
} }
protected void printTransFooterForSettlement() { protected void printTransFooterForSettlement() {
String receiptFooter = SystemParamsOperation.getInstance().getReceiptFooter(); String receiptFooter = SystemParamsOperation.getInstance().getReceiptFooter();
String finalVersion = SystemParamsOperation.getInstance().getFinalVersion(); String finalVersion = SystemParamsOperation.getInstance().getFinalVersion();
@ -436,7 +430,6 @@ public abstract class BaseXPrint {
// } // }
boolean isDecimalEnabled = SystemParamsOperation.getInstance().getDecimalEnable(); boolean isDecimalEnabled = SystemParamsOperation.getInstance().getDecimalEnable();
if (payDetail.getTradeAnswerCode().equals("00") || payDetail.getTradeAnswerCode().equals("000")) { if (payDetail.getTradeAnswerCode().equals("00") || payDetail.getTradeAnswerCode().equals("000")) {
if (payDetail.getTransactionType() == TransactionType.CASH_ADVANCE) { if (payDetail.getTransactionType() == TransactionType.CASH_ADVANCE) {
@ -1144,7 +1137,6 @@ public abstract class BaseXPrint {
} }
protected void print3ColumnsString(String first, String second, String third) { protected void print3ColumnsString(String first, String second, String third) {
// printer.appendPrnStr(first + " " + second + " " + third, fontNormal, AlignEnum.LEFT,false); // printer.appendPrnStr(first + " " + second + " " + third, fontNormal, AlignEnum.LEFT,false);
printer.appendPrnStr(first + " " + second + " " + third, fontNormal, AlignEnum.LEFT, false); printer.appendPrnStr(first + " " + second + " " + third, fontNormal, AlignEnum.LEFT, false);
@ -1168,6 +1160,7 @@ public abstract class BaseXPrint {
long total = 0; long total = 0;
int count = 0; int count = 0;
} }
protected void printTransDetailReport(List<PayDetail> lists, HostType hostType) { protected void printTransDetailReport(List<PayDetail> lists, HostType hostType) {
// ✅ Summary holder (total + count per currency) // ✅ Summary holder (total + count per currency)
@ -1552,7 +1545,6 @@ public abstract class BaseXPrint {
emptyLine(4); emptyLine(4);
} }
protected void startPrintNex() { protected void startPrintNex() {
@ -1667,6 +1659,7 @@ public abstract class BaseXPrint {
dotBreak(); dotBreak();
} }
protected void printTransHeader(PayDetail payDetail, HostType hostType) { protected void printTransHeader(PayDetail payDetail, HostType hostType) {
String invoiceNo = payDetail.getInvoiceNo().isEmpty() ? SystemParamsOperation.getInstance().getCurrentInvoiceNum() : payDetail.getInvoiceNo(); String invoiceNo = payDetail.getInvoiceNo().isEmpty() ? SystemParamsOperation.getInstance().getCurrentInvoiceNum() : payDetail.getInvoiceNo();
String transType = payDetail.getTransType(); String transType = payDetail.getTransType();

View File

@ -192,7 +192,12 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
printLogo(); printLogo();
printMerchantHeader(); printMerchantHeader();
printTransHeader(payDetail); printTransHeader(payDetail);
List<com.utsmyanmar.paylibs.model.CardSettleData> cardSettleDataList = payDetail.getCardSettleData();
if (cardSettleDataList != null && !cardSettleDataList.isEmpty()) {
printTransDetailSettlement(payDetail, cardSettleDataList);
} else {
printTransDetailSettlement(payDetail); printTransDetailSettlement(payDetail);
}
// printTransFooterSummary(); // printTransFooterSummary();
printTransFooterForSettlement(); printTransFooterForSettlement();