]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
ERP-225 Не правильно считается Прогноз за месяц
authorMarina Zozirova <marina.zozirova@erp-flowers.ru>
Mon, 21 Oct 2024 06:44:12 +0000 (06:44 +0000)
committerAleksey Filippov <aleksey.filippov@erp-flowers.ru>
Mon, 21 Oct 2024 06:44:12 +0000 (06:44 +0000)
erp24/scripts/tasks/task_33_insert_data_to_monitvation_from_motivation_buh.php
erp24/services/MotivationService.php

index cb97050bd3eed37f0269f01943ba0c3fe37e35cb..32d32555096cb4c805fae0bbb6e24dd313903cca 100644 (file)
@@ -6,12 +6,17 @@
 
 use yii\db\Exception;
 use yii\db\Expression;
+use yii\helpers\ArrayHelper;
+use yii_app\records\CityStore;
 use yii_app\records\Motivation;
 use yii_app\records\MotivationBuh;
 use yii_app\records\MotivationBuhValue;
 use yii_app\records\MotivationCostsItem;
 use yii_app\records\MotivationValue;
 use yii_app\records\SchedulerTaskLog;
+use yii_app\records\SelfCostProduct;
+use yii_app\records\WriteOffs;
+use yii_app\records\WriteOffsProducts;
 
 ini_set('max_execution_time', (string)(60 * 60 * 1)); // 1 час
 ini_set('display_errors', 'on');
@@ -177,6 +182,66 @@ try {
                     ]);
                     $motivationValue->save();
                 }
+
+                $summa = 0;
+                if ($motivationValue->value_id === MotivationCostsItem::findOne(['code' => 10])->id) {
+
+
+                    if ($motivationValue->motivation_group_id <= 5 && $motivationValue->motivation_group_id >= 1) {
+                        $period = Motivation::getWeekRange(null, $motivationValue->motivation_group_id, $monthValue, $yearValue);
+                    } else if ($motivationValue->motivation_group_id == 10) {
+                        $period = array(
+                            'start_time' => "$motivation->year-$motivation->month-01 00:00:00",
+                            'end_time' => "$motivation->year-$motivation->month-" . date('t', strtotime("$motivation->year-$motivation->month-01")) . " 23:59:59"
+                        );
+                    }
+
+                    $stores = ArrayHelper::map(CityStore::find()
+                        ->joinWith('storeGuid')
+                        ->select('city_store.id as id, export_import_table.export_val as store_guid')
+                        ->andWhere('city_store.id is not null')
+                        ->andWhere('export_import_table.export_val is not null')
+                        ->andWhere('export_import_table.export_val <> \'\'')
+                        ->orderBy('id desc')
+                        ->asArray()
+                        ->all(), 'id', 'store_guid');
+
+                    if (!empty(array_key_exists($motivation->store_id,$stores))) {
+                        $writeOffs = WriteOffs::find()
+                            ->andWhere(['type' => 'Расходные материалы (обеспечение продаж)'])
+                            ->andWhere(['>', 'date', $period['start_time']])
+                            ->andWhere(['<=', 'date', $period['end_time']])
+                            ->andWhere(['store_id' => $stores[$motivation->store_id]])
+                            ->all();
+
+                        foreach ($writeOffs as $writeOff) {
+                            $writeOffProducts = WriteOffsProducts::find()
+                                ->andWhere(['write_offs_id' => $writeOff->id])
+                                ->all();
+
+                            foreach ($writeOffProducts as $offProduct) {
+                                if (empty(array_search($writeOff->store_id, $stores))) {
+                                    continue;
+                                }
+
+                                $price = SelfCostProduct::find()
+                                    ->andWhere(['product_guid' => $offProduct->product_id])
+                                    ->andWhere(['store_id' => array_search($writeOff->store_id, $stores)])
+                                    ->andWhere(['date' => date('Y-m-d', strtotime($writeOff->date))])
+                                    ->one();
+
+                                if (empty($price)) {
+                                    $price = $offProduct;
+                                }
+                                $summa =  $summa + $price->price * $offProduct->quantity;
+                            }
+
+                        }
+                    }
+
+                    $motivationValue->value_float += $summa;
+                    $motivationValue->save();
+                }
             }
 
             $info = ' ================ test Task ' . $taskNum . ' stop ================';
index ab6a45bf6fdc221627ec364e5b9e279551d08f6e..b456f5527cd25fad92e6a733b6dd7e87f02b4e9b 100644 (file)
@@ -245,17 +245,6 @@ class MotivationService
                 $result[$costsItem->order]['fact'] = $result[$costsItem->order]['plan'];
             }
         }
-
-        // Подстановка значений расходных материалов
-        //190 - порядок для расходных материалов
-        $consumable = self::getConsumable($motivation->id);
-        $result[190]['week1'] = $consumable['week1'];
-        $result[190]['week2'] = $consumable['week2'];
-        $result[190]['week3'] = $consumable['week3'];
-        $result[190]['week4'] = $consumable['week4'];
-        $result[190]['week5'] = $consumable['week5'];
-
-
         //  Сортировка результата по ключу (order)
         ksort($result);
 
@@ -2045,90 +2034,4 @@ class MotivationService
 
         return $success;
     }
-
-    public static function getConsumable($motivationId)
-    {
-        $summa = [];
-        $motivation = Motivation::findOne($motivationId);
-        $startDate = "$motivation->year-$motivation->month-01 00:00:00";
-        $endDate = "$motivation->year-$motivation->month-" . date('t', strtotime($startDate)) . " 23:59:59";
-
-        $stores = ArrayHelper::map(CityStore::find()
-            ->joinWith('storeGuid')
-            ->select('city_store.id as id, export_import_table.export_val as store_guid')
-            ->andWhere('city_store.id is not null')
-            ->andWhere('export_import_table.export_val is not null')
-            ->andWhere('export_import_table.export_val <> \'\'')
-            ->orderBy('id desc')
-            ->asArray()
-            ->all(), 'id', 'store_guid');
-
-        if (!empty(array_key_exists($motivation->store_id,$stores))) {
-            $writeOffs = WriteOffs::find()
-                ->andWhere(['type' => 'Расходные материалы (обеспечение продаж)'])
-                ->andWhere(['>', 'date', $startDate])
-                ->andWhere(['<=', 'date', $endDate])
-                ->andWhere(['store_id' => $stores[$motivation->store_id]])
-                ->all();
-
-            foreach ($writeOffs as $writeOff) {
-                $writeOffProducts = WriteOffsProducts::find()
-                    ->andWhere(['write_offs_id' => $writeOff->id])
-                    ->all();
-
-                foreach ($writeOffProducts as $offProduct) {
-                    if (empty(array_search($writeOff->store_id, $stores))) {
-                        continue;
-                    }
-
-                    $price = SelfCostProduct::find()
-                        ->andWhere(['product_guid' => $offProduct->product_id])
-                        ->andWhere(['store_id' => array_search($writeOff->store_id, $stores)])
-                        ->andWhere(['date' => date('Y-m-d', strtotime($writeOff->date))])
-                        ->one();
-                    if (empty($price)) {
-                        $price = $offProduct;
-                    }
-
-
-                    $sum = $price->price * $offProduct->quantity;
-
-                    $summa[] = ['date' => date('Y-m-d', strtotime($writeOff->date)), 'sum' => $sum];
-
-                }
-            }
-        }
-
-        $weeklySums = array_fill(1, 5, 0);
-        $weeklySums = array_combine(
-            array_map(function($i) { return "week$i"; }, array_keys($weeklySums)),
-            $weeklySums
-        );
-
-        foreach ($summa as $value) {
-            $week = Motivation::getWeek($value['date']);
-            if ($week >= 1 && $week <= 5) {
-                $key = "week$week";
-                $weeklySums[$key] += $value['sum'];
-            }
-        }
-
-        $motivationValues = MotivationValue::find()
-            ->andWhere(['motivation_id' => $motivationId])
-            ->andWhere(['value_id' => self::CODE_CONSUMABLES_SALES_SUPPORT])
-            ->select('motivation_group_id, value_float')
-            ->all();
-
-        foreach ($motivationValues as $value) {
-            $week = $value['motivation_group_id'];
-            if ($week >= 1 && $week <= 5) {
-                $key = "week$week";
-                $weeklySums[$key] += $value['value_float'];
-            }
-        }
-
-        return $weeklySums;
-
-    }
-
 }