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
|
## [2.12] - 06-05-2026
|
||||||
|
|
||||||
- **Pinpad Sound Toggle**
|
- **Pin pad Sound Toggle**
|
||||||
- Beep is ON by default
|
- Beep is ON by default
|
||||||
- Can Toggle PinPad sound on Side Navigation ( Under SystemManagement Tab)
|
- Can Toggle PinPad sound on Side Navigation ( Under SystemManagement Tab)
|
||||||
|
|
||||||
@ -50,3 +50,12 @@
|
|||||||
- **General**
|
- **General**
|
||||||
- SETTLEMENT both in one click
|
- SETTLEMENT both in one click
|
||||||
- showing each transaction detail when SETTLE
|
- 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);
|
printTransDetailSettlement(payDetail, cardSettleDataList);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
SystemParamsOperation sp = SystemParamsOperation.getInstance();
|
||||||
|
|
||||||
SettleData settleData = payDetail.getSettleDataObj();
|
SettleData settleData = payDetail.getSettleDataObj();
|
||||||
print3ColumnsString("TRX TYPE ", "CNT", "AMOUNT");
|
print3ColumnsString("TRX TYPE ", "CNT", "AMOUNT");
|
||||||
print3ColumnsString("SALE ", countStringFormat(settleData.getSaleCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getSaleAmount(), SystemParamsOperation.getInstance().getDecimalEnable()));
|
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()));
|
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()));
|
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()));
|
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()));
|
print3ColumnsString("REFUND ", countStringFormat(settleData.getRefundCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getRefundAmount(), SystemParamsOperation.getInstance().getDecimalEnable()));
|
||||||
|
}
|
||||||
|
|
||||||
dotBreak();
|
dotBreak();
|
||||||
long totalAmount = settleData.getSaleAmount() + settleData.getPreAuthCompAmount() + settleData.getCashAdvanceAmount()
|
long totalAmount = settleData.getSaleAmount() + settleData.getPreAuthCompAmount() + settleData.getCashAdvanceAmount()
|
||||||
- settleData.getVoidSaleAmount() - settleData.getRefundAmount();
|
- settleData.getVoidSaleAmount() - settleData.getRefundAmount();
|
||||||
@ -254,21 +264,91 @@ public abstract class BaseXPrint {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dotBreak();
|
dotBreak();
|
||||||
SettleData settleData = payDetail.getSettleDataObj();
|
|
||||||
long totalAmount = settleData.getSaleAmount() + settleData.getPreAuthCompAmount() + settleData.getCashAdvanceAmount()
|
boolean isDuelCurrency = SystemParamsOperation.getInstance().getDuelCurrencyStatus();
|
||||||
- settleData.getVoidSaleAmount() - settleData.getRefundAmount();
|
|
||||||
|
|
||||||
printer.appendPrnStr("GRAND TOTAL", fontLarge, AlignEnum.LEFT, true);
|
printer.appendPrnStr("GRAND TOTAL", fontLarge, AlignEnum.LEFT, true);
|
||||||
emptyLine(1);
|
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("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));
|
||||||
|
if(sp.getVoidStatus()){
|
||||||
print3ColumnsString("VOID SALE ", countStringFormat(settleData.getVoidSaleCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getVoidSaleAmount(), isDecimalEnabled));
|
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));
|
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));
|
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));
|
print3ColumnsString("REFUND ", countStringFormat(settleData.getRefundCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getRefundAmount(), isDecimalEnabled));
|
||||||
|
}
|
||||||
dotBreak();
|
dotBreak();
|
||||||
|
long totalAmount = settleData.getSaleAmount() + settleData.getPreAuthCompAmount() + settleData.getCashAdvanceAmount()
|
||||||
|
- settleData.getVoidSaleAmount() - settleData.getRefundAmount();
|
||||||
print2ColumnsString("TOTAL", PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isDecimalEnabled));
|
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) {
|
protected void printMMQRReport(List<QRSettleData> qrList) {
|
||||||
@ -319,18 +399,25 @@ public abstract class BaseXPrint {
|
|||||||
// return;
|
// return;
|
||||||
// }
|
// }
|
||||||
boolean isDecimalEnabled = SystemParamsOperation.getInstance().getDecimalEnable();
|
boolean isDecimalEnabled = SystemParamsOperation.getInstance().getDecimalEnable();
|
||||||
|
SystemParamsOperation sp = SystemParamsOperation.getInstance();
|
||||||
|
|
||||||
int totalCount = summary.saleCount + summary.preAuthCompCount + summary.refundCount + summary.cashAdvanceCount;
|
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.refundAmount;
|
||||||
|
emptyLine(1);
|
||||||
printString("CURRENCY : " + currencyLabel, true);
|
printString("CURRENCY : " + currencyLabel, true);
|
||||||
print3ColumnsString("TRX TYPE ", "CNT", "AMOUNT");
|
print3ColumnsString("TRX TYPE ", "CNT", "AMOUNT");
|
||||||
print3ColumnsString("SALE ", countStringFormat(summary.saleCount), PrintUtils.getInstance().getSeparatorNumberFormat(summary.saleAmount, isDecimalEnabled));
|
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));
|
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("REFUND ", countStringFormat(summary.refundCount), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(summary.refundAmount, isDecimalEnabled));
|
||||||
|
}
|
||||||
print3ColumnsString("TOTAL(" + currencyLabel + ") ", countStringFormat(totalCount), PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isDecimalEnabled));
|
print3ColumnsString("TOTAL(" + currencyLabel + ") ", countStringFormat(totalCount), PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isDecimalEnabled));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -969,6 +1056,8 @@ public abstract class BaseXPrint {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SystemParamsOperation sp = SystemParamsOperation.getInstance();
|
||||||
|
|
||||||
Map<String, TempSummary> currencyMap = new HashMap<>();
|
Map<String, TempSummary> currencyMap = new HashMap<>();
|
||||||
|
|
||||||
for (PayDetail item : list) {
|
for (PayDetail item : list) {
|
||||||
@ -1029,47 +1118,49 @@ public abstract class BaseXPrint {
|
|||||||
fontNormal, false);
|
fontNormal, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.voidSaleCount > 0) {
|
if (data.voidSaleCount > 0 && sp.getVoidStatus()) {
|
||||||
print3ColumnsStringWithAlign("(" + data.voidSaleCount + ")",
|
print3ColumnsStringWithAlign("(" + data.voidSaleCount + ")",
|
||||||
"VOID",
|
"VOID",
|
||||||
"- " + PrintUtils.getInstance().getSeparatorNumberFormat(data.voidSaleAmount, isDecimalEnabled),
|
"- " + PrintUtils.getInstance().getSeparatorNumberFormat(data.voidSaleAmount, isDecimalEnabled),
|
||||||
fontNormal, false);
|
fontNormal, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.cashOutCount > 0) {
|
if (data.cashOutCount > 0 && sp.getCashAdvanceStatus()) {
|
||||||
print3ColumnsStringWithAlign("(" + data.cashOutCount + ")",
|
print3ColumnsStringWithAlign("(" + data.cashOutCount + ")",
|
||||||
"CASH ADV",
|
"CASH ADV",
|
||||||
PrintUtils.getInstance().getSeparatorNumberFormat(data.cashOutAmount, isDecimalEnabled),
|
PrintUtils.getInstance().getSeparatorNumberFormat(data.cashOutAmount, isDecimalEnabled),
|
||||||
fontNormal, false);
|
fontNormal, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.preAuthSaleCount > 0) {
|
// if (data.preAuthSaleCount > 0) {
|
||||||
print3ColumnsStringWithAlign("(" + data.preAuthSaleCount + ")",
|
// print3ColumnsStringWithAlign("(" + data.preAuthSaleCount + ")",
|
||||||
"PRE-AUTH",
|
// "PRE-AUTH",
|
||||||
PrintUtils.getInstance().getSeparatorNumberFormat(data.preAuthSaleAmount, isDecimalEnabled),
|
// PrintUtils.getInstance().getSeparatorNumberFormat(data.preAuthSaleAmount, isDecimalEnabled),
|
||||||
fontNormal, false);
|
// 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 + ")",
|
print3ColumnsStringWithAlign("(" + data.preAuthCompCount + ")",
|
||||||
"PREAUTH COMP",
|
"PREAUTH COMP",
|
||||||
PrintUtils.getInstance().getSeparatorNumberFormat(data.preAuthCompAmount, isDecimalEnabled),
|
PrintUtils.getInstance().getSeparatorNumberFormat(data.preAuthCompAmount, isDecimalEnabled),
|
||||||
fontNormal, false);
|
fontNormal, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (data.refundCount > 0 && sp.getRefundStatus()) {
|
||||||
|
print3ColumnsStringWithAlign("(" + data.refundCount + ")",
|
||||||
|
"REFUND",
|
||||||
|
"- " + PrintUtils.getInstance().getSeparatorNumberFormat(data.refundAmount, isDecimalEnabled),
|
||||||
|
fontNormal, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dotBreak();
|
dotBreak();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user