/** * Вкладка «Итоги» на /reports. */ (function (global) { const COPY = () => global.WespAnalyticsCopy || {}; function escapeHtml(value) { return String(value ?? "") .replace(/&/g, "&") .replace(//g, ">"); } function getDateParams() { const from = document.getElementById("date-from")?.value || ""; const to = document.getElementById("date-to")?.value || ""; return { date_from: from, date_to: to }; } function buildUrl() { const params = global.WespReportsFilters?.buildAnalyticsParams?.() || new URLSearchParams(getDateParams()); return `/api/analytics/finance?${params.toString()}`; } function valueToneClass(kind) { if (kind === "loss") return "analytics-kpi-card__value--loss"; if (kind === "risk") return "analytics-kpi-card__value--risk"; return ""; } function netHint(data) { const c = COPY().summary || {}; if (data.dominantIssue === "overload") return c.netHintOverload || ""; if (data.dominantIssue === "underload") return c.netHintUnderload || ""; return c.netHintBalanced || ""; } function overloadHint(data) { const c = COPY().summary || {}; if (Number(data.overloadRub) > 0) return c.overloadHint || ""; return c.overloadHintZero || c.overloadHint || ""; } function underloadHint(data) { const c = COPY().summary || {}; if (Number(data.underloadRub) > 0) return c.underloadHint || ""; return c.underloadHintZero || c.underloadHint || ""; } function netTone(data) { if (data.dominantIssue === "overload") return "loss"; if (data.dominantIssue === "underload") return "risk"; return ""; } function renderTopBar(data) { const top = data.topComponents || []; if (!top.length) { return `

${escapeHtml(COPY().summary?.empty || "")}

`; } const maxVal = Math.max( ...top.map((row) => Math.max(row.overloadRub, row.underloadRub)), 1 ); const rows = top .map((row) => { const isOverload = row.overloadRub > row.underloadRub; const main = isOverload ? `${COPY().formatRub(row.overloadRub)} перерасход` : `${COPY().formatRub(row.underloadRub)} недогруз`; const tone = isOverload ? "analytics-top-row__value--loss" : "analytics-top-row__value--risk"; const widthPct = Math.round( Math.min(100, (Math.max(row.overloadRub, row.underloadRub) / maxVal) * 1000) ) / 10; return ( `
` + `${escapeHtml(row.name)}` + `` + `` + `${escapeHtml(main)}` + `
` ); }) .join(""); return `
${rows}
`; } function render(data) { const el = document.getElementById("analyticsSummaryList"); if (!el) return; const c = COPY().summary || {}; const overloadTone = Number(data.overloadRub) > 0 ? "loss" : ""; const underloadTone = Number(data.underloadRub) > 0 ? "risk" : ""; const netT = netTone(data); el.innerHTML = `
` + `
` + `
${escapeHtml(c.overloadTitle)}
` + `
${escapeHtml(COPY().formatRub(data.overloadRub))}
` + `
${escapeHtml(overloadHint(data))}
` + `
` + `
` + `
${escapeHtml(c.underloadTitle)}
` + `
${escapeHtml(COPY().formatRub(data.underloadRub))}
` + `
${escapeHtml(underloadHint(data))}
` + `
` + `
` + `
${escapeHtml(c.netTitle)}
` + `
${escapeHtml(COPY().formatRub(Math.abs(data.netRub)))}
` + `
${escapeHtml(netHint(data))}
` + `
` + `
` + `
` + `

${escapeHtml(c.topTitle)}

` + renderTopBar(data) + `
` + ``; el.querySelector("[data-analytics-goto-alerts]")?.addEventListener("click", () => { global.WespFeedAlerts?.openJournalAlerts?.(); }); global.WespZootechModals?.revealContent(el); } async function load() { const el = document.getElementById("analyticsSummaryList"); if (!el) return; el.innerHTML = '
' + '

Загрузка итогов…

'; try { const resp = await fetch(buildUrl()); if (!resp.ok) throw new Error("Не удалось загрузить итоги"); render(await resp.json()); } catch (err) { el.innerHTML = `

${escapeHtml(err.message)}

`; } } function onFiltersApplied() { if (global.WespFeedAlerts?.getCurrentView?.() === "summary") load(); } function init() { /* экспорт — WespReportsExport */ } global.WespAnalyticsSummary = { init, load, onFiltersApplied }; })(typeof window !== "undefined" ? window : globalThis);