From 0827c501dfeddf9612c4c3e573d7e400d7a010b2 Mon Sep 17 00:00:00 2001 From: Mikhail Chusavitin Date: Wed, 18 Feb 2026 10:32:36 +0300 Subject: [PATCH] Update lot recalc flow --- web/templates/lot.html | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/web/templates/lot.html b/web/templates/lot.html index de3fb65..56a9bae 100644 --- a/web/templates/lot.html +++ b/web/templates/lot.html @@ -537,16 +537,41 @@ async function deleteStockMapping(partnumber) { async function recalculateAll() { try { - const resp = await fetch('/api/admin/pricing/recalculate-all', {method: 'POST'}); + const resp = await fetch('/api/admin/pricing/recalculate-all?force=1', {method: 'POST'}); const data = await resp.json(); if (data.task_id) { showToast('Пересчёт цен запущен в фоне', 'info'); + await waitForTaskCompletion(data.task_id); + if (currentTab === 'components') { + loadData(); + } } } catch (e) { showToast('Ошибка запуска пересчёта', 'error'); } } +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +async function waitForTaskCompletion(taskId) { + if (!taskId) return; + for (;;) { + await sleep(2500); + try { + const resp = await fetch(`/api/tasks/${taskId}`); + if (!resp.ok) return; + const task = await resp.json(); + if (task.status === 'completed' || task.status === 'error') { + return; + } + } catch (_) { + return; + } + } +} + // LOT Creation Functions function openCreateLotModal() { document.getElementById('create-lot-modal').classList.remove('hidden'); @@ -668,4 +693,4 @@ if (document.getElementById('price-modal')) { {{end}} -{{template "base" .}} \ No newline at end of file +{{template "base" .}}