1 | |
2 | type Xero = { |
3 | token: string |
4 | } |
5 | |
6 | * Creates one or more repeating invoice templates |
7 | * |
8 | */ |
9 | export async function main( |
10 | auth: Xero, |
11 | summarizeErrors: string | undefined, |
12 | xero_tenant_id: string, |
13 | Idempotency_Key: string, |
14 | body: { |
15 | RepeatingInvoices?: { |
16 | Type?: 'ACCPAY' | 'ACCREC' |
17 | Contact?: { |
18 | ContactID?: string |
19 | MergedToContactID?: string |
20 | ContactNumber?: string |
21 | AccountNumber?: string |
22 | ContactStatus?: 'ACTIVE' | 'ARCHIVED' | 'GDPRREQUEST' |
23 | Name?: string |
24 | FirstName?: string |
25 | LastName?: string |
26 | CompanyNumber?: string |
27 | EmailAddress?: string |
28 | ContactPersons?: { |
29 | FirstName?: string |
30 | LastName?: string |
31 | EmailAddress?: string |
32 | IncludeInEmails?: false | true |
33 | }[] |
34 | BankAccountDetails?: string |
35 | TaxNumber?: string |
36 | AccountsReceivableTaxType?: string |
37 | AccountsPayableTaxType?: string |
38 | Addresses?: { |
39 | AddressType?: 'POBOX' | 'STREET' |
40 | AddressLine1?: string |
41 | AddressLine2?: string |
42 | AddressLine3?: string |
43 | AddressLine4?: string |
44 | City?: string |
45 | Region?: string |
46 | PostalCode?: string |
47 | Country?: string |
48 | AttentionTo?: string |
49 | }[] |
50 | Phones?: { |
51 | PhoneType?: 'DEFAULT' | 'DDI' | 'MOBILE' | 'FAX' | 'OFFICE' |
52 | PhoneNumber?: string |
53 | PhoneAreaCode?: string |
54 | PhoneCountryCode?: string |
55 | }[] |
56 | IsSupplier?: false | true |
57 | IsCustomer?: false | true |
58 | SalesDefaultLineAmountType?: 'INCLUSIVE' | 'EXCLUSIVE' | 'NONE' |
59 | PurchasesDefaultLineAmountType?: 'INCLUSIVE' | 'EXCLUSIVE' | 'NONE' |
60 | DefaultCurrency?: |
61 | | 'AED' |
62 | | 'AFN' |
63 | | 'ALL' |
64 | | 'AMD' |
65 | | 'ANG' |
66 | | 'AOA' |
67 | | 'ARS' |
68 | | 'AUD' |
69 | | 'AWG' |
70 | | 'AZN' |
71 | | 'BAM' |
72 | | 'BBD' |
73 | | 'BDT' |
74 | | 'BGN' |
75 | | 'BHD' |
76 | | 'BIF' |
77 | | 'BMD' |
78 | | 'BND' |
79 | | 'BOB' |
80 | | 'BRL' |
81 | | 'BSD' |
82 | | 'BTN' |
83 | | 'BWP' |
84 | | 'BYN' |
85 | | 'BYR' |
86 | | 'BZD' |
87 | | 'CAD' |
88 | | 'CDF' |
89 | | 'CHF' |
90 | | 'CLF' |
91 | | 'CLP' |
92 | | 'CNY' |
93 | | 'COP' |
94 | | 'CRC' |
95 | | 'CUC' |
96 | | 'CUP' |
97 | | 'CVE' |
98 | | 'CZK' |
99 | | 'DJF' |
100 | | 'DKK' |
101 | | 'DOP' |
102 | | 'DZD' |
103 | | 'EEK' |
104 | | 'EGP' |
105 | | 'ERN' |
106 | | 'ETB' |
107 | | 'EUR' |
108 | | 'FJD' |
109 | | 'FKP' |
110 | | 'GBP' |
111 | | 'GEL' |
112 | | 'GHS' |
113 | | 'GIP' |
114 | | 'GMD' |
115 | | 'GNF' |
116 | | 'GTQ' |
117 | | 'GYD' |
118 | | 'HKD' |
119 | | 'HNL' |
120 | | 'HRK' |
121 | | 'HTG' |
122 | | 'HUF' |
123 | | 'IDR' |
124 | | 'ILS' |
125 | | 'INR' |
126 | | 'IQD' |
127 | | 'IRR' |
128 | | 'ISK' |
129 | | 'JMD' |
130 | | 'JOD' |
131 | | 'JPY' |
132 | | 'KES' |
133 | | 'KGS' |
134 | | 'KHR' |
135 | | 'KMF' |
136 | | 'KPW' |
137 | | 'KRW' |
138 | | 'KWD' |
139 | | 'KYD' |
140 | | 'KZT' |
141 | | 'LAK' |
142 | | 'LBP' |
143 | | 'LKR' |
144 | | 'LRD' |
145 | | 'LSL' |
146 | | 'LTL' |
147 | | 'LVL' |
148 | | 'LYD' |
149 | | 'MAD' |
150 | | 'MDL' |
151 | | 'MGA' |
152 | | 'MKD' |
153 | | 'MMK' |
154 | | 'MNT' |
155 | | 'MOP' |
156 | | 'MRO' |
157 | | 'MRU' |
158 | | 'MUR' |
159 | | 'MVR' |
160 | | 'MWK' |
161 | | 'MXN' |
162 | | 'MXV' |
163 | | 'MYR' |
164 | | 'MZN' |
165 | | 'NAD' |
166 | | 'NGN' |
167 | | 'NIO' |
168 | | 'NOK' |
169 | | 'NPR' |
170 | | 'NZD' |
171 | | 'OMR' |
172 | | 'PAB' |
173 | | 'PEN' |
174 | | 'PGK' |
175 | | 'PHP' |
176 | | 'PKR' |
177 | | 'PLN' |
178 | | 'PYG' |
179 | | 'QAR' |
180 | | 'RON' |
181 | | 'RSD' |
182 | | 'RUB' |
183 | | 'RWF' |
184 | | 'SAR' |
185 | | 'SBD' |
186 | | 'SCR' |
187 | | 'SDG' |
188 | | 'SEK' |
189 | | 'SGD' |
190 | | 'SHP' |
191 | | 'SKK' |
192 | | 'SLE' |
193 | | 'SLL' |
194 | | 'SOS' |
195 | | 'SRD' |
196 | | 'STD' |
197 | | 'STN' |
198 | | 'SVC' |
199 | | 'SYP' |
200 | | 'SZL' |
201 | | 'THB' |
202 | | 'TJS' |
203 | | 'TMT' |
204 | | 'TND' |
205 | | 'TOP' |
206 | | 'TRY' |
207 | | 'TTD' |
208 | | 'TWD' |
209 | | 'TZS' |
210 | | 'UAH' |
211 | | 'UGX' |
212 | | 'USD' |
213 | | 'UYU' |
214 | | 'UZS' |
215 | | 'VEF' |
216 | | 'VES' |
217 | | 'VND' |
218 | | 'VUV' |
219 | | 'WST' |
220 | | 'XAF' |
221 | | 'XCD' |
222 | | 'XOF' |
223 | | 'XPF' |
224 | | 'YER' |
225 | | 'ZAR' |
226 | | 'ZMW' |
227 | | 'ZMK' |
228 | | 'ZWD' |
229 | XeroNetworkKey?: string |
230 | SalesDefaultAccountCode?: string |
231 | PurchasesDefaultAccountCode?: string |
232 | SalesTrackingCategories?: { |
233 | TrackingCategoryName?: string |
234 | TrackingOptionName?: string |
235 | }[] |
236 | PurchasesTrackingCategories?: { |
237 | TrackingCategoryName?: string |
238 | TrackingOptionName?: string |
239 | }[] |
240 | TrackingCategoryName?: string |
241 | TrackingCategoryOption?: string |
242 | PaymentTerms?: { |
243 | Bills?: { |
244 | Day?: number |
245 | Type?: |
246 | | 'DAYSAFTERBILLDATE' |
247 | | 'DAYSAFTERBILLMONTH' |
248 | | 'OFCURRENTMONTH' |
249 | | 'OFFOLLOWINGMONTH' |
250 | } |
251 | Sales?: { |
252 | Day?: number |
253 | Type?: |
254 | | 'DAYSAFTERBILLDATE' |
255 | | 'DAYSAFTERBILLMONTH' |
256 | | 'OFCURRENTMONTH' |
257 | | 'OFFOLLOWINGMONTH' |
258 | } |
259 | } |
260 | UpdatedDateUTC?: string |
261 | ContactGroups?: { |
262 | Name?: string |
263 | Status?: 'ACTIVE' | 'DELETED' |
264 | ContactGroupID?: string |
265 | Contacts?: {}[] |
266 | }[] |
267 | Website?: string |
268 | BrandingTheme?: { |
269 | BrandingThemeID?: string |
270 | Name?: string |
271 | LogoUrl?: string |
272 | Type?: 'INVOICE' |
273 | SortOrder?: number |
274 | CreatedDateUTC?: string |
275 | } |
276 | BatchPayments?: { |
277 | BankAccountNumber?: string |
278 | BankAccountName?: string |
279 | Details?: string |
280 | Code?: string |
281 | Reference?: string |
282 | } |
283 | Discount?: number |
284 | Balances?: { |
285 | AccountsReceivable?: { Outstanding?: number; Overdue?: number } |
286 | AccountsPayable?: { Outstanding?: number; Overdue?: number } |
287 | } |
288 | Attachments?: { |
289 | AttachmentID?: string |
290 | FileName?: string |
291 | Url?: string |
292 | MimeType?: string |
293 | ContentLength?: number |
294 | IncludeOnline?: false | true |
295 | }[] |
296 | HasAttachments?: never |
297 | ValidationErrors?: { Message?: string }[] |
298 | HasValidationErrors?: never |
299 | StatusAttributeString?: string |
300 | } |
301 | Schedule?: { |
302 | Period?: number |
303 | Unit?: 'WEEKLY' | 'MONTHLY' |
304 | DueDate?: number |
305 | DueDateType?: |
306 | | 'DAYSAFTERBILLDATE' |
307 | | 'DAYSAFTERBILLMONTH' |
308 | | 'OFCURRENTMONTH' |
309 | | 'OFFOLLOWINGMONTH' |
310 | | 'DAYSAFTERINVOICEDATE' |
311 | | 'DAYSAFTERINVOICEMONTH' |
312 | StartDate?: string |
313 | NextScheduledDate?: string |
314 | EndDate?: string |
315 | } |
316 | LineItems?: { |
317 | LineItemID?: string |
318 | Description?: string |
319 | Quantity?: number |
320 | UnitAmount?: number |
321 | ItemCode?: string |
322 | AccountCode?: string |
323 | AccountID?: string |
324 | TaxType?: string |
325 | TaxAmount?: number |
326 | Item?: { Code?: string; Name?: string; ItemID?: string } |
327 | LineAmount?: number |
328 | Tracking?: { |
329 | TrackingCategoryID?: string |
330 | TrackingOptionID?: string |
331 | Name?: string |
332 | Option?: string |
333 | }[] |
334 | DiscountRate?: number |
335 | DiscountAmount?: number |
336 | RepeatingInvoiceID?: string |
337 | Taxability?: 'TAXABLE' | 'NON_TAXABLE' | 'EXEMPT' | 'PART_TAXABLE' | 'NOT_APPLICABLE' |
338 | SalesTaxCodeId?: number |
339 | TaxBreakdown?: { |
340 | TaxComponentId?: string |
341 | Type?: |
342 | | 'SYSGST/USCOUNTRY' |
343 | | 'SYSGST/USSTATE' |
344 | | 'SYSGST/USCOUNTY' |
345 | | 'SYSGST/USCITY' |
346 | | 'SYSGST/USSPECIAL' |
347 | Name?: string |
348 | TaxPercentage?: number |
349 | TaxAmount?: number |
350 | TaxableAmount?: number |
351 | NonTaxableAmount?: number |
352 | ExemptAmount?: number |
353 | StateAssignedNo?: string |
354 | JurisdictionRegion?: string |
355 | }[] |
356 | }[] |
357 | LineAmountTypes?: 'Exclusive' | 'Inclusive' | 'NoTax' |
358 | Reference?: string |
359 | BrandingThemeID?: string |
360 | CurrencyCode?: |
361 | | 'AED' |
362 | | 'AFN' |
363 | | 'ALL' |
364 | | 'AMD' |
365 | | 'ANG' |
366 | | 'AOA' |
367 | | 'ARS' |
368 | | 'AUD' |
369 | | 'AWG' |
370 | | 'AZN' |
371 | | 'BAM' |
372 | | 'BBD' |
373 | | 'BDT' |
374 | | 'BGN' |
375 | | 'BHD' |
376 | | 'BIF' |
377 | | 'BMD' |
378 | | 'BND' |
379 | | 'BOB' |
380 | | 'BRL' |
381 | | 'BSD' |
382 | | 'BTN' |
383 | | 'BWP' |
384 | | 'BYN' |
385 | | 'BYR' |
386 | | 'BZD' |
387 | | 'CAD' |
388 | | 'CDF' |
389 | | 'CHF' |
390 | | 'CLF' |
391 | | 'CLP' |
392 | | 'CNY' |
393 | | 'COP' |
394 | | 'CRC' |
395 | | 'CUC' |
396 | | 'CUP' |
397 | | 'CVE' |
398 | | 'CZK' |
399 | | 'DJF' |
400 | | 'DKK' |
401 | | 'DOP' |
402 | | 'DZD' |
403 | | 'EEK' |
404 | | 'EGP' |
405 | | 'ERN' |
406 | | 'ETB' |
407 | | 'EUR' |
408 | | 'FJD' |
409 | | 'FKP' |
410 | | 'GBP' |
411 | | 'GEL' |
412 | | 'GHS' |
413 | | 'GIP' |
414 | | 'GMD' |
415 | | 'GNF' |
416 | | 'GTQ' |
417 | | 'GYD' |
418 | | 'HKD' |
419 | | 'HNL' |
420 | | 'HRK' |
421 | | 'HTG' |
422 | | 'HUF' |
423 | | 'IDR' |
424 | | 'ILS' |
425 | | 'INR' |
426 | | 'IQD' |
427 | | 'IRR' |
428 | | 'ISK' |
429 | | 'JMD' |
430 | | 'JOD' |
431 | | 'JPY' |
432 | | 'KES' |
433 | | 'KGS' |
434 | | 'KHR' |
435 | | 'KMF' |
436 | | 'KPW' |
437 | | 'KRW' |
438 | | 'KWD' |
439 | | 'KYD' |
440 | | 'KZT' |
441 | | 'LAK' |
442 | | 'LBP' |
443 | | 'LKR' |
444 | | 'LRD' |
445 | | 'LSL' |
446 | | 'LTL' |
447 | | 'LVL' |
448 | | 'LYD' |
449 | | 'MAD' |
450 | | 'MDL' |
451 | | 'MGA' |
452 | | 'MKD' |
453 | | 'MMK' |
454 | | 'MNT' |
455 | | 'MOP' |
456 | | 'MRO' |
457 | | 'MRU' |
458 | | 'MUR' |
459 | | 'MVR' |
460 | | 'MWK' |
461 | | 'MXN' |
462 | | 'MXV' |
463 | | 'MYR' |
464 | | 'MZN' |
465 | | 'NAD' |
466 | | 'NGN' |
467 | | 'NIO' |
468 | | 'NOK' |
469 | | 'NPR' |
470 | | 'NZD' |
471 | | 'OMR' |
472 | | 'PAB' |
473 | | 'PEN' |
474 | | 'PGK' |
475 | | 'PHP' |
476 | | 'PKR' |
477 | | 'PLN' |
478 | | 'PYG' |
479 | | 'QAR' |
480 | | 'RON' |
481 | | 'RSD' |
482 | | 'RUB' |
483 | | 'RWF' |
484 | | 'SAR' |
485 | | 'SBD' |
486 | | 'SCR' |
487 | | 'SDG' |
488 | | 'SEK' |
489 | | 'SGD' |
490 | | 'SHP' |
491 | | 'SKK' |
492 | | 'SLE' |
493 | | 'SLL' |
494 | | 'SOS' |
495 | | 'SRD' |
496 | | 'STD' |
497 | | 'STN' |
498 | | 'SVC' |
499 | | 'SYP' |
500 | | 'SZL' |
501 | | 'THB' |
502 | | 'TJS' |
503 | | 'TMT' |
504 | | 'TND' |
505 | | 'TOP' |
506 | | 'TRY' |
507 | | 'TTD' |
508 | | 'TWD' |
509 | | 'TZS' |
510 | | 'UAH' |
511 | | 'UGX' |
512 | | 'USD' |
513 | | 'UYU' |
514 | | 'UZS' |
515 | | 'VEF' |
516 | | 'VES' |
517 | | 'VND' |
518 | | 'VUV' |
519 | | 'WST' |
520 | | 'XAF' |
521 | | 'XCD' |
522 | | 'XOF' |
523 | | 'XPF' |
524 | | 'YER' |
525 | | 'ZAR' |
526 | | 'ZMW' |
527 | | 'ZMK' |
528 | | 'ZWD' |
529 | Status?: 'DELETED' | 'DRAFT' | 'AUTHORISED' |
530 | SubTotal?: number |
531 | TotalTax?: number |
532 | Total?: number |
533 | RepeatingInvoiceID?: string |
534 | ID?: string |
535 | HasAttachments?: never |
536 | Attachments?: { |
537 | AttachmentID?: string |
538 | FileName?: string |
539 | Url?: string |
540 | MimeType?: string |
541 | ContentLength?: number |
542 | IncludeOnline?: false | true |
543 | }[] |
544 | ApprovedForSending?: never |
545 | SendCopy?: never |
546 | MarkAsSent?: never |
547 | IncludePDF?: never |
548 | }[] |
549 | } |
550 | ) { |
551 | const url = new URL(`https://api.xero.com/api.xro/2.0/RepeatingInvoices`) |
552 | for (const [k, v] of [['summarizeErrors', summarizeErrors]]) { |
553 | if (v !== undefined && v !== '' && k !== undefined) { |
554 | url.searchParams.append(k, v) |
555 | } |
556 | } |
557 | const response = await fetch(url, { |
558 | method: 'PUT', |
559 | headers: { |
560 | Accept: 'application/json', |
561 | 'xero-tenant-id': xero_tenant_id, |
562 | 'Idempotency-Key': Idempotency_Key, |
563 | 'Content-Type': 'application/json', |
564 | Authorization: 'Bearer ' + auth.token |
565 | }, |
566 | body: JSON.stringify(body) |
567 | }) |
568 | if (!response.ok) { |
569 | const text = await response.text() |
570 | throw new Error(`${response.status} ${text}`) |
571 | } |
572 | return await response.json() |
573 | } |
574 |
|