1 | |
2 | type SageIntacct = { |
3 | token: string |
4 | } |
5 | |
6 | * Create a purchasing document |
7 | * Creates a new purchasing document. |
8 | */ |
9 | export async function main( |
10 | auth: SageIntacct, |
11 | documentName: string, |
12 | body: { |
13 | key?: string |
14 | id?: string |
15 | href?: string |
16 | documentNumber?: string |
17 | documentType?: string |
18 | state?: |
19 | | 'submitted' |
20 | | 'approved' |
21 | | 'partiallyApproved' |
22 | | 'declined' |
23 | | 'draft' |
24 | | 'pending' |
25 | | 'closed' |
26 | | 'inProgress' |
27 | | 'converted' |
28 | | 'partiallyConverted' |
29 | | 'exception' |
30 | | 'analyzing' |
31 | isPrinted?: false | true |
32 | isBackordered?: false | true |
33 | subtotal?: string |
34 | subtotalInTxnCurrency?: string |
35 | total?: string |
36 | totalInTxnCurrency?: string |
37 | baseCurrency?: string |
38 | txnCurrency?: string |
39 | exchangeRate?: { |
40 | date?: string |
41 | rate?: string |
42 | typeId?: string |
43 | typeName?: string |
44 | } |
45 | txnDate?: string |
46 | dueDate?: string |
47 | isSystemGeneratedDocument?: false | true |
48 | postingDate?: string |
49 | referenceNumber?: string |
50 | vendorDocumentNumber?: string |
51 | notes?: string |
52 | memo?: string |
53 | paymentStatus?: 'paid' | 'partiallyPaid' | 'selected' | 'open' |
54 | cancelAfterDate?: string |
55 | doNotShipBeforeDate?: string |
56 | doNotShipAfterDate?: string |
57 | requestedShippingDate?: string |
58 | promisedDate?: string |
59 | contractStartDate?: string |
60 | contractEndDate?: string |
61 | retainagePercent?: string |
62 | contacts?: { |
63 | primary?: { key?: string; id?: string } |
64 | shipTo?: { key?: string; id?: string } |
65 | billTo?: { key?: string; id?: string } |
66 | deliverTo?: { key?: string; id?: string } |
67 | } |
68 | shippingMethod?: { key?: string; id?: string; href?: string } |
69 | paymentTerm?: { href?: string; key?: string; id?: string } |
70 | txnDefinition?: { key?: string; id?: string; href?: string } |
71 | sourceDocument?: { |
72 | key?: string |
73 | id?: string |
74 | documentType?: string |
75 | href?: string |
76 | } |
77 | taxSolution?: { |
78 | key?: string |
79 | id?: string |
80 | href?: string |
81 | taxCalculationMethod?: 'noTax' | 'simpleTax' | 'advancedTax' | 'avaTax' | 'VAT' |
82 | showMultilineTax?: false | true |
83 | } |
84 | vendor?: { key?: string; id?: string; name?: string; href?: string } |
85 | audit?: { |
86 | createdDateTime?: string |
87 | modifiedDateTime?: string |
88 | createdBy?: string |
89 | modifiedBy?: string |
90 | } & { createdDateTime?: string } |
91 | entity?: { key?: string; id?: string; name?: string; href?: string } |
92 | status?: 'active' | 'inactive' |
93 | lines?: { |
94 | key?: string |
95 | id?: string |
96 | href?: string |
97 | documentType?: string |
98 | lineNumber?: number |
99 | item?: { key?: string; id?: string; href?: string } |
100 | memo?: string |
101 | unit?: string |
102 | quantity?: string |
103 | unitQuantity?: string |
104 | unitPrice?: string |
105 | price?: string |
106 | quantityConverted?: string |
107 | retailPrice?: string |
108 | priceConverted?: string |
109 | quantityToleranceVariance?: string |
110 | priceToleranceVariance?: string |
111 | audit?: { |
112 | createdDateTime?: string |
113 | modifiedDateTime?: string |
114 | createdBy?: string |
115 | modifiedBy?: string |
116 | } |
117 | status?: 'active' | 'inactive' |
118 | costMethod?: 'standard' | 'average' | 'FIFO' | 'LIFO' |
119 | sourceDocument?: { |
120 | key?: string |
121 | id?: string |
122 | documentType?: string |
123 | href?: string |
124 | } |
125 | sourceDocumentLine?: { |
126 | key?: string |
127 | id?: string |
128 | documentType?: string |
129 | href?: string |
130 | } |
131 | baseCurrency?: string |
132 | txnCurrency?: string |
133 | priceInTxnCurrency?: string |
134 | isBillable?: false | true |
135 | isBilled?: false | true |
136 | taxRate?: string |
137 | taxInBaseCurrency?: string |
138 | taxInTxnCurrency?: string |
139 | discount?: string |
140 | enableTax?: false | true |
141 | quantityRemaining?: string |
142 | conversionType?: 'quantity' | 'price' |
143 | dimensions?: { |
144 | location?: { key?: string; id?: string; name?: string; href?: string } |
145 | department?: { |
146 | key?: string |
147 | id?: string |
148 | name?: string |
149 | href?: string |
150 | } |
151 | employee?: { key?: string; id?: string; name?: string; href?: string } |
152 | project?: { key?: string; id?: string; name?: string; href?: string } |
153 | customer?: { key?: string; id?: string; name?: string; href?: string } |
154 | vendor?: { key?: string; id?: string; name?: string; href?: string } |
155 | item?: { key?: string; id?: string; name?: string; href?: string } |
156 | warehouse?: { key?: string; id?: string; name?: string; href?: string } |
157 | class?: { key?: string; id?: string; name?: string; href?: string } |
158 | task?: { id?: string; key?: string; name?: string; href?: string } |
159 | costType?: { id?: string; key?: string; name?: string; href?: string } |
160 | asset?: { id?: string; key?: string; name?: string; href?: string } |
161 | contract?: { id?: string; key?: string; name?: string; href?: string } |
162 | affiliateEntity?: { |
163 | key?: string |
164 | id?: string |
165 | href?: string |
166 | name?: string |
167 | } |
168 | } & { |
169 | location?: { key?: string; id?: string; href?: string } |
170 | department?: { key?: string; id?: string; href?: string } |
171 | warehouse?: { key?: string; id?: string; href?: string } |
172 | project?: { key?: string; id?: string; href?: string } |
173 | task?: { id?: string; key?: string; href?: string } |
174 | } |
175 | requestedShippingDate?: string |
176 | shipByDate?: string |
177 | cancelAfterDate?: string |
178 | doNotShipBeforeDate?: string |
179 | doNotShipAfterDate?: string |
180 | deliveryDueDate?: string |
181 | orderConfirmationDate?: string |
182 | allocation?: { key?: string; id?: string; href?: string } |
183 | trackingDetail?: { |
184 | key?: string |
185 | id?: string |
186 | href?: string |
187 | quantity?: string |
188 | serialNumber?: string |
189 | lotNumber?: string |
190 | expirationDate?: string |
191 | aisle?: { href?: string; key?: string; id?: string } |
192 | bin?: { href?: string; key?: string; id?: string } |
193 | row?: { href?: string; key?: string; id?: string } |
194 | item?: { key?: string; id?: string; href?: string } |
195 | audit?: { |
196 | createdDateTime?: string |
197 | modifiedDateTime?: string |
198 | createdBy?: string |
199 | modifiedBy?: string |
200 | } |
201 | purchasingDocumentLine?: { |
202 | key?: string |
203 | id?: string |
204 | documentType?: string |
205 | href?: string |
206 | } |
207 | }[] |
208 | documentHeader?: { |
209 | key?: string |
210 | id?: string |
211 | documentType?: string |
212 | href?: string |
213 | } |
214 | lineSubtotals?: { |
215 | key?: string |
216 | id?: string |
217 | href?: string |
218 | description?: string |
219 | absoluteValue?: string |
220 | percentValue?: string |
221 | total?: string |
222 | txnAbsoluteValue?: string |
223 | txnTotal?: string |
224 | enableOverrideTax?: false | true |
225 | taxDetail?: { key?: string; id?: string; href?: string } |
226 | systemTaxDetail?: { key?: string; id?: string; href?: string } |
227 | dimensions?: { |
228 | location?: { |
229 | key?: string |
230 | id?: string |
231 | name?: string |
232 | href?: string |
233 | } |
234 | department?: { |
235 | key?: string |
236 | id?: string |
237 | name?: string |
238 | href?: string |
239 | } |
240 | employee?: { |
241 | key?: string |
242 | id?: string |
243 | name?: string |
244 | href?: string |
245 | } |
246 | project?: { key?: string; id?: string; name?: string; href?: string } |
247 | customer?: { |
248 | key?: string |
249 | id?: string |
250 | name?: string |
251 | href?: string |
252 | } |
253 | vendor?: { key?: string; id?: string; name?: string; href?: string } |
254 | item?: { key?: string; id?: string; name?: string; href?: string } |
255 | warehouse?: { |
256 | key?: string |
257 | id?: string |
258 | name?: string |
259 | href?: string |
260 | } |
261 | class?: { key?: string; id?: string; name?: string; href?: string } |
262 | task?: { id?: string; key?: string; name?: string; href?: string } |
263 | costType?: { |
264 | id?: string |
265 | key?: string |
266 | name?: string |
267 | href?: string |
268 | } |
269 | asset?: { id?: string; key?: string; name?: string; href?: string } |
270 | contract?: { |
271 | id?: string |
272 | key?: string |
273 | name?: string |
274 | href?: string |
275 | } |
276 | affiliateEntity?: { |
277 | key?: string |
278 | id?: string |
279 | href?: string |
280 | name?: string |
281 | } |
282 | } & { |
283 | location?: { |
284 | key?: string |
285 | id?: string |
286 | name?: string |
287 | href?: string |
288 | } |
289 | department?: { |
290 | key?: string |
291 | id?: string |
292 | name?: string |
293 | href?: string |
294 | } |
295 | } |
296 | documentLine?: { |
297 | key?: string |
298 | id?: string |
299 | documentType?: string |
300 | href?: string |
301 | } |
302 | document?: { |
303 | key?: string |
304 | id?: string |
305 | documentType?: string |
306 | href?: string |
307 | } |
308 | status?: 'active' | 'inactive' |
309 | }[] |
310 | }[] |
311 | subtotals?: { |
312 | key?: string |
313 | id?: string |
314 | href?: string |
315 | description?: string |
316 | absoluteValue?: string |
317 | percentValue?: string |
318 | txnAbsoluteValue?: string |
319 | total?: string |
320 | txnTotal?: string |
321 | documentLine?: { |
322 | key?: string |
323 | documentType?: string |
324 | id?: string |
325 | href?: string |
326 | } |
327 | dimensions?: { |
328 | location?: { key?: string; id?: string; name?: string; href?: string } |
329 | department?: { |
330 | key?: string |
331 | id?: string |
332 | name?: string |
333 | href?: string |
334 | } |
335 | employee?: { key?: string; id?: string; name?: string; href?: string } |
336 | project?: { key?: string; id?: string; name?: string; href?: string } |
337 | customer?: { key?: string; id?: string; name?: string; href?: string } |
338 | vendor?: { key?: string; id?: string; name?: string; href?: string } |
339 | item?: { key?: string; id?: string; name?: string; href?: string } |
340 | warehouse?: { key?: string; id?: string; name?: string; href?: string } |
341 | class?: { key?: string; id?: string; name?: string; href?: string } |
342 | task?: { id?: string; key?: string; name?: string; href?: string } |
343 | costType?: { id?: string; key?: string; name?: string; href?: string } |
344 | asset?: { id?: string; key?: string; name?: string; href?: string } |
345 | contract?: { id?: string; key?: string; name?: string; href?: string } |
346 | affiliateEntity?: { |
347 | key?: string |
348 | id?: string |
349 | href?: string |
350 | name?: string |
351 | } |
352 | } & { |
353 | location?: { key?: string; id?: string; href?: string } |
354 | department?: { key?: string; id?: string; href?: string } |
355 | } |
356 | documentHeader?: { |
357 | key?: string |
358 | id?: string |
359 | documentType?: string |
360 | href?: string |
361 | } |
362 | audit?: { |
363 | createdDateTime?: string |
364 | modifiedDateTime?: string |
365 | createdBy?: string |
366 | modifiedBy?: string |
367 | } |
368 | }[] |
369 | history?: { |
370 | key?: string |
371 | id?: string |
372 | href?: string |
373 | convertedFrom?: { |
374 | key?: string |
375 | id?: string |
376 | documentType?: string |
377 | href?: string |
378 | } |
379 | convertedTo?: { |
380 | key?: string |
381 | id?: string |
382 | documentType?: string |
383 | href?: string |
384 | } |
385 | purchasingDocument?: { |
386 | key?: string |
387 | id?: string |
388 | documentType?: string |
389 | href?: string |
390 | } |
391 | }[] |
392 | } & { vendor?: {}; lines?: { dimensions?: {} }[] } |
393 | ) { |
394 | const url = new URL( |
395 | `https://api.intacct.com/ia/api/v1/objects/purchasing/document::${documentName}` |
396 | ) |
397 |
|
398 | const response = await fetch(url, { |
399 | method: 'POST', |
400 | headers: { |
401 | 'Content-Type': 'application/json', |
402 | Authorization: 'Bearer ' + auth.token |
403 | }, |
404 | body: JSON.stringify(body) |
405 | }) |
406 | if (!response.ok) { |
407 | const text = await response.text() |
408 | throw new Error(`${response.status} ${text}`) |
409 | } |
410 | return await response.json() |
411 | } |
412 |
|