diff --git a/CHANGELOG.md b/CHANGELOG.md index 6550b35..9289af1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,4 +33,20 @@ - signature re-show on void - signature re-show on refund - pre-auth, pre-auth can, pre-auth com s' manual entry flow are changed -- can show/hide manual entry in all transactions \ No newline at end of file +- can show/hide manual entry in all transactions + +## [2.35] - 29-05-2026 +- app crash fix + +## [2.36] - 29-05-2026 +- local database migration + +## [2.37] - 06-07-2026 +- **General** +- E-receipt send to backend service +- One Click Settlement + +## [2.38] - 06-07-2026 +- **General** +- SETTLEMENT both in one click +- showing each transaction detail when SETTLE \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 9a44f7e..f8007a9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "com.utsmm.kbz" minSdk 24 targetSdk 33 - versionCode 47 - versionName "2.38" + versionCode 44 + versionName "2.39" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } 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 1962a26..4d8b27f 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 @@ -63,7 +63,7 @@ public class QRPayFragment extends DataBindingFragment { features.add(new QRPayItem("Refund", R.drawable.ic_refund, true)); } features.add(new QRPayItem("History", R.drawable.ic_history, true)); -// features.add(new QRPayItem("Mock QR", R.drawable.ic_qr_pay, true)); + features.add(new QRPayItem("Mock QR", R.drawable.ic_qr_pay, true)); // List features = List.of( // new QRPayItem("Sale", R.drawable.ic_qr_pay, true), diff --git a/app/src/main/java/com/utsmm/kbz/util/EReceiptUtil.java b/app/src/main/java/com/utsmm/kbz/util/EReceiptUtil.java index 387d81f..f4871e0 100644 --- a/app/src/main/java/com/utsmm/kbz/util/EReceiptUtil.java +++ b/app/src/main/java/com/utsmm/kbz/util/EReceiptUtil.java @@ -3,8 +3,10 @@ package com.utsmm.kbz.util; import com.utsmm.kbz.BuildConfig; import com.utsmm.kbz.util.enums.TransResultStatus; import com.utsmm.kbz.util.tms.TMSUtil; +import com.utsmyanmar.baselib.network.model.e_receipt.CardTransaction; import com.utsmyanmar.baselib.network.model.e_receipt.EReceiptRequest; import com.utsmyanmar.baselib.network.model.e_receipt.Transaction; +import com.utsmyanmar.paylibs.model.CardSettleData; import com.utsmyanmar.paylibs.model.PayDetail; import com.utsmyanmar.paylibs.model.QRSettleData; import com.utsmyanmar.paylibs.model.SettleData; @@ -203,6 +205,15 @@ public class EReceiptUtil { request.setDE37("0000"); request.setDE49(currencyCodeToText(payDetail.getCurrencyCode())); + request.setDE14(""); + request.setDE24(payDetail.getVoucherNo()); + request.setDE43(SystemParamsOperation.getInstance().getMerchantName()); + + List cardSettleDataList = payDetail.getCardSettleData(); + if (cardSettleDataList != null && !cardSettleDataList.isEmpty()) { + request.setCardTransactions(buildCardTransactions(cardSettleDataList)); + } + } else { request.setDE2(POSUtil.getInstance().getCardNumMasking(payDetail.getCardNo())); @@ -305,6 +316,29 @@ public class EReceiptUtil { return currencyCode; } + private static List buildCardTransactions(List cardSettleDataList) { + List list = new ArrayList<>(); + for (CardSettleData card : cardSettleDataList) { + CardTransaction ct = new CardTransaction(); + ct.setCardType(card.getCardType()); + ct.setCardNumber(POSUtil.getInstance().getCardNumMasking(card.getCardNum())); + ct.setInvoiceNumber(card.getInvoiceNum()); + ct.setTransactionType(card.getTransType()); + ct.setAmount(getDecimalAmountStatic(card.getAmount())); + ct.setApproveCode(card.getApprovalCode()); + String dateTime = card.getTransDate() + "T" + card.getTransTime() + "+08:00"; + ct.setTransactionTime(dateTime); + list.add(ct); + } + return list; + } + + private static String getDecimalAmountStatic(long amount) { + double realAmount = amount / 100.0; + DecimalFormat df = new DecimalFormat("0.00"); + return df.format(realAmount); + } + private static List buildTransactions(List qrSettleData) { List list = new ArrayList<>(); diff --git a/app/uat/release/baselineProfiles/0/app-uat-release.dm b/app/uat/release/baselineProfiles/0/app-uat-release.dm index 66eeec0..8218f27 100644 Binary files a/app/uat/release/baselineProfiles/0/app-uat-release.dm and b/app/uat/release/baselineProfiles/0/app-uat-release.dm differ diff --git a/app/uat/release/baselineProfiles/1/app-uat-release.dm b/app/uat/release/baselineProfiles/1/app-uat-release.dm index 2aa28fa..6929be1 100644 Binary files a/app/uat/release/baselineProfiles/1/app-uat-release.dm and b/app/uat/release/baselineProfiles/1/app-uat-release.dm differ diff --git a/app/uat/release/output-metadata.json b/app/uat/release/output-metadata.json index 0dfff20..c65d3e6 100644 --- a/app/uat/release/output-metadata.json +++ b/app/uat/release/output-metadata.json @@ -11,8 +11,8 @@ "type": "SINGLE", "filters": [], "attributes": [], - "versionCode": 41, - "versionName": "2.36-uat", + "versionCode": 44, + "versionName": "2.39-uat", "outputFile": "app-uat-release.apk" } ], diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/network/model/e_receipt/CardTransaction.java b/baselib/src/main/java/com/utsmyanmar/baselib/network/model/e_receipt/CardTransaction.java new file mode 100644 index 0000000..25a9646 --- /dev/null +++ b/baselib/src/main/java/com/utsmyanmar/baselib/network/model/e_receipt/CardTransaction.java @@ -0,0 +1,70 @@ +package com.utsmyanmar.baselib.network.model.e_receipt; + +public class CardTransaction { + + private String cardType; + private String cardNumber; + private String invoiceNumber; + private String transactionType; + private String amount; + private String approveCode; + private String transactionTime; + + public CardTransaction() {} + + public String getCardType() { + return cardType; + } + + public void setCardType(String cardType) { + this.cardType = cardType; + } + + public String getCardNumber() { + return cardNumber; + } + + public void setCardNumber(String cardNumber) { + this.cardNumber = cardNumber; + } + + public String getInvoiceNumber() { + return invoiceNumber; + } + + public void setInvoiceNumber(String invoiceNumber) { + this.invoiceNumber = invoiceNumber; + } + + public String getTransactionType() { + return transactionType; + } + + public void setTransactionType(String transactionType) { + this.transactionType = transactionType; + } + + public String getAmount() { + return amount; + } + + public void setAmount(String amount) { + this.amount = amount; + } + + public String getApproveCode() { + return approveCode; + } + + public void setApproveCode(String approveCode) { + this.approveCode = approveCode; + } + + public String getTransactionTime() { + return transactionTime; + } + + public void setTransactionTime(String transactionTime) { + this.transactionTime = transactionTime; + } +} diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/network/model/e_receipt/EReceiptRequest.java b/baselib/src/main/java/com/utsmyanmar/baselib/network/model/e_receipt/EReceiptRequest.java index 153ed8e..cc876ec 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/network/model/e_receipt/EReceiptRequest.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/network/model/e_receipt/EReceiptRequest.java @@ -43,7 +43,12 @@ public class EReceiptRequest { private String hostId; private String paymentIdentifier; + private String DE24; + private String DE43; + private String DE14; + private List transactions; + private List cardTransactions; public EReceiptRequest() {} @@ -269,6 +274,18 @@ public class EReceiptRequest { this.cardLabel = cardLabel; } public void setMmqrRef(String mmqrRef){ this.mmqrRef = mmqrRef; } + + public String getDE24() { return DE24; } + public void setDE24(String DE24) { this.DE24 = DE24; } + + public String getDE43() { return DE43; } + public void setDE43(String DE43) { this.DE43 = DE43; } + + public String getDE14() { return DE14; } + public void setDE14(String DE14) { this.DE14 = DE14; } + + public List getCardTransactions() { return cardTransactions; } + public void setCardTransactions(List cardTransactions) { this.cardTransactions = cardTransactions; } } diff --git a/gradle.properties b/gradle.properties index e7c3ca8..95ba492 100644 --- a/gradle.properties +++ b/gradle.properties @@ -31,3 +31,6 @@ android.nonTransitiveRClass=true android.enableJetifier=false ERECEIPT_SECRET=y812J21lhha11OS #ERECEIPT_SECRET=8f4df38d1001bcc4620b5c736c66a03eef4653eb3ba31105faa2f2ee294c4a46 + +# Enabled parallel sync for Gradle 9.4+ +org.gradle.tooling.parallel=true diff --git a/opencode.json b/opencode.json new file mode 100644 index 0000000..c2818ea --- /dev/null +++ b/opencode.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://opencode.ai/config.json", + "mcp": { + "codebase-memory": { + "type": "local", + "command": "codebase-memory-mcp", + "args": [], + "enabled": true + } + } +}