PageSourceSearch

https://smrtbld.ai/js/api/suppliers.js

js smrtbld.ai collected 2026-10-05 15:11:11 UTC 6,387 bytes, 169 lines download raw bytes

1import { ApiClient } from './base.js';
2
3const api = new ApiClient();
4
5export const suppliersApi = {
6    /**
7     * Get suppliers assigned to a project
8     * @param {number} projectId
9     * @param {Object} [options={}] fetch options forwarded to ApiClient (e.g. { signal })
10     */
11    getProjectList: (projectId, options = {}) =>
12        api.get(`smrtbuild/suppliers/project-list?projectId=${projectId}`, options),
13
14    /**
15     * Get all supplier companies and their contacts
16     */
17    getCompanyContacts: () => api.get('smrtbuild/suppliers/companycontacts'),
18
19    /**
20     * Get supplier details by ID
21     * @param {number} id 
22     */
23    getById: (id, options = {}) => api.get(`smrtbuild/suppliers/${id}`, options),
24
25    /**
26     * Create a new supplier
27     * @param {Object} data 
28     */
29    create: (data) => api.post('smrtbuild/suppliers', data),
30
31    /**
32     * Update an existing supplier
33     * @param {number} id 
34     * @param {Object} data 
35     */
36    update: (id, data) => api.put(`smrtbuild/suppliers/${id}`, data),
37
38    /**
39     * Archive a supplier
40     * @param {number} id 
41     */
42    archive: (id) => api.post(`smrtbuild/suppliers/${id}/archive`, {}),
43
44    /**
45     * Update default assignments for a supplier
46     * Backend expects [FromBody] string — must send as JSON-encoded string value
47     * @param {number} id
48     * @param {string} jsonAssignments - Already-stringified JSON array
49     */
50    updateDefaultAssignments: (id, jsonAssignments) =>
51        api.post(`smrtbuild/suppliers/${id}/default-assignments`, JSON.stringify(jsonAssignments)),
52
53    /**
54     * Get full supplier detail for a specific project
55     * @param {number} supplierId
56     * @param {number} projectId
57     */
58    getProjectDetail: (supplierId, projectId) =>
59        api.get(`smrtbuild/suppliers/${supplierId}/project/${projectId}`),
60
61    /**
62     * Add a comment to a supplier on a project
63     * @param {number} supplierId
64     * @param {number} projectId
65     * @param {string} comment
66     */
67    addProjectComment: (supplierId, projectId, comment) =>
68        api.post(`smrtbuild/suppliers/${supplierId}/project/${projectId}/comments`, { comment }),
69
70    /**
71     * Remove supplier from a project (soft-delete task assignments)
72     * @param {number} supplierId
73     * @param {number} projectId
74     */
75    deleteProjectSupplier: (supplierId, projectId) =>
76        api.post(`smrtbuild/suppliers/${supplierId}/project/${projectId}/delete`, {}),
77
78    /**
79     * Get suppliers available to add to a project (not yet assigned)
80     * @param {number} projectId
81     */
82    getAvailableForProject: (projectId, options = {}) =>
83        api.get(`smrtbuild/suppliers/available-for-project?projectId=${projectId}`, options),
84
85    /**
86     * Add a supplier to a project (creates task rows + date rows)
87     * @param {number} supplierId
88     * @param {number} projectId
89     */
90    addToProject: (supplierId, projectId) =>
91        api.post('smrtbuild/suppliers/add-to-project', { supplierId, projectId }),
92
93    /**
94     * Upload a document to a supplier task.
95     * @param {number} taskId  ProjectDocCtrl_SupplierTaskID
96     * @param {FormData} formData  must contain `file`; optional title/description/fileDate
97     */
98    uploadTaskDocument: (taskId, formData) =>
99        api.postFormData(`smrtbuild/suppliers/task/${taskId}/documents`, formData),
100
101    /**
102     * Download (or preview) a supplier-task document. Returns { blob, fileName }.
103     * @param {number} docId  ProjectDocCtrl_SupplierTask_DocID
104     */
105    downloadTaskDocument: (docId) =>
106        api.getBlob(`smrtbuild/suppliers/task-documents/${docId}/download`),
107
108    /**
109     * Delete a supplier-task document.
110     * @param {number} docId
111     */
112    deleteTaskDocument: (docId) =>
113        api.delete(`smrtbuild/suppliers/task-documents/${docId}`),
114
115    /**
116     * Get full detail for a single supplier task item (dates, comments, history, docs).
117     * @param {number} taskId  ProjectDocCtrl_SupplierTaskID
118     */
119    getTaskItemDetail: (taskId, options = {}) =>
120        api.get(`smrtbuild/suppliers/task/${taskId}`, options),
121
122    /**
123     * Update a supplier task workflow date row.
124     * @param {number} taskId
125     * @param {number} dateId  ProjectDocCtrl_SupplierTask_DateID
126     * @param {string} action  'O' open | 'C' complete | 'N' n/a | 'D' change due date
127     * @param {string|null} dateValue  ISO date string (YYYY-MM-DD), required for C and D
128     */
129    updateTaskItemDate: (taskId, dateId, action, dateValue) =>
130        api.put(`smrtbuild/suppliers/task/${taskId}/dates/${dateId}`, { action, dateValue }),
131
132    /** Export all of a supplier's documents across projects as Excel. Returns { blob, fileName }. */
133    exportDocumentsReport: (id) =>
134        api.getBlob(`smrtbuild/suppliers/${id}/documents/export`),
135
136    /** Export all of a supplier's task dates across projects as Excel. Returns { blob, fileName }. */
137    exportDatesReport: (id) =>
138        api.getBlob(`smrtbuild/suppliers/${id}/dates/export`),
139
140    /** Get expiration date for a specific supplier task date row. */
141    getExpirationDate: (taskId, dateId) =>
142        api.get(`smrtbuild/suppliers/task/${taskId}/expiration-date?dateId=${dateId}`),
143
144    /** Save (or clear) the expiration date for a supplier task date row. */
145    saveExpirationDate: (taskId, projectTaskDateId, dateExpiration) =>
146        api.put(`smrtbuild/suppliers/task/${taskId}/expiration-date`, { projectTaskDateId, dateExpiration }),
147
148    /** Get email modal options (contacts + docs + default body) for a supplier task item. */
149    getTaskEmailOptions: (taskId, options = {}) =>
150        api.get(`smrtbuild/suppliers/task/${taskId}/email-options`, options),
151
152    /**
153     * Send a supplier task email.
154     * @param {number} taskId
155     * @param {{ toContactIds: number[], ccContactIds: number[], attachDocIds: number[], subject: string, emailMessage: string }} payload
156     * @param {string} operationKey
157     */
158    sendTaskEmail: (taskId, payload, operationKey) =>
159        api.post(`smrtbuild/suppliers/task/${taskId}/email`, payload,
160            { headers: { 'Idempotency-Key': operationKey } }),
161
162    /**
163     * Add a comment to a supplier task item.
164     * @param {number} taskId
165     * @param {string} comment
166     */
167    addSupplierTaskItemComment: (taskId, comment) =>
168        api.post(`smrtbuild/suppliers/task/${taskId}/comments`, { comment }),
169};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.