Refactor GRN configuration page layout
This commit is contained in:
@@ -22,3 +22,53 @@ export const sysConfig = {
|
||||
set: (key: string, value: string, userId?: string | null) =>
|
||||
api.put<SysConfigResponse>(`/sys-config/${key}`, { value, userId }).then(r => r.data),
|
||||
}
|
||||
|
||||
// ─── GRN tax settings (must match Distribution.Features.SysConfig.SysConfigService) ──────────
|
||||
|
||||
export type TaxMode = 'Disabled' | 'Optional' | 'Mandatory'
|
||||
|
||||
export const GRN_TAX_KEYS = {
|
||||
vatMode: 'Grn.Tax.Vat.Mode',
|
||||
vatRate: 'Grn.Tax.Vat.DefaultRate',
|
||||
nbtMode: 'Grn.Tax.Nbt.Mode',
|
||||
nbtRate: 'Grn.Tax.Nbt.DefaultRate',
|
||||
} as const
|
||||
|
||||
export interface GrnTaxSettings {
|
||||
vatMode: TaxMode
|
||||
vatDefaultRate: number
|
||||
nbtMode: TaxMode
|
||||
nbtDefaultRate: number
|
||||
}
|
||||
|
||||
const TAX_MODES: TaxMode[] = ['Disabled', 'Optional', 'Mandatory']
|
||||
|
||||
/** Unconfigured, VAT is Optional (as GRNs behaved before the setting existed) and NBT is off. */
|
||||
export const DEFAULT_GRN_TAX_SETTINGS: GrnTaxSettings = {
|
||||
vatMode: 'Optional',
|
||||
vatDefaultRate: 0,
|
||||
nbtMode: 'Disabled',
|
||||
nbtDefaultRate: 0,
|
||||
}
|
||||
|
||||
export function parseGrnTaxSettings(byKey: Record<string, string>): GrnTaxSettings {
|
||||
const mode = (raw: string | undefined, fallback: TaxMode): TaxMode =>
|
||||
TAX_MODES.includes(raw as TaxMode) ? (raw as TaxMode) : fallback
|
||||
const rate = (raw: string | undefined) => {
|
||||
const n = Number(raw)
|
||||
return raw !== undefined && Number.isFinite(n) && n >= 0 && n <= 100 ? n : 0
|
||||
}
|
||||
return {
|
||||
vatMode: mode(byKey[GRN_TAX_KEYS.vatMode], DEFAULT_GRN_TAX_SETTINGS.vatMode),
|
||||
vatDefaultRate: rate(byKey[GRN_TAX_KEYS.vatRate]),
|
||||
nbtMode: mode(byKey[GRN_TAX_KEYS.nbtMode], DEFAULT_GRN_TAX_SETTINGS.nbtMode),
|
||||
nbtDefaultRate: rate(byKey[GRN_TAX_KEYS.nbtRate]),
|
||||
}
|
||||
}
|
||||
|
||||
export const grnTaxSettings = {
|
||||
get: () =>
|
||||
sysConfig
|
||||
.getAll()
|
||||
.then(all => parseGrnTaxSettings(Object.fromEntries(all.map(c => [c.key, c.value])))),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user