Updates a specific pay run

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 pay run
7
 *
8
 */
9
export async function main(
10
	auth: Xero,
11
	PayRunID: string,
12
	Xero_Tenant_Id: string,
13
	Idempotency_Key: string,
14
	body: {
15
		payRunID?: string
16
		payrollCalendarID?: string
17
		periodStartDate?: string
18
		periodEndDate?: string
19
		paymentDate?: string
20
		totalCost?: number
21
		totalPay?: number
22
		payRunStatus?: 'Draft' | 'Posted'
23
		payRunType?: 'Scheduled' | 'Unscheduled' | 'EarlierYearUpdate'
24
		calendarType?: 'Weekly' | 'Fortnightly' | 'FourWeekly' | 'Monthly' | 'Annual' | 'Quarterly'
25
		postedDateTime?: string
26
		paySlips?: {
27
			paySlipID?: string
28
			employeeID?: string
29
			payRunID?: string
30
			lastEdited?: string
31
			firstName?: string
32
			lastName?: string
33
			totalEarnings?: number
34
			grossEarnings?: number
35
			totalPay?: number
36
			totalEmployerTaxes?: number
37
			totalEmployeeTaxes?: number
38
			totalDeductions?: number
39
			totalReimbursements?: number
40
			totalCourtOrders?: number
41
			totalBenefits?: number
42
			bacsHash?: string
43
			paymentMethod?: 'Cheque' | 'Electronically' | 'Manual'
44
			earningsLines?: {
45
				earningsLineID?: string
46
				earningsRateID?: string
47
				displayName?: string
48
				ratePerUnit?: number
49
				numberOfUnits?: number
50
				fixedAmount?: number
51
				amount?: number
52
				isLinkedToTimesheet?: false | true
53
				isAverageDailyPayRate?: false | true
54
			}[]
55
			leaveEarningsLines?: {
56
				earningsRateID?: string
57
				ratePerUnit?: number
58
				numberOfUnits?: number
59
				fixedAmount?: number
60
				amount?: number
61
				isLinkedToTimesheet?: false | true
62
			}[]
63
			timesheetEarningsLines?: {
64
				earningsRateID?: string
65
				ratePerUnit?: number
66
				numberOfUnits?: number
67
				fixedAmount?: number
68
				amount?: number
69
				isLinkedToTimesheet?: false | true
70
			}[]
71
			deductionLines?: {
72
				deductionTypeID?: string
73
				amount?: number
74
				subjectToTax?: false | true
75
				percentage?: number
76
			}[]
77
			reimbursementLines?: {
78
				reimbursementTypeID?: string
79
				description?: string
80
				amount?: number
81
			}[]
82
			leaveAccrualLines?: { leaveTypeID?: string; numberOfUnits?: number }[]
83
			benefitLines?: {
84
				benefitTypeID?: string
85
				displayName?: string
86
				amount?: number
87
				fixedAmount?: number
88
				percentage?: number
89
			}[]
90
			paymentLines?: {
91
				paymentLineID?: string
92
				amount?: number
93
				accountNumber?: string
94
				sortCode?: string
95
				accountName?: string
96
			}[]
97
			employeeTaxLines?: {
98
				taxLineID?: string
99
				description?: string
100
				isEmployerTax?: false | true
101
				amount?: number
102
				globalTaxTypeID?: string
103
				manualAdjustment?: false | true
104
			}[]
105
			employerTaxLines?: {
106
				taxLineID?: string
107
				description?: string
108
				isEmployerTax?: false | true
109
				amount?: number
110
				globalTaxTypeID?: string
111
				manualAdjustment?: false | true
112
			}[]
113
			courtOrderLines?: { courtOrderTypeID?: string; amount?: number }[]
114
		}[]
115
	}
116
) {
117
	const url = new URL(`https://api.xero.com/payroll.xro/2.0/PayRuns/${PayRunID}`)
118

119
	const response = await fetch(url, {
120
		method: 'PUT',
121
		headers: {
122
			Accept: 'application/json',
123
			'Xero-Tenant-Id': Xero_Tenant_Id,
124
			'Idempotency-Key': Idempotency_Key,
125
			'Content-Type': 'application/json',
126
			Authorization: 'Bearer ' + auth.token
127
		},
128
		body: JSON.stringify(body)
129
	})
130
	if (!response.ok) {
131
		const text = await response.text()
132
		throw new Error(`${response.status} ${text}`)
133
	}
134
	return await response.json()
135
}
136