diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java index 18b2c6a..a1656be 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java @@ -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( @@ -526,16 +554,30 @@ public class ProcessingFragment extends DataBindingFragment { double realAmount = payDetail.getAmount() / 100.0; 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; } diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/network/model/e_receipt/EReceiptCardRequest.java b/baselib/src/main/java/com/utsmyanmar/baselib/network/model/e_receipt/EReceiptCardRequest.java index 8d8fd39..be05387 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/network/model/e_receipt/EReceiptCardRequest.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/network/model/e_receipt/EReceiptCardRequest.java @@ -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; } @@ -61,6 +70,8 @@ public class EReceiptCardRequest { public String getAppId(){ 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; + } }