Show SMS money labels in tomans; keep remote APIs in rials.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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` بیاید (وگرنه لاراول میماند)
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user