Added QR Last Settlement - final

This commit is contained in:
kizzy 2025-12-30 03:09:33 +07:00
parent 4c77b376f0
commit 14fe578bce
19 changed files with 289 additions and 131 deletions

View File

@ -39,6 +39,7 @@ import com.utsmyanmar.paylibs.isobuilder.builderx.ISOMsgX;
import com.utsmyanmar.paylibs.isobuilder.builderx.ISOVersion;
import com.utsmyanmar.paylibs.model.MsgField;
import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.model.QRSettleData;
import com.utsmyanmar.paylibs.model.SettleData;
import com.utsmyanmar.paylibs.model.TradeData;
import com.utsmyanmar.paylibs.network.ISOCallback;
@ -388,7 +389,7 @@ public class AutoSettleService extends Service {
payDetail.setAmount(totalAmount);
payDetail.setTradeAnswerCode("000");
payDetail.setBatchNo(SystemParamsOperation.getInstance().getCurrentBatchNum());
payDetail.setQrSettleData(QRSettleData.convertFromPayDetail(qrTransactionsList));
// Insert QR settlement record
repository.insertPayDetail(payDetail);
@ -404,7 +405,7 @@ public class AutoSettleService extends Service {
// Push e-receipt data using repository directly
try {
EReceiptRequest request = EReceiptUtil.getInstance().generateQRSettlement(payDetail, qrTransactionsList);
EReceiptRequest request = EReceiptUtil.getInstance().generateQRSettlement(payDetail, QRSettleData.convertFromPayDetail(qrTransactionsList));
sendEReceipt(request);
LogUtil.d(TAG, "QR Settlement e-receipt data prepared and sent");
} catch (Exception e) {

View File

@ -17,6 +17,7 @@ import com.utsmyanmar.baselib.util.TerminalUtil;
import com.utsmyanmar.ecr.data.TransType;
import com.utsmyanmar.ecr.data.model.Transactions;
import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.model.QRSettleData;
import com.utsmyanmar.paylibs.print.printx.PrintXReceipt;
import com.utsmyanmar.paylibs.print.printx.PrintXStatus;
import com.utsmyanmar.paylibs.system.SingleLiveEvent;
@ -418,7 +419,7 @@ public class SharedViewModel extends ViewModel {
if(payDetail.getValue() == null && payDetails.getValue() == null) return;
PrintXReceipt.getInstance().printQRSettlementReport(payDetail.getValue(),payDetails.getValue(), printXStatus);
PrintXReceipt.getInstance().printQRSettlementReport(payDetail.getValue(), QRSettleData.convertFromPayDetail(payDetails.getValue()), printXStatus);
}

View File

@ -13,6 +13,7 @@ import com.utsmyanmar.baselib.fragment.DataBindingFragment;
import com.utsmyanmar.baselib.util.DataBindingConfig;
import com.utsmyanmar.baselib.util.DialogCallback;
import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.model.QRSettleData;
import com.utsmyanmar.paylibs.print.PrintHelper;
import com.utsmyanmar.paylibs.print.PrintReceipt;
import com.utsmyanmar.paylibs.print.printx.PrintXReceipt;
@ -26,6 +27,7 @@ import com.utsmm.kbz.ui.core_viewmodel.TransProcessViewModel;
import java.util.List;
import com.utsmyanmar.paylibs.utils.LogUtil;
import com.utsmyanmar.paylibs.utils.enums.HostType;
public class ReprintReceiptFragment extends DataBindingFragment {
@ -108,7 +110,7 @@ public class ReprintReceiptFragment extends DataBindingFragment {
private void updateUIPrintReceiptFailure(PayDetail payDetail) {
sharedViewModel.printReceiptMsg.postValue(getString(R.string.txt_printing_settlement_report_failure));
sharedViewModel.reprintBtnLayout.postValue(0);
ReprintReceiptFragment.this.payDetail = payDetail;
// ReprintReceiptFragment.this.payDetail = payDetail;
}
private void checkPaperExists(PayDetail payDetail) {
@ -142,28 +144,43 @@ public class ReprintReceiptFragment extends DataBindingFragment {
}
private void observeLastSettlement() {
managementViewModel.getLastSettlement(SystemParamsOperation.getInstance().getCurrentSerialNum()).observe(getViewLifecycleOwner(), new Observer<List<PayDetail>>() {
@Override
public void onChanged(List<PayDetail> payDetails) {
if (payDetails != null) {
if (payDetails.size() != 0) {
PayDetail payDetail = payDetails.get(payDetails.size() - 1);
payDetail = sharedViewModel.payDetail.getValue();
payDetail.setTransType( payDetail.getTransType()+"(REPRINT)");
checkPaperExists(payDetail);
} else {
showSingleInfoDialog(getString(R.string.txt_no_trans_to_print));
navigateMainScreen();
}
}
}
});
// managementViewModel.payDetail.observe(getViewLifecycleOwner(), new Observer<PayDetail>() {
// @Override
// public void onChanged(PayDetail pay) {
// if (pay != null) {
//
// payDetail = pay;
//
//
//
//
//
// } else {
// showSingleInfoDialog(getString(R.string.txt_no_trans_to_print));
// navigateMainScreen();
// }
// }
// });
}
private void printReceipt(PayDetail payDetail) {
PrintXReceipt.getInstance().printSmileSettlementReport(payDetail, new PrintXStatus() {
if(sharedViewModel.hostType.getValue() == HostType.QR) {
PrintXReceipt.getInstance().printQRSettlementReport(payDetail, payDetail.getQrSettleData(), printXStatus);
} else {
PrintXReceipt.getInstance().printSmileSettlementReport(payDetail, printXStatus);
}
}
private PrintXStatus printXStatus = new PrintXStatus() {
@Override
public void onSuccess() {
delayFunctionCall(ReprintReceiptFragment.this::navigateMainScreen);
@ -173,10 +190,9 @@ public class ReprintReceiptFragment extends DataBindingFragment {
public void onFailure() {
updateUIPrintReceiptFailure(payDetail);
checkPaperExists(payDetail);
}
});
// checkPaperExists(payDetail);
}
};
@SuppressWarnings("ConstantConditions")

View File

@ -174,7 +174,7 @@ public class SelectHostFragment extends DataBindingFragment implements DataBindi
}
private void checkQRButtonVisibility() {
if(sharedViewModel.getTransMenu().getValue() == TransMenu.VOID || sharedViewModel.getTransMenu().getValue() == TransMenu.PRE_AUTH_COMPLETE_VOID || sharedViewModel.getTransMenu().getValue() == TransMenu.REVERSAL || sharedViewModel.getTransMenu().getValue() == TransMenu.PRE_AUTH_FULL_VOID || sharedViewModel.getTransMenu().getValue() == TransMenu.LAST_SETTLEMENT) {
if(sharedViewModel.getTransMenu().getValue() == TransMenu.VOID || sharedViewModel.getTransMenu().getValue() == TransMenu.PRE_AUTH_COMPLETE_VOID || sharedViewModel.getTransMenu().getValue() == TransMenu.REVERSAL || sharedViewModel.getTransMenu().getValue() == TransMenu.PRE_AUTH_FULL_VOID ) {
sharedViewModel.qrPayVisibility.setValue(8);
} else {
sharedViewModel.qrPayVisibility.setValue(0);
@ -272,11 +272,23 @@ public class SelectHostFragment extends DataBindingFragment implements DataBindi
if (payDetails != null) {
if (!payDetails.isEmpty()) {
managementViewModel.payDetails.setValue(payDetails);
PayDetail payDetail = payDetails.get(payDetails.size() - 1);
if(sharedViewModel.hostType.getValue() == HostType.QR && payDetail.getTransactionType() == TransactionsType.MMQR_SETTLEMENT.value) {
routeId = R.id.action_selectHostFragment_to_QRSettlementTransactionFragment;
} else if(sharedViewModel.hostType.getValue() != HostType.MPU && payDetail.getTransactionType() == TransactionsType.SETTLEMENT.value) {
routeId = R.id.action_selectHostFragment_to_settlementTransactionFragment;
} else {
showSingleInfoDialog(getString(R.string.txt_no_trans_to_print));
routeId = R.id.action_selectHostFragment_to_nav_main;
}
} else {
showSingleInfoDialog(getString(R.string.txt_no_trans_to_print));
routeId = R.id.action_selectHostFragment_to_nav_main;
}
safeNavigateToRouteId();
} else {
showSingleInfoDialog(getString(R.string.txt_no_trans_to_print));

View File

@ -13,6 +13,7 @@ import com.utsmyanmar.baselib.fragment.DataBindingFragment;
import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptRequest;
import com.utsmyanmar.baselib.util.DataBindingConfig;
import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.model.QRSettleData;
import com.utsmyanmar.paylibs.model.SettleData;
import com.utsmyanmar.paylibs.model.TradeData;
import com.utsmyanmar.paylibs.utils.LogUtil;
@ -205,43 +206,46 @@ public class QRSettlementTransactionFragment extends DataBindingFragment impleme
private void observeQRLastSettlementTransactions() {
List<PayDetail> payDetailList = managementViewModel.payDetails.getValue();
if( payDetailList != null) {
qrTransactionsList.clear();
qrTransListAll.clear();
PayDetail payDetail = payDetailList.get(payDetailList.size() - 1);
int qrSaleCount = 0;
long qrSaleAmount = 0;
int qrRefundCount = 0;
long qrRefundAmount = 0;
count = 0;
totalAmount = 0;
try {
for (PayDetail payDetail : payDetailList) {
// Filter for QR transactions only
if ((payDetail.getTransactionType() == TransactionsType.MMQR.value
|| payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value)
&& payDetail.getQrTransStatus() == 1
&& POSUtil.getInstance().getYesterdayDate().compareTo(POSUtil.getInstance().getDateByString(payDetail.transDate)) < 1) {
SettleData settleData = payDetail.getSettleDataObj();
qrSaleCount = settleData.getSaleCount();
qrSaleAmount = settleData.getSaleAmount();
boolean isNeedMinusSign = payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value;
qrTransactionsList.add(payDetail);
count++;
if (isNeedMinusSign) {
totalAmount -= payDetail.getAmount();
} else {
totalAmount += payDetail.getAmount();
}
}
}
} catch (IllegalStateException e) {
LogUtil.e(TAG,"QRSettlement : Database cursor error in last settlement - likely due to large data size:"+ e);
showEmptyDataView();
settlementViewModel.isNoData.setValue(true);
return;
}
qrRefundAmount = settleData.getRefundAmount();
qrRefundCount = settleData.getRefundCount();
totalAmount = qrSaleAmount - qrRefundAmount;
count = qrSaleCount + qrRefundCount;
settlementViewModel.sale_count.setValue(qrSaleCount);
settlementViewModel.sale_amount.setValue(qrSaleAmount);
settlementViewModel.refund_count.setValue(qrRefundCount);
settlementViewModel.refund_amount.setValue(qrRefundAmount);
managementViewModel.totalAmountDR.setValue(totalAmount);
managementViewModel.trnxCountDR.setValue(String.valueOf(count));
sharedViewModel.setAmount(POSUtil.getInstance().getDecimalAmountSeparatorFormat(totalAmount));
sharedViewModel.payDetail.setValue(payDetail);
if (qrTransactionsList.isEmpty()) {
showEmptyDataView();
settlementViewModel.isNoData.setValue(true);
} else {
showDataView();
settlementViewModel.isNoData.setValue(false);
}
// if (qrTransactionsList.isEmpty()) {
// showEmptyDataView();
// settlementViewModel.isNoData.setValue(true);
// } else {
// showDataView();
// settlementViewModel.isNoData.setValue(false);
// }
} else {
showEmptyDataView();
@ -310,6 +314,7 @@ public class QRSettlementTransactionFragment extends DataBindingFragment impleme
payDetail.setAmount(totalAmount);
payDetail.setTradeAnswerCode("000");
payDetail.setBatchNo(SystemParamsOperation.getInstance().getCurrentBatchNum());
payDetail.setQrSettleData(QRSettleData.convertFromPayDetail(qrTransactionsList));
if(sharedViewModel.getTransMenu().getValue() != TransMenu.LAST_SETTLEMENT) {
sharedViewModel.insertPayDetail(payDetail);
@ -331,7 +336,7 @@ public class QRSettlementTransactionFragment extends DataBindingFragment impleme
}
private void updateData() {
// EReceiptRequest request = EReceiptUtil.getInstance().generateMPUReceipt(sharedViewModel.payDetail.getValue());
EReceiptRequest request = EReceiptUtil.getInstance().generateQRSettlement(sharedViewModel.payDetail.getValue(), qrTransactionsList);
EReceiptRequest request = EReceiptUtil.getInstance().generateQRSettlement(sharedViewModel.payDetail.getValue(), QRSettleData.convertFromPayDetail(qrTransactionsList));
sharedViewModel.pushReceipt(request);
}

View File

@ -8,6 +8,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import com.utsmm.kbz.ui.management.ManagementViewModel;
import com.utsmm.kbz.util.EReceiptUtil;
import com.utsmyanmar.baselib.fragment.DataBindingFragment;
import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptRequest;
@ -39,6 +40,8 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
private SettlementViewModel settlementViewModel;
private SharedViewModel sharedViewModel;
private ManagementViewModel managementViewModel;
private int routeId;
int saleCount = 0;
@ -54,12 +57,14 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
protected void initViewModel() {
settlementViewModel = getFragmentScopeViewModel(SettlementViewModel.class);
sharedViewModel = getFragmentScopeViewModel(SharedViewModel.class);
managementViewModel = getFragmentScopeViewModel(ManagementViewModel.class);
}
@Override
protected DataBindingConfig getDataBindingConfig() {
return new DataBindingConfig(R.layout.fragment_view_batch_screen, BR.settleViewModel,settlementViewModel)
.addBindingParam(BR.sharedViewModel,sharedViewModel)
.addBindingParam(BR.managementViewModel,managementViewModel)
.addBindingParam(BR.click,new ClickEvent());
}
@ -157,6 +162,9 @@ public class SettlementTransactionFragment extends DataBindingFragment implement
setSettlementViewModelData(saleCount, saleAmount, preCount, preAmount, refundCount, refundAmount, caCount, caAmount);
settlementViewModel.setPayDetails(payDetails);
managementViewModel.payDetail.setValue(payDetail);
}
} else {

View File

@ -6,6 +6,7 @@ import com.utsmm.kbz.util.tms.TMSUtil;
import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptRequest;
import com.utsmyanmar.baselib.network.model.e_receipt.Transaction;
import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.model.QRSettleData;
import com.utsmyanmar.paylibs.model.SettleData;
import com.utsmyanmar.paylibs.system.BaseErrorCode;
import com.utsmyanmar.paylibs.utils.POSUtil;
@ -228,7 +229,7 @@ public class EReceiptUtil {
return request;
}
public EReceiptRequest generateQRSettlement(PayDetail payDetail, List<PayDetail> transactions) {
public EReceiptRequest generateQRSettlement(PayDetail payDetail, List<QRSettleData> transactions) {
double realAmount = payDetail.getAmount() / 100.0;
DecimalFormat df = new DecimalFormat("0.00");
@ -278,25 +279,25 @@ public class EReceiptUtil {
return request;
}
private static List<Transaction> buildTransactions(List<PayDetail> payDetails) {
private static List<Transaction> buildTransactions(List<QRSettleData> qrSettleData) {
List<Transaction> list = new ArrayList<>();
for (PayDetail pay : payDetails) {
for (QRSettleData pay : qrSettleData) {
double realAmount = pay.getAmount() / 100.0;
DecimalFormat df = new DecimalFormat("0.00");
String amount = df.format(realAmount);
Transaction txn = new Transaction();
txn.setTran_id(pay.getQrTransId()); // or ref no
txn.setTran_id(pay.getTransId()); // or ref no
txn.setStatus(
pay.getTransactionType() == TransactionsType.MMQR_REFUND.value
? "REFUND_SUCCESS"
: "PAY_SUCCESS"
);
txn.setDate(pay.getTransDate()); // yyyyMMdd
txn.setTime(pay.getTransTime()); // HHmmss
txn.setDate(pay.getDate()); // yyyyMMdd
txn.setTime(pay.getTime()); // HHmmss
txn.setAmount(amount);
list.add(txn);

View File

@ -84,21 +84,11 @@
</LinearLayout>
<!-- Status Indicator -->
<TextView
android:layout_width="24dp"
android:layout_height="24dp"
android:text="✓"
android:textColor="@color/white"
android:textSize="16sp"
android:gravity="center"
android:alpha="0.8" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- Transaction Summary Area - EMPHASIZED FOR BETTER VISIBILITY -->
<TextView
android:id="@+id/summaryTitle"
android:layout_width="wrap_content"
@ -212,11 +202,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SETTLEMENT (REPRINT)"
android:textColor="@color/white"
android:textColor="@color/black"
android:textSize="16sp"
android:textStyle="bold"
android:fontFamily="@font/rubik_medium"
android:background="@color/colorPrimary"
android:paddingHorizontal="12dp"
android:paddingVertical="6dp" />
@ -255,38 +244,6 @@
</LinearLayout>
<!-- Transaction ID Section -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Trans ID"
android:textColor="@android:color/darker_gray"
android:textSize="14sp"
android:fontFamily="@font/rubik_regular" />
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="000123"
android:textColor="@color/colorTextTitle"
android:textSize="14sp"
android:fontFamily="@font/rubik_medium"
android:fontFeatureSettings="mono"
tools:text="123456" />
</LinearLayout>
</LinearLayout>

View File

@ -10,6 +10,9 @@
<variable
name="sharedViewModel"
type="com.utsmm.kbz.ui.core_viewmodel.SharedViewModel" />
<variable
name="managementViewModel"
type="com.utsmm.kbz.ui.management.ManagementViewModel" />
<variable
name="click"
type="com.utsmm.kbz.ui.settlement.SettlementTransactionFragment.ClickEvent" />

View File

@ -6,6 +6,7 @@ import androidx.room.RoomDatabase;
import androidx.room.TypeConverters;
import com.utsmyanmar.baselib.db.converter.CardSchemeConverter;
import com.utsmyanmar.baselib.db.converter.QRSettleDataConverter;
import com.utsmyanmar.baselib.db.converter.SettleDataConverter;
import com.utsmyanmar.baselib.db.converter.TransCVMConverter;
import com.utsmyanmar.baselib.db.dao.BinDao;
@ -43,10 +44,10 @@ import com.utsmyanmar.paylibs.model.PayDetail;
MPUCtlsEntity.class,
BinEntity.class
},
version = 11,
version = 12,
exportSchema = false
)
@TypeConverters({SettleDataConverter.class, TransCVMConverter.class, CardSchemeConverter.class})
@TypeConverters({SettleDataConverter.class, TransCVMConverter.class, CardSchemeConverter.class, QRSettleDataConverter.class})
public abstract class AppDatabase extends RoomDatabase {
public abstract PayDetailDao payDetailDao();

View File

@ -0,0 +1,31 @@
package com.utsmyanmar.baselib.db.converter;
import androidx.room.TypeConverter;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.utsmyanmar.paylibs.model.QRSettleData;
import java.lang.reflect.Type;
import java.util.List;
public class QRSettleDataConverter {
private static final Gson gson = new Gson();
@TypeConverter
public static List<QRSettleData> fromString(String value) {
if (value == null || value.isEmpty()) {
return null;
}
Type listType = new TypeToken<List<QRSettleData>>(){}.getType();
return gson.fromJson(value, listType);
}
@TypeConverter
public static String toString(List<QRSettleData> qrSettleDataList) {
if (qrSettleDataList == null) {
return null;
}
return gson.toJson(qrSettleDataList);
}
}

View File

@ -124,7 +124,7 @@ public interface PayDetailDao {
@Query(("SELECT * FROM paydetail WHERE transactionType = 3 AND voucherNo IN(:voucherNo)"))
LiveData<PayDetail> checkLastSettlement(String voucherNo);
@Query("SELECT * FROM paydetail WHERE transactionType = 3 AND voucherNo <= :voucherNo")
@Query("SELECT * FROM paydetail WHERE transactionType = 3 OR transactionType = 35 AND voucherNo <= :voucherNo")
LiveData<List<PayDetail>> getLastSettlement(String voucherNo);
@Query("SELECT * FROM paydetail WHERE transactionType = 35 AND voucherNo <= :voucherNo")

View File

@ -307,6 +307,16 @@ public class DatabaseModule {
}
};
static final Migration MIGRATION_11_12 = new Migration(11, 12) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE paydetail "
+ " ADD COLUMN qrSettleData TEXT");
}
};
@Provides
@Singleton
@ -317,6 +327,7 @@ public class DatabaseModule {
.addMigrations(MIGRATION_8_9)
.addMigrations(MIGRATION_9_10)
.addMigrations(MIGRATION_10_11)
.addMigrations(MIGRATION_11_12)
.allowMainThreadQueries()
.addCallback(new RoomDatabase.Callback() {
@Override

View File

@ -10,6 +10,7 @@ import androidx.room.PrimaryKey;
import com.utsmyanmar.paylibs.model.enums.TransCVM;
import java.io.Serializable;
import java.util.List;
@SuppressWarnings("serial")
@Entity(tableName = "paydetail")
@ -161,6 +162,7 @@ public class PayDetail implements Serializable {
public String transId = "";
public SettleData settleDataObj;
public TransCVM transCVM;
public List<QRSettleData> qrSettleData;
@ -185,7 +187,7 @@ public class PayDetail implements Serializable {
boolean isPrinted, boolean eSignIsUploaded, boolean isFreePWD, boolean isFreeSign, String tempKSN, String tempMerchantNo,
String tempMerchantName, String tempTerminalNo, long transNum, String customOrderNo, String approvalCode, boolean isSettle,
String settleData, String settleList, String otherCardNo, String tradeDateAndTime, String tradeDateTime, String hostName,
String transDate, String transTime, String invoiceNo, String transId, String qrReferNo, String customerMobile, SettleData settleDataObj,boolean isSettlementEnabled,TransCVM transCVM) {
String transDate, String transTime, String invoiceNo, String transId, String qrReferNo, String customerMobile, SettleData settleDataObj,boolean isSettlementEnabled,TransCVM transCVM,List<QRSettleData> qrSettleData) {
this.PID = PID;
this.sendBag = sendBag;
this.receiverBag = receiverBag;
@ -299,6 +301,7 @@ public class PayDetail implements Serializable {
this.customerMobile = customerMobile;
this.settleDataObj = settleDataObj;
this.isSettlementEnabled = isSettlementEnabled;
this.qrSettleData = qrSettleData;
}
public boolean isSettle() {
@ -1363,4 +1366,12 @@ public class PayDetail implements Serializable {
this.currency = currency;
}
public List<QRSettleData> getQrSettleData() {
return qrSettleData;
}
public void setQrSettleData(List<QRSettleData> qrSettleData) {
this.qrSettleData = qrSettleData;
}
}

View File

@ -0,0 +1,91 @@
package com.utsmyanmar.paylibs.model;
import java.util.ArrayList;
import java.util.List;
public class QRSettleData {
private String transId;
private String date;
private String time;
private String status;
private long amount;
private int transactionType;
public QRSettleData() {}
public QRSettleData(String transId, String date, String time, String status, long amount,int transactionType) {
this.transId = transId;
this.date = date;
this.time = time;
this.status = status;
this.amount = amount;
this.transactionType = transactionType;
}
public void setTransId(String transId) {
this.transId = transId;
}
public void setDate(String date) {
this.date = date;
}
public void setTime(String time) {
this.time = time;
}
public void setStatus(String status) {
this.status = status;
}
public void setAmount(long amount) {
this.amount = amount;
}
public void setTransactionType(int transactionType) {
this.transactionType = transactionType;
}
public int getTransactionType() {
return transactionType;
}
public String getTransId() {
return transId;
}
public String getDate() {
return date;
}
public String getTime() {
return time;
}
public String getStatus() {
return status;
}
public long getAmount() {
return amount;
}
public static List<QRSettleData> convertFromPayDetail(List<PayDetail> payDetails) {
List<QRSettleData> qrSettleDataList = new ArrayList<>();
for (PayDetail pay : payDetails) {
QRSettleData qrSettleData = new QRSettleData();
qrSettleData.setAmount(pay.getAmount());
qrSettleData.setTransId(pay.getQrTransId());
qrSettleData.setStatus(pay.getTC());
qrSettleData.setDate(pay.getTransDate());
qrSettleData.setTime(pay.getTransTime());
qrSettleData.setTransactionType(pay.getTransactionType());
qrSettleDataList.add(qrSettleData);
}
return qrSettleDataList;
}
}

View File

@ -27,6 +27,7 @@ import com.utsmyanmar.paylibs.PayLibsUtils;
import com.utsmyanmar.paylibs.R;
import com.utsmyanmar.paylibs.model.MsgField;
import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.model.QRSettleData;
import com.utsmyanmar.paylibs.model.SettleData;
import com.utsmyanmar.paylibs.print.PrintUtils;
import com.utsmyanmar.paylibs.system.BaseErrorCode;
@ -732,19 +733,24 @@ public abstract class BaseXPrint {
emptyLine(2);
}
protected void printQRSettlementTransDetail(List<PayDetail> lists) {
protected void printQRSettlementTransDetail(List<QRSettleData> lists) {
long totalAmount = 0;
long refundTotal = 0;
for (PayDetail pay : lists) {
for (QRSettleData pay : lists) {
printString("Trans Id:" + pay.getQrTransId());
printString("Status :" + pay.getTC());
// printString("Date : " + PrintUtils.getInstance().formatTimestamp(Long.parseLong(pay.getTradeDateAndTime())));
printString("Date :" + pay.getTransDate());
printString("Time :" + pay.getTransTime());
// printString("Trans Id:" + pay.getQrTransId());
// printString("Status :" + pay.getTC());
//// printString("Date : " + PrintUtils.getInstance().formatTimestamp(Long.parseLong(pay.getTradeDateAndTime())));
// printString("Date :" + pay.getTransDate());
// printString("Time :" + pay.getTransTime());
printString("Trans Id:" + pay.getTransId());
printString("Status :" + pay.getStatus());
printString("Date :" + pay.getDate());
printString("Time :" + pay.getTime());
printString("Amount :" + "MMK " + PrintUtils.getInstance().getSeparatorOnlyNumberFormat(pay.getAmount()));

View File

@ -3,6 +3,7 @@ package com.utsmyanmar.paylibs.print.printx;
import android.graphics.Bitmap;
import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.model.QRSettleData;
import com.utsmyanmar.paylibs.utils.enums.HostType;
import java.util.List;
@ -21,7 +22,7 @@ public interface PrintX {
void printSmileSettlementReport(PayDetail payDetail,PrintXStatus printXStatus);
void printQRSettlementReport(PayDetail payDetail,List<PayDetail> list,PrintXStatus printXStatus);
void printQRSettlementReport(PayDetail payDetail, List<QRSettleData> list, PrintXStatus printXStatus);
void printDetailReport(PayDetail payDetail, List<PayDetail> lists, HostType hostType,PrintXStatus printXStatus);

View File

@ -14,6 +14,7 @@ import com.utsmyanmar.paylibs.isobuilder.builderx.ISOMsgX;
import com.utsmyanmar.paylibs.isobuilder.builderx.ISOVersion;
import com.utsmyanmar.paylibs.model.MsgField;
import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.model.QRSettleData;
import com.utsmyanmar.paylibs.print.PrintUtils;
import com.utsmyanmar.paylibs.utils.POSUtil;
import com.utsmyanmar.paylibs.utils.core_utils.ByteUtil;
@ -203,7 +204,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
}
@Override
public void printQRSettlementReport(PayDetail payDetail, List<PayDetail> list, PrintXStatus printXStatus) {
public void printQRSettlementReport(PayDetail payDetail, List<QRSettleData> list, PrintXStatus printXStatus) {
this.callbackStatus = printXStatus;
try {

View File

@ -3,6 +3,7 @@ package com.utsmyanmar.paylibs.print.printx;
import android.graphics.Bitmap;
import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.model.QRSettleData;
import com.utsmyanmar.paylibs.utils.enums.HostType;
import java.util.List;
@ -35,7 +36,7 @@ public class PrintXReceipt {
printX.printSmileSettlementReport(payDetail,printXStatus);
}
public void printQRSettlementReport(PayDetail payDetail,List<PayDetail> lists,PrintXStatus printXStatus) {
public void printQRSettlementReport(PayDetail payDetail, List<QRSettleData> lists, PrintXStatus printXStatus) {
printX.printQRSettlementReport(payDetail,lists,printXStatus);
}