0

List Purchase Orders

by
Published today

Query purchase orders with optional filters. Returns up to 50 records per page; paginate with offset.

Script coupa Verified

The script

Submitted by hugo989 Typescript (fetch-only)
Verified 3 hours ago
1
//native
2

3
/**
4
 * List Purchase Orders
5
 * Query purchase orders with optional filters. Returns up to 50 records per page; paginate with offset.
6
 */
7
export async function main(
8
  auth: RT.Coupa,
9
  status:
10
    | "buyer_hold"
11
    | "cancelled"
12
    | "closed"
13
    | "currency_hold"
14
    | "draft"
15
    | "error"
16
    | "expensed"
17
    | "issued"
18
    | "supplier_hold"
19
    | "supplier_window_hold"
20
    | "exported"
21
    | undefined,
22
  po_number: string | undefined,
23
  supplier_name: string | undefined,
24
  created_after: string | undefined,
25
  updated_after: string | undefined,
26
  exported: boolean | undefined,
27
  limit: number | undefined,
28
  offset: number | undefined,
29
  return_object: "limited" | "shallow" | undefined
30
) {
31
  const base = auth.instance_url.replace(/\/+$/, "")
32
  const url = new URL(`${base}/api/purchase_orders`)
33
  const filters: { [key: string]: string | number | boolean | undefined } = {
34
    status,
35
    po_number,
36
    "supplier[name]": supplier_name,
37
    "created_at[gt]": created_after,
38
    "updated_at[gt]": updated_after,
39
    exported,
40
    limit,
41
    offset,
42
    return_object,
43
  }
44
  for (const [k, v] of Object.entries(filters)) {
45
    if (v !== undefined && v !== "") {
46
      url.searchParams.append(k, String(v))
47
    }
48
  }
49

50
  const response = await fetch(url, {
51
    headers: {
52
      Authorization: `Bearer ${auth.token}`,
53
      Accept: "application/json",
54
    },
55
  })
56

57
  if (!response.ok) {
58
    throw new Error(`${response.status} ${await response.text()}`)
59
  }
60

61
  return await response.json()
62
}
63