From ce389955466605debf06aeedded695caebe1412e Mon Sep 17 00:00:00 2001 From: kang Date: Tue, 23 Jun 2026 16:50:14 +0800 Subject: [PATCH] feat(settlement): add idempotency keys to bill operations and enhance credit ledger filtering Added idempotency_key parameter to settlement bill payment and adjustment API calls to prevent duplicate transactions. Enhanced credit ledger panel with expanded reason filters including bet_hold_release, game_settlement_win/loss/reversal, and settlement_confirm/payout. Updated localization files to include new game_settlement_reversal labels across English, Nepali, and Chinese. Improved credit ledger reason --- src/api/admin-agent-settlement.ts | 4 ++-- src/i18n/locales/en/settlementCenter.json | 1 + src/i18n/locales/ne/settlementCenter.json | 1 + src/i18n/locales/zh/settlementCenter.json | 1 + src/modules/agents/agents-console.tsx | 2 +- src/modules/settlement/agent-bill-detail.tsx | 4 ++++ .../settlement-credit-ledger-panel.tsx | 7 ++++++- .../settlement/settlement-status-label.ts | 18 ++++++++++++++++++ 8 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/api/admin-agent-settlement.ts b/src/api/admin-agent-settlement.ts index eef9c3a..6542eb0 100644 --- a/src/api/admin-agent-settlement.ts +++ b/src/api/admin-agent-settlement.ts @@ -300,7 +300,7 @@ export async function postSettlementBillConfirm(billId: number): Promise<{ bill_ export async function postSettlementBillPayment( billId: number, - body: { amount: number; method?: string; proof?: string; remark?: string }, + body: { amount: number; method?: string; proof?: string; remark?: string; idempotency_key?: string }, ): Promise<{ bill: SettlementBillRow }> { return adminRequest.post(`${A}/settlement-bills/${billId}/payments`, body); } @@ -324,7 +324,7 @@ export async function getAgentSettlementReport(params: { export async function postSettlementBillAdjustment( billId: number, - body: { amount: number; adjustment_type?: "adjustment" | "reversal"; reason?: string }, + body: { amount: number; adjustment_type?: "adjustment" | "reversal"; reason?: string; idempotency_key?: string }, ): Promise<{ adjustment_bill_id: number; bill: SettlementBillRow }> { return adminRequest.post(`${A}/settlement-bills/${billId}/adjustments`, body); } diff --git a/src/i18n/locales/en/settlementCenter.json b/src/i18n/locales/en/settlementCenter.json index d59ef85..b8e395e 100644 --- a/src/i18n/locales/en/settlementCenter.json +++ b/src/i18n/locales/en/settlementCenter.json @@ -146,6 +146,7 @@ "payment_record": "Bill payment", "bet_hold": "Bet hold", "game_settlement": "Draw settlement", + "game_settlement_reversal": "Draw reversal", "game_settlement_win": "Draw settlement credit", "bet_hold_release": "Hold release", "game_settlement_loss": "Draw settlement debit", diff --git a/src/i18n/locales/ne/settlementCenter.json b/src/i18n/locales/ne/settlementCenter.json index 3560fbb..14fd95a 100644 --- a/src/i18n/locales/ne/settlementCenter.json +++ b/src/i18n/locales/ne/settlementCenter.json @@ -146,6 +146,7 @@ "payment_record": "Bill payment", "bet_hold": "Bet hold", "game_settlement": "Draw settlement", + "game_settlement_reversal": "Draw reversal", "game_settlement_win": "Draw settlement credit", "bet_hold_release": "Hold release", "game_settlement_loss": "Draw settlement debit", diff --git a/src/i18n/locales/zh/settlementCenter.json b/src/i18n/locales/zh/settlementCenter.json index fdb6b21..95279fb 100644 --- a/src/i18n/locales/zh/settlementCenter.json +++ b/src/i18n/locales/zh/settlementCenter.json @@ -132,6 +132,7 @@ "bet_hold": "下注冻结", "freezeAmount": "冻结 {{amount}}", "game_settlement": "开奖结算", + "game_settlement_reversal": "开奖冲正", "game_settlement_win": "开奖结算入账", "bet_hold_release": "占用释放", "game_settlement_loss": "开奖结算扣款", diff --git a/src/modules/agents/agents-console.tsx b/src/modules/agents/agents-console.tsx index ed06360..1f77c3d 100644 --- a/src/modules/agents/agents-console.tsx +++ b/src/modules/agents/agents-console.tsx @@ -1011,7 +1011,7 @@ export function AgentsConsole(): React.ReactElement { {canViewAgents && err ?

{err}

: null} {canViewAgents ? ( -
+
{showAgentSidebar ? (