// Products v2 grid (staff-only tracking table): the v1 rows plus the product's // attribute set → tracking mode, GuaranteeDaysMin, and an optional // `trackingFilter` ('tracked' | 'serial' | 'charge' | 'mhd' | 'both' | 'none'). import refreshTokenHelper from "../../../../utils/refreshTokenHelper" import forceLogoutHelper from "../../../../utils/forceLogoutHelper" import errorHandlingHelper from "../../../../utils/errorHandlingHelper" import { runProductsGrid } from '../../../../utils/productsGrid' import { ensureTrackingSets, getTrackingSet } from '../../../../utils/attributeTracking' const handleFunc = async (event: any, authToken: any = null) => { const token = authToken ?? await getTokenHelper(event) const body = await readBody(event) let extraFilter = '' const tf = String(body?.trackingFilter ?? '') if (tf && tf !== 'all') { // Resolving the sets here also bootstraps them on the first visit of the page. const sets = await ensureTrackingSets(event, token) if (tf === 'tracked') { extraFilter = ` AND M_AttributeSet_ID in (${[sets.serial.id, sets.charge.id, sets.mhd.id, sets.both.id].join(',')})` } else if (tf === 'none') { extraFilter = ' AND M_AttributeSet_ID eq null' } else if ((sets as any)[tf]) { extraFilter = ` AND M_AttributeSet_ID eq ${(sets as any)[tf].id}` } } return runProductsGrid(event, token, body, { extraSelect: ['M_AttributeSet_ID', 'GuaranteeDaysMin'], extraFilter, mapExtra: async (item, row) => { row.attributeSetId = item.M_AttributeSet_ID?.id || '' row.attributeSet = item.M_AttributeSet_ID?.identifier || '' row.guaranteeDaysMin = Number(item.GuaranteeDaysMin ?? 0) || 0 const set = await getTrackingSet(event, token, item.M_AttributeSet_ID) // cached per set id row.trackingMode = set?.mode ?? 'none' row.trackingFlags = set?.flags ?? { isSerNo: false, isLot: false, isGuaranteeDate: false } row.trackingIsCustomSet = !!(set && !set.isLogShip) } }) } export default defineEventHandler(async (event) => { let data: any = {} try { data = await handleFunc(event) } catch (err: any) { try { const authToken: any = await refreshTokenHelper(event) data = await handleFunc(event, authToken) } catch (error: any) { data = errorHandlingHelper(err?.data ?? err, error?.data ?? error) forceLogoutHelper(event, data) } } return data })