settlement detail changed

This commit is contained in:
moon 2026-07-21 14:46:31 +06:30
parent 152833ed4e
commit 997aa33d98
2 changed files with 143 additions and 43 deletions

View File

@ -2,7 +2,7 @@
## [2.12] - 06-05-2026
- **Pinpad Sound Toggle**
- **Pin pad Sound Toggle**
- Beep is ON by default
- Can Toggle PinPad sound on Side Navigation ( Under SystemManagement Tab)
@ -50,3 +50,12 @@
- **General**
- SETTLEMENT both in one click
- showing each transaction detail when SETTLE
-
## [2.39] - 19-07-2026
- **General**
- New E-receipt for settlement
## [2.39] -
- **General**
- show total for each currency for duel currency
- void, pre-auth, cash adv, refund can now control from TMS for paper receipt

View File

@ -218,14 +218,24 @@ public abstract class BaseXPrint {
printTransDetailSettlement(payDetail, cardSettleDataList);
return;
}
SystemParamsOperation sp = SystemParamsOperation.getInstance();
SettleData settleData = payDetail.getSettleDataObj();
print3ColumnsString("TRX TYPE ", "CNT", "AMOUNT");
print3ColumnsString("SALE ", countStringFormat(settleData.getSaleCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getSaleAmount(), SystemParamsOperation.getInstance().getDecimalEnable()));
if(sp.getVoidStatus()){
print3ColumnsString("VOID SALE ", countStringFormat(settleData.getVoidSaleCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getVoidSaleAmount(), SystemParamsOperation.getInstance().getDecimalEnable()));
}
if(sp.getPreAuthStatus()){
print3ColumnsString("PREAUTH COMP ", countStringFormat(settleData.getPreAuthCompCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getPreAuthCompAmount(), SystemParamsOperation.getInstance().getDecimalEnable()));
}
if(sp.getCashAdvanceStatus()){
print3ColumnsString("CASH ADV ", countStringFormat(settleData.getCashAdvanceCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getCashAdvanceAmount(), SystemParamsOperation.getInstance().getDecimalEnable()));
}
if(sp.getRefundStatus()){
print3ColumnsString("REFUND ", countStringFormat(settleData.getRefundCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getRefundAmount(), SystemParamsOperation.getInstance().getDecimalEnable()));
}
dotBreak();
long totalAmount = settleData.getSaleAmount() + settleData.getPreAuthCompAmount() + settleData.getCashAdvanceAmount()
- settleData.getVoidSaleAmount() - settleData.getRefundAmount();
@ -254,21 +264,91 @@ public abstract class BaseXPrint {
}
dotBreak();
SettleData settleData = payDetail.getSettleDataObj();
long totalAmount = settleData.getSaleAmount() + settleData.getPreAuthCompAmount() + settleData.getCashAdvanceAmount()
- settleData.getVoidSaleAmount() - settleData.getRefundAmount();
boolean isDuelCurrency = SystemParamsOperation.getInstance().getDuelCurrencyStatus();
printer.appendPrnStr("GRAND TOTAL", fontLarge, AlignEnum.LEFT, true);
emptyLine(1);
if (isDuelCurrency) {
Map<String, CurrencySettlementSummary> currencyMap = buildCurrencySummaries(cardSettleDataList);
if (currencyMap.size() > 1) {
for (Map.Entry<String, CurrencySettlementSummary> entry : currencyMap.entrySet()) {
printSettlementCurrencySection(entry.getKey(), entry.getValue());
}
dotBreak();
} else {
printSingleSettleSummary(cardSettleDataList, isDecimalEnabled);
}
} else {
printSingleSettleSummary(cardSettleDataList, isDecimalEnabled);
}
emptyLine(1);
}
private void printSingleSettleSummary(List<CardSettleData> cardSettleDataList, boolean isDecimalEnabled) {
Map<String, CurrencySettlementSummary> currencyMap = buildCurrencySummaries(cardSettleDataList);
SystemParamsOperation sp = SystemParamsOperation.getInstance();
if (currencyMap.size() == 1) {
Map.Entry<String, CurrencySettlementSummary> 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));
emptyLine(1);
}
}
private Map<String, CurrencySettlementSummary> buildCurrencySummaries(List<CardSettleData> cardSettleDataList) {
Map<String, CurrencySettlementSummary> currencyMap = new LinkedHashMap<>();
for (CardSettleData csd : cardSettleDataList) {
String currency = normalizeSettlementCurrency(csd.getCurrencyCode());
CurrencySettlementSummary summary = currencyMap.get(currency);
if (summary == null) {
summary = new CurrencySettlementSummary();
currencyMap.put(currency, summary);
}
applyCardSettlementSummary(summary, csd);
}
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<QRSettleData> qrList) {
@ -319,18 +399,25 @@ public abstract class BaseXPrint {
// 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;
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));
if (summary.cashAdvanceCount != 0) {
print3ColumnsString("CASH ADVANCE ", countStringFormat(summary.cashAdvanceCount), PrintUtils.getInstance().getSeparatorNumberFormat(summary.cashAdvanceAmount, isDecimalEnabled));
}
if (summary.cashAdvanceCount != 0) {
if(sp.getCashAdvanceStatus()){
print3ColumnsString("CASH ADV ", countStringFormat(summary.cashAdvanceCount), PrintUtils.getInstance().getSeparatorNumberFormat(summary.cashAdvanceAmount, isDecimalEnabled));
}
}
if(sp.getRefundStatus()){
print3ColumnsString("REFUND ", countStringFormat(summary.refundCount), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(summary.refundAmount, isDecimalEnabled));
}
print3ColumnsString("TOTAL(" + currencyLabel + ") ", countStringFormat(totalCount), PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isDecimalEnabled));
}
@ -969,6 +1056,8 @@ public abstract class BaseXPrint {
return;
}
SystemParamsOperation sp = SystemParamsOperation.getInstance();
Map<String, TempSummary> currencyMap = new HashMap<>();
for (PayDetail item : list) {
@ -1029,47 +1118,49 @@ public abstract class BaseXPrint {
fontNormal, false);
}
if (data.voidSaleCount > 0) {
if (data.voidSaleCount > 0 && sp.getVoidStatus()) {
print3ColumnsStringWithAlign("(" + data.voidSaleCount + ")",
"VOID",
"- " + PrintUtils.getInstance().getSeparatorNumberFormat(data.voidSaleAmount, isDecimalEnabled),
fontNormal, false);
}
if (data.cashOutCount > 0) {
if (data.cashOutCount > 0 && sp.getCashAdvanceStatus()) {
print3ColumnsStringWithAlign("(" + data.cashOutCount + ")",
"CASH ADV",
PrintUtils.getInstance().getSeparatorNumberFormat(data.cashOutAmount, isDecimalEnabled),
fontNormal, false);
}
if (data.preAuthSaleCount > 0) {
print3ColumnsStringWithAlign("(" + data.preAuthSaleCount + ")",
"PRE-AUTH",
PrintUtils.getInstance().getSeparatorNumberFormat(data.preAuthSaleAmount, isDecimalEnabled),
fontNormal, false);
}
// if (data.preAuthSaleCount > 0) {
// print3ColumnsStringWithAlign("(" + data.preAuthSaleCount + ")",
// "PRE-AUTH",
// PrintUtils.getInstance().getSeparatorNumberFormat(data.preAuthSaleAmount, isDecimalEnabled),
// fontNormal, false);
// }
//
// if (data.preAuthVoidCount > 0) {
// print3ColumnsStringWithAlign("(" + data.preAuthVoidCount + ")",
// "PREAUTH VOID",
// "- " + PrintUtils.getInstance().getSeparatorNumberFormat(data.preAuthVoidAmount, isDecimalEnabled),
// fontNormal, false);
// }
if (data.preAuthVoidCount > 0) {
print3ColumnsStringWithAlign("(" + data.preAuthVoidCount + ")",
"PREAUTH VOID",
"- " + PrintUtils.getInstance().getSeparatorNumberFormat(data.preAuthVoidAmount, isDecimalEnabled),
fontNormal, false);
}
if (data.refundCount > 0) {
print3ColumnsStringWithAlign("(" + data.refundCount + ")",
"REFUND",
"- " + PrintUtils.getInstance().getSeparatorNumberFormat(data.refundAmount, isDecimalEnabled),
fontNormal, false);
}
if (data.preAuthCompCount > 0) {
if (data.preAuthCompCount > 0 && sp.getPreAuthStatus()) {
print3ColumnsStringWithAlign("(" + data.preAuthCompCount + ")",
"PREAUTH COMP",
PrintUtils.getInstance().getSeparatorNumberFormat(data.preAuthCompAmount, isDecimalEnabled),
fontNormal, false);
}
if (data.refundCount > 0 && sp.getRefundStatus()) {
print3ColumnsStringWithAlign("(" + data.refundCount + ")",
"REFUND",
"- " + PrintUtils.getInstance().getSeparatorNumberFormat(data.refundAmount, isDecimalEnabled),
fontNormal, false);
}
}
dotBreak();