feat(ct): поставщик-победитель записывается в шапку СТ на шаге 3
По «Сохранить и продолжить» выбранный поставщик пишется в лукап winSupplier: на шаге 4 меняется только статус, а поставщик мог быть как обычной колонкой, так и добавленным на шаге 3.
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -1434,6 +1434,25 @@ export class CtService {
|
||||
throw new Error(`Ошибка сохранения комментария ИИ: ${res.status}`);
|
||||
}
|
||||
|
||||
// Запись поставщика-победителя в шапку СТ (лукап winSupplier → «Поставщики»), Шаг 3.
|
||||
async saveWinSupplier(ctId: string, supplierSpId: number): Promise<void> {
|
||||
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<Blob> {
|
||||
|
||||
Reference in New Issue
Block a user