From f9b77ceaacaae7c73063c720e620e711072c9505 Mon Sep 17 00:00:00 2001 From: Mahdi Date: Sat, 8 Aug 2026 13:27:31 +0330 Subject: [PATCH] Show SMS money labels in tomans; keep remote APIs in rials. Co-authored-by: Cursor --- AGENTS.md | 3 ++- src/sms/sms.service.ts | 8 +++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 32b19cb..dc3b2a3 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -51,7 +51,8 @@ Workspace پیشنهادی: `E:\projeha\Abshode-suite.code-workspace` - ایمپورت نسخه‌ها از `apps/api/prisma/data/users.json` (`npm run prisma:import-users`) - تشخیص محصول: `app.` / `khanegi.` → خانگی؛ `hamkar.` → همکار؛ overrides دستی در اسکریپت ایمپورت - پنل SMS مستقل سوپرادمین: `SmsAccount` + `SmsLedger` (موجودی، شارژ، تعرفه، بلاک، آستانه‌های رنگی، گلوگاه) -- رنگ موجودی: سبز >100000، زرد 10000–100000، قرمز <10000 (ریال) +- رنگ موجودی (نمایش تومان): سبز >10000، زرد 1000–10000، قرمز <1000 — ذخیره DB و API محصولات همچنان **ریال** (*10) +- مبالغ در UI سوپرادمین **تومان** است؛ `MoneyInput`/`formatMoney` تبدیل می‌کنند. remote SMS به همکار/خانگی همان اعداد ریال را می‌فرستد/می‌گیرد. - داشبورد: ۵ نسخه کم‌موجودی؛ صفحه SMS: کارت‌ها → جزئیات در `/sms/:tenantId` - ظاهر اپ خانگی: صفحه `UiConfigPage` برای `appUiConfig`؛ بک‌فیل از رجیستری/`users.json` با `npm run prisma:backfill-appearance`؛ در فرانت: `showNotifications` / `header.visible` / `startRoute` - ظاهر اپ همکار: `/versions/:id/ui-hamkar`؛ رنگ‌ها + حالت رجیستری (`registryMode`)؛ `settingsManaged` باید true باشد تا `ui_settings` بیاید (وگرنه لاراول می‌ماند) diff --git a/src/sms/sms.service.ts b/src/sms/sms.service.ts index 0d02a2d..97d1059 100644 --- a/src/sms/sms.service.ts +++ b/src/sms/sms.service.ts @@ -228,9 +228,9 @@ export class SmsService { }); const tenant = await this.requireTenant(tenantId); - const amountLabel = dto.amountRials.toLocaleString('fa-IR'); + const amountLabel = this.formatMoney(dto.amountRials); this.notify.notifyAdmins( - `سوپرادمین: کیف پول SMS «${tenant.nameFa}» ${dto.amountRials > 0 ? 'شارژ' : 'اصلاح'} شد (${amountLabel} ریال). موجودی: ${updated.balanceRials.toLocaleString('fa-IR')}`, + `سوپرادمین: کیف پول SMS «${tenant.nameFa}» ${dto.amountRials > 0 ? 'شارژ' : 'اصلاح'} شد (${amountLabel}). موجودی: ${this.formatMoney(updated.balanceRials)}`, ); return this.getAccount(tenantId); @@ -863,8 +863,10 @@ export class SmsService { return 'healthy'; } + /** Human-facing SuperAdmin label: storage is rial, display is toman. */ private formatMoney(value: number) { - return `${new Intl.NumberFormat('fa-IR').format(value)} ریال`; + const toman = Math.trunc(value / 10); + return `${new Intl.NumberFormat('fa-IR').format(toman)} تومان`; } private chargeInfoOf(account: SmsAccount) {