if (isset($channelData['share']) && is_numeric($channelData['share'])) {
$titleData = [round($quantity * $channelData['share'], 2)];
}
-
+
if (isset($productData['product_id']) && isset($forecast[$storeId][$productData['product_id']][$channel])) {
$details = $forecast[$storeId][$productData['product_id']][$channel];
$total = array_sum($details);
if (!titleObj || typeof titleObj !== 'object') return '';
const typeTitles = {
- offline: 'Оффлайн',
- online: 'Онлайн',
- marketplace: 'Маркетплейс'
+ offline: '📦 Оффлайн',
+ online: '🌐 Онлайн',
+ marketplace: '🛒 Маркетплейс'
};
const parts = Object.entries(titleObj)
.map(([typeKey, typeValue]) => {
const title = typeTitles[typeKey] || typeKey;
+
+ // Handle case where typeValue is an array [numeric_value, {details: {...}}]
+ if (Array.isArray(typeValue) && typeValue.length >= 1) {
+ const numericValue = parseFloat(typeValue[0]);
+ const details = typeValue[1]?.details || {};
+ const lines = Object.entries(details)
+ .map(([key, val]) => `- ${key.replace(/_/g, ' ')}: ${parseFloat(val).toFixed(2)}`);
+ return `${title}: ${numericValue.toFixed(2)}${lines.length ? '\n' + lines.join('\n') : ''}`;
+ }
+
+ // Handle case where typeValue is a number (for share-only, if applicable)
if (typeof typeValue === 'number') {
return `${title}: ${typeValue.toFixed(2)}`;
}
- if (!typeValue || typeof typeValue !== 'object' || !typeValue[0]) return '';
- const lines = Object.entries(typeValue[1]?.details || {})
- .map(([key, val]) => `- ${key.replace(/_/g, ' ')}: ${parseFloat(val).toFixed(2)}`);
- return `${title}: ${parseFloat(typeValue[0]).toFixed(2)}\n${lines.join('\n')}`;
+
+ return ''; // Skip invalid or empty values
})
.filter(Boolean);