sales & grn fixers
This commit is contained in:
@@ -1,6 +1,23 @@
|
||||
import { ItemListItem } from "@/types/master-data"
|
||||
|
||||
/** Rounds a sales unit price to 2dp, half away from zero (matches the server's SalesPricingService).
|
||||
* Shifts via the exponent string rather than `* 100` so binary-float cases like 1.005 round up. */
|
||||
export function roundPrice(value: number): number {
|
||||
const shifted = Number(`${Math.round(Number(`${Math.abs(value)}e2`))}e-2`)
|
||||
// Values JS prints in exponent form (e.g. 1e-7) can't take the string shift — those are ~0 anyway.
|
||||
const rounded = Number.isFinite(shifted) ? shifted : Math.round(Math.abs(value) * 100) / 100
|
||||
return value < 0 ? -rounded : rounded
|
||||
}
|
||||
|
||||
/** A unit price input's value as a 2dp price, or null when cleared. */
|
||||
export function parsePriceInput(value: string): number | null {
|
||||
if (value === "") return null
|
||||
const n = Number(value)
|
||||
return Number.isFinite(n) ? roundPrice(n) : null
|
||||
}
|
||||
|
||||
export function getSuggestedUnitPrice(items: ItemListItem[], itemId: number | null | undefined): number | null {
|
||||
if (!itemId) return null
|
||||
return items.find((item) => item.itemId === itemId)?.sellingFlatPrice ?? null
|
||||
const price = items.find((item) => item.itemId === itemId)?.sellingFlatPrice
|
||||
return price === null || price === undefined ? null : roundPrice(price)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user