//native
/**
* List Purchase Orders
* Query purchase orders with optional filters. Returns up to 50 records per page; paginate with offset.
*/
export async function main(
auth: RT.Coupa,
status:
| "buyer_hold"
| "cancelled"
| "closed"
| "currency_hold"
| "draft"
| "error"
| "expensed"
| "issued"
| "supplier_hold"
| "supplier_window_hold"
| "exported"
| undefined,
po_number: string | undefined,
supplier_name: string | undefined,
created_after: string | undefined,
updated_after: string | undefined,
exported: boolean | undefined,
limit: number | undefined,
offset: number | undefined,
return_object: "limited" | "shallow" | undefined
) {
const base = auth.instance_url.replace(/\/+$/, "")
const url = new URL(`${base}/api/purchase_orders`)
const filters: { [key: string]: string | number | boolean | undefined } = {
status,
po_number,
"supplier[name]": supplier_name,
"created_at[gt]": created_after,
"updated_at[gt]": updated_after,
exported,
limit,
offset,
return_object,
}
for (const [k, v] of Object.entries(filters)) {
if (v !== undefined && v !== "") {
url.searchParams.append(k, String(v))
}
}
const response = await fetch(url, {
headers: {
Authorization: `Bearer ${auth.token}`,
Accept: "application/json",
},
})
if (!response.ok) {
throw new Error(`${response.status} ${await response.text()}`)
}
return await response.json()
}
Submitted by hugo989 3 hours ago