diff --git a/distribution_fe/config/nav.ts b/distribution_fe/config/nav.ts index 0ab7029..a89b4dc 100644 --- a/distribution_fe/config/nav.ts +++ b/distribution_fe/config/nav.ts @@ -26,6 +26,7 @@ import { ClipboardListIcon, BankIcon, PackageMoving01Icon, + Settings01Icon, } from '@hugeicons/core-free-icons' export interface NavItem { @@ -49,6 +50,13 @@ export const DASHBOARD_ITEM: NavItem = { icon: DashboardSquare01Icon, } +// Standalone item rendered at the bottom — links straight to the page, no sub-nav +export const CONFIGURATION_ITEM: NavItem = { + title: 'Configuration', + href: '/configuration', + icon: Settings01Icon, +} + export const NAV_GROUPS: NavGroup[] = [ { title: 'Shop POs & Invoices', @@ -80,7 +88,7 @@ export const NAV_GROUPS: NavGroup[] = [ title: 'Catalogue', icon: CatalogueIcon, items: [ - { title: 'Items', href: '/catalogue/items', icon: Package01Icon, description: 'Products available for sale and distribution', permission: 'items.view' }, + { title: 'Products', href: '/catalogue/items', icon: Package01Icon, description: 'Products available for sale and distribution', permission: 'items.view' }, { title: 'Categories', href: '/catalogue/categories', icon: CatalogueIcon, description: 'Product groupings and sub-categories', permission: 'categories.view' }, { title: 'Brands', href: '/catalogue/brands', icon: BarCode01Icon, description: 'Brands associated with catalogue items', permission: 'categories.view' }, // { title: 'UOMs', href: '/catalogue/uoms', icon: Layers01Icon, description: 'Units of measure and conversion factors between units', permission: 'categories.view' }, @@ -162,5 +170,5 @@ export const BOTTOM_NAV_CANDIDATES: NavItem[] = [ { title: 'Rides', href: '/operations/rides', icon: TruckIcon, permission: 'rides.view' }, { title: 'Loading', href: '/operations/loading', icon: DeliveryBox01Icon, permission: 'loading.view' }, { title: 'Shop POs', href: '/sales', icon: ClipboardListIcon, permission: 'orders.view' }, - { title: 'Items', href: '/catalogue/items', icon: Package01Icon, permission: 'items.view' }, + { title: 'Products', href: '/catalogue/items', icon: Package01Icon, permission: 'items.view' }, ] diff --git a/distribution_fe/lib/api/catalogue.ts b/distribution_fe/lib/api/catalogue.ts index b2a598b..5f4e54e 100644 --- a/distribution_fe/lib/api/catalogue.ts +++ b/distribution_fe/lib/api/catalogue.ts @@ -28,6 +28,13 @@ export interface ItemBody { brandId?: string | null baseUomId: string salePrice: number + reorderLevel?: number | null + tracksSerialNumbers?: boolean + tracksBatches?: boolean + tracksExpiryDate?: boolean + hasWarranty?: boolean + warrantyPeriodDays?: number | null + allowCustomWarrantyPeriod?: boolean syncSource?: SyncSource isActive?: boolean } diff --git a/distribution_fe/lib/api/index.ts b/distribution_fe/lib/api/index.ts index 65c81eb..90173a0 100644 --- a/distribution_fe/lib/api/index.ts +++ b/distribution_fe/lib/api/index.ts @@ -10,6 +10,7 @@ export { rides, loadingSheets, deliveryTasks } from './operations' export { stock } from './stock' export { shopPos, invoices, payments } from './sales' export { saleReturns, claims, supplierClaims } from './returns-claims' +export { sysConfig, ITEM_TRACKING_KEYS } from './sys-config' export { getPaginatedItems } from './paginated' export type { PageParams } from './master' diff --git a/distribution_fe/lib/api/sys-config.ts b/distribution_fe/lib/api/sys-config.ts new file mode 100644 index 0000000..d68b953 --- /dev/null +++ b/distribution_fe/lib/api/sys-config.ts @@ -0,0 +1,24 @@ +import { api } from '@/lib/api' +import type { SysConfigResponse } from '@/types/api' + +// ─── Item tracking feature keys (must match Distribution.Features.SysConfig.SysConfigService) ── + +export const ITEM_TRACKING_KEYS = { + serialNumberTracking: 'Feature.SerialNumberTracking', + batchTracking: 'Feature.BatchTracking', + expiryDateTracking: 'Feature.ExpiryDateTracking', + warrantyTracking: 'Feature.WarrantyTracking', + customWarrantyOverride: 'Feature.CustomWarrantyOverride', + defaultWarrantyPeriodDays: 'Feature.DefaultWarrantyPeriodDays', +} as const + +export const sysConfig = { + getAll: () => + api.get('/sys-config').then(r => r.data), + + get: (key: string) => + api.get(`/sys-config/${key}`).then(r => r.data), + + set: (key: string, value: string, userId?: string | null) => + api.put(`/sys-config/${key}`, { value, userId }).then(r => r.data), +} diff --git a/distribution_fe/types/api.ts b/distribution_fe/types/api.ts index 9527713..77206d0 100644 --- a/distribution_fe/types/api.ts +++ b/distribution_fe/types/api.ts @@ -282,6 +282,13 @@ export interface ItemSummaryResponse { baseUomId: string baseUomName: string salePrice: number + reorderLevel: number | null + tracksSerialNumbers: boolean + tracksBatches: boolean + tracksExpiryDate: boolean + hasWarranty: boolean + warrantyPeriodDays: number | null + allowCustomWarrantyPeriod: boolean syncSource: SyncSource isActive: boolean createdAt: string