69 lines
2.0 KiB
TypeScript
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)
|
|
}
|