44 lines
1.5 KiB
TypeScript
44 lines
1.5 KiB
TypeScript
import type { Order } from '@/model/order'
|
||||
|
|
import { usePrice } from '@core/utils/usePrice'
|
|||
|
|
import { getMainMetal } from '@/utils/metalLabels'
|
|||
|
|
|
|||
|
|
export type OrderServiceFeeDisplay = {
|
|||
|
|
value: string
|
|||
|
|
/** از ریال / از مس / از طلا … */
|
|||
|
|
source: string
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* نمایش کارمزد سفارش با منبع کسر (fee_asset).
|
|||
|
|
* gold → از کیف فلز (گرم + معادل ریالی)
|
|||
|
|
* rial / خالی → از ریال
|
|||
|
|
*/
|
|||
|
|
export function formatOrderServiceFee(order?: Pick<
|
|||
|
|
Order,
|
|||
|
|
'fee_asset' | 'service_charge' | 'service_charge_price' | 'order_metal_label' | 'amount_unit'
|
|||
|
|
> | null): OrderServiceFeeDisplay {
|
|||
|
|
const grams = Number(order?.service_charge ?? 0)
|
|||
|
|
const rial = Number(order?.service_charge_price ?? 0)
|
|||
|
|
|
|||
|
|
if ((!Number.isFinite(grams) || grams <= 0) && (!Number.isFinite(rial) || rial <= 0)) {
|
|||
|
|
return { value: '۰', source: '' }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const fromMetal = String(order?.fee_asset ?? '').toLowerCase() === 'gold'
|
|||
|
|
if (fromMetal) {
|
|||
|
|
const metalName = (order?.order_metal_label || getMainMetal() || 'فلز').trim()
|
|||
|
|
const unit = (order?.amount_unit || 'گرم').trim() || 'گرم'
|
|||
|
|
const gramText = Number(grams || 0).toLocaleString('fa-IR', { maximumFractionDigits: 4 })
|
|||
|
|
const rialText = usePrice(rial || 0, true, 'ریال')
|
|||
|
|
return {
|
|||
|
|
value: `${gramText} ${unit} ≈ ${rialText}`,
|
|||
|
|
source: `از ${metalName}`,
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
value: usePrice(rial || 0, true, 'ریال'),
|
|||
|
|
source: 'از ریال',
|
|||
|
|
}
|
|||
|
|
}
|