settlement detail changed
This commit is contained in:
parent
152833ed4e
commit
997aa33d98
11
CHANGELOG.md
11
CHANGELOG.md
@ -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
|
||||
@ -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()));
|
||||
print3ColumnsString("VOID SALE ", countStringFormat(settleData.getVoidSaleCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getVoidSaleAmount(), SystemParamsOperation.getInstance().getDecimalEnable()));
|
||||
print3ColumnsString("PREAUTH COMP ", countStringFormat(settleData.getPreAuthCompCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getPreAuthCompAmount(), SystemParamsOperation.getInstance().getDecimalEnable()));
|
||||
print3ColumnsString("CASH ADV ", countStringFormat(settleData.getCashAdvanceCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getCashAdvanceAmount(), SystemParamsOperation.getInstance().getDecimalEnable()));
|
||||
print3ColumnsString("REFUND ", countStringFormat(settleData.getRefundCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getRefundAmount(), 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,23 +264,93 @@ 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);
|
||||
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));
|
||||
print3ColumnsString("CASH ADV ", countStringFormat(settleData.getCashAdvanceCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getCashAdvanceAmount(), isDecimalEnabled));
|
||||
print3ColumnsString("REFUND ", countStringFormat(settleData.getRefundCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getRefundAmount(), isDecimalEnabled));
|
||||
dotBreak();
|
||||
print2ColumnsString("TOTAL", PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isDecimalEnabled));
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
if (qrList == null || qrList.isEmpty()) return;
|
||||
|
||||
@ -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));
|
||||
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(sp.getPreAuthStatus()){
|
||||
print3ColumnsString("PREAUTH COMP ", countStringFormat(summary.preAuthCompCount), PrintUtils.getInstance().getSeparatorNumberFormat(summary.preAuthCompAmount, 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("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();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user