1 | |
2 | type SageIntacct = { |
3 | token: string |
4 | } |
5 | |
6 | * Create a project contract line |
7 | * Creates a new project contract line. |
8 | */ |
9 | export async function main( |
10 | auth: SageIntacct, |
11 | body: { |
12 | key?: string |
13 | id?: string |
14 | href?: string |
15 | projectContract?: { |
16 | key?: string |
17 | id?: string |
18 | name?: string |
19 | href?: string |
20 | } |
21 | name?: string |
22 | parent?: { key?: string; id?: string; name?: string; href?: string } |
23 | description?: string |
24 | contractLineDate?: string |
25 | glAccount?: { key?: string; id?: string; name?: string; href?: string } |
26 | retainagePercentage?: string |
27 | isBillable?: false | true |
28 | billing?: { |
29 | billedPrice?: string |
30 | previouslyAppliedPrice?: string |
31 | externalReferenceNumber?: string |
32 | billedNetRetainage?: string |
33 | percentBilled?: string |
34 | percentBilledNetRetainage?: string |
35 | retainageHeld?: string |
36 | retainageReleased?: string |
37 | retainageBalance?: string |
38 | paymentsReceived?: string |
39 | } |
40 | billingSetup?: { |
41 | billingType?: 'progressBill' | 'timeAndMaterial' |
42 | maximumBilling?: 'totalPrice' | 'specifiedAmount' | 'noMaximum' |
43 | maximumBillingAmount?: string |
44 | summarizeBill?: false | true |
45 | } |
46 | summary?: { |
47 | originalPrice?: string |
48 | revisionPrice?: string |
49 | forecastPrice?: string |
50 | approvedChangePrice?: string |
51 | pendingChangePrice?: string |
52 | otherPrice?: string |
53 | totalPrice?: string |
54 | } |
55 | dimensions?: { |
56 | location?: { key?: string; id?: string; name?: string; href?: string } |
57 | department?: { key?: string; id?: string; name?: string; href?: string } |
58 | employee?: { key?: string; id?: string; name?: string; href?: string } |
59 | project?: { key?: string; id?: string; name?: string; href?: string } |
60 | customer?: { key?: string; id?: string; name?: string; href?: string } |
61 | vendor?: { key?: string; id?: string; name?: string; href?: string } |
62 | item?: { key?: string; id?: string; name?: string; href?: string } |
63 | warehouse?: { key?: string; id?: string; name?: string; href?: string } |
64 | class?: { key?: string; id?: string; name?: string; href?: string } |
65 | task?: { id?: string; key?: string; name?: string; href?: string } |
66 | costType?: { id?: string; key?: string; name?: string; href?: string } |
67 | asset?: { id?: string; key?: string; name?: string; href?: string } |
68 | contract?: { id?: string; key?: string; name?: string; href?: string } |
69 | affiliateEntity?: { |
70 | key?: string |
71 | id?: string |
72 | href?: string |
73 | name?: string |
74 | } |
75 | } & { |
76 | location?: { key?: string; id?: string; name?: string; href?: string } |
77 | customer?: { key?: string; id?: string; name?: string; href?: string } |
78 | department?: { key?: string; id?: string; name?: string; href?: string } |
79 | } |
80 | excludeFromGLBudget?: false | true |
81 | scope?: string |
82 | inclusions?: string |
83 | exclusions?: string |
84 | terms?: string |
85 | schedule?: { |
86 | scheduledStartDate?: string |
87 | actualStartDate?: string |
88 | scheduledCompletionDate?: string |
89 | revisedCompletionDate?: string |
90 | substantialCompletionDate?: string |
91 | actualCompletionDate?: string |
92 | noticeToProceedDate?: string |
93 | responseDueDate?: string |
94 | executedOnDate?: string |
95 | scheduleImpact?: string |
96 | } |
97 | internalReference?: { |
98 | referenceNumber?: string |
99 | initiatedBy?: { key?: string; id?: string; name?: string; href?: string } |
100 | verbalApprovalBy?: { |
101 | key?: string |
102 | id?: string |
103 | name?: string |
104 | href?: string |
105 | } |
106 | issuedBy?: { key?: string; id?: string; name?: string; href?: string } |
107 | issuedOnDate?: string |
108 | approvedBy?: { key?: string; id?: string; name?: string; href?: string } |
109 | approvedOnDate?: string |
110 | signedBy?: { key?: string; id?: string; name?: string; href?: string } |
111 | signedOnDate?: string |
112 | source?: string |
113 | sourceReferenceNumber?: string |
114 | } |
115 | externalReference?: { |
116 | referenceNumber?: string |
117 | verbalApprovalBy?: { key?: string; id?: string; href?: string } |
118 | approvedBy?: { key?: string; id?: string; href?: string } |
119 | approvedOnDate?: string |
120 | signedBy?: { key?: string; id?: string; href?: string } |
121 | signedOnDate?: string |
122 | } |
123 | rateTables?: { |
124 | default?: { key?: string; id?: string; href?: string } |
125 | timesheet?: { key?: string; id?: string; href?: string } |
126 | purchasing?: { key?: string; id?: string; href?: string } |
127 | ap?: { key?: string; id?: string; href?: string } |
128 | gl?: { key?: string; id?: string; href?: string } |
129 | creditCard?: { key?: string; id?: string; href?: string } |
130 | employeeExpense?: { key?: string; id?: string; href?: string } |
131 | } |
132 | projectContractLineEntries?: { |
133 | key?: string |
134 | id?: string |
135 | href?: string |
136 | projectContractLine?: { key?: string; id?: string; href?: string } |
137 | workflowType?: 'original' | 'revision' | 'forecast' | 'other' |
138 | dimensions?: { |
139 | location?: { key?: string; id?: string; name?: string; href?: string } |
140 | department?: { |
141 | key?: string |
142 | id?: string |
143 | name?: string |
144 | href?: string |
145 | } |
146 | employee?: { key?: string; id?: string; name?: string; href?: string } |
147 | project?: { key?: string; id?: string; name?: string; href?: string } |
148 | customer?: { key?: string; id?: string; name?: string; href?: string } |
149 | vendor?: { key?: string; id?: string; name?: string; href?: string } |
150 | item?: { key?: string; id?: string; name?: string; href?: string } |
151 | warehouse?: { key?: string; id?: string; name?: string; href?: string } |
152 | class?: { key?: string; id?: string; name?: string; href?: string } |
153 | task?: { id?: string; key?: string; name?: string; href?: string } |
154 | costType?: { id?: string; key?: string; name?: string; href?: string } |
155 | asset?: { id?: string; key?: string; name?: string; href?: string } |
156 | contract?: { id?: string; key?: string; name?: string; href?: string } |
157 | affiliateEntity?: { |
158 | key?: string |
159 | id?: string |
160 | href?: string |
161 | name?: string |
162 | } |
163 | } & { |
164 | location?: { key?: string; id?: string; name?: string; href?: string } |
165 | department?: { |
166 | key?: string |
167 | id?: string |
168 | name?: string |
169 | href?: string |
170 | } |
171 | } |
172 | quantity?: string |
173 | externalUOM?: string |
174 | unitPrice?: string |
175 | price?: string |
176 | priceMarkupPercent?: string |
177 | priceMarkupAmount?: string |
178 | linePrice?: string |
179 | memo?: string |
180 | priceEffectiveDate?: string |
181 | audit?: { |
182 | createdDateTime?: string |
183 | modifiedDateTime?: string |
184 | createdBy?: string |
185 | modifiedBy?: string |
186 | } |
187 | }[] |
188 | changeRequestEntries?: { |
189 | key?: string |
190 | id?: string |
191 | href?: string |
192 | changeRequest?: { key?: string; id?: string; href?: string } |
193 | workflowType?: |
194 | | 'original' |
195 | | 'revision' |
196 | | 'forecast' |
197 | | 'other' |
198 | | 'none' |
199 | | 'approvedChange' |
200 | | 'pendingChange' |
201 | dimensions?: { |
202 | location?: { key?: string; id?: string; name?: string; href?: string } |
203 | department?: { |
204 | key?: string |
205 | id?: string |
206 | name?: string |
207 | href?: string |
208 | } |
209 | employee?: { key?: string; id?: string; name?: string; href?: string } |
210 | project?: { key?: string; id?: string; name?: string; href?: string } |
211 | customer?: { key?: string; id?: string; name?: string; href?: string } |
212 | vendor?: { key?: string; id?: string; name?: string; href?: string } |
213 | item?: { key?: string; id?: string; name?: string; href?: string } |
214 | warehouse?: { key?: string; id?: string; name?: string; href?: string } |
215 | class?: { key?: string; id?: string; name?: string; href?: string } |
216 | task?: { id?: string; key?: string; name?: string; href?: string } |
217 | costType?: { id?: string; key?: string; name?: string; href?: string } |
218 | asset?: { id?: string; key?: string; name?: string; href?: string } |
219 | contract?: { id?: string; key?: string; name?: string; href?: string } |
220 | affiliateEntity?: { |
221 | key?: string |
222 | id?: string |
223 | href?: string |
224 | name?: string |
225 | } |
226 | } & { |
227 | location?: { key?: string; id?: string; name?: string; href?: string } |
228 | department?: { |
229 | key?: string |
230 | id?: string |
231 | name?: string |
232 | href?: string |
233 | } |
234 | } |
235 | numberOfProductionUnits?: string |
236 | productionUnitDescription?: string |
237 | quantity?: string |
238 | externalUOM?: string |
239 | unitCost?: string |
240 | cost?: string |
241 | unitPrice?: string |
242 | price?: string |
243 | priceMarkupPercent?: string |
244 | priceMarkupAmount?: string |
245 | linePrice?: string |
246 | projectChangeOrder?: { key?: string; id?: string; href?: string } |
247 | memo?: string |
248 | projectEstimate?: { key?: string; id?: string; href?: string } |
249 | glAccount?: { key?: string; id?: string; name?: string; href?: string } |
250 | projectContract?: { |
251 | key?: string |
252 | id?: string |
253 | name?: string |
254 | href?: string |
255 | } |
256 | projectContractLine?: { |
257 | key?: string |
258 | id?: string |
259 | name?: string |
260 | href?: string |
261 | } |
262 | audit?: { |
263 | createdDateTime?: string |
264 | modifiedDateTime?: string |
265 | createdBy?: string |
266 | modifiedBy?: string |
267 | } |
268 | }[] |
269 | attachment?: { key?: string; id?: string; href?: string } |
270 | status?: 'active' | 'inactive' |
271 | audit?: { |
272 | createdDateTime?: string |
273 | modifiedDateTime?: string |
274 | createdBy?: string |
275 | modifiedBy?: string |
276 | } |
277 | } & {} |
278 | ) { |
279 | const url = new URL( |
280 | `https://api.intacct.com/ia/api/v1/objects/construction/project-contract-line` |
281 | ) |
282 |
|
283 | const response = await fetch(url, { |
284 | method: 'POST', |
285 | headers: { |
286 | 'Content-Type': 'application/json', |
287 | Authorization: 'Bearer ' + auth.token |
288 | }, |
289 | body: JSON.stringify(body) |
290 | }) |
291 | if (!response.ok) { |
292 | const text = await response.text() |
293 | throw new Error(`${response.status} ${text}`) |
294 | } |
295 | return await response.json() |
296 | } |
297 |
|