Files
boursecu_admin/src/utils/productOrderLimit.ts
T

83 lines
2.5 KiB
TypeScript
Raw Normal View History

2026-08-14 21:05:11 +03:30
import { parseNumericValue, sanitizeNumericString } from '@core/utils/convert'
2026-07-08 18:24:55 +03:30
/** پارس مبلغ محدودیت سفارش — ارقام فارسی/عربی و جداکننده هزارگان */
export function parseOrderLimitCashValue(value: unknown): number | undefined {
if (value === undefined || value === null || value === '') {
return undefined
}
2026-08-14 21:05:11 +03:30
const raw = sanitizeNumericString(value, { allowDecimal: false })
2026-07-08 18:24:55 +03:30
if (raw === '') {
return undefined
}
2026-08-14 21:05:11 +03:30
const num = parseNumericValue(raw)
2026-07-08 18:24:55 +03:30
if (!Number.isFinite(num) || num < 0) {
return undefined
}
2026-07-26 19:57:10 +03:30
return Math.trunc(num)
2026-07-08 18:24:55 +03:30
}
function orderLimitInputsPresent(form: {
min_order_cash?: number | string | null
max_order_cash?: number | string | null
}): boolean {
return (
(form.min_order_cash != null && form.min_order_cash !== '') ||
(form.max_order_cash != null && form.max_order_cash !== '')
)
}
2026-06-07 10:58:23 +03:30
export function validateProductOrderLimitForm(form: {
order_limit_enabled?: boolean
min_order_cash?: number | string | null
max_order_cash?: number | string | null
}): string | null {
2026-07-08 18:24:55 +03:30
const enabled = !!form.order_limit_enabled || orderLimitInputsPresent(form)
if (!enabled) return null
2026-06-07 10:58:23 +03:30
2026-07-08 18:24:55 +03:30
const rawMin = form.min_order_cash
const rawMax = form.max_order_cash
const hasMinInput = rawMin != null && rawMin !== ''
const hasMaxInput = rawMax != null && rawMax !== ''
const min = parseOrderLimitCashValue(rawMin)
const max = parseOrderLimitCashValue(rawMax)
2026-06-07 10:58:23 +03:30
2026-07-08 18:24:55 +03:30
if (hasMinInput && min == null) {
return 'حداقل مبلغ سفارش نامعتبر است'
}
if (hasMaxInput && max == null) {
return 'حداکثر مبلغ سفارش نامعتبر است'
}
if (min == null && max == null) {
2026-06-07 10:58:23 +03:30
return 'با فعال بودن محدودیت مبلغ سفارش، حداقل یکی از حداقل یا حداکثر مبلغ باید وارد شود'
}
2026-07-08 18:24:55 +03:30
if (min != null && max != null && min > max) {
2026-06-07 10:58:23 +03:30
return 'حداقل مبلغ نمی‌تواند بیشتر از حداکثر باشد'
}
return null
}
export function normalizeProductOrderLimitForm<T extends Record<string, any>>(data: T): T {
2026-07-08 18:24:55 +03:30
const min = parseOrderLimitCashValue(data.min_order_cash)
const max = parseOrderLimitCashValue(data.max_order_cash)
const enabled = !!data.order_limit_enabled || min != null || max != null
data.order_limit_enabled = enabled
if (!enabled) {
2026-06-07 10:58:23 +03:30
data.min_order_cash = undefined
data.max_order_cash = undefined
} else {
2026-07-08 18:24:55 +03:30
data.min_order_cash = min
data.max_order_cash = max
2026-06-07 10:58:23 +03:30
}
2026-07-08 18:24:55 +03:30
2026-06-07 10:58:23 +03:30
return data
}