diff --git a/.idea/migrations.xml b/.idea/migrations.xml
new file mode 100644
index 0000000..f8051a6
--- /dev/null
+++ b/.idea/migrations.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/InputPasswordFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/InputPasswordFragment.java
index 45496fe..d81fc00 100644
--- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/InputPasswordFragment.java
+++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/InputPasswordFragment.java
@@ -144,7 +144,7 @@ public class InputPasswordFragment extends DataBindingFragment implements DataBi
switch (Objects.requireNonNull(sharedViewModel.transactionsType.getValue())) {
case MMQR_REFUND:
inputPasswordViewModel.passwordType.setValue(InputPasswordType.SYSTEM);
- routeId = R.id.action_inputPasswordFragment_to_qrRefundList;
+ routeId = R.id.action_inputPasswordFragment_to_QRRefundProcessFragment;
break;
case PRE_AUTH_COMPLETE_VOID:
inputPasswordViewModel.passwordType.setValue(InputPasswordType.SYSTEM);
diff --git a/app/src/main/java/com/utsmm/kbz/ui/kpay/KPayViewModel.java b/app/src/main/java/com/utsmm/kbz/ui/kpay/KPayViewModel.java
index 4d715b0..063bdf8 100644
--- a/app/src/main/java/com/utsmm/kbz/ui/kpay/KPayViewModel.java
+++ b/app/src/main/java/com/utsmm/kbz/ui/kpay/KPayViewModel.java
@@ -13,6 +13,7 @@ import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import com.kizzy.xpay.util.Sign;
+import com.utsmm.kbz.ui.qr_pay.QRRefund;
import com.utsmyanmar.baselib.network.model.DemoQRRequest;
import com.utsmyanmar.baselib.network.model.DemoQRResponse;
import com.utsmyanmar.baselib.network.model.DemoQRReturnRequest;
@@ -66,6 +67,7 @@ public class KPayViewModel extends ViewModel {
+
private String generateRandomTwoChars() {
// You can reuse the existing character set and SecureRandom instance
StringBuilder randomChars = new StringBuilder(3);
@@ -292,6 +294,16 @@ public class KPayViewModel extends ViewModel {
private TradeData tradeData;
private PayDetail payDetail;
+ private QRRefund qrRefund;
+
+ public QRRefund getQrRefund() {
+ return qrRefund;
+ }
+
+ public void setQrRefund(QRRefund qrRefund) {
+ this.qrRefund = qrRefund;
+ }
+
public void setTradeData(TradeData tradeData){
this.tradeData = tradeData;
}
diff --git a/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRPayFragment.java b/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRPayFragment.java
index c4b697b..9ee8141 100644
--- a/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRPayFragment.java
+++ b/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRPayFragment.java
@@ -136,8 +136,8 @@ public class QRPayFragment extends DataBindingFragment {
private void onClickRefund(){
sharedViewModel.setTransactionsType(TransactionsType.MMQR_REFUND);
-// routeId = R.id.action_qrFragment_to_qr_refund_list;
- routeId = R.id.action_qrFragment_to_inputPasswordFragment;
+ routeId = R.id.action_qrFragment_to_qr_refund_list;
+// routeId = R.id.action_qrFragment_to_inputPasswordFragment;
safeNavigateToRouteId();
}
diff --git a/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefund.java b/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefund.java
new file mode 100644
index 0000000..05efe08
--- /dev/null
+++ b/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefund.java
@@ -0,0 +1,49 @@
+package com.utsmm.kbz.ui.qr_pay;
+
+public class QRRefund {
+
+ private String referenceNo;
+ private String refundAmount;
+ private String originalAmount;
+ private String reason;
+
+ public QRRefund(String referenceNo, String refundAmount, String originalAmount, String reason) {
+ this.referenceNo = referenceNo;
+ this.refundAmount = refundAmount;
+ this.originalAmount = originalAmount;
+ this.reason = reason;
+ }
+
+ public String getReferenceNo() {
+ return referenceNo;
+ }
+
+ public void setReferenceNo(String referenceNo) {
+ this.referenceNo = referenceNo;
+ }
+
+ public String getRefundAmount() {
+ return refundAmount;
+ }
+
+ public void setRefundAmount(String refundAmount) {
+ this.refundAmount = refundAmount;
+ }
+
+ public String getOriginalAmount() {
+ return originalAmount;
+ }
+
+ public void setOriginalAmount(String originalAmount) {
+ this.originalAmount = originalAmount;
+ }
+
+ public String getReason() {
+ return reason;
+ }
+
+ public void setReason(String reason) {
+ this.reason = reason;
+ }
+
+}
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 fb0c98d..3dbd4c6 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
@@ -13,12 +13,9 @@ import androidx.annotation.Nullable;
import com.utsmm.kbz.ui.kpay.KPayViewModel;
import com.utsmyanmar.baselib.fragment.DataBindingFragment;
-import com.utsmyanmar.baselib.network.model.KPayRefund;
import com.utsmyanmar.baselib.util.DataBindingConfig;
import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.model.TradeData;
-import com.utsmyanmar.paylibs.system.SystemDateTime;
-import com.utsmyanmar.paylibs.utils.POSUtil;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType;
import com.utsmm.kbz.BR;
@@ -31,14 +28,13 @@ import com.utsmm.kbz.util.ecr.CoreUtils;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.disposables.CompositeDisposable;
-import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
import com.utsmyanmar.paylibs.utils.LogUtil;
public class QRRefundDetailFragment extends DataBindingFragment {
private SharedViewModel sharedViewModel;
- private KPayViewModel KPayViewModel;
+ private KPayViewModel kPayViewModel;
private int routeId;
@@ -53,8 +49,7 @@ public class QRRefundDetailFragment extends DataBindingFragment {
private boolean isPartialRefund = false;
- CompositeDisposable refundDisposable = new CompositeDisposable();
- CompositeDisposable retrieveUpdateDisposable = new CompositeDisposable();
+
private static final String TAG = com.utsmm.kbz.ui.kpay.QRRefundFragment.class.getSimpleName();
@@ -64,13 +59,13 @@ public class QRRefundDetailFragment extends DataBindingFragment {
@Override
protected void initViewModel() {
sharedViewModel = getFragmentScopeViewModel(SharedViewModel.class);
- KPayViewModel = getFragmentScopeViewModel(KPayViewModel.class);
+ kPayViewModel = getFragmentScopeViewModel(KPayViewModel.class);
}
@Override
protected DataBindingConfig getDataBindingConfig() {
return new DataBindingConfig(R.layout.fragment_qr_refund_detail, BR.sharedViewModel, sharedViewModel)
- .addBindingParam(BR.kPayViewModel, KPayViewModel)
+ .addBindingParam(BR.kPayViewModel, kPayViewModel)
.addBindingParam(BR.click, new ClickEvent());
}
@@ -101,15 +96,10 @@ public class QRRefundDetailFragment extends DataBindingFragment {
public void onResume() {
super.onResume();
setToolBarTitleWithBackIcon("KPay Refund");
- KPayViewModel.invalidAmountMsg.setValue("");
+ kPayViewModel.invalidAmountMsg.setValue("");
}
- @Override
- public void onDestroyView() {
- super.onDestroyView();
- refundDisposable.dispose();
- retrieveUpdateDisposable.dispose();
- }
+
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
@@ -165,130 +155,6 @@ public class QRRefundDetailFragment extends DataBindingFragment {
});
}
- private void processKPayRefund(String referenceNo, String refundAmount, String originalAmount, String reason) {
- String merchantId = TransactionUtil.getInstance().getQRMerchantId();
-
- // Generate unique refund request ID
- String refundRequestId = referenceNo + "R";
-
- showLoadingDialog("Processing refund...");
-
- // Create KPay refund request
- KPayRefund.RefundRequest refundRequest = KPayViewModel.createRefundRequest(
- refundRequestId,
- referenceNo,
- merchantId,
- refundAmount,
- reason != null ? reason : "Refund request"
- );
-
- Disposable refundDi = KPayViewModel.kPayRefund(refundRequest)
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(
- response -> {
- dismissLoadingDialog();
- handleRefundResponse(response, referenceNo);
- },
- throwable -> {
- dismissLoadingDialog();
- LogUtil.e(TAG, "Refund error: " + throwable.getMessage());
- showDeclineDialog("Refund failed!\nCommunication Error!");
- ecrActionCancel("Refund failed");
- navigateToMain();
- },
- () -> LogUtil.d(TAG, "Refund request completed")
- );
-
- refundDisposable.add(refundDi);
- }
-
- private void handleRefundResponse(KPayRefund.RefundResponse response, String referenceNo) {
- if (response != null && response.getResponse() != null && "REFUND_SUCCESS".equalsIgnoreCase(response.getResponse().getRefundStatus())) {
- LogUtil.d(TAG, "Refund successful!");
-
- String refundAmount = response.getResponse().getRefundAmount();
-
- String dateTime = SystemDateTime.getTodayDateFormat() + " " + SystemDateTime.getTodayTimeFormat();
- payDetail.setAmount(refundAmount == null ? 0 : POSUtil.getInstance().convertAmount(refundAmount));
- payDetail.setOriginalTransDate(dateTime);
- payDetail.setQrTransStatus(1);
- payDetail.setQrReferNo(referenceNo);
- payDetail.setReferNo(referenceNo);
- payDetail.setIsCanceled(true);
-
- retrievedUpdatePayDetail(referenceNo);
-
- } else {
- LogUtil.d(TAG, "Refund failed!");
- payDetail.setQrTransStatus(-1);
- payDetail.setQrReferNo(referenceNo);
- payDetail.setReferNo(referenceNo);
-
- String errorMsg = "Refund failed";
- if (response != null && response.getResponse() != null && response.getResponse().getMsg() != null) {
- errorMsg = response.getResponse().getMsg();
- }
- payDetail.setTradeResultDes(errorMsg);
-
- sharedViewModel.payDetail.setValue(payDetail);
- navigateToNext();
- }
- }
-
- private void retrievedUpdatePayDetail(String refNum) {
- LogUtil.d(TAG, "Trying to update Database!");
- retrieveUpdateDisposable.add(KPayViewModel.searchPayByRefNum(refNum)
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(oldPay -> {
- LogUtil.d(TAG, "Inside the subscribe!");
- if (oldPay != null) {
- oldPay.setIsCanceled(true);
- payDetail.setQrTransId(oldPay.getQrTransId());
- payDetail.setCustomerMobile(oldPay.getCustomerMobile());
- sharedViewModel.updatePayDetail(oldPay);
- }
- updateData();
- navigateToNext();
- },
- onError -> {
- LogUtil.d(TAG, "On error Unable to retrieve PayDetail");
- updateData();
- navigateToNext();
- },
- () -> {
- LogUtil.d(TAG, "No data found! navigating to Result Page!");
- updateData();
- navigateToNext();
- }
- ));
- }
-
- private void updateData() {
- KPayViewModel.insertPayDetail(payDetail);
- sharedViewModel.payDetail.postValue(payDetail);
- }
-
- private void navigateToMain() {
- routeId = R.id.action_QRRefundDetail_to_nav_main;
- safeNavigateToRouteId();
- }
-
- private void navigateToNext() {
- routeId = R.id.action_QRRefundDetail_to_transactionResultFragment;
- safeNavigateToRouteId();
- }
-
- private void ecrActionCancel(String msg) {
- if (sharedViewModel.isEcr.getValue() != null) {
- if (sharedViewModel.isEcr.getValue()) {
- sharedViewModel.isEcr.postValue(false);
- CoreUtils.getInstance(sharedViewModel).responseRejectMsg(msg);
- sharedViewModel.isEcrFinished.postValue(true);
- }
- }
- }
public class ClickEvent {
@@ -297,14 +163,14 @@ public class QRRefundDetailFragment extends DataBindingFragment {
}
public void onConfirm() {
- KPayViewModel.invalidAmountMsg.setValue("");
+ kPayViewModel.invalidAmountMsg.setValue("");
String referenceNo = etReferenceNo.getText().toString().trim();
String refundReason = etRefundReason.getText().toString().trim();
// Validate reference number
if (referenceNo.isEmpty()) {
- KPayViewModel.invalidAmountMsg.setValue("Enter reference number");
+ kPayViewModel.invalidAmountMsg.setValue("Enter reference number");
return;
}
@@ -314,12 +180,12 @@ public class QRRefundDetailFragment extends DataBindingFragment {
String refundAmountStr = etRefundAmount.getText().toString().trim();
if (originalAmountStr.isEmpty()) {
- KPayViewModel.invalidAmountMsg.setValue("Enter original amount");
+ kPayViewModel.invalidAmountMsg.setValue("Enter original amount");
return;
}
if (refundAmountStr.isEmpty()) {
- KPayViewModel.invalidAmountMsg.setValue("Enter refund amount");
+ kPayViewModel.invalidAmountMsg.setValue("Enter refund amount");
return;
}
@@ -327,31 +193,38 @@ public class QRRefundDetailFragment extends DataBindingFragment {
double refundAmount = Double.parseDouble(refundAmountStr);
if (originalAmount <= 0) {
- KPayViewModel.invalidAmountMsg.setValue("Enter valid original amount");
+ kPayViewModel.invalidAmountMsg.setValue("Enter valid original amount");
return;
}
if (refundAmount <= 0) {
- KPayViewModel.invalidAmountMsg.setValue("Enter valid refund amount");
+ kPayViewModel.invalidAmountMsg.setValue("Enter valid refund amount");
return;
}
if (refundAmount > originalAmount) {
- KPayViewModel.invalidAmountMsg.setValue("Refund amount cannot exceed original amount");
+ kPayViewModel.invalidAmountMsg.setValue("Refund amount cannot exceed original amount");
return;
}
- processKPayRefund(referenceNo, refundAmountStr, originalAmountStr, refundReason);
+
+ QRRefund qrRefund = new QRRefund(referenceNo, refundAmountStr, originalAmountStr, refundReason);
+
+ kPayViewModel.setQrRefund(qrRefund);
} else {
- // Original amount refund - no amount validation needed
- processKPayRefund(referenceNo, "0", String.valueOf( etOriginalAmount.getText().toString().trim()), refundReason);
+ QRRefund qrRefund = new QRRefund(referenceNo, "0", etOriginalAmount.getText().toString().trim(), refundReason);
+
+ kPayViewModel.setQrRefund(qrRefund);
}
+
+ kPayViewModel.setPayDetail(payDetail);
+
+ navigateToPassword();
}
}
public void navigateToPassword(){
- sharedViewModel.transactionsType.setValue(TransactionsType.MMQR_REFUND);
- routeId = R.id.action_qrRefundPasswordFragment_to_inputPasswordFragment;
- safeRouteTo(currentId,routeId,hostId);
+ routeId = R.id.action_QRRefundDetail_to_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
new file mode 100644
index 0000000..f2e680e
--- /dev/null
+++ b/app/src/main/java/com/utsmm/kbz/ui/qr_pay/QRRefundProcessFragment.java
@@ -0,0 +1,215 @@
+package com.utsmm.kbz.ui.qr_pay;
+
+import android.os.Bundle;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.utsmm.kbz.BR;
+import com.utsmm.kbz.R;
+import com.utsmm.kbz.config.Constants;
+import com.utsmm.kbz.ui.core_viewmodel.SharedViewModel;
+import com.utsmm.kbz.ui.kpay.KPayViewModel;
+import com.utsmm.kbz.ui.kpay.QRRefundFragment;
+import com.utsmm.kbz.util.TransactionUtil;
+import com.utsmm.kbz.util.ecr.CoreUtils;
+import com.utsmyanmar.baselib.fragment.DataBindingFragment;
+import com.utsmyanmar.baselib.network.model.KPayRefund;
+import com.utsmyanmar.baselib.util.DataBindingConfig;
+import com.utsmyanmar.paylibs.model.PayDetail;
+import com.utsmyanmar.paylibs.system.SystemDateTime;
+import com.utsmyanmar.paylibs.utils.LogUtil;
+import com.utsmyanmar.paylibs.utils.POSUtil;
+
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.disposables.CompositeDisposable;
+import io.reactivex.rxjava3.disposables.Disposable;
+import io.reactivex.rxjava3.schedulers.Schedulers;
+
+public class QRRefundProcessFragment extends DataBindingFragment {
+
+ private static final String TAG = QRRefundProcessFragment.class.getSimpleName();
+ private SharedViewModel sharedViewModel;
+ private KPayViewModel kPayViewModel;
+
+ private PayDetail payDetail;
+
+ private QRRefund qrRefund;
+ private static final int hostId = Constants.NAV_HOST_ID;
+ private int routeId;
+ private static final int currentId = R.id.QRRefundProcessFragment;
+
+ CompositeDisposable retrieveUpdateDisposable = new CompositeDisposable();
+ CompositeDisposable refundDisposable = new CompositeDisposable();
+
+ @Override
+ protected void initViewModel() {
+ sharedViewModel = getFragmentScopeViewModel(SharedViewModel.class);
+ kPayViewModel = getFragmentScopeViewModel(KPayViewModel.class);
+ }
+
+ @Override
+ protected DataBindingConfig getDataBindingConfig() {
+ return new DataBindingConfig(R.layout.fragment_qr_refund_process, BR.sharedViewModel, sharedViewModel)
+ .addBindingParam(BR.kPayViewModel, kPayViewModel);
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ retrieveUpdateDisposable.dispose();
+ refundDisposable.dispose();
+ }
+
+ @Override
+ protected int currentId() {
+ return currentId;
+ }
+
+ @Override
+ protected int hostId() {
+ return hostId;
+ }
+
+ @Override
+ protected int routeId() {
+ return routeId;
+ }
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+
+ initData();
+
+ processKPayRefund(qrRefund.getReferenceNo(), qrRefund.getRefundAmount(), qrRefund.getOriginalAmount(), qrRefund.getReason());
+ }
+
+ private void initData() {
+ payDetail = kPayViewModel.getPayDetail();
+ qrRefund = kPayViewModel.getQrRefund();
+ }
+
+ private void processKPayRefund(String referenceNo, String refundAmount, String originalAmount, String reason) {
+ String merchantId = TransactionUtil.getInstance().getQRMerchantId();
+
+ // Generate unique refund request ID
+ String refundRequestId = referenceNo + "R";
+
+
+ // Create KPay refund request
+ KPayRefund.RefundRequest refundRequest = kPayViewModel.createRefundRequest(
+ refundRequestId,
+ referenceNo,
+ merchantId,
+ refundAmount,
+ reason != null ? reason : "Refund request"
+ );
+
+ Disposable refundDi = kPayViewModel.kPayRefund(refundRequest)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(
+ response -> {
+ handleRefundResponse(response, referenceNo);
+ },
+ throwable -> {
+ LogUtil.e(TAG, "Refund error: " + throwable.getMessage());
+ showDeclineDialog("Refund failed!\nCommunication Error!");
+ ecrActionCancel("Refund failed");
+ navigateToMain();
+ },
+ () -> LogUtil.d(TAG, "Refund request completed")
+ );
+
+ refundDisposable.add(refundDi);
+ }
+
+ private void handleRefundResponse(KPayRefund.RefundResponse response, String referenceNo) {
+ if (response != null && response.getResponse() != null && "REFUND_SUCCESS".equalsIgnoreCase(response.getResponse().getRefundStatus())) {
+ LogUtil.d(TAG, "Refund successful!");
+
+ String refundAmount = response.getResponse().getRefundAmount();
+
+ String dateTime = SystemDateTime.getTodayDateFormat() + " " + SystemDateTime.getTodayTimeFormat();
+ payDetail.setAmount(refundAmount == null ? 0 : POSUtil.getInstance().convertAmount(refundAmount));
+ payDetail.setOriginalTransDate(dateTime);
+ payDetail.setQrTransStatus(1);
+ payDetail.setQrReferNo(referenceNo);
+ payDetail.setReferNo(referenceNo);
+ payDetail.setIsCanceled(true);
+
+ retrievedUpdatePayDetail(referenceNo);
+
+ } else {
+ LogUtil.d(TAG, "Refund failed!");
+ payDetail.setQrTransStatus(-1);
+ payDetail.setQrReferNo(referenceNo);
+ payDetail.setReferNo(referenceNo);
+
+ String errorMsg = "Refund failed";
+ if (response != null && response.getResponse() != null && response.getResponse().getMsg() != null) {
+ errorMsg = response.getResponse().getMsg();
+ }
+ payDetail.setTradeResultDes(errorMsg);
+
+ sharedViewModel.payDetail.setValue(payDetail);
+ navigateToNext();
+ }
+ }
+
+ private void retrievedUpdatePayDetail(String refNum) {
+ LogUtil.d(TAG, "Trying to update Database!");
+ retrieveUpdateDisposable.add(kPayViewModel.searchPayByRefNum(refNum)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(oldPay -> {
+ LogUtil.d(TAG, "Inside the subscribe!");
+ if (oldPay != null) {
+ oldPay.setIsCanceled(true);
+ payDetail.setQrTransId(oldPay.getQrTransId());
+ payDetail.setCustomerMobile(oldPay.getCustomerMobile());
+ sharedViewModel.updatePayDetail(oldPay);
+ }
+ updateData();
+ navigateToNext();
+ },
+ onError -> {
+ LogUtil.d(TAG, "On error Unable to retrieve PayDetail");
+ updateData();
+ navigateToNext();
+ },
+ () -> {
+ LogUtil.d(TAG, "No data found! navigating to Result Page!");
+ updateData();
+ navigateToNext();
+ }
+ ));
+ }
+
+ private void updateData() {
+ kPayViewModel.insertPayDetail(payDetail);
+ sharedViewModel.payDetail.postValue(payDetail);
+ }
+
+ private void navigateToNext() {
+ routeId = R.id.action_QRRefundProcessFragment_to_transactionResultFragment;
+ safeNavigateToRouteId();
+ }
+
+ private void navigateToMain() {
+ routeId = R.id.action_QRRefundProcessFragment_to_nav_main;
+ safeNavigateToRouteId();
+ }
+
+ private void ecrActionCancel(String msg) {
+ if (sharedViewModel.isEcr.getValue() != null) {
+ if (sharedViewModel.isEcr.getValue()) {
+ sharedViewModel.isEcr.postValue(false);
+ CoreUtils.getInstance(sharedViewModel).responseRejectMsg(msg);
+ sharedViewModel.isEcrFinished.postValue(true);
+ }
+ }
+ }
+}
diff --git a/app/src/main/res/layout/fragment_qr_refund_process.xml b/app/src/main/res/layout/fragment_qr_refund_process.xml
new file mode 100644
index 0000000..baabe78
--- /dev/null
+++ b/app/src/main/res/layout/fragment_qr_refund_process.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml
index 387d79e..ae32018 100644
--- a/app/src/main/res/navigation/mobile_navigation.xml
+++ b/app/src/main/res/navigation/mobile_navigation.xml
@@ -341,6 +341,12 @@
app:popUpToInclusive="true"
android:id="@+id/action_inputPasswordFragment_to_qrRefundList"
app:destination="@id/qrRefundList" />
+
@@ -1148,9 +1154,27 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9d4e84e..641da3b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -362,6 +362,7 @@
Alert Sound
Echo Test
Processing card, please wait...
+ Processing refund, please wait...
Processing Card
Log-On
Log-Off