import { string } from 'alga-js' import refreshTokenHelper from "../../utils/refreshTokenHelper" import forceLogoutHelper from "../../utils/forceLogoutHelper" import errorHandlingHelper from "../../utils/errorHandlingHelper" import fetchHelper from "../../utils/fetchHelper" // List open purchase orders (DocStatus = 'CO') optionally scoped to an // organization. Used by the mobile receive page to let the user pick a PO // and pre-fill a goods receipt from its lines. const handleFunc = async (event: any, authToken: any = null) => { const token = authToken ?? await getTokenHelper(event) const query = getQuery(event) const orgId = query?.organizationId ? Number(query.organizationId) : null const limit = Number(query?.limit ?? 100) const parts: string[] = [ "IsSOTrx eq false", "DocStatus eq 'CO'", "IsActive eq true" ] if (orgId) parts.push(`AD_Org_ID eq ${orgId}`) const filter = parts.join(' AND ') // Lines are child-expanded (QtyOrdered/QtyDelivered only) so the picker can // show per-PO item totals without a request per PO. const res: any = await fetchHelper( event, `models/c_order?$filter=${string.urlEncode(filter)}&$orderby=${string.urlEncode('datepromised asc, c_order_id desc')}&$top=${limit}&$expand=${string.urlEncode('c_orderline($select=QtyOrdered,QtyDelivered)')}`, 'GET', token, null ) const records = (res?.records ?? []).map((o: any) => { const lines = Array.isArray(o.c_orderline) ? o.c_orderline : [] let itemsTotal = 0 let itemsOpen = 0 for (const l of lines) { const ordered = Number(l.QtyOrdered || 0) const delivered = Number(l.QtyDelivered || 0) itemsTotal += ordered itemsOpen += Math.max(0, ordered - delivered) } return { id: o.id, documentNo: o.DocumentNo, dateOrdered: o.DateOrdered, datePromised: o.DatePromised, grandTotal: Number(o.GrandTotal || 0), poReference: o.POReference || '', description: o.Description || '', lineCount: lines.length, itemsTotal, itemsOpen, partner: { id: o.C_BPartner_ID?.id || null, name: o.C_BPartner_ID?.identifier || '' }, partnerLocation: { id: o.C_BPartner_Location_ID?.id || null }, org: { id: o.AD_Org_ID?.id || null, name: o.AD_Org_ID?.identifier || '' }, warehouse: { id: o.M_Warehouse_ID?.id || null, name: o.M_Warehouse_ID?.identifier || '' } } }) return { records, rowCount: res?.['row-count'] ?? records.length } } export default defineEventHandler(async (event) => { // Auth-only retry; errors are THROWN (the old wrapper returned the error // object as an HTTP 200 body, so the client showed an empty PO list on // backend failures with no error signal). return await withAuthRetry(event, handleFunc) })