fix some bugs
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user