public function actionAutoplannogrammaCalculate(): void
{
$date = new DateTime();
- $date->modify('+2 months');
+ $date->modify('+0 months');
$planDate = $date->format('Y-m-01');
$month = (int)$date->format('m');
$year = (int)$date->format('Y');
$writeOffs = $writeOffsForecast[$productId][$week]['writeOffs'];
$details['writeOffs']['quantity'] = $writeOffs;
$total += is_array($writeOffs) ? array_sum($writeOffs) : (float)$writeOffs;
+ } else {
+ $details['writeOffs']['quantity'] = 0;
}
foreach (['offline', 'online', 'marketplace'] as $type) {
$service = new AutoPlannogrammaService();
//$goals = $service->calculateFullGoalChain($filters);
//$forecast = $service->calculateFullForecastForWeek($filters);
- //var_dump( $forecast); die();
+ //$writeOffsForecast = $service->getWeeklyProductsWriteoffsForecast($filters['month'], $filters['year'], $forecast, $filters['store_id']);
+ //$salesForecast = $service->getWeeklyBouquetProductsSalesForecast($filters['month'], $filters['year'], $filters['store_id']);
+ // var_dump( $salesForecast); die();
$monthCategoryShare = $service->getMonthCategoryShareOrWriteOff($filters['plan_date'], $filters);
$monthCategoryGoal = $service->getMonthCategoryGoal($monthCategoryShare, $filters['plan_date']);
$monthSubcategoryShare = $service->getMonthSubcategoryShareOrWriteOff($filters['plan_date'], $filters);
}
$detailsArray = $data;
foreach ($detailsArray as $type => $typeArr) {
- if (!isset($typeArr['groups']) ) {
+ if (!isset($typeArr['groups']) && $type !== AutoPlannogrammaService::TYPE_WRITE_OFFS) {
continue;
}
- $groups = $typeArr['groups'];
+ $groups = $typeArr['groups'] ?? [];
$groups[$type] = $typeArr['quantity'];
foreach ($groups as $group => $quantity) {
if (in_array($group, array_keys($mappingTypes))) {
'category' => $cat,
'subcategory' => $sub,
'species' => $spec,
- 'percent' => $percent,
- 'monthly_goal' => $monthlyGoal,
+ 'percent' => $percent ?? 0,
+ 'monthly_goal' => $monthlyGoal ?? 0,
'weekly_goal' => $weeklyGoal,
];
}
$guid = $componentDataRecord['component_guid'];
$nomenclatureData = $nomenclatures[$guid] ?? null;
$productId = $nomenclatureData?->id;
- $price = 0;
+ $price = null;
$dailyPrices = [];
foreach ($pricesByProduct[$productId] ?? [] as $priceRecordForProduct) {
if (defined($heliumConstant) && $productId == constant($heliumConstant)) {
}
if (!empty($dailyPrices)) {
$price = min($dailyPrices);
- } else {
+ }
+ if ($price === null) {
$price = 0.0;
}
$cost = $componentDataRecord['quantity'] * $price * $componentDataRecord['quantity_product'];
$salesShares[$storeId]['marketplace'] = round($market / $total, 4);
}
}
+
foreach ($weeklyForecasts as $item) {
+ $groupsArr = explode('_', (string)$item['matrix_group']);
+ $baseGroup = $groupsArr[0];
$storeItem = (int)$item['store_id'];
$guid = (string)$item['product_guid'];
- $group = (string)$item['matrix_group'];
+ $group = $baseGroup;
$type = (string)$item['type'];
$forecastValue = (float)$item['week_forecast'];
if (isset($salesShares[$storeItem]) && isset($salesShares[$storeItem][$type])) {
$grouped[$storeItem][$type]['share'] = $salesShares[$storeItem][$type];
}
- $grouped[$storeItem][$guid][$type][$group] = $forecastValue;
+ $grouped[$storeItem][$guid][$type][$group] = ($grouped[$storeItem][$guid][$type][$group] ?? 0) + $forecastValue;
}
return $grouped;
[$monthSpeciesGoal['subcategory']]
[$monthSpeciesGoal['species']] = $monthSpeciesGoal['goal'];
}
+
$productsWriteoffsShare = $this->calculateWriteOffShareByMonth($weeklySalesForecast, $month, $year);
$productsWriteoffsShareMap = [];
foreach ($productsWriteoffsShare as $productWriteoffs) {