sec commit

This commit is contained in:
kizzy 2025-11-07 01:38:39 +07:00
parent 0a2cc295a1
commit 1cedbc987c
38 changed files with 359 additions and 282 deletions

File diff suppressed because one or more lines are too long

29
app/.gitignore vendored
View File

@ -1 +1,28 @@
/build /build
# Built files
*.apk
*.aab
*.dex
*.class
# Gradle
.gradle/
build/
*/build/
# Android Studio
*.iml
.idea/
local.properties
# Keystore
*.jks
*.keystore
# OS files
.DS_Store
Thumbs.db
# Logs
*.log

View File

@ -14,8 +14,8 @@ android {
applicationId "com.utsmm.kbz" applicationId "com.utsmm.kbz"
minSdk 24 minSdk 24
targetSdk 33 targetSdk 33
versionCode 3 versionCode 4
versionName "1.03" versionName "1.04"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

Binary file not shown.

View File

@ -11,8 +11,8 @@
"type": "SINGLE", "type": "SINGLE",
"filters": [], "filters": [],
"attributes": [], "attributes": [],
"versionCode": 3, "versionCode": 4,
"versionName": "1.03", "versionName": "1.04",
"outputFile": "app-release.apk" "outputFile": "app-release.apk"
} }
], ],

View File

@ -143,7 +143,7 @@ public class MyBindingAdapter {
imgURL = R.drawable.logo_mpu; imgURL = R.drawable.logo_mpu;
break; break;
case "WALLET": case "WALLET":
imgURL = R.drawable.logo_wave; imgURL = R.drawable.logo_kpay;
break; break;
default: default:
imgURL = R.drawable.logo_unk; imgURL = R.drawable.logo_unk;
@ -293,7 +293,7 @@ public class MyBindingAdapter {
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
@BindingAdapter({"isTrace"}) @BindingAdapter({"isTrace"})
public static void checkIsTraceOrInvoice(TextView textView, PayDetail payDetail) { public static void checkIsTraceOrInvoice(TextView textView, PayDetail payDetail) {
if(payDetail.getTransactionType() == TransactionsType.MMQR.value || payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value) { if(payDetail.getTransactionType() == TransactionsType.MMQR.value || payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
textView.setText("INV:"+payDetail.getInvoiceNo()); textView.setText("INV:"+payDetail.getInvoiceNo());
} else { } else {
textView.setText("TRC:"+payDetail.getVoucherNo()); textView.setText("TRC:"+payDetail.getVoucherNo());

View File

@ -12,6 +12,7 @@ import com.utsmyanmar.baselib.util.DataBindingConfig;
import com.utsmyanmar.baselib.util.TimeoutCallback; import com.utsmyanmar.baselib.util.TimeoutCallback;
import com.utsmyanmar.paylibs.utils.POSUtil; import com.utsmyanmar.paylibs.utils.POSUtil;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation; import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsSettings;
import com.utsmyanmar.paylibs.utils.enums.InvalidAmount; import com.utsmyanmar.paylibs.utils.enums.InvalidAmount;
import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType; import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType;
import com.utsmm.kbz.BR; import com.utsmm.kbz.BR;
@ -173,7 +174,7 @@ public class InputAmountFragment extends DataBindingFragment implements DataBind
} }
} }
@ -202,14 +203,27 @@ public class InputAmountFragment extends DataBindingFragment implements DataBind
public void onConfirm(){ public void onConfirm(){
if(isInputValid(Objects.requireNonNull(inputAmountViewModel.inputAmountView.getValue()))){ if(isInputValid(Objects.requireNonNull(inputAmountViewModel.inputAmountView.getValue()))){
inputAmountViewModel.invalidAmountMsg.setValue(""); inputAmountViewModel.invalidAmountMsg.setValue("");
/*
* SMILE requested to add ".00" even they type non decimal amount... boolean decimalEnabled = SystemParamsOperation.getInstance().getDecimalEnable();
* 23/09/2024 String inputValue = inputAmountViewModel.inputAmountView.getValue();
* */
if(!inputAmountViewModel.inputAmountView.getValue().contains(".")) { if (decimalEnabled) {
sharedViewModel.amount.setValue(inputAmountViewModel.inputAmountView.getValue()+".00"); // SMILE requested to add ".00" even they type non decimal amount...
// 23/09/2024
if (!inputValue.contains(".")) {
sharedViewModel.amount.setValue(inputValue + ".00");
} else {
sharedViewModel.amount.setValue(inputValue);
}
} else { } else {
sharedViewModel.amount.setValue(inputAmountViewModel.inputAmountView.getValue()); // If decimal is not enabled, only allow integer values.
if (inputValue.contains(".")) {
// Show error if decimals are entered when disabled
showSingleInfoDialog("Decimal values are not allowed.");
return;
} else {
sharedViewModel.amount.setValue(inputValue);
}
} }
observeRouteId(false); observeRouteId(false);

View File

@ -81,7 +81,7 @@ public class PrintReceiptFragment extends DataBindingFragment implements DataBin
PayDetail payDetail = sharedViewModel.payDetail.getValue(); PayDetail payDetail = sharedViewModel.payDetail.getValue();
if(payDetail != null && !payDetail.getTradeAnswerCode().equals(Constant.ANSWER_CODE_APPROVED) && !payDetail.getTradeAnswerCode().equals(Constant.ANSWER_CODE_ACCEPT) && sharedViewModel.transactionsType.getValue() != TransactionsType.MMQR && sharedViewModel.transactionsType.getValue() != TransactionsType.WAVEPAY_REFUND && sharedViewModel.transactionsType.getValue() != TransactionsType.MMQR_INQUIRY_STATUS) { if(payDetail != null && !payDetail.getTradeAnswerCode().equals(Constant.ANSWER_CODE_APPROVED) && !payDetail.getTradeAnswerCode().equals(Constant.ANSWER_CODE_ACCEPT) && sharedViewModel.transactionsType.getValue() != TransactionsType.MMQR && sharedViewModel.transactionsType.getValue() != TransactionsType.MMQR_REFUND && sharedViewModel.transactionsType.getValue() != TransactionsType.MMQR_INQUIRY_STATUS) {
navigateNextScreen(); navigateNextScreen();
} }

View File

@ -96,7 +96,7 @@ public class ReceiptFragment extends DataBindingFragment {
} }
SystemParamsOperation systemParamsOperation = SystemParamsOperation.getInstance(); SystemParamsOperation systemParamsOperation = SystemParamsOperation.getInstance();
// Load sample bank logo // Load sample bank logo
data.bankLogo = BitmapFactory.decodeResource(getResources(), R.drawable.weeny_pos_white_banner); data.bankLogo = BitmapFactory.decodeResource(getResources(), R.drawable.logo_kbzbank);
// Set sample data // Set sample data
data.bankName = "YOUR BANK"; data.bankName = "YOUR BANK";

View File

@ -185,18 +185,18 @@ public class TransactionResultFragment extends DataBindingFragment implements Da
private boolean isNonWavepayTransaction(TransactionsType transactionType) { private boolean isNonWavepayTransaction(TransactionsType transactionType) {
return transactionType != TransactionsType.MMQR && return transactionType != TransactionsType.MMQR &&
transactionType != TransactionsType.MMQR_INQUIRY_STATUS && transactionType != TransactionsType.MMQR_INQUIRY_STATUS &&
transactionType != TransactionsType.WAVEPAY_REFUND; transactionType != TransactionsType.MMQR_REFUND;
} }
private boolean isWavePayNonSuccessTransaction(TransactionsType transactionType, PayDetail payDetail) { private boolean isWavePayNonSuccessTransaction(TransactionsType transactionType, PayDetail payDetail) {
return (transactionType == TransactionsType.MMQR && payDetail.getQrTransStatus() != 1) || return (transactionType == TransactionsType.MMQR && payDetail.getQrTransStatus() != 1) ||
(transactionType == TransactionsType.MMQR_INQUIRY_STATUS && payDetail.getQrTransStatus() != 1) || (transactionType == TransactionsType.MMQR_INQUIRY_STATUS && payDetail.getQrTransStatus() != 1) ||
(transactionType == TransactionsType.WAVEPAY_REFUND && payDetail.getQrTransStatus() != 1); (transactionType == TransactionsType.MMQR_REFUND && payDetail.getQrTransStatus() != 1);
} }
private boolean isWavePaySuccessTransaction(TransactionsType transactionType, PayDetail payDetail) { private boolean isWavePaySuccessTransaction(TransactionsType transactionType, PayDetail payDetail) {
return (transactionType == TransactionsType.MMQR || transactionType == TransactionsType.WAVEPAY_REFUND) && return (transactionType == TransactionsType.MMQR || transactionType == TransactionsType.MMQR_REFUND) &&
payDetail.getQrTransStatus() == 1; payDetail.getQrTransStatus() == 1;
} }

View File

@ -28,8 +28,6 @@ import com.utsmm.kbz.util.DecimalDigitsInputFilter;
import com.utsmm.kbz.util.TransactionUtil; import com.utsmm.kbz.util.TransactionUtil;
import com.utsmm.kbz.util.ecr.CoreUtils; import com.utsmm.kbz.util.ecr.CoreUtils;
import java.util.Locale;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.disposables.CompositeDisposable; import io.reactivex.rxjava3.disposables.CompositeDisposable;
import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.disposables.Disposable;
@ -126,7 +124,7 @@ public class QRRefundFragment extends DataBindingFragment {
} }
private void initData() { private void initData() {
payDetail = TransactionUtil.getInstance().initWalletTransaction(TransactionsType.WAVEPAY_REFUND); payDetail = TransactionUtil.getInstance().initWalletTransaction(TransactionsType.MMQR_REFUND);
payDetail.setInvoiceNo(SystemParamsOperation.getInstance().getIncrementInvoiceNum()); payDetail.setInvoiceNo(SystemParamsOperation.getInstance().getIncrementInvoiceNum());
} }
@ -169,7 +167,7 @@ public class QRRefundFragment extends DataBindingFragment {
.subscribe( .subscribe(
response -> { response -> {
dismissLoadingDialog(); dismissLoadingDialog();
handleRefundResponse(response, referenceNo, refundAmount); handleRefundResponse(response, referenceNo);
}, },
throwable -> { throwable -> {
dismissLoadingDialog(); dismissLoadingDialog();
@ -184,10 +182,12 @@ public class QRRefundFragment extends DataBindingFragment {
refundDisposable.add(refundDi); refundDisposable.add(refundDi);
} }
private void handleRefundResponse(KPayRefund.RefundResponse response, String referenceNo, String refundAmount) { private void handleRefundResponse(KPayRefund.RefundResponse response, String referenceNo) {
if (response != null && response.getResponse() != null && "REFUND_SUCCESS".equalsIgnoreCase(response.getResponse().getRefundStatus())) { if (response != null && response.getResponse() != null && "REFUND_SUCCESS".equalsIgnoreCase(response.getResponse().getRefundStatus())) {
LogUtil.d(TAG, "Refund successful!"); LogUtil.d(TAG, "Refund successful!");
String refundAmount = response.getResponse().getRefundAmount();
String dateTime = SystemDateTime.getTodayDateFormat() + " " + SystemDateTime.getTodayTimeFormat(); String dateTime = SystemDateTime.getTodayDateFormat() + " " + SystemDateTime.getTodayTimeFormat();
payDetail.setAmount(refundAmount == null ? 0 : POSUtil.getInstance().convertAmount(refundAmount)); payDetail.setAmount(refundAmount == null ? 0 : POSUtil.getInstance().convertAmount(refundAmount));
payDetail.setOriginalTransDate(dateTime); payDetail.setOriginalTransDate(dateTime);

View File

@ -152,7 +152,7 @@ public class DetailReportFragment extends DataBindingFragment {
if(sharedViewModel.hostType.getValue() == HostType.MPU) { if(sharedViewModel.hostType.getValue() == HostType.MPU) {
if(payDetail.getAccountType().equals("MPU") && payDetail.getTransactionType() != TransactionsType.WAVEPAY_REFUND.value && payDetail.getTransactionType() != TransactionsType.MMQR.value && payDetail.getTransactionType() != TransactionsType.REVERSAL.value && payDetail.getTransactionType() != TransactionsType.SETTLEMENT.value && POSUtil.getInstance().getYesterdayDate().compareTo(POSUtil.getInstance().getDateByString(payDetail.transDate)) < 1) { if(payDetail.getAccountType().equals("MPU") && payDetail.getTransactionType() != TransactionsType.MMQR_REFUND.value && payDetail.getTransactionType() != TransactionsType.MMQR.value && payDetail.getTransactionType() != TransactionsType.REVERSAL.value && payDetail.getTransactionType() != TransactionsType.SETTLEMENT.value && POSUtil.getInstance().getYesterdayDate().compareTo(POSUtil.getInstance().getDateByString(payDetail.transDate)) < 1) {
boolean isNeedMinusSign = payDetail.getTransactionType() == TransactionsType.VOID.value || payDetail.getTransactionType() == TransactionsType.REFUND.value; boolean isNeedMinusSign = payDetail.getTransactionType() == TransactionsType.VOID.value || payDetail.getTransactionType() == TransactionsType.REFUND.value;
lists.add(payDetail); lists.add(payDetail);
count++; count++;
@ -164,8 +164,8 @@ public class DetailReportFragment extends DataBindingFragment {
} }
} else if(sharedViewModel.hostType.getValue() == HostType.QR) { } else if(sharedViewModel.hostType.getValue() == HostType.QR) {
if( (payDetail.getTransactionType() == TransactionsType.MMQR.value || payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value ) && payDetail.getQrTransStatus() == 1 && POSUtil.getInstance().getYesterdayDate().compareTo(POSUtil.getInstance().getDateByString(payDetail.transDate)) < 1 ) { 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 ) {
boolean isNeedMinusSign = payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value; boolean isNeedMinusSign = payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value;
lists.add(payDetail); lists.add(payDetail);
count++; count++;
if(isNeedMinusSign) { if(isNeedMinusSign) {
@ -176,7 +176,7 @@ public class DetailReportFragment extends DataBindingFragment {
} }
} if(sharedViewModel.hostType.getValue() == HostType.VISA_MASTER) { } if(sharedViewModel.hostType.getValue() == HostType.VISA_MASTER) {
if(!payDetail.getAccountType().equals("MPU") && payDetail.getTransactionType() != TransactionsType.WAVEPAY_REFUND.value && payDetail.getTransactionType() != TransactionsType.MMQR.value && payDetail.getTransactionType() != TransactionsType.REVERSAL.value && payDetail.getTransactionType() != TransactionsType.SETTLEMENT.value && POSUtil.getInstance().getYesterdayDate().compareTo(POSUtil.getInstance().getDateByString(payDetail.transDate)) < 1) { if(!payDetail.getAccountType().equals("MPU") && payDetail.getTransactionType() != TransactionsType.MMQR_REFUND.value && payDetail.getTransactionType() != TransactionsType.MMQR.value && payDetail.getTransactionType() != TransactionsType.REVERSAL.value && payDetail.getTransactionType() != TransactionsType.SETTLEMENT.value && POSUtil.getInstance().getYesterdayDate().compareTo(POSUtil.getInstance().getDateByString(payDetail.transDate)) < 1) {
boolean isNeedMinusSign = payDetail.getTransactionType() == TransactionsType.VOID.value || payDetail.getTransactionType() == TransactionsType.REFUND.value; boolean isNeedMinusSign = payDetail.getTransactionType() == TransactionsType.VOID.value || payDetail.getTransactionType() == TransactionsType.REFUND.value;
lists.add(payDetail); lists.add(payDetail);
count++; count++;

View File

@ -94,7 +94,7 @@ public class ManagementFunctionFragment extends DataBindingFragment {
} else if(payDetail.getTransactionType() == TransactionsType.MMQR.value && payDetail.getQrTransStatus() != 1) { } else if(payDetail.getTransactionType() == TransactionsType.MMQR.value && payDetail.getQrTransStatus() != 1) {
navigateToNotFoundScreen(); navigateToNotFoundScreen();
return; return;
} else if(payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value && payDetail.getQrTransStatus() != 1) { } else if(payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value && payDetail.getQrTransStatus() != 1) {
navigateToNotFoundScreen(); navigateToNotFoundScreen();
return; return;
} }

View File

@ -313,18 +313,18 @@ public class ReprintAnyTransactionFragment extends DataBindingFragment {
// April 2, 2024 client requested to add QR host at host selection type // April 2, 2024 client requested to add QR host at host selection type
if(sharedViewModel.hostType.getValue() == HostType.MPU) { if(sharedViewModel.hostType.getValue() == HostType.MPU) {
if(pay.getAccountType().equals("MPU") && pay.getTransactionType() != TransactionsType.MMQR.value && pay.getTransactionType() != TransactionsType.WAVEPAY_REFUND.value) { if(pay.getAccountType().equals("MPU") && pay.getTransactionType() != TransactionsType.MMQR.value && pay.getTransactionType() != TransactionsType.MMQR_REFUND.value) {
filteredLists.add(pay); filteredLists.add(pay);
} }
} else if(sharedViewModel.hostType.getValue() == HostType.QR) { } else if(sharedViewModel.hostType.getValue() == HostType.QR) {
if(pay.getTransactionType() == TransactionsType.MMQR.value || pay.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value) { if(pay.getTransactionType() == TransactionsType.MMQR.value || pay.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
if(pay.getQrTransStatus() == 1) { if(pay.getQrTransStatus() == 1) {
filteredLists.add(pay); filteredLists.add(pay);
} }
} }
} else if(sharedViewModel.hostType.getValue() == HostType.VISA_MASTER) { } else if(sharedViewModel.hostType.getValue() == HostType.VISA_MASTER) {
if(!pay.getAccountType().equals("MPU") && pay.getTransactionType() != TransactionsType.MMQR.value && pay.getTransactionType() != TransactionsType.WAVEPAY_REFUND.value) { if(!pay.getAccountType().equals("MPU") && pay.getTransactionType() != TransactionsType.MMQR.value && pay.getTransactionType() != TransactionsType.MMQR_REFUND.value) {
filteredLists.add(pay); filteredLists.add(pay);
} }
} }

View File

@ -57,7 +57,7 @@ public class SelectRefundFragment extends DataBindingFragment {
} }
public void onQRRefund() { public void onQRRefund() {
sharedViewModel.transactionsType.postValue(TransactionsType.WAVEPAY_REFUND); sharedViewModel.transactionsType.postValue(TransactionsType.MMQR_REFUND);
routeId = R.id.action_selectRefundFragment_to_QRRefundFragment; routeId = R.id.action_selectRefundFragment_to_QRRefundFragment;
safeNavigateToRouteId(); safeNavigateToRouteId();
} }

View File

@ -265,7 +265,7 @@ public class TransactionSummaryFragment extends DataBindingFragment {
if (sharedViewModel.hostType.getValue() == HostType.QR) { if (sharedViewModel.hostType.getValue() == HostType.QR) {
if (pay.getTransactionType() == TransactionsType.MMQR.value && pay.getQrTransStatus() == 1) { if (pay.getTransactionType() == TransactionsType.MMQR.value && pay.getQrTransStatus() == 1) {
wave.inc(pay.amount); wave.inc(pay.amount);
} else if (pay.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value && pay.getQrTransStatus() == 1) { } else if (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value && pay.getQrTransStatus() == 1) {
waveRefund.inc(pay.amount); waveRefund.inc(pay.amount);
} }
} else if (sharedViewModel.hostType.getValue() == HostType.MPU) { } else if (sharedViewModel.hostType.getValue() == HostType.MPU) {

View File

@ -13,6 +13,7 @@ import com.utsmm.kbz.BR;
import com.utsmm.kbz.R; import com.utsmm.kbz.R;
import com.utsmm.kbz.config.Constants; import com.utsmm.kbz.config.Constants;
import com.utsmm.kbz.util.enums.ResponseStatus; import com.utsmm.kbz.util.enums.ResponseStatus;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
/* /*
* This file is not using in this project cuz IPEK is used instead of TMK. * This file is not using in this project cuz IPEK is used instead of TMK.
@ -54,11 +55,8 @@ public class SignOnFragment extends DataBindingFragment {
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
signOnViewModel.startSignOnProcess(); signOnViewModel.startSignOnProcess();
observeData(); observeData();
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,7 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
android:width="10dp"
android:height="10dp" />
<solid android:color="#B0B0B0" />
</shape>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid
android:color="@color/colorPrimary"/>
</shape>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#20667eea">
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
<corners android:radius="16dp" />
</shape>
</item>
</ripple>

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@ -55,6 +55,7 @@
android:layout_marginEnd="16dp" android:layout_marginEnd="16dp"
app:cardCornerRadius="12dp" app:cardCornerRadius="12dp"
app:cardElevation="4dp" app:cardElevation="4dp"
android:layout_margin="4dp"
android:background="@color/colorPrimary"> android:background="@color/colorPrimary">
<TextView <TextView

View File

@ -107,263 +107,215 @@
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
<!-- Available Payment Methods Title - IMPROVED VISIBILITY --> <!-- Available Payment Methods Title - minimalist -->
<TextView <TextView
android:id="@+id/paymentMethodsTitle" android:id="@+id/paymentMethodsTitle"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Available Payment Methods" android:text="Available Payment Methods"
android:textColor="@color/colorTextTitle" android:textColor="#202124"
android:textSize="16sp" android:textSize="15sp"
android:textStyle="bold" android:textStyle="bold"
android:fontFamily="@font/rubik_medium" android:fontFamily="@font/rubik_medium"
android:letterSpacing="0.05" android:letterSpacing="0.02"
android:layout_marginTop="20dp" android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@+id/headerCard" app:layout_constraintTop_toBottomOf="@id/headerCard"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" /> app:layout_constraintEnd_toEndOf="parent" />
<!-- Payment Methods List - IMPROVED UI/UX WITH BANK COLOR CODES --> <!-- Payment Methods modern, minimalist -->
<androidx.cardview.widget.CardView <LinearLayout
android:id="@+id/paymentMethodsCard"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="16dp" android:layout_marginTop="10dp"
app:cardCornerRadius="16dp" android:layout_marginBottom="10dp"
app:cardElevation="6dp" android:layout_marginStart="16dp"
app:layout_constraintTop_toBottomOf="@+id/paymentMethodsTitle" android:layout_marginEnd="16dp"
android:padding="8dp"
android:gravity="center"
android:orientation="horizontal"
app:layout_constraintTop_toBottomOf="@id/paymentMethodsTitle"
app:layout_constraintBottom_toTopOf="@id/manualEntryCard"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@+id/manualEntryCard"> android:weightSum="3">
<LinearLayout <!-- Tap Card -->
android:layout_width="match_parent" <androidx.cardview.widget.CardView
android:layout_height="wrap_content" android:layout_width="0dp"
android:orientation="vertical" android:layout_height="96dp"
android:background="@color/white" android:layout_marginEnd="8dp"
android:padding="16dp"> android:layout_marginBottom="2dp"
android:layout_weight="1"
app:cardCornerRadius="12dp"
app:cardElevation="2dp"
android:backgroundTint="#fff"
android:foreground="?android:attr/selectableItemBackground"
android:focusable="true"
android:clickable="true">
<!-- Tap Card Method - IMPROVED WITH BANK COLORS --> <LinearLayout
<androidx.cardview.widget.CardView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:layout_marginBottom="12dp" android:orientation="vertical"
app:cardCornerRadius="12dp" android:gravity="center"
app:cardElevation="4dp" android:padding="8dp">
android:foreground="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<LinearLayout <ImageView
android:layout_width="match_parent" android:layout_width="32dp"
android:layout_height="32dp"
android:src="@drawable/ic_tap_card"
app:tint="#2E7D32"
android:contentDescription="NFC Tap" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:text="Tap"
android:gravity="center_vertical" android:textColor="#202124"
android:background="#2E7D32" android:textSize="13sp"
android:padding="16dp"> android:fontFamily="@font/rubik_medium"
android:textStyle="bold"
android:layout_marginTop="4dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Contactless"
android:textColor="#909090"
android:textSize="10sp"
android:fontFamily="@font/rubik_regular" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<LinearLayout <!-- Insert Card -->
android:layout_width="0dp" <androidx.cardview.widget.CardView
android:layout_height="wrap_content" android:layout_width="0dp"
android:layout_weight="1" android:layout_height="96dp"
android:orientation="vertical"> android:layout_marginEnd="8dp"
android:layout_weight="1"
app:cardCornerRadius="12dp"
android:layout_marginBottom="2dp"
app:cardElevation="2dp"
android:backgroundTint="#fff"
android:foreground="?android:attr/selectableItemBackground"
android:focusable="true"
android:clickable="true">
<TextView <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tap"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
android:fontFamily="@font/rubik_medium" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Contactless Payment"
android:textColor="@color/white"
android:textSize="11sp"
android:fontFamily="@font/rubik_regular"
android:alpha="0.85"
android:layout_marginTop="2dp" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NFC"
android:textColor="#2E7D32"
android:textSize="10sp"
android:fontFamily="@font/rubik_medium"
android:background="@drawable/bg_rounded_btn_cancel_cv"
android:paddingHorizontal="8dp"
android:paddingVertical="4dp" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- Insert Card Method - IMPROVED WITH BANK COLORS -->
<androidx.cardview.widget.CardView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:layout_marginBottom="12dp" android:orientation="vertical"
app:cardCornerRadius="12dp" android:gravity="center"
app:cardElevation="4dp" android:padding="8dp">
android:foreground="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<LinearLayout <ImageView
android:layout_width="match_parent" android:layout_width="32dp"
android:layout_height="32dp"
android:src="@drawable/ic_insert_card"
app:tint="#1976D2"
android:contentDescription="Insert Chip" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:text="Chip"
android:gravity="center_vertical" android:textColor="#202124"
android:background="#1976D2" android:textSize="13sp"
android:padding="16dp"> android:fontFamily="@font/rubik_medium"
android:textStyle="bold"
android:layout_marginTop="4dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="EMV"
android:textColor="#909090"
android:textSize="10sp"
android:fontFamily="@font/rubik_regular" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<LinearLayout <!-- Swipe Card -->
android:layout_width="0dp" <androidx.cardview.widget.CardView
android:layout_height="wrap_content" android:layout_width="0dp"
android:layout_weight="1" android:layout_height="96dp"
android:orientation="vertical"> android:layout_weight="1"
app:cardCornerRadius="12dp"
android:layout_marginBottom="2dp"
app:cardElevation="2dp"
android:backgroundTint="#fff"
android:foreground="?android:attr/selectableItemBackground"
android:focusable="true"
android:clickable="true">
<TextView <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Insert"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
android:fontFamily="@font/rubik_medium" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Chip Card Payment"
android:textColor="@color/white"
android:textSize="11sp"
android:fontFamily="@font/rubik_regular"
android:alpha="0.85"
android:layout_marginTop="2dp" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CHIP"
android:textColor="#1976D2"
android:textSize="10sp"
android:fontFamily="@font/rubik_medium"
android:background="@drawable/bg_rounded_btn_cancel_cv"
android:paddingHorizontal="8dp"
android:paddingVertical="4dp" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- Swipe Card Method - IMPROVED WITH BANK COLORS -->
<androidx.cardview.widget.CardView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
app:cardCornerRadius="12dp" android:orientation="vertical"
app:cardElevation="4dp" android:gravity="center"
android:foreground="?android:attr/selectableItemBackground" android:padding="8dp">
android:clickable="true"
android:focusable="true">
<LinearLayout <ImageView
android:layout_width="match_parent" android:layout_width="32dp"
android:layout_height="32dp"
android:src="@drawable/ic_swipe_card"
app:tint="#F57C00"
android:contentDescription="Swipe Magstripe" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:text="Swipe"
android:gravity="center_vertical" android:textColor="#202124"
android:background="#F57C00" android:textSize="13sp"
android:padding="16dp"> android:fontFamily="@font/rubik_medium"
android:textStyle="bold"
android:layout_marginTop="4dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Magstripe"
android:textColor="#909090"
android:textSize="10sp"
android:fontFamily="@font/rubik_regular" />
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
<LinearLayout <!-- Manual Entry minimalist outlined button -->
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Swipe"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
android:fontFamily="@font/rubik_medium" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Magnetic Stripe Payment"
android:textColor="@color/white"
android:textSize="11sp"
android:fontFamily="@font/rubik_regular"
android:alpha="0.85"
android:layout_marginTop="2dp" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="MAG"
android:textColor="#F57C00"
android:textSize="10sp"
android:fontFamily="@font/rubik_medium"
android:background="@drawable/bg_rounded_btn_cancel_cv"
android:paddingHorizontal="8dp"
android:paddingVertical="4dp" />
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- Manual Entry Button - ENHANCED -->
<androidx.cardview.widget.CardView <androidx.cardview.widget.CardView
android:id="@+id/manualEntryCard" android:id="@+id/manualEntryCard"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="44dp"
android:layout_margin="16dp" android:layout_marginStart="32dp"
android:layout_marginEnd="32dp"
android:layout_marginBottom="18dp"
app:cardCornerRadius="16dp" app:cardCornerRadius="16dp"
app:cardElevation="6dp" app:cardElevation="0.5dp"
android:foreground="?android:attr/selectableItemBackground" android:foreground="?android:attr/selectableItemBackground"
android:clickable="true" android:clickable="true"
android:focusable="true" android:focusable="true"
app:disableBtn="@{sharedVM.ManualEntryStatus ?? false}" app:disableBtn="@{sharedVM.ManualEntryStatus ?? false}"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"> app:layout_constraintEnd_toEndOf="parent"
android:backgroundTint="#fff">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:orientation="horizontal" android:orientation="horizontal"
android:gravity="center" android:gravity="center"
android:background="@color/colorPrimary"
android:padding="18dp"
android:onClick="@{()-> click.onClickManualEntry()}"> android:onClick="@{()-> click.onClickManualEntry()}">
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/btn_txt_manual_entry" android:text="@string/btn_txt_manual_entry"
android:textColor="@color/white" android:textColor="#1976D2"
android:textSize="16sp" android:textSize="15sp"
android:textStyle="bold" android:textStyle="bold"
android:fontFamily="@font/rubik_medium" /> android:fontFamily="@font/rubik_medium" />

View File

@ -51,18 +51,18 @@
android:fontFamily="@font/rubik_medium" android:fontFamily="@font/rubik_medium"
android:textAlignment="center" android:textAlignment="center"
android:gravity="center" /> android:gravity="center" />
<!-- Amount now in header, subtle style below title -->
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@{sharedViewModel.amount == null ? ` `:sharedViewModel._currencyText+` `+sharedViewModel.amount }" android:text="@{sharedViewModel.amount == null ? ` `:sharedViewModel._currencyText+` `+sharedViewModel.amount }"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="24sp" android:textSize="16sp"
android:textStyle="bold" android:fontFamily="@font/rubik_regular"
android:fontFamily="@font/rubik_medium"
android:textAlignment="center" android:textAlignment="center"
android:gravity="center" android:gravity="center"
android:layout_marginTop="8dp" android:layout_marginTop="4dp"
android:alpha="0.80"
tools:text="MMK 2,500.00" /> tools:text="MMK 2,500.00" />
</LinearLayout> </LinearLayout>
@ -89,6 +89,52 @@
android:padding="20dp"> android:padding="20dp">
<!-- PIN length indicator (6 dots) -->
<LinearLayout
android:id="@+id/pinIndicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="10dp">
<View
android:layout_width="10dp"
android:layout_height="10dp"
android:background="@drawable/pin_dot_dim"
android:layout_margin="4dp" />
<View
android:layout_width="10dp"
android:layout_height="10dp"
android:background="@drawable/pin_dot_dim"
android:layout_margin="4dp" />
<View
android:layout_width="10dp"
android:layout_height="10dp"
android:background="@drawable/pin_dot_dim"
android:layout_margin="4dp" />
<View
android:layout_width="10dp"
android:layout_height="10dp"
android:background="@drawable/pin_dot_dim"
android:layout_margin="4dp" />
<View
android:layout_width="10dp"
android:layout_height="10dp"
android:background="@drawable/pin_dot_dim"
android:layout_margin="4dp" />
<View
android:layout_width="10dp"
android:layout_height="10dp"
android:background="@drawable/pin_dot_dim"
android:layout_margin="4dp" />
</LinearLayout>
<com.utsmyanmar.baselib.ui.PinEditText <com.utsmyanmar.baselib.ui.PinEditText
android:id="@+id/passwordEditText" android:id="@+id/passwordEditText"

View File

@ -627,7 +627,7 @@ public abstract class BaseXPrint {
for (PayDetail pay : lists) { for (PayDetail pay : lists) {
boolean isNeedMinusSign = pay.getTransactionType() == TransactionsType.VOID.value || pay.getTransactionType() == TransactionsType.REFUND.value || pay.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value; boolean isNeedMinusSign = pay.getTransactionType() == TransactionsType.VOID.value || pay.getTransactionType() == TransactionsType.REFUND.value || pay.getTransactionType() == TransactionsType.MMQR_REFUND.value;
if (hostType == HostType.MPU || hostType == HostType.VISA_MASTER) { if (hostType == HostType.MPU || hostType == HostType.VISA_MASTER) {
print2ColumnsString(pay.getAccountType(), PrintUtils.getInstance().maskCardNumberPciDss(pay.getCardNo())); print2ColumnsString(pay.getAccountType(), PrintUtils.getInstance().maskCardNumberPciDss(pay.getCardNo()));
@ -636,14 +636,14 @@ public abstract class BaseXPrint {
print2ColumnsString(pay.getReferNo(), ""); print2ColumnsString(pay.getReferNo(), "");
} else if (hostType == HostType.QR) { } else if (hostType == HostType.QR) {
if (pay.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value) { if (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
print2ColumnsString("QR PAYMENT", ""); print2ColumnsString("QR PAYMENT", "");
} else { } else {
print2ColumnsString(pay.getCustomerMobile().toUpperCase(), ""); print2ColumnsString(pay.getCustomerMobile().toUpperCase(), "");
} }
print2ColumnsString("**/**", ""); print2ColumnsString("**/**", "");
print2ColumnsString(pay.getTransType().replace("_", " "), pay.getVoucherNo()); print2ColumnsString(pay.getTransType().replace("_", " "), pay.getVoucherNo());
if (pay.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value) { if (pay.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
print2ColumnsString(pay.getReferNo() + "(RRN)", isNeedMinusSign ? "-" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount()) : "" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount())); print2ColumnsString(pay.getReferNo() + "(RRN)", isNeedMinusSign ? "-" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount()) : "" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount()));
} else { } else {
print2ColumnsString(pay.getQrTransId(), isNeedMinusSign ? "-" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount()) : "" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount())); print2ColumnsString(pay.getQrTransId(), isNeedMinusSign ? "-" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount()) : "" + PrintUtils.getInstance().getSeparatorNumberFormat(pay.getAmount()));
@ -856,7 +856,7 @@ public abstract class BaseXPrint {
if (payDetail.getTransactionType() == TransactionsType.MMQR.value && payDetail.getQrTransStatus() == 1) { if (payDetail.getTransactionType() == TransactionsType.MMQR.value && payDetail.getQrTransStatus() == 1) {
printer.appendPrnStr("TRACE NO:" + traceNum + " INV NO: " + invoiceNo, fontNormal, AlignEnum.LEFT); printer.appendPrnStr("TRACE NO:" + traceNum + " INV NO: " + invoiceNo, fontNormal, AlignEnum.LEFT);
} else if (!payDetail.getTransType().equals(SETTLEMENT) && !payDetail.getTransType().equals(SUMMARY) && payDetail.getTransactionType() != TransactionsType.WAVEPAY_REFUND.value && payDetail.getTransactionType() != TransactionsType.MMQR.value) { } else if (!payDetail.getTransType().equals(SETTLEMENT) && !payDetail.getTransType().equals(SUMMARY) && payDetail.getTransactionType() != TransactionsType.MMQR_REFUND.value && payDetail.getTransactionType() != TransactionsType.MMQR.value) {
printer.appendPrnStr("BTH NO :" + batchNum + " INV NO: " + invoiceNo, fontNormal, AlignEnum.LEFT); printer.appendPrnStr("BTH NO :" + batchNum + " INV NO: " + invoiceNo, fontNormal, AlignEnum.LEFT);
} else if (payDetail.getTransType().equals(SUMMARY)) { } else if (payDetail.getTransType().equals(SUMMARY)) {
printer.appendPrnStr("HOST :" + HOST_NAME_MPU + "", fontNormal, AlignEnum.LEFT); printer.appendPrnStr("HOST :" + HOST_NAME_MPU + "", fontNormal, AlignEnum.LEFT);
@ -871,7 +871,7 @@ public abstract class BaseXPrint {
emptyLine(1); emptyLine(1);
printer.appendPrnStr(transType.replace("_", " "), fontBold, AlignEnum.CENTER); printer.appendPrnStr(transType.replace("_", " "), fontBold, AlignEnum.CENTER);
if (!(payDetail.getQrTransStatus() != 1 && (payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value || payDetail.getTransactionType() == TransactionsType.MMQR.value))) { if (!(payDetail.getQrTransStatus() != 1 && (payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value || payDetail.getTransactionType() == TransactionsType.MMQR.value))) {
printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT); printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT);
printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT); printer.appendPrnStr("\n", fontNormal, AlignEnum.LEFT);
} }

View File

@ -99,7 +99,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
try { try {
this.callbackStatus = printXStatus; this.callbackStatus = printXStatus;
if (payDetail.getTransactionType() == TransactionsType.MMQR.value || payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value) { if (payDetail.getTransactionType() == TransactionsType.MMQR.value || payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
printQRPayReceipt(payDetail, isMerchantCopy); printQRPayReceipt(payDetail, isMerchantCopy);
} else if (payDetail.getTransactionType() == TransactionsType.SETTLEMENT.value) { } else if (payDetail.getTransactionType() == TransactionsType.SETTLEMENT.value) {
printSmileSettlementReport(payDetail,printXStatus); printSmileSettlementReport(payDetail,printXStatus);
@ -159,7 +159,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
printLogo(); printLogo();
printMerchantHeader(); printMerchantHeader();
printTransHeader(payDetail); printTransHeader(payDetail);
printTransDetailWave(payDetail); printTransDetailQR(payDetail);
LogUtil.d(TAG,"QR trans status:"+payDetail.getQrTransStatus()); LogUtil.d(TAG,"QR trans status:"+payDetail.getQrTransStatus());
if (payDetail.getQrTransStatus() == 1) { if (payDetail.getQrTransStatus() == 1) {
printTransFooter(true,payDetail, isMerchantCopy); printTransFooter(true,payDetail, isMerchantCopy);
@ -283,7 +283,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
} }
private void printTransDetailWave(PayDetail payDetail) { private void printTransDetailQR(PayDetail payDetail) {
try { try {
// payDetail.getCustomerMobile() // as channel type // payDetail.getCustomerMobile() // as channel type
@ -296,7 +296,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
print2ColumnsStringNoSpace("TRXN ID ",": "+ (payDetail.getQrTransId() == null || payDetail.getQrTransId().isEmpty() ? "-": payDetail.getQrTransId())); print2ColumnsStringNoSpace("TRXN ID ",": "+ (payDetail.getQrTransId() == null || payDetail.getQrTransId().isEmpty() ? "-": payDetail.getQrTransId()));
print2ColumnsStringNoSpace("STATUS ",": "+ PrintUtils.getInstance().getQrTransStatus(payDetail.getQrTransStatus())); print2ColumnsStringNoSpace("STATUS ",": "+ PrintUtils.getInstance().getQrTransStatus(payDetail.getQrTransStatus()));
} else if(payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value && payDetail.getQrTransStatus() == 1) { } else if(payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value && payDetail.getQrTransStatus() == 1) {
print2ColumnsStringNoSpace("TRXN REF ",":"+ payDetail.getReferNo()); print2ColumnsStringNoSpace("TRXN REF ",":"+ payDetail.getReferNo());
print2ColumnsStringNoSpace("TXN DATE/TIME",":"+ payDetail.getOriginalTransDate()); print2ColumnsStringNoSpace("TXN DATE/TIME",":"+ payDetail.getOriginalTransDate());
print2ColumnsStringNoSpace("STATUS ",":"+ PrintUtils.getInstance().getQrTransStatus(payDetail.getQrTransStatus())); print2ColumnsStringNoSpace("STATUS ",":"+ PrintUtils.getInstance().getQrTransStatus(payDetail.getQrTransStatus()));
@ -308,7 +308,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
} }
if (!(payDetail.getQrTransStatus() != 1 && (payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value || payDetail.getTransactionType() == TransactionsType.MMQR.value))) { if (!(payDetail.getQrTransStatus() != 1 && (payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value || payDetail.getTransactionType() == TransactionsType.MMQR.value))) {
emptyLine(2); emptyLine(2);
} }
// check is pin change // check is pin change
@ -316,34 +316,25 @@ public class PrintXImpl extends BaseXPrint implements PrintX {
if (payDetail.getQrTransStatus() == 1) { if (payDetail.getQrTransStatus() == 1) {
boolean isNeedMinusSign = payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value; boolean isNeedMinusSign = payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value;
print2ColumnsStringBoldCenter("TOTAL MMK", isNeedMinusSign? "- "+PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount()): PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount())); print2ColumnsStringBoldCenter("TOTAL MMK", isNeedMinusSign? "- "+PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount()): PrintUtils.getInstance().getSeparatorNumberFormat(payDetail.getAmount()));
if(payDetail.getTransactionType() == TransactionsType.MMQR.value) { // if(payDetail.getTransactionType() == TransactionsType.MMQR.value) {
String data = payDetail.getReferNo()+"-"+payDetail.getAmount()+"-"+payDetail.getQrTransId()+"-"+payDetail.getMerchantNo()+"-"+payDetail.getCustomerMobile().toUpperCase()+"-"+payDetail.getOriginalTransDate(); // String data = payDetail.getReferNo()+"-"+payDetail.getAmount()+"-"+payDetail.getQrTransId()+"-"+payDetail.getMerchantNo()+"-"+payDetail.getCustomerMobile().toUpperCase()+"-"+payDetail.getOriginalTransDate();
LogUtil.d(TAG,"QR DATA : "+data);
emptyLine(1);
printer.appendQRcode(data, 250, AlignEnum.CENTER);
/*
* below commented QR code is more quick
* */
// Bitmap qrCode = PrintUtils.getInstance().generateQRCode(data,300,300);
// //
// Bitmap mi = BitmapUtils.scale(qrCode,250,250); // LogUtil.d(TAG,"QR DATA : "+data);
// emptyLine(1);
// //
// printer.appendImage(mi,AlignEnum.CENTER); //
// printer.appendQRcode(data, 250, AlignEnum.CENTER);
//
} // }
emptyLine(1); emptyLine(1);
} else { } else {
if(payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value) { if(payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
printer.appendPrnStr("(TRANSACTION FAIL)", fontNormal, AlignEnum.CENTER); printer.appendPrnStr("(TRANSACTION FAIL)", fontNormal, AlignEnum.CENTER);
emptyLine(1); emptyLine(1);
printer.appendPrnStr(reformattedExceededString(payDetail.getTradeResultDes()), fontNormal, AlignEnum.CENTER); printer.appendPrnStr(reformattedExceededString(payDetail.getTradeResultDes()), fontNormal, AlignEnum.CENTER);

View File

@ -67,6 +67,20 @@ public class SignOnProcess {
payDetail.setTransType(TransactionsType.SIGN_ON.name); payDetail.setTransType(TransactionsType.SIGN_ON.name);
payDetail.setTransactionType(TransactionsType.SIGN_ON.value); payDetail.setTransactionType(TransactionsType.SIGN_ON.value);
if(SystemParamsOperation.getInstance().getDemoStatus()) {
byte[] encryptedPIK = ByteUtil.hexStr2Bytes("6950E9DE0594AC50465DF7F4CC842C11");
int res = PayLibNex.getInstance().deviceEngine.getPinPad().writeWKey(9, WorkKeyTypeEnum.PINKEY,encryptedPIK,encryptedPIK.length);
resultCode = res;
if (res < 0) {
flag = false;
LogUtil.d(TAG, "Fail PIK result code:" + res);
} else {
flag = true;
LogUtil.d(TAG, "Success PIK result code:" + res);
}
}
byte[] sendBytes = isoMsgX.buildISOPackets(tradeData, BitmapConfig.BPC_SIGN_ON, MessageType.NETWORK_MANAGEMENT); byte[] sendBytes = isoMsgX.buildISOPackets(tradeData, BitmapConfig.BPC_SIGN_ON, MessageType.NETWORK_MANAGEMENT);
ISOSocket.getInstance().enqueue(sendBytes, sendBytes.length,false, new ISOCallback() { ISOSocket.getInstance().enqueue(sendBytes, sendBytes.length,false, new ISOCallback() {

View File

@ -178,7 +178,7 @@ public class POSUtil {
BigDecimal unscaled = new BigDecimal(payDetail.amount); BigDecimal unscaled = new BigDecimal(payDetail.amount);
BigDecimal scaled = unscaled.scaleByPowerOfTen(-x); BigDecimal scaled = unscaled.scaleByPowerOfTen(-x);
double amounts = Double.parseDouble(scaled.toString()); double amounts = Double.parseDouble(scaled.toString());
return payDetail.getTransactionType() == TransactionsType.VOID.value || payDetail.getTransactionType() == TransactionsType.REFUND.value || payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value ? "-"+formatter.format(amounts) : ""+formatter.format(amounts); return payDetail.getTransactionType() == TransactionsType.VOID.value || payDetail.getTransactionType() == TransactionsType.REFUND.value || payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value ? "-"+formatter.format(amounts) : ""+formatter.format(amounts);
} }
public String getTransName(PayDetail payDetail) { public String getTransName(PayDetail payDetail) {
@ -282,7 +282,7 @@ public class POSUtil {
if(payDetail.getTransactionType() == TransactionsType.MMQR.value) { if(payDetail.getTransactionType() == TransactionsType.MMQR.value) {
return payDetail.getCustomerMobile().toUpperCase(); return payDetail.getCustomerMobile().toUpperCase();
} else if(payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value) { } else if(payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
return "QR PAYMENT"; return "QR PAYMENT";
} else { } else {
return payDetail.getAccountType(); return payDetail.getAccountType();
@ -297,7 +297,7 @@ public class POSUtil {
if(payDetail.getTransactionType() == TransactionsType.MMQR.value) { if(payDetail.getTransactionType() == TransactionsType.MMQR.value) {
return payDetail.getQrTransId(); return payDetail.getQrTransId();
} else if(payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value) { } else if(payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
return payDetail.getReferNo()+"(RRN)"; return payDetail.getReferNo()+"(RRN)";
} else { } else {
return payDetail.getReferNo(); return payDetail.getReferNo();
@ -310,7 +310,7 @@ public class POSUtil {
public String checkTraceOrInvoice(PayDetail payDetail) { public String checkTraceOrInvoice(PayDetail payDetail) {
if(payDetail != null) { if(payDetail != null) {
if(payDetail.getTransactionType() == TransactionsType.MMQR.value || payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value) { if(payDetail.getTransactionType() == TransactionsType.MMQR.value || payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
return payDetail.getInvoiceNo(); return payDetail.getInvoiceNo();
} else { } else {
return payDetail.getVoucherNo(); return payDetail.getVoucherNo();
@ -420,7 +420,7 @@ public class POSUtil {
} else { } else {
// return "Transaction failed"; // return "Transaction failed";
if(payDetail.getTransactionType() == TransactionsType.WAVEPAY_REFUND.value) { if(payDetail.getTransactionType() == TransactionsType.MMQR_REFUND.value) {
if(payDetail.getTradeResultDes() != null && !payDetail.getTradeResultDes().isEmpty()) { if(payDetail.getTradeResultDes() != null && !payDetail.getTradeResultDes().isEmpty()) {
return "Declined \n "+payDetail.getTradeResultDes(); return "Declined \n "+payDetail.getTradeResultDes();
} else { } else {

View File

@ -47,7 +47,7 @@ public enum TransactionsType {
DETAIL_REPORT("DETAIL_REPORT",33,"000000"), DETAIL_REPORT("DETAIL_REPORT",33,"000000"),
WAVEPAY_REFUND("QR_REFUND",34,"000000"); MMQR_REFUND("QR_REFUND",34,"000000");
public final String name; public final String name;