Files
boursecu_admin/src/utils/metalWeight.ts
T
2026-06-23 22:31:07 +03:30

69 lines
2.0 KiB
TypeScript

import { TRADE_WEIGHT_UNIT_GRAM, TRADE_WEIGHT_UNIT_KILOGRAM } from '@/utils/weightUnit'
export const METAL_ID_GOLD = 1
export const METAL_ID_SILVER = 2
export const METAL_ID_COPPER = 3
/** واحد نمایش موجودی/تراز هر فلز — مس کیلوگرم، بقیه گرم */
export function metalDisplayUnit(metalId: number): string {
return metalId === METAL_ID_COPPER ? TRADE_WEIGHT_UNIT_KILOGRAM : TRADE_WEIGHT_UNIT_GRAM
}
export function isMetalKilogram(metalId: number): boolean {
return metalId === METAL_ID_COPPER
}
/** تبدیل مقدار ذخیره‌شده به گرم (برای محاسبات ریالی) */
export function gramsToMetalDisplay(grams: number, metalId: number): number {
return isMetalKilogram(metalId) ? grams / 1000 : grams
}
/** مقدار نمایشی از گرم */
export function formatMetalWeightFromGrams(
grams: number,
metalId: number,
decimals = 3
): string {
const value = gramsToMetalDisplay(grams, metalId)
return formatMetalDisplayValue(value, metalId, decimals)
}
/** مقدار از قبل در واحد نمایشی فلز */
export function formatMetalDisplayValue(
value: number,
metalId: number,
decimals = 3
): string {
const unit = metalDisplayUnit(metalId)
return `${Number(Number(value).toFixed(decimals))} ${unit}`
}
export function formatMetalDisplayValuePlain(
value: number,
metalId: number,
decimals = 3
): string {
return Number(Number(value).toFixed(decimals)).toLocaleString('fa-IR', {
maximumFractionDigits: decimals
})
}
export function metalCellValue(
record: Record<string, unknown>,
metalId: number,
prefix = 'metal_gold'
): number {
const flatKey = `${prefix}_${metalId}`
if (record[flatKey] != null) {
return Number(record[flatKey])
}
const mapKey = prefix === 'wallet_metal_gold' ? 'wallet_metal_gold' : 'metal_gold'
const map = record[mapKey] as Record<string, number> | undefined
if (!map) {
return 0
}
return Number(map[String(metalId)] ?? 0)
}