1 | |
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 |
|