Updates a specific contact group

Script xero Verified

by hugo697 ยท 12/20/2024

The script

Submitted by hugo697 Bun
Verified 515 days ago
1
//native
2
type Xero = {
3
	token: string
4
}
5
/**
6
 * Updates a specific contact group
7
 *
8
 */
9
export async function main(
10
	auth: Xero,
11
	ContactGroupID: string,
12
	xero_tenant_id: string,
13
	Idempotency_Key: string,
14
	body: {
15
		ContactGroups?: {
16
			Name?: string
17
			Status?: 'ACTIVE' | 'DELETED'
18
			ContactGroupID?: string
19
			Contacts?: {
20
				ContactID?: string
21
				MergedToContactID?: string
22
				ContactNumber?: string
23
				AccountNumber?: string
24
				ContactStatus?: 'ACTIVE' | 'ARCHIVED' | 'GDPRREQUEST'
25
				Name?: string
26
				FirstName?: string
27
				LastName?: string
28
				CompanyNumber?: string
29
				EmailAddress?: string
30
				ContactPersons?: {
31
					FirstName?: string
32
					LastName?: string
33
					EmailAddress?: string
34
					IncludeInEmails?: false | true
35
				}[]
36
				BankAccountDetails?: string
37
				TaxNumber?: string
38
				AccountsReceivableTaxType?: string
39
				AccountsPayableTaxType?: string
40
				Addresses?: {
41
					AddressType?: 'POBOX' | 'STREET'
42
					AddressLine1?: string
43
					AddressLine2?: string
44
					AddressLine3?: string
45
					AddressLine4?: string
46
					City?: string
47
					Region?: string
48
					PostalCode?: string
49
					Country?: string
50
					AttentionTo?: string
51
				}[]
52
				Phones?: {
53
					PhoneType?: 'DEFAULT' | 'DDI' | 'MOBILE' | 'FAX' | 'OFFICE'
54
					PhoneNumber?: string
55
					PhoneAreaCode?: string
56
					PhoneCountryCode?: string
57
				}[]
58
				IsSupplier?: false | true
59
				IsCustomer?: false | true
60
				SalesDefaultLineAmountType?: 'INCLUSIVE' | 'EXCLUSIVE' | 'NONE'
61
				PurchasesDefaultLineAmountType?: 'INCLUSIVE' | 'EXCLUSIVE' | 'NONE'
62
				DefaultCurrency?:
63
					| 'AED'
64
					| 'AFN'
65
					| 'ALL'
66
					| 'AMD'
67
					| 'ANG'
68
					| 'AOA'
69
					| 'ARS'
70
					| 'AUD'
71
					| 'AWG'
72
					| 'AZN'
73
					| 'BAM'
74
					| 'BBD'
75
					| 'BDT'
76
					| 'BGN'
77
					| 'BHD'
78
					| 'BIF'
79
					| 'BMD'
80
					| 'BND'
81
					| 'BOB'
82
					| 'BRL'
83
					| 'BSD'
84
					| 'BTN'
85
					| 'BWP'
86
					| 'BYN'
87
					| 'BYR'
88
					| 'BZD'
89
					| 'CAD'
90
					| 'CDF'
91
					| 'CHF'
92
					| 'CLF'
93
					| 'CLP'
94
					| 'CNY'
95
					| 'COP'
96
					| 'CRC'
97
					| 'CUC'
98
					| 'CUP'
99
					| 'CVE'
100
					| 'CZK'
101
					| 'DJF'
102
					| 'DKK'
103
					| 'DOP'
104
					| 'DZD'
105
					| 'EEK'
106
					| 'EGP'
107
					| 'ERN'
108
					| 'ETB'
109
					| 'EUR'
110
					| 'FJD'
111
					| 'FKP'
112
					| 'GBP'
113
					| 'GEL'
114
					| 'GHS'
115
					| 'GIP'
116
					| 'GMD'
117
					| 'GNF'
118
					| 'GTQ'
119
					| 'GYD'
120
					| 'HKD'
121
					| 'HNL'
122
					| 'HRK'
123
					| 'HTG'
124
					| 'HUF'
125
					| 'IDR'
126
					| 'ILS'
127
					| 'INR'
128
					| 'IQD'
129
					| 'IRR'
130
					| 'ISK'
131
					| 'JMD'
132
					| 'JOD'
133
					| 'JPY'
134
					| 'KES'
135
					| 'KGS'
136
					| 'KHR'
137
					| 'KMF'
138
					| 'KPW'
139
					| 'KRW'
140
					| 'KWD'
141
					| 'KYD'
142
					| 'KZT'
143
					| 'LAK'
144
					| 'LBP'
145
					| 'LKR'
146
					| 'LRD'
147
					| 'LSL'
148
					| 'LTL'
149
					| 'LVL'
150
					| 'LYD'
151
					| 'MAD'
152
					| 'MDL'
153
					| 'MGA'
154
					| 'MKD'
155
					| 'MMK'
156
					| 'MNT'
157
					| 'MOP'
158
					| 'MRO'
159
					| 'MRU'
160
					| 'MUR'
161
					| 'MVR'
162
					| 'MWK'
163
					| 'MXN'
164
					| 'MXV'
165
					| 'MYR'
166
					| 'MZN'
167
					| 'NAD'
168
					| 'NGN'
169
					| 'NIO'
170
					| 'NOK'
171
					| 'NPR'
172
					| 'NZD'
173
					| 'OMR'
174
					| 'PAB'
175
					| 'PEN'
176
					| 'PGK'
177
					| 'PHP'
178
					| 'PKR'
179
					| 'PLN'
180
					| 'PYG'
181
					| 'QAR'
182
					| 'RON'
183
					| 'RSD'
184
					| 'RUB'
185
					| 'RWF'
186
					| 'SAR'
187
					| 'SBD'
188
					| 'SCR'
189
					| 'SDG'
190
					| 'SEK'
191
					| 'SGD'
192
					| 'SHP'
193
					| 'SKK'
194
					| 'SLE'
195
					| 'SLL'
196
					| 'SOS'
197
					| 'SRD'
198
					| 'STD'
199
					| 'STN'
200
					| 'SVC'
201
					| 'SYP'
202
					| 'SZL'
203
					| 'THB'
204
					| 'TJS'
205
					| 'TMT'
206
					| 'TND'
207
					| 'TOP'
208
					| 'TRY'
209
					| 'TTD'
210
					| 'TWD'
211
					| 'TZS'
212
					| 'UAH'
213
					| 'UGX'
214
					| 'USD'
215
					| 'UYU'
216
					| 'UZS'
217
					| 'VEF'
218
					| 'VES'
219
					| 'VND'
220
					| 'VUV'
221
					| 'WST'
222
					| 'XAF'
223
					| 'XCD'
224
					| 'XOF'
225
					| 'XPF'
226
					| 'YER'
227
					| 'ZAR'
228
					| 'ZMW'
229
					| 'ZMK'
230
					| 'ZWD'
231
				XeroNetworkKey?: string
232
				SalesDefaultAccountCode?: string
233
				PurchasesDefaultAccountCode?: string
234
				SalesTrackingCategories?: {
235
					TrackingCategoryName?: string
236
					TrackingOptionName?: string
237
				}[]
238
				PurchasesTrackingCategories?: {
239
					TrackingCategoryName?: string
240
					TrackingOptionName?: string
241
				}[]
242
				TrackingCategoryName?: string
243
				TrackingCategoryOption?: string
244
				PaymentTerms?: {
245
					Bills?: {
246
						Day?: number
247
						Type?:
248
							| 'DAYSAFTERBILLDATE'
249
							| 'DAYSAFTERBILLMONTH'
250
							| 'OFCURRENTMONTH'
251
							| 'OFFOLLOWINGMONTH'
252
					}
253
					Sales?: {
254
						Day?: number
255
						Type?:
256
							| 'DAYSAFTERBILLDATE'
257
							| 'DAYSAFTERBILLMONTH'
258
							| 'OFCURRENTMONTH'
259
							| 'OFFOLLOWINGMONTH'
260
					}
261
				}
262
				UpdatedDateUTC?: string
263
				ContactGroups?: {}[]
264
				Website?: string
265
				BrandingTheme?: {
266
					BrandingThemeID?: string
267
					Name?: string
268
					LogoUrl?: string
269
					Type?: 'INVOICE'
270
					SortOrder?: number
271
					CreatedDateUTC?: string
272
				}
273
				BatchPayments?: {
274
					BankAccountNumber?: string
275
					BankAccountName?: string
276
					Details?: string
277
					Code?: string
278
					Reference?: string
279
				}
280
				Discount?: number
281
				Balances?: {
282
					AccountsReceivable?: { Outstanding?: number; Overdue?: number }
283
					AccountsPayable?: { Outstanding?: number; Overdue?: number }
284
				}
285
				Attachments?: {
286
					AttachmentID?: string
287
					FileName?: string
288
					Url?: string
289
					MimeType?: string
290
					ContentLength?: number
291
					IncludeOnline?: false | true
292
				}[]
293
				HasAttachments?: never
294
				ValidationErrors?: { Message?: string }[]
295
				HasValidationErrors?: never
296
				StatusAttributeString?: string
297
			}[]
298
		}[]
299
	}
300
) {
301
	const url = new URL(`https://api.xero.com/api.xro/2.0/ContactGroups/${ContactGroupID}`)
302

303
	const response = await fetch(url, {
304
		method: 'POST',
305
		headers: {
306
			Accept: 'application/json',
307
			'xero-tenant-id': xero_tenant_id,
308
			'Idempotency-Key': Idempotency_Key,
309
			'Content-Type': 'application/json',
310
			Authorization: 'Bearer ' + auth.token
311
		},
312
		body: JSON.stringify(body)
313
	})
314
	if (!response.ok) {
315
		const text = await response.text()
316
		throw new Error(`${response.status} ${text}`)
317
	}
318
	return await response.json()
319
}
320