Show SMS money labels in tomans; keep remote APIs in rials.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-08 13:27:31 +03:30
co-authored by Cursor
parent db66a44527
commit f9b77ceaac
2 changed files with 7 additions and 4 deletions
+2 -1
View File
@@ -51,7 +51,8 @@ Workspace پیشنهادی: `E:\projeha\Abshode-suite.code-workspace`
- ایمپورت نسخه‌ها از `apps/api/prisma/data/users.json` (`npm run prisma:import-users`) - ایمپورت نسخه‌ها از `apps/api/prisma/data/users.json` (`npm run prisma:import-users`)
- تشخیص محصول: `app.` / `khanegi.` → خانگی؛ `hamkar.` → همکار؛ overrides دستی در اسکریپت ایمپورت - تشخیص محصول: `app.` / `khanegi.` → خانگی؛ `hamkar.` → همکار؛ overrides دستی در اسکریپت ایمپورت
- پنل SMS مستقل سوپرادمین: `SmsAccount` + `SmsLedger` (موجودی، شارژ، تعرفه، بلاک، آستانه‌های رنگی، گلوگاه) - پنل SMS مستقل سوپرادمین: `SmsAccount` + `SmsLedger` (موجودی، شارژ، تعرفه، بلاک، آستانه‌های رنگی، گلوگاه)
- رنگ موجودی: سبز >100000، زرد 10000–100000، قرمز <10000 (ریال) - رنگ موجودی (نمایش تومان): سبز >10000، زرد 1000–10000، قرمز <1000 — ذخیره DB و API محصولات همچنان **ریال** (*10)
- مبالغ در UI سوپرادمین **تومان** است؛ `MoneyInput`/`formatMoney` تبدیل می‌کنند. remote SMS به همکار/خانگی همان اعداد ریال را می‌فرستد/می‌گیرد.
- داشبورد: ۵ نسخه کم‌موجودی؛ صفحه SMS: کارت‌ها → جزئیات در `/sms/:tenantId` - داشبورد: ۵ نسخه کم‌موجودی؛ صفحه SMS: کارت‌ها → جزئیات در `/sms/:tenantId`
- ظاهر اپ خانگی: صفحه `UiConfigPage` برای `appUiConfig`؛ بک‌فیل از رجیستری/`users.json` با `npm run prisma:backfill-appearance`؛ در فرانت: `showNotifications` / `header.visible` / `startRoute` - ظاهر اپ خانگی: صفحه `UiConfigPage` برای `appUiConfig`؛ بک‌فیل از رجیستری/`users.json` با `npm run prisma:backfill-appearance`؛ در فرانت: `showNotifications` / `header.visible` / `startRoute`
- ظاهر اپ همکار: `/versions/:id/ui-hamkar`؛ رنگ‌ها + حالت رجیستری (`registryMode`)؛ `settingsManaged` باید true باشد تا `ui_settings` بیاید (وگرنه لاراول می‌ماند) - ظاهر اپ همکار: `/versions/:id/ui-hamkar`؛ رنگ‌ها + حالت رجیستری (`registryMode`)؛ `settingsManaged` باید true باشد تا `ui_settings` بیاید (وگرنه لاراول می‌ماند)
+5 -3
View File
@@ -228,9 +228,9 @@ export class SmsService {
}); });
const tenant = await this.requireTenant(tenantId); const tenant = await this.requireTenant(tenantId);
const amountLabel = dto.amountRials.toLocaleString('fa-IR'); const amountLabel = this.formatMoney(dto.amountRials);
this.notify.notifyAdmins( 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); return this.getAccount(tenantId);
@@ -863,8 +863,10 @@ export class SmsService {
return 'healthy'; return 'healthy';
} }
/** Human-facing SuperAdmin label: storage is rial, display is toman. */
private formatMoney(value: number) { 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) { private chargeInfoOf(account: SmsAccount) {