e-receipt for qr fixed

This commit is contained in:
MooN 2025-11-27 19:18:49 +06:30
parent 90c9a48197
commit 2441ba5141
13 changed files with 455 additions and 136 deletions

Binary file not shown.

View File

@ -4,15 +4,15 @@
"type": "APK", "type": "APK",
"kind": "Directory" "kind": "Directory"
}, },
"applicationId": "com.utsmm.kbz.mpu", "applicationId": "com.utsmm.kbz",
"variantName": "release", "variantName": "release",
"elements": [ "elements": [
{ {
"type": "SINGLE", "type": "SINGLE",
"filters": [], "filters": [],
"attributes": [], "attributes": [],
"versionCode": 8, "versionCode": 10,
"versionName": "1.08", "versionName": "1.10",
"outputFile": "app-release.apk" "outputFile": "app-release.apk"
} }
], ],

View File

@ -144,10 +144,10 @@ public class SettingsFragment extends DataBindingFragment {
private void updateDemoSettings() { private void updateDemoSettings() {
boolean isDemo = SystemParamsOperation.getInstance().getDemoStatus(); boolean isDemo = SystemParamsOperation.getInstance().getDemoStatus();
// binding.demoSwitch.setChecked(isDemo); binding.demoSwitch.setChecked(isDemo);
// binding.demoSummary.setText(isDemo ? binding.demoSummary.setText(isDemo ?
// "Demo mode active - Test transactions without real processing" : "Demo mode active - Test transactions without real processing" :
// "Simulator mode active - Real transaction processing"); "Simulator mode active - Real transaction processing");
} }
private void updateAlertSoundSettings() { private void updateAlertSoundSettings() {

View File

@ -9,7 +9,9 @@ import androidx.annotation.Nullable;
import androidx.navigation.NavController; import androidx.navigation.NavController;
import androidx.navigation.NavDestination; import androidx.navigation.NavDestination;
import com.utsmm.kbz.util.tms.TMSUtil;
import com.utsmyanmar.baselib.fragment.DataBindingFragment; import com.utsmyanmar.baselib.fragment.DataBindingFragment;
import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptCardRequest;
import com.utsmyanmar.baselib.util.DataBindingConfig; import com.utsmyanmar.baselib.util.DataBindingConfig;
import com.utsmyanmar.baselib.util.TimeoutCallback; import com.utsmyanmar.baselib.util.TimeoutCallback;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation; import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
@ -25,6 +27,8 @@ import com.utsmm.kbz.util.ecr.CoreUtils;
import com.utsmyanmar.paylibs.utils.LogUtil; import com.utsmyanmar.paylibs.utils.LogUtil;
import java.text.DecimalFormat;
public class ProcessingFragment extends DataBindingFragment { public class ProcessingFragment extends DataBindingFragment {
private static final String TAG = ProcessingFragment.class.getSimpleName(); private static final String TAG = ProcessingFragment.class.getSimpleName();
@ -248,11 +252,22 @@ public class ProcessingFragment extends DataBindingFragment {
private void observeData(ProcessingTransaction processingTransaction) { private void observeData(ProcessingTransaction processingTransaction) {
processingTransaction.getTransStatus().observe(getViewLifecycleOwner(), transResultStatus -> { processingTransaction.getTransStatus().observe(getViewLifecycleOwner(), transResultStatus -> {
LogUtil.d(TAG,"Transaction RESULT :"+transResultStatus); LogUtil.d(TAG,"Transaction RESULT :"+transResultStatus);
PayDetail payDetail = isEmvTrans()
? emvTransactionProcessViewModel.payDetailResult.getValue()
: transProcessViewModel.payDetailResult.getValue();
LogUtil.d(TAG, "PayDetail from VM: " + payDetail);
switch (transResultStatus) { switch (transResultStatus) {
case FAIL: case FAIL:
sharedViewModel.pushReceipt(buildEReceiptCardReceipt(payDetail, false, "FAILED"));
case SUCCESS: case SUCCESS:
sharedViewModel.pushReceipt(buildEReceiptCardReceipt(payDetail, true, "SUCCESS"));
case OFFLINE_SUCCESS: case OFFLINE_SUCCESS:
if(SystemParamsOperation.getInstance().getDemoStatus()) { if(SystemParamsOperation.getInstance().getDemoStatus()) {
delayFunctionCall(()->{ delayFunctionCall(()->{
@ -365,4 +380,108 @@ public class ProcessingFragment extends DataBindingFragment {
}); });
} }
private String mapDE3ToShortCode(String de3) {
if (de3 == null) return "UNK";
switch (de3) {
case "000000": return "S"; // Sale
case "020000": return "V"; // Void
case "200000": return "R"; // Refund
case "030000": return "P"; // Preauth
case "310000": return "PC"; // Preauth Complete
}
return "UNK"; // Unknown
}
public static String mapTransactionType(int type) {
switch (type) {
case 1: // SALE
return "S";
case 2: // VOID SALE
return "V";
case 4: // REFUND
return "R";
case 5: // PRE-AUTH
return "P";
case 6: // PRE-AUTH VOID
return "PV";
case 7: // PRE-AUTH COMPLETE
return "PC";
case 8: // PRE-AUTH COMPLETE VOID
return "PCV";
case 9: // CASH OUT
return "CAV";
case 18: // TIP ADJUST
return "TA";
case 20: // QR PAYMENT
return "QR";
case 34: // QR REFUND
return "QRV";
default:
return "UNK";
}
}
private String mapCurrency(String currency) {
if (currency == null) return "MMK";
switch (currency) {
case "104": return "MMK";
case "840": return "USD";
case "764": return "THB";
case "702": return "SGD";
case "978": return "EUR";
default: return currency; // Already alphabetic? return as-is
}
}
private EReceiptCardRequest buildEReceiptCardReceipt(PayDetail payDetail, boolean isSuccess, String reason){
//current timestamp
String currentTimestamp = new java.text.SimpleDateFormat(
"MMddHHmmss", java.util.Locale.getDefault()
).format(new java.util.Date());
//DeviceInfo
String serial = TMSUtil.getInstance().getSerialNumber();
String appId = requireActivity().getPackageName();
//TerminalInfo
String terminalId = SystemParamsOperation.getInstance().getTerminalId();
String merchantId = SystemParamsOperation.getInstance().getMerchantId();
double realAmount = payDetail.getAmount() / 100.0;
DecimalFormat df = new DecimalFormat("0.00");
String amount = df.format(realAmount);
EReceiptCardRequest request = new EReceiptCardRequest();
request.setDE2(payDetail.getCardNo());
request.setDE3(mapDE3ToShortCode(payDetail.getProcessCode()));
request.setDE4(amount);
request.setDE7(currentTimestamp);
request.setDE11(payDetail.getVoucherNo());
request.setDE22(mapTransactionType(payDetail.getTransactionType()));
request.setDE37(payDetail.getReferNo());
request.setDE38(payDetail.getAuthNo());
request.setDE39(isSuccess ? "A" : "E");
request.setDE41(terminalId);
request.setDE42(merchantId);
request.setDE49(mapCurrency(payDetail.getCurrencyCode()));
request.setSerial(serial);
request.setInvoiceNumber(payDetail.getInvoiceNo());
request.setAppId(appId);
request.setDescription(reason);
return request;
}
} }

View File

@ -425,6 +425,7 @@ public class SharedViewModel extends ViewModel {
public void pushReceipt(Object body){ public void pushReceipt(Object body){
Log.d("push receipt", new Gson().toJson(body));
repository.sendReceipt(body) repository.sendReceipt(body)
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())

View File

@ -11,8 +11,10 @@ import android.widget.LinearLayout;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.utsmm.kbz.util.tms.TMSUtil;
import com.utsmyanmar.baselib.fragment.DataBindingFragment; import com.utsmyanmar.baselib.fragment.DataBindingFragment;
import com.utsmyanmar.baselib.network.model.KPayRefund; import com.utsmyanmar.baselib.network.model.KPayRefund;
import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptQRRequest;
import com.utsmyanmar.baselib.util.DataBindingConfig; import com.utsmyanmar.baselib.util.DataBindingConfig;
import com.utsmyanmar.paylibs.model.PayDetail; import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.model.TradeData; import com.utsmyanmar.paylibs.model.TradeData;
@ -34,6 +36,8 @@ import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.schedulers.Schedulers; import io.reactivex.rxjava3.schedulers.Schedulers;
import com.utsmyanmar.paylibs.utils.LogUtil; import com.utsmyanmar.paylibs.utils.LogUtil;
import java.text.DecimalFormat;
public class QRRefundFragment extends DataBindingFragment { public class QRRefundFragment extends DataBindingFragment {
private SharedViewModel sharedViewModel; private SharedViewModel sharedViewModel;
@ -196,6 +200,8 @@ public class QRRefundFragment extends DataBindingFragment {
payDetail.setReferNo(referenceNo); payDetail.setReferNo(referenceNo);
payDetail.setIsCanceled(true); payDetail.setIsCanceled(true);
// sharedViewModel.pushReceipt(buildEReceiptQRReceipt(payDetail, true, "Refund success"));
retrievedUpdatePayDetail(referenceNo); retrievedUpdatePayDetail(referenceNo);
} else { } else {
@ -210,6 +216,8 @@ public class QRRefundFragment extends DataBindingFragment {
} }
payDetail.setTradeResultDes(errorMsg); payDetail.setTradeResultDes(errorMsg);
// sharedViewModel.pushReceipt(buildEReceiptQRReceipt(payDetail, true, "RESP CODE [68]\n Refund Failed"));
sharedViewModel.payDetail.setValue(payDetail); sharedViewModel.payDetail.setValue(payDetail);
navigateToNext(); navigateToNext();
} }
@ -328,4 +336,6 @@ public class QRRefundFragment extends DataBindingFragment {
} }
} }
} }
} }

View File

@ -315,29 +315,7 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
retrievedUpdatePayDetail(refLabel, payDetail,false); retrievedUpdatePayDetail(refLabel, payDetail,false);
double realAmount = payDetail.getAmount() / 100.0; sharedViewModel.pushReceipt(buildEReceiptQRReceipt(payDetail, true, "QR Pay Success"));
DecimalFormat df = new DecimalFormat("0.00");
String amount = df.format(realAmount);
String currentTimeStamp = new java.text.SimpleDateFormat("MMddHHmmss", java.util.Locale.getDefault())
.format(new java.util.Date());
String serial = TMSUtil.getInstance().getSerialNumber();
String packageName = getActivity().getPackageName();
EReceiptQRRequest request = new EReceiptQRRequest();
request.setDE3("QR");
request.setDE4(amount);
request.setDE7(currentTimeStamp);
request.setDE37(payDetail.getReferNo());
request.setDE39("A");
request.setDE49("MMK");
request.setSerial(serial);
request.setAppId(packageName);
request.setDE41(terminalId);
request.setDE42(merchantId);
request.setInvoiceNumber(payDetail.getInvoiceNo());
request.setDE11(payDetail.getVoucherNo());
request.setDescription("qr pay success");
sharedViewModel.pushReceipt(request);
return; return;
} }
@ -348,26 +326,6 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
payDetail.setQrTransStatus(2); payDetail.setQrTransStatus(2);
} }
String currentTimeStamp = new java.text.SimpleDateFormat("MMddHHmmss", java.util.Locale.getDefault())
.format(new java.util.Date());
String serial = SystemParamsOperation.getInstance().getCurrentSerialNum();
String packageName = getActivity().getPackageName();
EReceiptQRRequest request = new EReceiptQRRequest();
request.setDE3("QR");
request.setDE4("0");
request.setDE7(currentTimeStamp);
request.setDE37(payDetail.getReferNo());
request.setDE39("D");
request.setDE49("MMK");
request.setSerial(serial);
request.setAppId(packageName);
request.setDE41(terminalId);
request.setDE42(merchantId);
request.setInvoiceNumber(payDetail.getInvoiceNo());
request.setDE11(payDetail.getVoucherNo());
request.setDescription("qr timeout");
sharedViewModel.pushReceipt(request);
sharedViewModel.payDetail.postValue(payDetail); sharedViewModel.payDetail.postValue(payDetail);
safeNavigateToRouteId(); safeNavigateToRouteId();
@ -376,25 +334,6 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
} catch (Exception e) { } catch (Exception e) {
LogUtil.d(TAG, "On Exception::"); LogUtil.d(TAG, "On Exception::");
e.printStackTrace(); e.printStackTrace();
String currentTimeStamp = new java.text.SimpleDateFormat("MMddHHmmss", java.util.Locale.getDefault())
.format(new java.util.Date());
String serial = SystemParamsOperation.getInstance().getCurrentSerialNum();
String packageName = getActivity().getPackageName();
EReceiptQRRequest request = new EReceiptQRRequest();
request.setDE3("QR");
request.setDE4("0");
request.setDE7(currentTimeStamp);
request.setDE37(payDetail.getReferNo());
request.setDE39("D");
request.setDE49("MMK");
request.setSerial(serial);
request.setAppId(packageName);
request.setDE41(terminalId);
request.setDE42(merchantId);
request.setInvoiceNumber(payDetail.getInvoiceNo());
request.setDE11(payDetail.getVoucherNo());
request.setDescription("qr failed");
sharedViewModel.pushReceipt(request);
if (count == totalCount) { if (count == totalCount) {
if(payDetail.getQrTransStatus() != -1) { if(payDetail.getQrTransStatus() != -1) {
@ -487,4 +426,58 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
}); });
} }
private String mapCurrency(String currency) {
if (currency == null) return "MMK";
switch (currency) {
case "104": return "MMK";
case "840": return "USD";
case "764": return "THB";
case "702": return "SGD";
case "978": return "EUR";
default: return currency; // Already alphabetic? return as-is
}
}
private EReceiptQRRequest buildEReceiptQRReceipt(PayDetail payDetail, boolean isSuccess, String reason) {
// Timestamp (MMddHHmmss)
String currentTimestamp = new java.text.SimpleDateFormat(
"MMddHHmmss", java.util.Locale.getDefault()
).format(new java.util.Date());
// Device Info
String serial = TMSUtil.getInstance().getSerialNumber();
String appId = requireActivity().getPackageName();
// Terminal Info
// String terminalId = SystemParamsOperation.getInstance().getTerminalId();
// String merchantId = SystemParamsOperation.getInstance().getMerchantId();
// Amount convert (long cents double 0.00)
double realAmount = payDetail.getAmount() / 100.0;
DecimalFormat df = new DecimalFormat("0.00");
String amount = df.format(realAmount);
EReceiptQRRequest request = new EReceiptQRRequest();
request.setDE3("QR"); // QR Process Code
request.setDE4(amount); // Amount
request.setDE7(currentTimestamp); // Timestamp
request.setDE37(payDetail.getReferNo()); // Reference No
request.setDE39(isSuccess ? "A" : "E"); // A=Approved, D=Declined/Timeout
request.setDE41(terminalId);
request.setDE42(merchantId);
request.setDE49(mapCurrency(payDetail.getCurrencyCode())); // Currency
request.setSerial(serial);
request.setInvoiceNumber(payDetail.getInvoiceNo());
request.setDE11(payDetail.getVoucherNo()); // STAN
request.setAppId(appId);
request.setDescription(reason); // Anything: success / timeout / error message
return request;
}
} }

View File

@ -14,14 +14,18 @@ import com.utsmm.kbz.ui.kpay.KPayViewModel;
import com.utsmm.kbz.ui.kpay.QRRefundFragment; import com.utsmm.kbz.ui.kpay.QRRefundFragment;
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 com.utsmm.kbz.util.tms.TMSUtil;
import com.utsmyanmar.baselib.fragment.DataBindingFragment; import com.utsmyanmar.baselib.fragment.DataBindingFragment;
import com.utsmyanmar.baselib.network.model.KPayRefund; import com.utsmyanmar.baselib.network.model.KPayRefund;
import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptQRRequest;
import com.utsmyanmar.baselib.util.DataBindingConfig; import com.utsmyanmar.baselib.util.DataBindingConfig;
import com.utsmyanmar.paylibs.model.PayDetail; import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.system.SystemDateTime; import com.utsmyanmar.paylibs.system.SystemDateTime;
import com.utsmyanmar.paylibs.utils.LogUtil; import com.utsmyanmar.paylibs.utils.LogUtil;
import com.utsmyanmar.paylibs.utils.POSUtil; import com.utsmyanmar.paylibs.utils.POSUtil;
import java.text.DecimalFormat;
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;
@ -140,10 +144,13 @@ public class QRRefundProcessFragment extends DataBindingFragment {
payDetail.setReferNo(referenceNo); payDetail.setReferNo(referenceNo);
payDetail.setIsCanceled(true); payDetail.setIsCanceled(true);
sharedViewModel.pushReceipt(buildEReceiptQRReceipt(payDetail, true, "Refund success"));
retrievedUpdatePayDetail(referenceNo); retrievedUpdatePayDetail(referenceNo);
} else { } else {
LogUtil.d(TAG, "Refund failed!"); LogUtil.d(TAG, "Refund failed!");
payDetail.setQrTransStatus(-1); payDetail.setQrTransStatus(-1);
payDetail.setQrReferNo(referenceNo); payDetail.setQrReferNo(referenceNo);
payDetail.setReferNo(referenceNo); payDetail.setReferNo(referenceNo);
@ -212,4 +219,58 @@ public class QRRefundProcessFragment extends DataBindingFragment {
} }
} }
} }
private String mapCurrency(String currency) {
if (currency == null) return "MMK";
switch (currency) {
case "104": return "MMK";
case "840": return "USD";
case "764": return "THB";
case "702": return "SGD";
case "978": return "EUR";
default: return currency; // Already alphabetic? return as-is
}
}
private EReceiptQRRequest buildEReceiptQRReceipt(PayDetail payDetail, boolean isSuccess, String reason) {
// Timestamp (MMddHHmmss)
String currentTimestamp = new java.text.SimpleDateFormat(
"MMddHHmmss", java.util.Locale.getDefault()
).format(new java.util.Date());
// Device Info
String serial = TMSUtil.getInstance().getSerialNumber();
String appId = requireActivity().getPackageName();
// Terminal Info
// String terminalId = SystemParamsOperation.getInstance().getTerminalId();
// String merchantId = SystemParamsOperation.getInstance().getMerchantId();
String terminalId = TransactionUtil.getInstance().getQRTerminalId();
String merchantId = TransactionUtil.getInstance().getQRMerchantId();
// Amount convert (long cents double 0.00)
double realAmount = payDetail.getAmount() / 100.0;
DecimalFormat df = new DecimalFormat("0.00");
String amount = df.format(realAmount);
EReceiptQRRequest request = new EReceiptQRRequest();
request.setDE3("QRV"); // QR Process Code(fix later with get from config)
request.setDE4(amount); // Amount
request.setDE7(currentTimestamp); // Timestamp
request.setDE37(payDetail.getReferNo()); // Reference No
request.setDE39(isSuccess ? "A" : "E"); // A=Approved, E=Error/Declined/Timeout
request.setDE41(terminalId);
request.setDE42(merchantId);
request.setDE49(mapCurrency(payDetail.getCurrencyCode())); // Currency(fix later with get from config)
request.setSerial(serial);
request.setInvoiceNumber(payDetail.getInvoiceNo());
request.setDE11(payDetail.getVoucherNo()); // STAN
request.setAppId(appId);
request.setDescription(reason); // Anything: success / timeout / error message
return request;
}
} }

View File

@ -233,11 +233,11 @@ public class TMSUtil {
String secHostIp = SystemParamsOperation.getInstance().getSecIpAddress(); String secHostIp = SystemParamsOperation.getInstance().getSecIpAddress();
String keyIndex = SystemParamsOperation.getInstance().getTMKIndex(); String keyIndex = SystemParamsOperation.getInstance().getTMKIndex();
if(tid.length() == 8 && mid.length() == 15 && !hostIp.isEmpty() && !keyIndex.isEmpty()) { if(tid.length() == 8 && (mid.length() == 11 || mid.length() == 15) && !hostIp.isEmpty() && !keyIndex.isEmpty()) {
tmsValidity = new TMSValidity(ValidityStatus.SUCCESS,"Success"); tmsValidity = new TMSValidity(ValidityStatus.SUCCESS,"Success");
} else if(tid.length() != 8) { } else if(tid.length() != 8) {
tmsValidity = new TMSValidity(ValidityStatus.FAILURE,"Tid is invalid!"); tmsValidity = new TMSValidity(ValidityStatus.FAILURE,"Tid is invalid!");
} else if(mid.length() != 15) { } else if(mid.length() != 15 && mid.length() != 11 ) {
tmsValidity = new TMSValidity(ValidityStatus.FAILURE,"Mid is invalid!"); tmsValidity = new TMSValidity(ValidityStatus.FAILURE,"Mid is invalid!");
} else if(hostIp.isEmpty()) { } else if(hostIp.isEmpty()) {
tmsValidity = new TMSValidity(ValidityStatus.FAILURE,"Pri-Ip is invalid!"); tmsValidity = new TMSValidity(ValidityStatus.FAILURE,"Pri-Ip is invalid!");

View File

@ -316,82 +316,82 @@
<!-- </androidx.cardview.widget.CardView>--> <!-- </androidx.cardview.widget.CardView>-->
<!-- Demo Mode Card --> <!-- Demo Mode Card -->
<!-- <androidx.cardview.widget.CardView--> <androidx.cardview.widget.CardView
<!-- android:id="@+id/demoCard"--> android:id="@+id/demoCard"
<!-- android:layout_width="match_parent"--> android:layout_width="match_parent"
<!-- android:layout_height="wrap_content"--> android:layout_height="wrap_content"
<!-- android:layout_marginBottom="12dp"--> android:layout_marginBottom="12dp"
<!-- android:clickable="true"--> android:clickable="true"
<!-- android:foreground="?android:attr/selectableItemBackground"--> android:foreground="?android:attr/selectableItemBackground"
<!-- android:onClick="@{()->click.onDemoClick()}"--> android:onClick="@{()->click.onDemoClick()}"
<!-- app:cardBackgroundColor="@color/white"--> app:cardBackgroundColor="@color/white"
<!-- app:cardCornerRadius="16dp"--> app:cardCornerRadius="16dp"
<!-- app:cardElevation="2dp">--> app:cardElevation="2dp">
<!-- <LinearLayout--> <LinearLayout
<!-- android:layout_width="match_parent"--> android:layout_width="match_parent"
<!-- android:layout_height="wrap_content"--> android:layout_height="wrap_content"
<!-- android:gravity="center_vertical"--> android:gravity="center_vertical"
<!-- android:orientation="horizontal"--> android:orientation="horizontal"
<!-- android:padding="20dp">--> android:padding="20dp">
<!-- <androidx.cardview.widget.CardView--> <androidx.cardview.widget.CardView
<!-- android:layout_width="48dp"--> android:layout_width="48dp"
<!-- android:layout_height="48dp"--> android:layout_height="48dp"
<!-- android:layout_marginEnd="16dp"--> android:layout_marginEnd="16dp"
<!-- app:cardBackgroundColor="@color/colorPrimary"--> app:cardBackgroundColor="@color/colorPrimary"
<!-- app:cardCornerRadius="24dp"--> app:cardCornerRadius="24dp"
<!-- app:cardElevation="0dp">--> app:cardElevation="0dp">
<!-- <ImageView--> <ImageView
<!-- android:layout_width="24dp"--> android:layout_width="24dp"
<!-- android:layout_height="24dp"--> android:layout_height="24dp"
<!-- android:layout_gravity="center"--> android:layout_gravity="center"
<!-- android:src="@drawable/ic_swap"--> android:src="@drawable/ic_swap"
<!-- app:tint="@color/white" />--> app:tint="@color/white" />
<!-- </androidx.cardview.widget.CardView>--> </androidx.cardview.widget.CardView>
<!-- <LinearLayout--> <LinearLayout
<!-- android:layout_width="0dp"--> android:layout_width="0dp"
<!-- android:layout_height="wrap_content"--> android:layout_height="wrap_content"
<!-- android:layout_weight="1"--> android:layout_weight="1"
<!-- android:orientation="vertical">--> android:orientation="vertical">
<!-- <TextView--> <TextView
<!-- android:layout_width="wrap_content"--> android:layout_width="wrap_content"
<!-- android:layout_height="wrap_content"--> android:layout_height="wrap_content"
<!-- android:fontFamily="@font/rubik_medium"--> android:fontFamily="@font/rubik_medium"
<!-- android:text="Demo Mode"--> android:text="Demo Mode"
<!-- android:textColor="@color/colorTextTitle"--> android:textColor="@color/colorTextTitle"
<!-- android:textSize="18sp"--> android:textSize="18sp"
<!-- android:textStyle="bold"--> android:textStyle="bold"
<!-- tools:fontFamily="sans-serif-medium" />--> tools:fontFamily="sans-serif-medium" />
<!-- <TextView--> <TextView
<!-- android:id="@+id/demoSummary"--> android:id="@+id/demoSummary"
<!-- android:layout_width="wrap_content"--> android:layout_width="wrap_content"
<!-- android:layout_height="wrap_content"--> android:layout_height="wrap_content"
<!-- android:layout_marginTop="2dp"--> android:layout_marginTop="2dp"
<!-- android:fontFamily="@font/rubik_regular"--> android:fontFamily="@font/rubik_regular"
<!-- android:text="Demo mode active - Test transactions"--> android:text="Demo mode active - Test transactions"
<!-- android:textColor="@color/colorTextContent"--> android:textColor="@color/colorTextContent"
<!-- android:textSize="14sp"--> android:textSize="14sp"
<!-- tools:fontFamily="sans-serif" />--> tools:fontFamily="sans-serif" />
<!-- </LinearLayout>--> </LinearLayout>
<!-- <Switch--> <Switch
<!-- android:id="@+id/demoSwitch"--> android:id="@+id/demoSwitch"
<!-- android:layout_width="wrap_content"--> android:layout_width="wrap_content"
<!-- android:layout_height="wrap_content"--> android:layout_height="wrap_content"
<!-- android:layout_marginStart="8dp"--> android:layout_marginStart="8dp"
<!-- android:clickable="false"--> android:clickable="false"
<!-- android:focusable="false" />--> android:focusable="false" />
<!-- </LinearLayout>--> </LinearLayout>
<!-- </androidx.cardview.widget.CardView>--> </androidx.cardview.widget.CardView>
<!-- Sound Alerts Card --> <!-- Sound Alerts Card -->
<!-- <androidx.cardview.widget.CardView--> <!-- <androidx.cardview.widget.CardView-->

View File

@ -0,0 +1,135 @@
package com.utsmyanmar.baselib.network.model.e_receipt;
public class EReceiptCardRequest {
private String DE2;
private String DE22;
private String DE3;
private String DE39;
private String DE41;
private String DE42;
private String serial;
private String DE49;
private String DE37;
private String DE7;
private String DE4;
private String appId;
private String invoiceNumber;
private String DE11;
private String description;
private String DE38;
public EReceiptCardRequest() {}
// GETTERS
public String getDE3() {
return DE3;
}
public String getDE39() {
return DE39;
}
public String getDE41() {
return DE41;
}
public String getDE42() {
return DE42;
}
public String getSerial() {
return serial;
}
public String getDE49() {
return DE49;
}
public String getDE37() {
return DE37;
}
public String getDE7() {
return DE7;
}
public String getDE4() {
return DE4;
}
public String getAppId(){
return appId;
}
public String getInvoiceNumber(){
return invoiceNumber;
}
public String getDE11(){
return DE11;
}
public String getDescription(){
return description;
}
public String getDE2(){ return DE2; }
public String getDE38(){ return DE38; }
public String getDE22(){ return DE22; }
// SETTERS
public void setDE3(String DE3) {
this.DE3 = DE3;
}
public void setDE39(String DE39) {
this.DE39 = DE39;
}
public void setDE41(String DE41) {
this.DE41 = DE41;
}
public void setDE42(String DE42) {
this.DE42 = DE42;
}
public void setSerial(String serial) {
this.serial = serial;
}
public void setDE49(String DE49) {
this.DE49 = DE49;
}
public void setDE37(String DE37) {
this.DE37 = DE37;
}
public void setDE7(String DE7) {
this.DE7 = DE7;
}
public void setDE4(String DE4) {
this.DE4 = DE4;
}
public void setAppId(String appId){
this.appId = appId;
}
public void setInvoiceNumber(String invoiceNumber){
this.invoiceNumber = invoiceNumber;
}
public void setDE11(String DE11){
this.DE11 = DE11;
}
public void setDescription(String description){
this.description = description;
}
public void setDE2(String DE2){ this.DE2 = DE2; }
public void setDE38(String DE38){ this.DE38 = DE38; }
public void setDE22(String DE22){ this.DE22 = DE22; }
}