Compare commits

..

7 Commits

Author SHA1 Message Date
moon
ee3d6a74e1 duel settlement detail 2026-07-12 21:14:59 +06:30
moon
5ecaf4abcc duel settlement 2026-07-12 20:24:57 +06:30
moon
05eca7560b remove select settlement 2026-07-12 14:41:12 +06:30
moon
8c85699c5f manual settlement completed 2026-07-09 17:08:09 +06:30
moon
aad5652988 settlement receipt changed 2026-07-09 16:39:29 +06:30
moon
9e119e7c7e combined settlement receipt 2026-07-09 16:25:52 +06:30
moon
808e87b2f9 both settle 2026-07-09 15:04:49 +06:30
16 changed files with 315 additions and 43 deletions

View File

@ -14,8 +14,8 @@ android {
applicationId "com.utsmm.kbz"
minSdk 24
targetSdk 33
versionCode 41
versionName "2.36"
versionCode 47
versionName "2.38"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

View File

@ -911,16 +911,6 @@ public class MainFragment extends DataBindingFragment {
}
private void generateMockQR() {
String transDate = "24/12/25";
String transTime = "12:06:30";
TradeData tradeData = MockData.getInstance().generateMockDataWithTime(TransactionsType.MMQR, 1, transDate, transTime);
PayDetail payDetail = tradeData.getPayDetail();
sharedViewModel.insertPayDetail(payDetail);
LogUtil.d(TAG, "------------------- Inserted Mocked Data ------------------");
LogUtil.d(TAG, "trans date : " + payDetail.getTransDate() + "- Trans Time: " + payDetail.getTransTime());
}
public class ClickEvent {

View File

@ -40,6 +40,7 @@ import com.utsmyanmar.paylibs.batch_upload.BatchUploadProcess;
import com.utsmyanmar.paylibs.isobuilder.ISOMode;
import com.utsmyanmar.paylibs.isobuilder.builderx.ISOMsgX;
import com.utsmyanmar.paylibs.isobuilder.builderx.ISOVersion;
import com.utsmyanmar.paylibs.model.CardSettleData;
import com.utsmyanmar.paylibs.model.MsgField;
import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.model.QRSettleData;
@ -257,6 +258,7 @@ public class AutoSettleService extends Service {
SettleData settleData = new SettleData(
saleCount, saleAmount, preCount, preAmount, refundCount, refundAmount, caCount, caAmount);
payDetail.setSettleDataObj(settleData);
payDetail.setCardSettleData(CardSettleData.convertFromPayDetail(list));
long totalAmount = saleAmount + preAmount + refundAmount + caAmount;
String settlementData;

View File

@ -184,7 +184,7 @@ public class InputPasswordFragment extends DataBindingFragment implements DataBi
break;
case SETTLEMENT:
inputPasswordViewModel.passwordType.setValue(InputPasswordType.SETTLEMENT);
routeId = R.id.action_inputPasswordFragment_to_selectSettlementFragment;
routeId = R.id.action_inputPasswordFragment_to_settlementTransactionFragment;
break;
case SETTING:
inputPasswordViewModel.passwordType.setValue(InputPasswordType.SETTING);

View File

@ -494,8 +494,12 @@ public class SharedViewModel extends ViewModel {
if (payDetail.getValue() == null) return;
if (payDetails.getValue() != null && !payDetails.getValue().isEmpty()) {
PrintXReceipt.getInstance().printSmileSettlementReport(payDetail.getValue(), QRSettleData.convertFromPayDetail(payDetails.getValue()), printXStatus);
} else {
PrintXReceipt.getInstance().printSmileSettlementReport(payDetail.getValue(), printXStatus);
}
}
private void startPrintProcessQRSettlement(PrintXStatus printXStatus) {

View File

@ -24,6 +24,8 @@ import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
import com.utsmyanmar.paylibs.utils.enums.CurrencyType;
import com.utsmyanmar.paylibs.utils.enums.HostType;
import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType;
import com.utsmm.kbz.util.MockData;
import com.utsmyanmar.paylibs.model.TradeData;
import java.util.ArrayList;
import java.util.Date;
@ -61,6 +63,7 @@ public class QRPayFragment extends DataBindingFragment {
features.add(new QRPayItem("Refund", R.drawable.ic_refund, true));
}
features.add(new QRPayItem("History", R.drawable.ic_history, true));
features.add(new QRPayItem("Mock QR", R.drawable.ic_qr_pay, true));
// List<QRPayItem> features = List.of(
// new QRPayItem("Sale", R.drawable.ic_qr_pay, true),
@ -80,6 +83,9 @@ public class QRPayFragment extends DataBindingFragment {
case "History":
onClickHistory();
break;
case "Mock QR":
onClickMockQR();
break;
}
});
@ -136,6 +142,22 @@ public class QRPayFragment extends DataBindingFragment {
safeNavigateToRouteId();
}
private void onClickMockQR(){
TradeData sale1 = MockData.getInstance().generateMockQRWithAmount(TransactionsType.MMQR, 5000L, "QR001");
sharedViewModel.insertPayDetail(sale1.getPayDetail());
TradeData sale2 = MockData.getInstance().generateMockQRWithAmount(TransactionsType.MMQR, 10000L, "QR002");
sharedViewModel.insertPayDetail(sale2.getPayDetail());
TradeData sale3 = MockData.getInstance().generateMockQRWithAmount(TransactionsType.MMQR, 3500L, "QR003");
sharedViewModel.insertPayDetail(sale3.getPayDetail());
TradeData refund1 = MockData.getInstance().generateMockQRWithAmount(TransactionsType.MMQR_REFUND, 2000L, "QR004");
sharedViewModel.insertPayDetail(refund1.getPayDetail());
showSingleInfoDialog("Mock QR inserted successfully");
}
private void onClickRefund(){
// sharedViewModel.setTransactionsType(TransactionsType.MMQR_REFUND);
routeId = R.id.action_qrFragment_to_qr_refund_list;

View File

@ -331,7 +331,7 @@ public class QRSettlementTransactionFragment extends DataBindingFragment impleme
sharedViewModel.setAmount(POSUtil.getInstance().getDecimalAmountSeparatorFormat(totalAmount));
sharedViewModel.payDetails.setValue(qrTransactionsList);
sharedViewModel.payDetails.setValue(new ArrayList<>(qrTransactionsList));
sharedViewModel.payDetail.setValue(payDetail);
for (PayDetail pay : qrTransactionsList) {

View File

@ -22,6 +22,7 @@ import com.utsmyanmar.paylibs.model.TradeData;
import com.utsmyanmar.paylibs.print.printx.PrintXStatus;
import com.utsmyanmar.paylibs.sign_on.EchoTestProcess;
import com.utsmyanmar.paylibs.sign_on.SignOnListener;
import com.utsmyanmar.paylibs.utils.LogUtil;
import com.utsmyanmar.paylibs.utils.POSUtil;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
import com.utsmyanmar.paylibs.utils.enums.TransMenu;
@ -31,10 +32,15 @@ import com.utsmyanmar.paylibs.utils.params.Params;
import com.utsmm.kbz.BR;
import com.utsmm.kbz.R;
import com.utsmm.kbz.config.Constants;
import com.utsmyanmar.paylibs.model.QRSettleData;
import com.utsmyanmar.paylibs.model.SettleData;
import com.utsmm.kbz.ui.core_viewmodel.SharedViewModel;
import com.utsmm.kbz.util.Connectivity;
import com.utsmm.kbz.config.data.model.ValidityStatus;
import com.utsmm.kbz.util.ecr.CoreUtils;
import com.utsmm.kbz.util.tms.TMSUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@ -64,6 +70,16 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
private final CurrencyBucket mmkBucket = new CurrencyBucket();
private final CurrencyBucket usdBucket = new CurrencyBucket();
private List<PayDetail> cardTransactionsList = new ArrayList<>();
private final ArrayList<PayDetail> qrTransactionsList = new ArrayList<>();
private final ArrayList<PayDetail> qrTransListAll = new ArrayList<>();
private int qrSaleCount = 0;
private long qrSaleAmount = 0;
private int qrRefundCount = 0;
private long qrRefundAmount = 0;
private int qrCount = 0;
private long qrTotalAmount = 0;
@Override
protected void initViewModel() {
settlementViewModel = getFragmentScopeViewModel(SettlementViewModel.class);
@ -100,6 +116,16 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
public void onResume() {
super.onResume();
if(sharedViewModel.getTransMenu().getValue() == TransMenu.SETTLEMENT) {
if (TMSUtil.getInstance().checkParams().isStatus() == ValidityStatus.FAILURE) {
showDeclineDialog(getResourceString(R.string.txt_please_download_config)+"\n"+TMSUtil.getInstance().checkParams().getMessage());
return;
} else if (!Connectivity.isConnectedWifi(getContext()) && !Connectivity.isConnectedMobile(getContext())) {
showSingleInfoDialog(getResourceString(R.string.txt_please_enable_internet));
return;
}
}
boolean printerDisabled = !SystemParamsOperation.getInstance().getPrinterEnabled();
sharedViewModel.printerDisabled.setValue(printerDisabled);
@ -231,6 +257,7 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
settlementViewModel.getSettlementPOS().observe(getViewLifecycleOwner(), payDetails -> {
resetSettlementCounters();
if(payDetails != null && !payDetails.isEmpty()) {
cardTransactionsList = payDetails;
for(PayDetail payDetail:payDetails) {
int transType = payDetail.getTransactionType();
@ -278,6 +305,45 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
}
});
managementViewModel.getTransactionHistory().observe(getViewLifecycleOwner(), payDetailList -> {
if (payDetailList != null) {
qrTransactionsList.clear();
qrTransListAll.clear();
qrSaleCount = 0;
qrSaleAmount = 0;
qrRefundCount = 0;
qrRefundAmount = 0;
qrTotalAmount = 0;
qrCount = 0;
try {
for (PayDetail payDetail : payDetailList) {
if ((payDetail.getTransactionType() == TransactionsType.MMQR.value
|| payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value)
&& payDetail.getQrTransStatus() == 1) {
if (payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
qrRefundCount++;
qrRefundAmount += payDetail.getAmount();
qrTotalAmount -= payDetail.getAmount();
} else {
qrSaleCount++;
qrSaleAmount += payDetail.getAmount();
qrTotalAmount += payDetail.getAmount();
}
qrTransactionsList.add(payDetail);
qrCount++;
} else if (payDetail.getTransactionType() == TransactionsType.MMQR.value
|| payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
qrTransListAll.add(payDetail);
}
}
} catch (IllegalStateException e) {
LogUtil.e("SettlementTransactionFragment", "QR: Database cursor error - " + e);
}
}
});
settlementViewModel.getDeleteTrans().observe(getViewLifecycleOwner(), new Observer<List<PayDetail>>() {
@Override
public void onChanged(List<PayDetail> payDetails) {
@ -533,11 +599,48 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
}
private void updateData() {
sharedViewModel.payDetail.setValue(settlementViewModel.getPayDetail());
PayDetail payDetail = settlementViewModel.getPayDetail();
if (cardTransactionsList != null && !cardTransactionsList.isEmpty()) {
payDetail.setCardSettleData(CardSettleData.convertFromPayDetail(cardTransactionsList));
}
sharedViewModel.payDetail.setValue(payDetail);
EReceiptRequest request = EReceiptUtil.getInstance().generateMPUReceipt(sharedViewModel.payDetail.getValue());
sharedViewModel.pushReceipt(request);
settleQr();
}
private void settleQr() {
if (qrTransactionsList.isEmpty()) {
return;
}
TradeData tradeData = Params.newTrade(false);
PayDetail payDetail = tradeData.getPayDetail();
SettleData settleData = new SettleData(qrSaleCount, qrSaleAmount, 0, 0L, qrRefundCount, qrRefundAmount, 0, 0L);
payDetail.setSettleDataObj(settleData);
payDetail.setTransactionType(TransactionsType.MMQR_SETTLEMENT.value);
payDetail.setTransType(TransactionsType.MMQR_SETTLEMENT.name);
payDetail.setAmount(qrTotalAmount);
payDetail.setTradeAnswerCode("000");
payDetail.setBatchNo(SystemParamsOperation.getInstance().getCurrentBatchNum());
payDetail.setQrSettleData(QRSettleData.convertFromPayDetail(qrTransactionsList));
if (sharedViewModel.getTransMenu().getValue() != TransMenu.LAST_SETTLEMENT) {
sharedViewModel.insertPayDetail(payDetail);
}
sharedViewModel.payDetails.setValue(new ArrayList<>(qrTransactionsList));
for (PayDetail pay : qrTransactionsList) {
settlementViewModel.deletePayDetail(pay);
}
for (PayDetail pay : qrTransListAll) {
settlementViewModel.deletePayDetail(pay);
}
}
@Override

View File

@ -74,32 +74,36 @@ public class SettlementViewModel extends ViewModel {
public SingleLiveEvent<TransactionStatus> resultString = new SingleLiveEvent<>();
public SingleLiveEvent<Integer> sale_count = new SingleLiveEvent<>();
public SingleLiveEvent<Long> sale_amount = new SingleLiveEvent<>();
public SingleLiveEvent<String> sale_breakdown = new SingleLiveEvent<>();
public MutableLiveData<Integer> sale_count = new MutableLiveData<>();
public MutableLiveData<Long> sale_amount = new MutableLiveData<>();
public MutableLiveData<String> sale_breakdown = new MutableLiveData<>();
//qr
public MutableLiveData<Integer> qr_sale_count = new MutableLiveData<>();
public MutableLiveData<Long> qr_sale_amount = new MutableLiveData<>();
public MutableLiveData<String> qr_sale_breakdown = new MutableLiveData<>();
public SingleLiveEvent<Integer> void_count = new SingleLiveEvent<>();
public SingleLiveEvent<Long> void_amount = new SingleLiveEvent<>();
public SingleLiveEvent<String> void_breakdown = new SingleLiveEvent<>();
public MutableLiveData<Integer> void_count = new MutableLiveData<>();
public MutableLiveData<Long> void_amount = new MutableLiveData<>();
public MutableLiveData<String> void_breakdown = new MutableLiveData<>();
public SingleLiveEvent<Integer> pre_count = new SingleLiveEvent<>();
public SingleLiveEvent<Long> pre_amount = new SingleLiveEvent<>();
public SingleLiveEvent<String> pre_breakdown = new SingleLiveEvent<>();
public MutableLiveData<Integer> pre_count = new MutableLiveData<>();
public MutableLiveData<Long> pre_amount = new MutableLiveData<>();
public MutableLiveData<String> pre_breakdown = new MutableLiveData<>();
public SingleLiveEvent<Integer> refund_count = new SingleLiveEvent<>();
public SingleLiveEvent<Long> refund_amount = new SingleLiveEvent<>();
public SingleLiveEvent<String> refund_breakdown = new SingleLiveEvent<>();
public MutableLiveData<Integer> refund_count = new MutableLiveData<>();
public MutableLiveData<Long> refund_amount = new MutableLiveData<>();
public MutableLiveData<String> refund_breakdown = new MutableLiveData<>();
public SingleLiveEvent<Integer> ca_count = new SingleLiveEvent<>();
public SingleLiveEvent<Long> ca_amount = new SingleLiveEvent<>();
public SingleLiveEvent<String> ca_breakdown = new SingleLiveEvent<>();
public MutableLiveData<Integer> ca_count = new MutableLiveData<>();
public MutableLiveData<Long> ca_amount = new MutableLiveData<>();
public MutableLiveData<String> ca_breakdown = new MutableLiveData<>();
public SingleLiveEvent<SettlementType> settlementType = new SingleLiveEvent<>();
public MutableLiveData<SettlementType> settlementType = new MutableLiveData<>();
/* check is there settlement transactions or not */
public SingleLiveEvent<Boolean> isNoData = new SingleLiveEvent<>();
public MutableLiveData<Boolean> isNoData = new MutableLiveData<>();
public SingleLiveEvent<Boolean> isSentData = new SingleLiveEvent<>();
public MutableLiveData<Boolean> isSentData = new MutableLiveData<>();
public MutableLiveData<Integer> btmLayout = new MutableLiveData<>(0);

View File

@ -342,6 +342,71 @@ public class MockData {
return tradeData;
}
public TradeData generateMockQRWithAmount(TransactionsType transType, long amount, String qrTransId) {
String strDate = SystemDateTime.getMMDD();
String strTime = SystemDateTime.getHHmmss();
String strDateAndTime = SystemDateTime.getMMDDhhmmss();
String strDateTime = SystemDateTime.getYYMMDDhhmmss();
String strYearMonthDay = SystemDateTime.getYYMMDD();
String strTransDate = SystemDateTime.getTodayDateFormat();
String strTransTime = SystemDateTime.getTodayTimeFormat();
TradeData tradeData = new TradeData();
PayDetail payDetail = new PayDetail();
CardInfo cardInfo = new CardInfo();
MAGCardInfo magCardInfo = new MAGCardInfo();
ICCardInfo icCardInfo = new ICCardInfo();
magCardInfo.setTrack2Cipher("6234660011092075D22102201112210220110");
cardInfo.setMAGCardInfo(magCardInfo);
cardInfo.setICCardInfo(icCardInfo);
tradeData.setCardInfo(cardInfo);
payDetail.setCardInfo(cardInfo);
payDetail.batchNo = SystemParamsOperation.getInstance().getCurrentBatchNum();
payDetail.voucherNo = SystemParamsOperation.getInstance().getIncrementSerialNum();
payDetail.setMerchantNo(MERCHANT_ID);
payDetail.setMerchantName(MERCHANT_NAME);
payDetail.setTerminalNo(TERMINAL_ID);
payDetail.setCurrencyCode(CURRENCY_CODE);
payDetail.setCardSerialNo("000");
payDetail.setIsFreeSign(true);
payDetail.setIsCanceled(false);
payDetail.transNum = System.currentTimeMillis() / 1000;
payDetail.setOriginalTransDate(SystemDateTime.getMMDD() + SystemDateTime.getYYYY());
payDetail.setTransCVM(TransCVM.NO_CVM);
payDetail.setCardType(1);
payDetail.setTransType(transType.name);
payDetail.setProcessCode(transType.processCode);
payDetail.setAccountType(Constants.WALLET);
payDetail.setTransactionType(transType.value);
payDetail.setInvoiceNo(SystemParamsOperation.getInstance().getIncrementInvoiceNum());
payDetail.setCustomerMobile("kbzpay");
payDetail.setQrTransId(qrTransId);
payDetail.setQrTransStatus(1);
payDetail.setQrReferNo("REF" + qrTransId);
payDetail.setReferNo("REF" + qrTransId);
payDetail.setApprovalCode(qrTransId);
payDetail.setTC("PAY_SUCCESS");
payDetail.setTradeDate(strDate);
payDetail.setTradeTime(strTime);
payDetail.setTradeDateAndTime(strDateAndTime);
payDetail.setTradeDateTime(strDateTime);
payDetail.setSettleDate(strYearMonthDay);
payDetail.setTransDate(strTransDate);
payDetail.setTransTime(strTransTime);
payDetail.setAmount(amount);
tradeData.setPayDetail(payDetail);
return tradeData;
}
public TradeData generateSettlementData() {
int saleCount = 0;
String saleAmount = "1000";

View File

@ -460,7 +460,7 @@ public class TMSSetupsImpl implements TMSSetups{
SystemParamsOperation.getInstance().setRandomPinPad(parseBoolean(data));
} else if (TextUtils.equals(name,"clear_batch_time")) {
SystemParamsOperation.getInstance().setClearBatchTime(data);
SystemParamsOperation.getInstance().setClearBatchTime("21:10");
} else if (TextUtils.equals(name,"alert_sound_enable")) {
SystemParamsOperation.getInstance().setAlertSound(parseBoolean(data));

View File

@ -373,6 +373,12 @@
app:popUpToInclusive="true"
android:id="@+id/action_inputPasswordFragment_to_selectSettlementFragment"
app:destination="@id/selectSettlementFragment" />
<action
app:launchSingleTop="true"
app:popUpTo="@+id/inputPasswordFragment"
app:popUpToInclusive="true"
android:id="@+id/action_inputPasswordFragment_to_settlementTransactionFragment"
app:destination="@id/settlementTransactionFragment" />
<action
app:launchSingleTop="true"
app:popUpTo="@+id/inputPasswordFragment"
@ -715,7 +721,7 @@
app:destination="@id/selectHostFragment" />
<action
android:id="@+id/action_managementFunctionFragment_to_settlementTransactionFragment"
app:destination="@id/selectSettlementFragment" />
app:destination="@id/settlementTransactionFragment" />
<action
android:id="@+id/action_managementFunctionFragment_to_inputTraceFragment"
app:destination="@id/inputTraceFragment" />

View File

@ -213,6 +213,12 @@ public abstract class BaseXPrint {
}
protected void printTransDetailSettlement(PayDetail payDetail) {
List<CardSettleData> cardSettleDataList = payDetail.getCardSettleData();
if (cardSettleDataList != null && !cardSettleDataList.isEmpty()) {
printTransDetailSettlement(payDetail, cardSettleDataList);
return;
}
SettleData settleData = payDetail.getSettleDataObj();
print3ColumnsString("TRX TYPE ", "CNT", "AMOUNT");
print3ColumnsString("SALE ", countStringFormat(settleData.getSaleCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getSaleAmount(), SystemParamsOperation.getInstance().getDecimalEnable()));
@ -231,23 +237,23 @@ public abstract class BaseXPrint {
protected void printTransDetailSettlement(PayDetail payDetail, List<CardSettleData> cardSettleDataList) {
boolean isDecimalEnabled = SystemParamsOperation.getInstance().getDecimalEnable();
lineBreak();
dotBreak();
print2SideStringMargin("CARD TYPE ", "CARD NUMBER");
print2SideStringMargin("EXP DATE ", "INVOICE NUM");
print2SideStringMargin("TRANSACTION ", "AMOUNT");
print2SideStringMargin("APPR CODE ", "DATE/TIME");
lineBreak();
dotBreak();
for (CardSettleData cardSettleData : cardSettleDataList) {
print2SideStringMargin(cardSettleData.getCardType(), PrintUtils.getInstance().maskCardNumberPciDss(cardSettleData.getCardNum()));
print2SideStringMargin("INV NO", cardSettleData.getInvoiceNum());
print2SideStringMargin("**/**", cardSettleData.getInvoiceNum());
String cardCurrency = currencyCodeToText(cardSettleData.getCurrencyCode());
print2SideStringMargin(cardSettleData.getTransType(), cardCurrency + " " + PrintUtils.getInstance().getSeparatorNumberFormat(cardSettleData.getAmount(), isDecimalEnabled));
print2SideStringMargin(cardSettleData.getApprovalCode(), cardSettleData.getTransDate() + " " + cardSettleData.getTransTime());
emptyLine(1);
}
lineBreak();
dotBreak();
SettleData settleData = payDetail.getSettleDataObj();
long totalAmount = settleData.getSaleAmount() + settleData.getPreAuthCompAmount() + settleData.getCashAdvanceAmount()
- settleData.getVoidSaleAmount() - settleData.getRefundAmount();
@ -261,10 +267,51 @@ public abstract class BaseXPrint {
print3ColumnsString("CASH ADV ", countStringFormat(settleData.getCashAdvanceCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getCashAdvanceAmount(), isDecimalEnabled));
print3ColumnsString("REFUND ", countStringFormat(settleData.getRefundCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getRefundAmount(), isDecimalEnabled));
dotBreak();
print3ColumnsString("TOTAL ", "", PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isDecimalEnabled));
emptyLine(2);
print2ColumnsString("TOTAL", PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, isDecimalEnabled));
emptyLine(1);
}
protected void printMMQRReport(List<QRSettleData> qrList) {
if (qrList == null || qrList.isEmpty()) return;
long saleTotal = 0;
long refundTotal = 0;
emptyLine(1);
printer.appendPrnStr("MMQR REPORT",fontLarge, AlignEnum.CENTER, true);
dotBreak();
for (QRSettleData data : qrList) {
if (data.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
refundTotal += data.getAmount();
} else {
saleTotal += data.getAmount();
}
printString("Trans Id:" + data.getTransId());
printString("Status :" + data.getStatus());
printString("Date :" + data.getDate());
printString("Time :" + data.getTime());
printString("Amount : MMK "
+ (data.getTransactionType() == TransactionsType.MMQR_REFUND.value ? "-" : "")
+ PrintUtils.getInstance().getSeparatorOnlyNumberFormat(data.getAmount()));
emptyLine(1);
}
long grandTotal = saleTotal - refundTotal;
dotBreak();
// printer.appendPrnStr("Refund Total:MMK", "- " + PrintUtils.getInstance().getSeparatorOnlyNumberFormat(refundTotal) + " ", fontNormal, false);
print2ColumnsString("Refund Total:MMK", "-" + PrintUtils.getInstance().getSeparatorOnlyNumberFormat(refundTotal));
dotBreak();
// printer.appendPrnStr("Sale Total :MMK", PrintUtils.getInstance().getSeparatorOnlyNumberFormat(saleTotal) + " ", fontNormal, false);
print2ColumnsString("SALE TOTAL :MMK", PrintUtils.getInstance().getSeparatorOnlyNumberFormat(saleTotal));
dotBreak();
// printer.appendPrnStr("Total :MMK", PrintUtils.getInstance().getSeparatorOnlyNumberFormat(grandTotal) + " ", fontNormal, false);
print2ColumnsString("TOTAL : MMK", PrintUtils.getInstance().getSeparatorOnlyNumberFormat(grandTotal));
dashBreakEnding();
emptyLine(1);
}
private void printSettlementCurrencySection(String currencyLabel, CurrencySettlementSummary summary) {
@ -372,7 +419,7 @@ public abstract class BaseXPrint {
protected void printTransFooterForSettlement() {
String receiptFooter = SystemParamsOperation.getInstance().getReceiptFooter();
String finalVersion = SystemParamsOperation.getInstance().getFinalVersion();
printer.appendPrnStr("***** SETTLEMENT CONFIRM *****", fontNormal, AlignEnum.CENTER, false);
printer.appendPrnStr("****SETTLEMENT CONFIRMED****", fontNormal, AlignEnum.CENTER, false);
printer.appendPrnStr(receiptFooter, fontNormal, AlignEnum.CENTER, false);
}

View File

@ -24,6 +24,8 @@ public interface PrintX {
void printSmileSettlementReport(PayDetail payDetail,PrintXStatus printXStatus);
void printSmileSettlementReport(PayDetail payDetail, List<QRSettleData> qrList, PrintXStatus printXStatus);
void printQRSettlementReport(PayDetail payDetail, List<QRSettleData> list, PrintXStatus printXStatus);
void printDetailReport(PayDetail payDetail, List<PayDetail> lists, HostType hostType,PrintXStatus printXStatus);

View File

@ -203,6 +203,29 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
}
}
@Override
public void printSmileSettlementReport(PayDetail payDetail, List<QRSettleData> qrList, PrintXStatus printXStatus) {
this.callbackStatus = printXStatus;
try {
LogUtil.d(TAG, payDetail.getSettleDataObj().toString());
setHeight(0x12);
printLogo();
printMerchantHeader();
printTransHeader(payDetail);
printTransDetailSettlement(payDetail);
printMMQRReport(qrList);
printTransFooterForSettlement();
emptyLine(1);
startPrintNex();
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void printQRSettlementReport(PayDetail payDetail, List<QRSettleData> list, PrintXStatus printXStatus) {
this.callbackStatus = printXStatus;

View File

@ -36,6 +36,10 @@ public class PrintXReceipt {
printX.printSmileSettlementReport(payDetail,printXStatus);
}
public void printSmileSettlementReport(PayDetail payDetail, List<QRSettleData> qrList, PrintXStatus printXStatus) {
printX.printSmileSettlementReport(payDetail, qrList, printXStatus);
}
public void printQRSettlementReport(PayDetail payDetail, List<QRSettleData> lists, PrintXStatus printXStatus) {
printX.printQRSettlementReport(payDetail,lists,printXStatus);
}