//native
/**
* List Invoices
* Query invoices with optional filters. Returns up to 50 records per page; paginate with offset.
*/
export async function main(
auth: RT.Coupa,
status:
| "new"
| "draft"
| "pending_approval"
| "approved"
| "pending_receipt"
| "processing"
| "payable_adjustment"
| "on_hold"
| "ap_hold"
| "booking_hold"
| "pending_action"
| "rejected"
| "disputed"
| "abandoned"
| "voided"
| "invalid"
| undefined,
invoice_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/invoices`)
const filters: { [key: string]: string | number | boolean | undefined } = {
status,
invoice_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