diff --git a/src/webparts/ctFormsPortal/forms/ct/components/Step3ComparisonTable/useStep3Matrix.ts b/src/webparts/ctFormsPortal/forms/ct/components/Step3ComparisonTable/useStep3Matrix.ts index 09140f8..89fd45c 100644 --- a/src/webparts/ctFormsPortal/forms/ct/components/Step3ComparisonTable/useStep3Matrix.ts +++ b/src/webparts/ctFormsPortal/forms/ct/components/Step3ComparisonTable/useStep3Matrix.ts @@ -810,6 +810,17 @@ export function useStep3Matrix(args: UseStep3MatrixArgs) { column => column.spId ?? extraSupSpIds[column.id], )); + // Поставщик-победитель → winSupplier в шапке СТ (лукап на «Поставщики»). Пишем сразу по + // «Сохранить и продолжить», а не на Шаге 4 — там меняется только статус, а поставщик мог + // прийти как обычной колонкой (spId уже есть), так и добавленным на этом шаге (spId + // появляется только что, в extraSupSpIds). + if (selectedSupplierId) { + const winSupplierSpId = suppliers.find(s => s.id === selectedSupplierId)?.spId + ?? extraSupSpIds[selectedSupplierId]; + if (winSupplierSpId !== undefined) { + await service.saveWinSupplier(ct.id, winSupplierSpId); + } + } // Persist offers with React IDs (sup.id / pos.id) so they survive F5 / step navigation — // render keys use React IDs, so SP IDs in session cause empty cells on remount. diff --git a/src/webparts/ctFormsPortal/forms/ct/services/CtService.ts b/src/webparts/ctFormsPortal/forms/ct/services/CtService.ts index 09420a1..df8af50 100644 --- a/src/webparts/ctFormsPortal/forms/ct/services/CtService.ts +++ b/src/webparts/ctFormsPortal/forms/ct/services/CtService.ts @@ -1434,6 +1434,25 @@ export class CtService { throw new Error(`Ошибка сохранения комментария ИИ: ${res.status}`); } + // Запись поставщика-победителя в шапку СТ (лукап winSupplier → «Поставщики»), Шаг 3. + async saveWinSupplier(ctId: string, supplierSpId: number): Promise { + const res = await this.http.fetch( + this._liById(LISTS.CT, ctId), + SPHttpClient.configurations.v1, + { + method: "POST", + headers: { + "Content-Type": "application/json;odata=nometadata", + "IF-MATCH": "*", + "X-HTTP-Method": "MERGE", + }, + body: JSON.stringify({ winSupplierId: supplierSpId }), + }, + ); + if (!res.ok) + throw new Error(`Ошибка сохранения поставщика-победителя: ${res.status}`); + } + // Сформировать отчёт СТ и вернуть его как blob (без скачивания на диск). // Нужен для подписания через NCALayer и сборки карточки SIGEX. async getCtReportBlob(ctId: string, format: string = "xlsx"): Promise {