new fields in e-receipt

This commit is contained in:
moon 2026-04-01 13:32:26 +06:30
parent 9a55fadcf0
commit 6cd27b6482
2 changed files with 86 additions and 7 deletions

View File

@ -20,8 +20,10 @@ import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptRequest;
import com.utsmyanmar.baselib.util.DataBindingConfig;
import com.utsmyanmar.baselib.util.TimeoutCallback;
import com.utsmyanmar.paylibs.model.TradeData;
import com.utsmyanmar.paylibs.print.PrintUtils;
import com.utsmyanmar.paylibs.reversal.ReversalAction;
import com.utsmyanmar.paylibs.reversal.ReversalListener;
import com.utsmyanmar.paylibs.system.BaseErrorCode;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
import com.utsmm.kbz.BR;
import com.utsmm.kbz.R;
@ -316,6 +318,18 @@ public class ProcessingFragment extends DataBindingFragment {
safeNavigateToRouteId();
}
private void handleAfterTransaction() {
if (SystemParamsOperation.getInstance().getDemoStatus()) {
delayFunctionCall(() -> {
sharedViewModel.dismissLoadingMsg();
callNextScreen();
}, 1500);
} else {
sharedViewModel.dismissLoadingMsg();
callNextScreen();
}
}
private void observeData(ProcessingTransaction processingTransaction) {
processingTransaction.getTransStatus().observe(getViewLifecycleOwner(), transResultStatus -> {
@ -327,9 +341,13 @@ public class ProcessingFragment extends DataBindingFragment {
switch (transResultStatus) {
case FAIL:
sharedViewModel.pushReceipt(buildEReceiptCardReceipt(payDetail, false, "FAILED"));
sharedViewModel.pushReceipt(buildEReceiptCardReceipt(payDetail, false, BaseErrorCode.getCode(payDetail.getTradeAnswerCode())));
handleAfterTransaction();
break;
case SUCCESS:
sharedViewModel.pushReceipt(buildEReceiptCardReceipt(payDetail, true, "SUCCESS"));
sharedViewModel.pushReceipt(buildEReceiptCardReceipt(payDetail, true, BaseErrorCode.getCode(payDetail.getTradeAnswerCode())));
handleAfterTransaction();
break;
case OFFLINE_SUCCESS:
if(SystemParamsOperation.getInstance().getDemoStatus()) {
delayFunctionCall(()->{
@ -346,7 +364,7 @@ public class ProcessingFragment extends DataBindingFragment {
break;
case OFFLINE_FAILURE:
sharedViewModel.pushReceipt(buildEReceiptCardReceipt(payDetail, false, "FAILED"));
sharedViewModel.pushReceipt(buildEReceiptCardReceipt(payDetail, false, BaseErrorCode.getCode(payDetail.getTradeAnswerCode())));
sharedViewModel.dismissLoadingMsg();
sharedViewModel.set_errorFragmentMsg(getResourceString(R.string.txt_offline_failure));
navigateToError();
@ -509,6 +527,16 @@ public class ProcessingFragment extends DataBindingFragment {
default: return currency; // Already alphabetic? return as-is
}
}
private String formatDE43(String value) {
if (value == null) value = "";
if (value.length() > 40) {
return value.substring(0, 40);
}
return String.format("%-40s", value); // right pad with space
}
private EReceiptCardRequest buildEReceiptCardReceipt(PayDetail payDetail, boolean isSuccess, String reason){
//current timestamp
String currentTimestamp = new java.text.SimpleDateFormat(
@ -527,15 +555,29 @@ public class ProcessingFragment extends DataBindingFragment {
DecimalFormat df = new DecimalFormat("0.00");
String amount = df.format(realAmount);
String rawName = PrintUtils.getInstance()
.getCardHolderName(payDetail.getCardHolderName());
String secondLine = PrintUtils.getInstance()
.processNameSpaceSecondLine(rawName);
String firstLine = PrintUtils.getInstance()
.processNameSpaceFirstLine(rawName, secondLine);
String cardHolderName = firstLine +
(secondLine.isEmpty() ? "" : " " + secondLine);
EReceiptCardRequest request = new EReceiptCardRequest();
request.setDE2(payDetail.getCardNo());
request.setDE2(PrintUtils.getInstance().maskCardNumberPciDss(payDetail.getCardNo()));
request.setDE3(mapDE3ToShortCode(payDetail.getProcessCode()));
request.setDE4(amount);
request.setDE7(currentTimestamp);
request.setDE11(payDetail.getVoucherNo());
request.setDE22(mapTransactionType(payDetail.getTransactionType()));
// request.setDE22(mapTransactionType(payDetail.getTransactionType()));
request.setDE22(PrintUtils.getInstance().getEntryType(payDetail.getCardType()));
request.setDE37(payDetail.getReferNo());
request.setDE38(payDetail.getAuthNo());
request.setDE38(payDetail.getApprovalCode());
request.setDE39(isSuccess ? "A" : "E");
request.setDE41(terminalId);
request.setDE42(merchantId);
@ -544,6 +586,12 @@ public class ProcessingFragment extends DataBindingFragment {
request.setInvoiceNumber(payDetail.getInvoiceNo());
request.setAppId(appId);
request.setDescription(reason);
request.setBatchNumber(payDetail.batchNo);
request.setDE55(payDetail.getAppLabel());
request.setCardLabel(payDetail.getAccountType());
request.setDE14(PrintUtils.getInstance().getFormatExpDate(payDetail.getEXPDate()));
request.setDE43(formatDE43(cardHolderName));
request.setDE48(payDetail.getAID());
return request;
}

View File

@ -18,10 +18,19 @@ public class EReceiptCardRequest {
private String DE11;
private String description;
private String DE38;
private String batchNumber;
private String DE55;
private String DE14;
private String cardLabel;
private String DE43;
private String DE48;
public EReceiptCardRequest() {}
// GETTERS
public String getDE14(){ return DE14;}
public String getCardLabel(){ return cardLabel;}
public String getDE43(){return DE43;}
public String getDE3() {
return DE3;
}
@ -62,6 +71,8 @@ public class EReceiptCardRequest {
return appId;
}
public String getDE55(){return DE55;}
public String getInvoiceNumber(){
return invoiceNumber;
}
@ -75,6 +86,7 @@ public class EReceiptCardRequest {
public String getDE2(){ return DE2; }
public String getDE38(){ return DE38; }
public String getDE22(){ return DE22; }
public String getBatchNumber(){ return batchNumber; }
// SETTERS
public void setDE3(String DE3) {
this.DE3 = DE3;
@ -132,4 +144,23 @@ public class EReceiptCardRequest {
public void setDE38(String DE38){ this.DE38 = DE38; }
public void setDE22(String DE22){ this.DE22 = DE22; }
public void setBatchNumber(String batchNumber) {
this.batchNumber = batchNumber;
}
public void setDE55(String DE55){
this.DE55 = DE55;
}
public void setDE14(String DE14){
this.DE14 = DE14;
}
public void setCardLabel(String cardLabel){
this.cardLabel = cardLabel;
}
public void setDE43(String DE43){
this.DE43 = DE43;
}
public void setDE48(String DE48){
this.DE48 = DE48;
}
}