$quantity = $value['quantity'];
$value['title'] = [];
+ // Skip if store_id is not in forecast
+ if (!isset($forecast[$storeId])) {
+ continue;
+ }
+
foreach (['offline', 'marketplace', 'online'] as $channel) {
- // Ищем forecast по store и каналу
+ // Initialize channel data in title
+ $value['title'][$channel] = [];
$channelData = $forecast[$storeId][$channel] ?? [];
- // 1. Если есть share — сохраняем отдельно
if (isset($channelData['share']) && is_numeric($channelData['share'])) {
- $value['title'][$channel . '_share'] = round($quantity * $channelData['share'], 2);
+ $value['title'][$channel] = round($quantity * $channelData['share'], 2);
}
- // 2. Если есть подтипы (любые ключи, кроме 'share')
- $details = array_filter(
- $channelData,
- fn($k) => $k !== 'share',
- ARRAY_FILTER_USE_KEY
- );
-
- if (!empty($details)) {
+ if (isset($productData['product_id']) && isset($forecast[$storeId][$productData['product_id']][$channel])) {
+ $details = $forecast[$storeId][$productData['product_id']][$channel];
$total = array_sum($details);
$value['title'][$channel] = [
- 'total' => round($quantity * $total, 2),
- 'details' => $details,
+ round($quantity * $total, 2),
+ 'details' => array_map(fn($val) => round($val, 2), $details),
];
}
}