import { string } from 'alga-js' import refreshTokenHelper from "../../../utils/refreshTokenHelper" import errorHandlingHelper from "../../../utils/errorHandlingHelper" import fetchHelper from "../../../utils/fetchHelper" // Admin-only management endpoint. Standing extra order lines that // server/api/fulfillment/generate-orders.post.ts appends to every order it // generates for a fulfillment customer — see the admin check note there for // why order generation itself does not go through this route. const isAdmin = (event: any) => { try { return JSON.parse(getCookie(event, 'logship_role') ?? '{}')?.IsClientAdministrator === true } catch { return false } } const handleFunc = async (event: any, authToken: any = null) => { let data: any = {} const token = authToken ?? await getTokenHelper(event) const query = getQuery(event) const bpartnerId = query.bpartnerId if(!isAdmin(event)) { return { status: 403, message: 'Admin access required', records: [], 'row-count': 0 } } // Without a partner we have nothing to scope to — return an empty list. if(!bpartnerId) { return { records: [], 'row-count': 0 } } const filter = string.urlEncode('C_BPartner_ID eq ' + bpartnerId + ' AND IsActive eq true') const orderby = string.urlEncode('cust_bpartner_extraorderline_id asc') const res: any = await fetchHelper(event, `models/cust_bpartner_extraorderline?$filter=${filter}&$orderby=${orderby}&$expand=M_Product_ID`, 'GET', token, null) if(res) { data = res } return data } export default defineEventHandler(async (event) => { let data: any = {} try { data = await handleFunc(event) } catch(err: any) { try { let authToken: any = await refreshTokenHelper(event) data = await handleFunc(event, authToken) } catch(error: any) { data = errorHandlingHelper(err?.data ?? err, error?.data ?? error) if([401, 402, 403, 407].includes(Number(data.status))) { //@ts-ignore setCookie(event, 'user', null) } } } return data })