import { string } from 'alga-js' import refreshTokenHelper from "../../utils/refreshTokenHelper" import errorHandlingHelper from "../../utils/errorHandlingHelper" import fetchHelper from "../../utils/fetchHelper" // Normalize an iDempiere date value to a plain YYYY-MM-DD string. Date columns // come back as "2026-06-04" (date-only) but tolerate a "…T00:00:00Z" timestamp // shape too, so we always slice the first 10 chars. const toDateStr = (val: any): string => { if(!val) return '' return String(val).slice(0, 10) } const handleFunc = async (event: any, authToken: any = null) => { const token = authToken ?? await getTokenHelper(event) // Non-working days are warehouse-wide closures (the seed data lives on the // shared org "*"/0). The bearer token already scopes the query to the // customer's tenant (AD_Client_ID), so we return every ACTIVE entry and let // the client decide which fall inside the month being viewed. const res: any = await fetchHelper(event, `models/cust_nonworkingdays?$filter=${string.urlEncode('isActive eq true')}&$orderby=${string.urlEncode('DateFrom asc')}`, 'GET', token, null) const records = (res?.records || []).map((item: any) => ({ id: item.id, name: item.Name ?? item.name ?? '', description: item.Description ?? item.description ?? '', dateFrom: toDateStr(item.DateFrom ?? item.dateFrom), dateTo: toDateStr(item.DateTo ?? item.dateTo) })).filter((r: any) => r.dateFrom) return { records } } export default defineEventHandler(async (event) => { let data: any = { records: [] } try { data = await handleFunc(event) } catch(err: any) { try { let authToken: any = await refreshTokenHelper(event) data = await handleFunc(event, authToken) } catch(error: any) { data = { records: [], error: errorHandlingHelper(err?.data ?? err, error?.data ?? error) } } } return data })