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.