diff --git a/app/build.gradle b/app/build.gradle index 1fb91b7..292a875 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "com.utsmm.kbz" minSdk 24 targetSdk 33 - versionCode 11 - versionName "1.10" + versionCode 14 + versionName "1.13" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 91a8970..9c36dce 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,7 +9,7 @@ - + diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/TransactionResultFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/TransactionResultFragment.java index 3fb209b..0c3f03c 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/TransactionResultFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/TransactionResultFragment.java @@ -94,7 +94,6 @@ public class TransactionResultFragment extends DataBindingFragment implements Da @Override public void onStart() { super.onStart(); - } @Override @@ -172,7 +171,11 @@ public class TransactionResultFragment extends DataBindingFragment implements Da handleSettlementTransaction(siriusReq); } else if (isQRPayNonSuccessTransaction(transactionType, payDetail)) { // startPrintProcess(false); - showDeclineDialog("QR Payment Failed!"); + if(transactionType == TransactionsType.MMQR_REFUND){ + showDeclineDialog("QR Refund Failed!"); + }else{ + showDeclineDialog("QR Payment Failed!"); + } navigateToMainScreen(); } else if (isQRPaySuccessTransaction(transactionType, payDetail)) { handleQRPaySuccessTransaction(payDetail, siriusReq); diff --git a/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefundDetailFragment.java b/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefundDetailFragment.java index 92e489f..3439b9b 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefundDetailFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefundDetailFragment.java @@ -26,6 +26,8 @@ import com.utsmm.kbz.ui.core_viewmodel.SharedViewModel; import com.utsmm.kbz.util.DecimalDigitsInputFilter; import com.utsmm.kbz.util.TransactionUtil; +import java.text.DecimalFormat; + public class QRRefundDetailFragment extends DataBindingFragment { @@ -43,6 +45,8 @@ public class QRRefundDetailFragment extends DataBindingFragment { private EditText etReferenceNo, etOriginalAmount, etRefundAmount, etRefundReason; private LinearLayout originalAmountLayout, refundAmountLayout; + private String originalRefundAmount; + private boolean isPartialRefund = false; @@ -122,6 +126,10 @@ public class QRRefundDetailFragment extends DataBindingFragment { } private void initData() { + double realAmount = payDetail.getAmount() / 100.0; + DecimalFormat df = new DecimalFormat("0.00"); + originalRefundAmount = df.format(realAmount); + payDetail = TransactionUtil.getInstance().initWalletTransaction(TransactionsType.MMQR_REFUND); payDetail.setInvoiceNo(SystemParamsOperation.getInstance().getIncrementInvoiceNum()); @@ -144,8 +152,8 @@ public class QRRefundDetailFragment extends DataBindingFragment { } else { // Hide amount fields for original refund isPartialRefund = false; - originalAmountLayout.setVisibility(View.GONE); - refundAmountLayout.setVisibility(View.GONE); + originalAmountLayout.setVisibility(View.VISIBLE); + refundAmountLayout.setVisibility(View.VISIBLE); } }); } @@ -162,6 +170,8 @@ public class QRRefundDetailFragment extends DataBindingFragment { String referenceNo = etReferenceNo.getText().toString().trim(); String refundReason = etRefundReason.getText().toString().trim(); + String originalAmountStr = etOriginalAmount.getText().toString().trim(); + String refundAmountStr = etRefundAmount.getText().toString().trim(); // Validate reference number if (referenceNo.isEmpty()) { @@ -171,8 +181,8 @@ public class QRRefundDetailFragment extends DataBindingFragment { if (isPartialRefund) { // Partial refund validation - String originalAmountStr = etOriginalAmount.getText().toString().trim(); - String refundAmountStr = etRefundAmount.getText().toString().trim(); +// String originalAmountStr = etOriginalAmount.getText().toString().trim(); +// String refundAmountStr = etRefundAmount.getText().toString().trim(); if (originalAmountStr.isEmpty()) { kPayViewModel.invalidAmountMsg.setValue("Enter original amount"); @@ -207,12 +217,16 @@ public class QRRefundDetailFragment extends DataBindingFragment { kPayViewModel.setQrRefund(qrRefund); } else { - QRRefund qrRefund = new QRRefund(referenceNo, "0", etOriginalAmount.getText().toString().trim(), refundReason); +// String originalAmountStr = etOriginalAmount.getText().toString().trim(); +// String refundAmountStr = etRefundAmount.getText().toString().trim(); + + QRRefund qrRefund = new QRRefund(referenceNo, refundAmountStr, originalRefundAmount, refundReason); kPayViewModel.setQrRefund(qrRefund); } sharedViewModel.transactionsType.setValue(TransactionsType.MMQR_REFUND); kPayViewModel.setPayDetail(payDetail); +// sharedViewModel.amount.setValue(refundAmountStr); routeId = R.id.action_qrRefundDetail_inputPasswordFragment; safeNavigateToRouteId(); } diff --git a/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefundProcessFragment.java b/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefundProcessFragment.java index 2a8a6c8..ecc0852 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefundProcessFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefundProcessFragment.java @@ -127,7 +127,7 @@ public class QRRefundProcessFragment extends DataBindingFragment { .observeOn(AndroidSchedulers.mainThread()) .subscribe( response -> { - handleRefundResponse(response, referenceNo); + handleRefundResponse(response, referenceNo, originalAmount); }, throwable -> { LogUtil.e(TAG, "Refund error: " + throwable.getMessage()); @@ -141,14 +141,12 @@ public class QRRefundProcessFragment extends DataBindingFragment { refundDisposable.add(refundDi); } - private void handleRefundResponse(KPayRefund.RefundResponse response, String referenceNo) { + private void handleRefundResponse(KPayRefund.RefundResponse response, String referenceNo, String orgAmount) { if (response != null && response.getResponse() != null && "REFUND_SUCCESS".equalsIgnoreCase(response.getResponse().getRefundStatus())) { LogUtil.d(TAG, "Refund successful!"); String refundAmount = response.getResponse().getRefundAmount(); - Log.d(TAG, "refund amount -> " + refundAmount); long text = POSUtil.getInstance().convertAmount(refundAmount); - Log.d(TAG, "refund amount but long -> " + text); String dateTime = SystemDateTime.getTodayDateFormat() + " " + SystemDateTime.getTodayTimeFormat(); payDetail.setTC(response.getResponse().getRefundStatus()); @@ -185,6 +183,7 @@ public class QRRefundProcessFragment extends DataBindingFragment { if (response != null && response.getResponse() != null && response.getResponse().getMsg() != null) { errorMsg = response.getResponse().getMsg(); } + payDetail.setTradeResultDes(errorMsg); EReceiptRequest request = EReceiptUtil.getInstance().generateQRRefundReceipt( "0", @@ -196,7 +195,7 @@ public class QRRefundProcessFragment extends DataBindingFragment { TransResultStatus.FAIL ); sharedViewModel.pushReceipt(request); - + sharedViewModel.amount.setValue(orgAmount); sharedViewModel.payDetail.setValue(payDetail); navigateToNext(); } diff --git a/app/src/main/java/com/utsmm/kbz/util/tms/TMSUtil.java b/app/src/main/java/com/utsmm/kbz/util/tms/TMSUtil.java index 908b68a..a3a8b4c 100644 --- a/app/src/main/java/com/utsmm/kbz/util/tms/TMSUtil.java +++ b/app/src/main/java/com/utsmm/kbz/util/tms/TMSUtil.java @@ -319,6 +319,7 @@ public class TMSUtil { Log.d(TAG,"Connected to Wifi"); return "WIFI"; } - }return "No Connection"; + } + return "No Connection"; } } diff --git a/app/src/main/res/xml/network_security_config.xml b/app/src/main/res/xml/network_security_config.xml index 53d56cc..9dab6ac 100644 --- a/app/src/main/res/xml/network_security_config.xml +++ b/app/src/main/res/xml/network_security_config.xml @@ -1,14 +1,16 @@ - + 159.223.40.176 128.199.170.203 152.42.199.193 api.kbzpay.com - - receipt-nest.utsmyanmar.com - sirius-nest.utsmyanmar.com - \ No newline at end of file + + + receipt-nest.utsmyanmar.com + + + diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java index 4e5b211..b0f4aa5 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java @@ -162,7 +162,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX { printMerchantHeader(); printTransHeader(payDetail); printTransDetailQR(payDetail); - LogUtil.d(TAG,"QR trans status:"+payDetail.getQrTransStatus()); +// LogUtil.d(TAG,"QR trans status:"+payDetail.getQrTransStatus()); if (payDetail.getQrTransStatus() == 1) { printTransFooter(true,payDetail, isMerchantCopy); } else { @@ -232,7 +232,8 @@ public class PrintXImpl extends BaseXPrint implements PrintX { setHeight(0x12); printLogo(); printMerchantHeader(); - printTransHeader(payDetail, hostType); +// printTransHeader(payDetail, hostType); + printTranHeader("DETAIL REPORT"); printTransDetailReport(lists,hostType); // emptyLine(1); startPrintNex(); @@ -310,23 +311,27 @@ public class PrintXImpl extends BaseXPrint implements PrintX { // payDetail.getCustomerMobile() // as channel type if(payDetail.getTransactionType() == TransactionsType.MMQR.value && payDetail.getQrTransStatus() == 1 ) { - print2ColumnsStringNoSpace("PAYMENT TYPE ",": "+ (payDetail.getCustomerMobile() == null || payDetail.getCustomerMobile().isEmpty() ? "-": payDetail.getCustomerMobile())); - print2ColumnsStringNoSpace("TRXN REF ",": "+ payDetail.getReferNo()); + print2ColumnsStringNoSpace("PAYMENT TYPE",":"+ (payDetail.getCustomerMobile() == null || payDetail.getCustomerMobile().isEmpty() ? "-": payDetail.getCustomerMobile())); + print2ColumnsStringNoSpace("TRXN REF ",":"+ payDetail.getReferNo()); if(payDetail.getQrReferNo() != null && !payDetail.getQrReferNo().isEmpty()) { - print2ColumnsStringNoSpace("MMQR REF ",": "+ payDetail.getQrReferNo()); + print2ColumnsStringNoSpace("MMQR REF ",":"+ payDetail.getQrReferNo()); } - print2ColumnsStringNoSpace("TRXN ID",":"+ (payDetail.getQrTransId() == null || payDetail.getQrTransId().isEmpty() ? "-": payDetail.getQrTransId())); - print2ColumnsStringNoSpace("STATUS ",": "+ PrintUtils.getInstance().getQrTransStatus(payDetail.getQrTransStatus())); + print2ColumnsStringNoSpace("TRXN ID ",":"+ (payDetail.getQrTransId() == null || payDetail.getQrTransId().isEmpty() ? "-": payDetail.getQrTransId())); + print2ColumnsStringNoSpace("STATUS ",":"+ PrintUtils.getInstance().getQrTransStatus(payDetail.getQrTransStatus())); } else if(payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value && payDetail.getQrTransStatus() == 1) { - print2ColumnsStringNoSpace("TRXN REF ",":"+ payDetail.getReferNo()); - print2ColumnsStringNoSpace("TXN DATE/TIME",":"+ payDetail.getOriginalTransDate()); - print2ColumnsStringNoSpace("STATUS ",":"+ PrintUtils.getInstance().getQrTransStatus(payDetail.getQrTransStatus())); + String originalDate = payDetail.getOriginalTransDate(); + String tranDate = originalDate.split(" ")[0]; + String tranTime = originalDate.split(" ")[1]; + print2ColumnsStringNoSpace("TRXN REF ",":"+ payDetail.getReferNo()); + print2ColumnsStringNoSpace("TXN DATE ",":"+ tranDate); + print2ColumnsStringNoSpace("TXN TIME ",":"+ tranTime); + print2ColumnsStringNoSpace("STATUS ",":"+ PrintUtils.getInstance().getQrTransStatus(payDetail.getQrTransStatus())); } else if(payDetail.getTransactionType() == TransactionsType.MMQR.value && payDetail.getQrTransStatus() == -1) { - print2ColumnsStringNoSpace("PAYMENT TYPE ",":"+ (payDetail.getCustomerMobile() == null || payDetail.getCustomerMobile().isEmpty() ? "-": payDetail.getCustomerMobile())); - print2ColumnsStringNoSpace("TRXN REF ",":"+ payDetail.getReferNo()); - print2ColumnsStringNoSpace("TXN TIME ",":"+ (payDetail.getOriginalTransDate() == null || payDetail.getOriginalTransDate().isEmpty() ? POSUtil.getInstance().getCurrentDateTimeForQR(): payDetail.getOriginalTransDate())); + print2ColumnsStringNoSpace("PAYMENT TYPE",":"+ (payDetail.getCustomerMobile() == null || payDetail.getCustomerMobile().isEmpty() ? "-": payDetail.getCustomerMobile())); + print2ColumnsStringNoSpace("TRXN REF ",":"+ payDetail.getReferNo()); + print2ColumnsStringNoSpace("TXN TIME ",":"+ (payDetail.getOriginalTransDate() == null || payDetail.getOriginalTransDate().isEmpty() ? POSUtil.getInstance().getCurrentDateTimeForQR(): payDetail.getOriginalTransDate())); } @@ -340,10 +345,9 @@ public class PrintXImpl extends BaseXPrint implements PrintX { boolean isNeedMinusSign = payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value; boolean isQrDecimalEnable = SystemParamsOperation.getInstance().isQrDecimalEnable(); - lineBreak(); - print2ColumnsStringBoldCenter("TOTAL MMK", isNeedMinusSign? "- "+PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount(), isQrDecimalEnable): PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount(), isQrDecimalEnable),fontLarge, AlignEnum.LEFT); - lineBreak(); - + dotBreak(); + print2ColumnsStringBoldCenter("AMOUNT :", isNeedMinusSign? "- "+PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount(), isQrDecimalEnable) + " MMK": PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount(), isQrDecimalEnable) + " MMK",fontLarge, AlignEnum.LEFT); + dotBreak(); // if(payDetail.getTransactionType() == TransactionsType.MMQR.value) { // String data = payDetail.getReferNo()+"-"+payDetail.getAmount()+"-"+payDetail.getQrTransId()+"-"+payDetail.getMerchantNo()+"-"+payDetail.getCustomerMobile().toUpperCase()+"-"+payDetail.getOriginalTransDate(); // @@ -430,7 +434,8 @@ public class PrintXImpl extends BaseXPrint implements PrintX { setHeight(0x12); printLogo(); printMerchantHeader(); - printTransHeader(payDetail, hostType); +// printTransHeader(payDetail, hostType); + printTranHeader("SUMMARY REPORT"); printTransDetailSummary(payDetail); // printTransFooterSummary();