if (!isVisible) return;
const val = valuesMap.get(storeId) || {quantity: 0, id: '', title: {}};
- const tooltipTitle = generateTitleString(val.title, val.is_min, val.is_modify);
+ const tooltipTitle = generateTitleString(val.title, val.is_min, val.is_modify, val.quantity);
const encodedTooltip = $('<div>').text(tooltipTitle).html();
const modifyClass = val.is_modify ? 'corrected-input-bg' : 'auto-input-bg';
const td = $(`
}
};
-const generateTitleString = (titleRaw, isMin, isModify) => {
+const generateTitleString = (titleRaw, isMin, isModify, modify) => {
const titleObj = typeof titleRaw === 'string' ? safeParseJson(titleRaw) : titleRaw;
if (!titleObj || typeof titleObj !== 'object') return '';
- if (isModify) {return 'Изменено пользователем';}
+ if (isModify) return "Корректировка: " + modify;
+
const modificator = isMin ? 0.3 : 1;
const typeTitles = {
offline: 'Оффлайн',
forecast: 'Расчетный прогноз',
};
- const parts = Object.entries(titleObj)
- .map(([typeKey, typeValue]) => {
- const title = typeTitles[typeKey] || typeKey;
-
- if (typeof typeValue !== 'object' || typeValue === null) {
- return '';
- }
+ const lines = [];
+ const groupLines = [];
- const quantity = typeof typeValue.quantity === 'number'
- ? parseFloat(typeValue.quantity * modificator).toFixed(2)
- : '0.00';
+ for (const [typeKey, typeValue] of Object.entries(titleObj)) {
+ if (typeof typeValue !== 'object' || typeValue === null) continue;
- let result = `${title}: ${quantity}`;
+ const title = typeTitles[typeKey] || typeKey;
+ const quantity = typeof typeValue.quantity === 'number'
+ ? parseFloat(typeValue.quantity * modificator).toFixed(2)
+ : '0.00';
- if (typeof typeValue.groups === 'object' && typeValue.groups !== null) {
- const groupEntries = Object.entries(typeValue.groups);
- if (groupEntries.length > 0) {
- const lines = groupEntries.map(
- ([key, val]) => `- ${key.replace(/_/g, ' ')}: ${parseFloat(val).toFixed(2)}`
- );
- result += `\n${lines.join('\n')}`;
+ if (typeKey === 'forecast') {
+ // forecast заменяет offline
+ lines.unshift(`Оффлайн ${quantity}`);
+ } else if (typeKey === 'writeOffs') {
+ lines.push(`${title} ${quantity}`);
+ } else {
+ // Оффлайн, Онлайн, Маркетплейс
+ if (typeKey !== 'forecast') {
+ const groups = typeValue.groups;
+ if (groups && typeof groups === 'object') {
+ for (const [groupKey, val] of Object.entries(groups)) {
+ const groupVal = parseFloat(val).toFixed(2);
+ groupLines.push(`${groupKey.replace(/_/g, ' ')} (${title.toLowerCase()}) ${groupVal}`);
+ }
}
}
+ }
+ }
- return result;
- })
- .filter(Boolean);
-
- return parts.join('\n\n');
+ return [...lines, ...groupLines].join('\n');
};
\ No newline at end of file