]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Группировка по бвзовым матрицам
authorfomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 3 Jul 2025 14:59:00 +0000 (17:59 +0300)
committerfomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 3 Jul 2025 14:59:00 +0000 (17:59 +0300)
erp24/commands/CronController.php
erp24/controllers/AutoPlannogrammaController.php
erp24/services/AutoPlannogrammaService.php

index 3d1b9f41a7ce7dfae99c4e31873282dddcdc2fc4..62731b297baa6f52aaca682e0242c0d5a9a37810 100644 (file)
@@ -1591,7 +1591,7 @@ class CronController extends Controller
     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');
@@ -1646,6 +1646,8 @@ class CronController extends Controller
                         $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) {
index 4a8c90f917ee67e2ed84815c31c261cc672cb5fd..3cb494cca690dfab9703776e6c4e3d7d24ccba79 100644 (file)
@@ -1285,7 +1285,9 @@ class AutoPlannogrammaController extends BaseController
             $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);
@@ -1511,10 +1513,10 @@ class AutoPlannogrammaController extends BaseController
                 }
                 $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))) {
index 6d60b52420685277b82de16edd8f133e41d9ffb5..0ecac3eff82acb296e0a6ab660e5eebbd9c098ee 100644 (file)
@@ -1467,8 +1467,8 @@ class AutoPlannogrammaService
                 'category' => $cat,
                 'subcategory' => $sub,
                 'species' => $spec,
-                'percent' => $percent,
-                'monthly_goal' => $monthlyGoal,
+                'percent' => $percent ?? 0,
+                'monthly_goal' => $monthlyGoal ?? 0,
                 'weekly_goal' => $weeklyGoal,
             ];
         }
@@ -2143,7 +2143,7 @@ class AutoPlannogrammaService
             $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)) {
@@ -2162,7 +2162,8 @@ class AutoPlannogrammaService
             }
             if (!empty($dailyPrices)) {
                 $price = min($dailyPrices);
-            } else {
+            }
+            if ($price === null) {
                 $price = 0.0;
             }
             $cost = $componentDataRecord['quantity'] * $price * $componentDataRecord['quantity_product'];
@@ -3017,16 +3018,19 @@ class AutoPlannogrammaService
                 $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;
@@ -3051,6 +3055,7 @@ class AutoPlannogrammaService
             [$monthSpeciesGoal['subcategory']]
             [$monthSpeciesGoal['species']] = $monthSpeciesGoal['goal'];
         }
+
         $productsWriteoffsShare = $this->calculateWriteOffShareByMonth($weeklySalesForecast, $month, $year);
         $productsWriteoffsShareMap = [];
         foreach ($productsWriteoffsShare as $productWriteoffs) {