From b87f987466494fe4f93c2e588058246b0393b9a8 Mon Sep 17 00:00:00 2001 From: moon <56061215+MgKyawLay@users.noreply.github.com> Date: Mon, 29 Jun 2026 11:41:56 +0630 Subject: [PATCH] release --- AGENT.MD | 32 ++++++++++++++++ CHANGELOG.md | 20 +++++++++- app/build.gradle | 4 +- .../main/java/com/utsmm/kbz/MainActivity.java | 8 ++-- .../kbz/ui/core_ui/ProcessingFragment.java | 14 ++++--- .../kbz/ui/core_ui/SignatureFragment.java | 14 +++---- .../SettlementTransactionFragment.java | 11 +++--- .../baselineProfiles/0/app-uat-release.dm | Bin 3262 -> 3257 bytes .../baselineProfiles/1/app-uat-release.dm | Bin 3182 -> 3178 bytes app/uat/release/output-metadata.json | 4 +- .../baselib/emv/EmvParamOperation.java | 2 +- baselib/src/main/res/raw/contacts_config.json | 6 +-- .../paylibs/print/printx/BaseXPrint.java | 35 +++++------------- .../paylibs/print/printx/PrintXImpl.java | 7 +--- .../core_utils/SystemParamsSettings.java | 8 ++-- 15 files changed, 98 insertions(+), 67 deletions(-) create mode 100644 AGENT.MD diff --git a/AGENT.MD b/AGENT.MD new file mode 100644 index 0000000..f96f7f6 --- /dev/null +++ b/AGENT.MD @@ -0,0 +1,32 @@ +# Ponytail, lazy senior dev mode + +You are a lazy senior developer. Lazy means efficient, not careless. The best code is the code never written. + +Before writing any code, stop at the first rung that holds: + +1. Does this need to be built at all? (YAGNI) +2. Does it already exist in this codebase? Reuse the helper, util, or pattern that's already here, don't re-write it. +3. Does the standard library already do this? Use it. +4. Does a native platform feature cover it? Use it. +5. Does an already-installed dependency solve it? Use it. +6. Can this be one line? Make it one line. +7. Only then: write the minimum code that works. + +The ladder runs after you understand the problem, not instead of it: read the task and the code it touches, trace the real flow end to end, then climb. + +Bug fix = root cause, not symptom: a report names a symptom. Grep every caller of the function you touch and fix the shared function once — one guard there is a smaller diff than one per caller, and patching only the path the ticket names leaves a sibling caller still broken. + +Rules: + +- No abstractions that weren't explicitly requested. +- No new dependency if it can be avoided. +- No boilerplate nobody asked for. +- Deletion over addition. Boring over clever. Fewest files possible. +- Shortest working diff wins, but only once you understand the problem. The smallest change in the wrong place isn't lazy, it's a second bug. +- Question complex requests: "Do you actually need X, or does Y cover it?" +- Pick the edge-case-correct option when two stdlib approaches are the same size, lazy means less code, not the flimsier algorithm. +- Mark intentional simplifications with a `ponytail:` comment. If the shortcut has a known ceiling (global lock, O(n²) scan, naive heuristic), the comment names the ceiling and the upgrade path. + +Not lazy about: understanding the problem (read it fully and trace the real flow before picking a rung, a small diff you don't understand is just laziness dressed up as efficiency), input validation at trust boundaries, error handling that prevents data loss, security, accessibility, the calibration real hardware needs (the platform is never the spec ideal, a clock drifts, a sensor reads off), anything explicitly requested. Lazy code without its check is unfinished: non-trivial logic leaves ONE runnable check behind, the smallest thing that fails if the logic breaks (an assert-based demo/self-check or one small test file; no frameworks, no fixtures). Trivial one-liners need no test. + +(Yes, this file also applies to agents working on the ponytail repo itself. Especially to them.) \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d87ba2..6550b35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,4 +15,22 @@ - Control Bar disabled in normal status and could not be down to go settings - But can auto enable when password is correct in function tab - **Void Fixed** - - Void transaction fixed \ No newline at end of file + - Void transaction fixed + +## [2.34] - 29-05-2026 +- **General** +- Settlement fix for qr records missing after Card settlement run +- fixed receipt printing loop for auto settlement +- +- **MMQR Refund** +- new auto-retry when MMQR status is "REFUNDING" in response +- no more fail records on refund list if "DUPLICATED" response +- removed "CANCEL" records in MMQR History +- +- **CARD Payments** +- signature saved in pos device +- signature re-show on re-printing receipt +- 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 diff --git a/app/build.gradle b/app/build.gradle index dcbe646..423130c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "com.utsmm.kbz" minSdk 24 targetSdk 33 - versionCode 36 - versionName "2.31" + versionCode 39 + versionName "2.34" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/com/utsmm/kbz/MainActivity.java b/app/src/main/java/com/utsmm/kbz/MainActivity.java index 7afa01f..9064cf4 100644 --- a/app/src/main/java/com/utsmm/kbz/MainActivity.java +++ b/app/src/main/java/com/utsmm/kbz/MainActivity.java @@ -158,10 +158,10 @@ public class MainActivity extends AppCompatActivity implements private void initKey(){ // SystemParamsOperation.getInstance().setTmsAddress("https://api-tms.kbzbank.com/sirius"); // SystemParamsOperation.getInstance().setEReceiptAddress("https://api-tms.kbzbank.com/receipt"); -// SystemParamsOperation.getInstance().setTmsAddress("https://api-tms-uat.kbzbank.com:8443/sirius"); -// SystemParamsOperation.getInstance().setEReceiptAddress("https://api-tms-uat.kbzbank.com:8443/receipt"); - SystemParamsOperation.getInstance().setTmsAddress("https://sirius-nest.utsmyanmar.com/api/v1"); - SystemParamsOperation.getInstance().setEReceiptAddress("https://receipt-nest.utsmyanmar.com"); + SystemParamsOperation.getInstance().setTmsAddress("https://api-tms-uat.kbzbank.com:8443/sirius"); + SystemParamsOperation.getInstance().setEReceiptAddress("https://api-tms-uat.kbzbank.com:8443/receipt"); +// SystemParamsOperation.getInstance().setTmsAddress("https://sirius-nest.utsmyanmar.com/api/v1"); +// SystemParamsOperation.getInstance().setEReceiptAddress("https://receipt-nest.utsmyanmar.com"); PinPad pinPad = MyApplication.getInstance().deviceEngine.getPinPad(); byte[] encryptedPIK = SystemParamsOperation.getInstance().getPIK(); diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java index 1d4edb5..8cca8e4 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingFragment.java @@ -345,12 +345,14 @@ public class ProcessingFragment extends DataBindingFragment { handleAfterTransaction(); break; case SUCCESS: - if(requiresSignature()){ - handleAfterTransaction(); - }else{ - sharedViewModel.pushReceipt(buildEReceiptCardReceipt(payDetail, true, BaseErrorCode.getCode(payDetail.getTradeAnswerCode()))); - handleAfterTransaction(); - } + sharedViewModel.pushReceipt(buildEReceiptCardReceipt(payDetail, true, BaseErrorCode.getCode(payDetail.getTradeAnswerCode()))); + handleAfterTransaction(); +// if(requiresSignature()){ +// handleAfterTransaction(); +// }else{ +// sharedViewModel.pushReceipt(buildEReceiptCardReceipt(payDetail, true, BaseErrorCode.getCode(payDetail.getTradeAnswerCode()))); +// handleAfterTransaction(); +// } break; case OFFLINE_SUCCESS: if(SystemParamsOperation.getInstance().getDemoStatus()) { diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/SignatureFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/SignatureFragment.java index 647932a..7c1f492 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/SignatureFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/SignatureFragment.java @@ -142,13 +142,13 @@ public class SignatureFragment extends DataBindingFragment { payDetail.setESignBlob(blob); sharedViewModel.payDetail.setValue(payDetail); sharedViewModel.updateESignBlob(payDetail.voucherNo, blob); - EReceiptCardRequest request = EReceiptHelper.buildEReceiptCardReceipt( - requireContext(), - payDetail, - true, - BaseErrorCode.getCode(payDetail.getTradeAnswerCode()), - null); - sharedViewModel.pushReceiptWithImage(request, blob); +// EReceiptCardRequest request = EReceiptHelper.buildEReceiptCardReceipt( +// requireContext(), +// payDetail, +// true, +// BaseErrorCode.getCode(payDetail.getTradeAnswerCode()), +// null); +// sharedViewModel.pushReceiptWithImage(request, blob); } public class ClickEvent { diff --git a/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementTransactionFragment.java b/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementTransactionFragment.java index e79844b..591062f 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementTransactionFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/settlement/SettlementTransactionFragment.java @@ -328,7 +328,6 @@ public class SettlementTransactionFragment extends DataBindingFragment implement settlementViewModel.pre_breakdown.setValue(buildBreakdownText(mmkBucket.preCount, mmkBucket.preAmount, usdBucket.preCount, usdBucket.preAmount)); settlementViewModel.refund_breakdown.setValue(buildBreakdownText(mmkBucket.refundCount, mmkBucket.refundAmount, usdBucket.refundCount, usdBucket.refundAmount)); settlementViewModel.ca_breakdown.setValue(buildBreakdownText(mmkBucket.caCount, mmkBucket.caAmount, usdBucket.caCount, usdBucket.caAmount)); - if(sharedViewModel.getTransMenu().getValue() == TransMenu.REVIEW_BATCH) { SettleData settleData = new SettleData(saleCount,saleAmount,preCount,preAmount,refundCount,refundAmount,caCount,caAmount); TradeData tradeData = Params.newTrade(false); @@ -384,6 +383,11 @@ public class SettlementTransactionFragment extends DataBindingFragment implement } } + private String buildBreakdownText(int mmkCount, long mmkAmount, int usdCount, long usdAmount) { + return "MMK " + mmkCount + " / " + POSUtil.getInstance().getDecimalAmountSeparatorFormat(mmkAmount) + + " USD " + usdCount + " / " + POSUtil.getInstance().getDecimalAmountSeparatorFormat(usdAmount); + } + private CurrencyBucket getCurrencyBucket(String currencyCode) { return "USD".equals(normalizeCurrency(currencyCode)) ? usdBucket : mmkBucket; } @@ -431,11 +435,6 @@ public class SettlementTransactionFragment extends DataBindingFragment implement } } - private String buildBreakdownText(int mmkCount, long mmkAmount, int usdCount, long usdAmount) { - return "MMK " + mmkCount + " / " + POSUtil.getInstance().getDecimalAmountSeparatorFormat(mmkAmount) - + " USD " + usdCount + " / " + POSUtil.getInstance().getDecimalAmountSeparatorFormat(usdAmount); - } - private String normalizeCurrency(String currencyCode) { if (currencyCode == null) { return "MMK"; diff --git a/app/uat/release/baselineProfiles/0/app-uat-release.dm b/app/uat/release/baselineProfiles/0/app-uat-release.dm index a76f01b9645e463e22bc2f071e8d82be3382d06c..5481780ee67b0675e18cd6afd6f81e35d4a39e32 100644 GIT binary patch delta 3048 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 Z{_gZgdvZAJ5YI$%2JA3I4F>vo{sU1<+6@2z literal 3262 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 M8uwVJ^7l^v0R!;v*Z=?k diff --git a/app/uat/release/baselineProfiles/1/app-uat-release.dm b/app/uat/release/baselineProfiles/1/app-uat-release.dm index 2dffc85d2b1a2c6fec1940451bc7f9ab3fa97c5e..a7384c0fe26b4471657052fb8ed661c11fc7c610 100644 GIT binary patch literal 3178 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 Diw@?k literal 3182 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 cardSettleDataList = payDetail.getCardSettleData(); - CurrencySettlementSummary mmkSummary = new CurrencySettlementSummary(); - CurrencySettlementSummary usdSummary = new CurrencySettlementSummary(); - - if (cardSettleDataList != null && !cardSettleDataList.isEmpty()) { - for (CardSettleData cardSettleData : cardSettleDataList) { - CurrencySettlementSummary summary = "USD".equals(normalizeSettlementCurrency(cardSettleData.getCurrencyCode())) ? usdSummary : mmkSummary; - applyCardSettlementSummary(summary, cardSettleData); - } - } else { - mmkSummary.saleCount = settleData.getSaleCount(); - mmkSummary.saleAmount = settleData.getSaleAmount(); - mmkSummary.preAuthCompCount = settleData.getPreAuthCompCount(); - mmkSummary.preAuthCompAmount = settleData.getPreAuthCompAmount(); - mmkSummary.refundCount = settleData.getRefundCount(); - mmkSummary.refundAmount = settleData.getRefundAmount(); - mmkSummary.cashAdvanceCount = settleData.getCashAdvanceCount(); - mmkSummary.cashAdvanceAmount = settleData.getCashAdvanceAmount(); - } - - printSettlementCurrencySection("MMK", mmkSummary); - if (usdSummary.hasAnyValue()) { - emptyLine(1); - printSettlementCurrencySection("USD", usdSummary); - } + print3ColumnsString("TRX TYPE ", "CNT", "AMOUNT"); + print3ColumnsString("SALE ", countStringFormat(settleData.getSaleCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getSaleAmount(), SystemParamsOperation.getInstance().getDecimalEnable())); + print3ColumnsString("VOID SALE ", countStringFormat(settleData.getVoidSaleCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getVoidSaleAmount(), SystemParamsOperation.getInstance().getDecimalEnable())); + print3ColumnsString("PREAUTH COMP ", countStringFormat(settleData.getPreAuthCompCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getPreAuthCompAmount(), SystemParamsOperation.getInstance().getDecimalEnable())); + print3ColumnsString("CASH ADV ", countStringFormat(settleData.getCashAdvanceCount()), PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getCashAdvanceAmount(), SystemParamsOperation.getInstance().getDecimalEnable())); + print3ColumnsString("REFUND ", countStringFormat(settleData.getRefundCount()), "- " + PrintUtils.getInstance().getSeparatorNumberFormat(settleData.getRefundAmount(), SystemParamsOperation.getInstance().getDecimalEnable())); + dotBreak(); + long totalAmount = settleData.getSaleAmount() + settleData.getPreAuthCompAmount() + settleData.getCashAdvanceAmount() + - settleData.getVoidSaleAmount() - settleData.getRefundAmount(); + print3ColumnsString("TOTAL ", "", PrintUtils.getInstance().getSeparatorNumberFormat(totalAmount, SystemParamsOperation.getInstance().getDecimalEnable())); emptyLine(2); } diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java index 6f62857..3f0a970 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java @@ -192,12 +192,7 @@ public class PrintXImpl extends BaseXPrint implements PrintX { printLogo(); printMerchantHeader(); printTransHeader(payDetail); - List cardSettleDataList = payDetail.getCardSettleData(); - if (cardSettleDataList != null && !cardSettleDataList.isEmpty()) { - printTransDetailSettlement(payDetail, cardSettleDataList); - } else { - printTransDetailSettlement(payDetail); - } + printTransDetailSettlement(payDetail); // printTransFooterSummary(); printTransFooterForSettlement(); diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java index fb5e440..2085155 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java @@ -42,10 +42,10 @@ public class SystemParamsSettings implements Serializable { // private String tmsAddress = "https://api-tms.kbzbank.com/sirius"; // private String ereceiptAddress = "https://api-tms.kbzbank.com/receipt"; -// private String tmsAddress = "https://api-tms-uat.kbzbank.com:8443/sirius"; -// private String ereceiptAddress = "https://api-tms-uat.kbzbank.com:8443/receipt"; - private String tmsAddress = "https://sirius-nest.utsmyanmar.com/api/v1"; - private String ereceiptAddress = "https://receipt-nest.utsmyanmar.com"; + private String tmsAddress = "https://api-tms-uat.kbzbank.com:8443/sirius"; + private String ereceiptAddress = "https://api-tms-uat.kbzbank.com:8443/receipt"; +// private String tmsAddress = "https://sirius-nest.utsmyanmar.com/api/v1"; +// private String ereceiptAddress = "https://receipt-nest.utsmyanmar.com"; private String binValues = ""; private String restrictedBinValues = "";