]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
[ERP-140] Обнулены пустые клетки факта
authorAlexander Smirnov <fredeom@mail.ru>
Fri, 16 Aug 2024 09:48:21 +0000 (12:48 +0300)
committerAlexander Smirnov <fredeom@mail.ru>
Fri, 16 Aug 2024 09:48:21 +0000 (12:48 +0300)
erp24/actions/motivation/TestFactAction.php
erp24/records/MotivationCostsItem.php
erp24/scripts/tasks/task_32_motivation_fact.php
erp24/services/MotivationService.php

index d4a07310b0b1656330dea86802287f5f66d4b56f..23e626b1b8a68b1413832e23ca1215dee3bc35cc 100644 (file)
@@ -71,6 +71,8 @@ class TestFactAction extends Action
             MotivationService::calculateMonthSoftwareLicenseErpSystem($model->year, $model->month);
 
             MotivationService::calculateMonthCeoAndSaleOfWebsiteGoods($model->year, $model->month);
+
+            MotivationService::initMonth1cFields($model->year, $model->month);
         }
 
         return $this->controller->render('test-fact', compact('model', 'years', 'months'));
index 1f9de0bee65e93b06f5d8d14dfbb8cdfe54c111d..eb2ae6944206ff216948b9884ddd4a469ff72749 100644 (file)
@@ -39,6 +39,15 @@ class MotivationCostsItem extends ActiveRecord
         }
     }
 
+    public static function writeOffsToMotivationItemArray() {
+        return [
+            WriteOffsErp::WRITE_OFFS_TYPE_BRAK => self::ITEM_WRITE_OFF_OF_ILLIQUID_GOODS_SPOILAGE_EXPIRATION_OF_SHELF_LIFE,
+            WriteOffsErp::WRITE_OFFS_TYPE_DELIVERY_BRAK => self::ITEM_DEFECTIVE_DELIVERY,
+            WriteOffsErp::WRITE_OFFS_TYPE_DUE_TO_EQUIPMENT_FAILURE_BRAK => self::ITEM_DEFECT_DUE_TO_EQUIPMENT_FAILURE,
+            WriteOffsErp::WRITE_OFFS_TYPE_RESORTING_DOES_NOT_COUNT_TOWARDS_COST => self::ITEM_REGRADING,
+        ];
+    }
+
     /**
      * {@inheritdoc}
      */
index fb35da4d6032efbc098eeaf046ca17b02803d8fd..3d641799cfb6f6c66e4e7373753d616c9ca894e6 100644 (file)
@@ -74,6 +74,8 @@ try {
         MotivationService::calculateMonthSoftwareLicenseErpSystem($year, $month);
 
         MotivationService::calculateMonthCeoAndSaleOfWebsiteGoods($year, $month);
+
+        MotivationService::initMonth1cFields($year, $month);
         //////////////////////////////////////////////
 
 
index 7a951952b269faf58b4e42a58395051e003c5694..bb4e349da1e27ec1e03201ecbe544f6e28a7e7f9 100644 (file)
@@ -693,13 +693,13 @@ class MotivationService
         // Установить значение в зависимости от типа
         switch ($value_type) {
             case 'float':
-                $motivationValue->value_float = $value;
+                $motivationValue->value_float = $value ?? 0;
                 break;
             case 'int':
-                $motivationValue->value_int = $value;
+                $motivationValue->value_int = $value ?? 0;
                 break;
             case 'string':
-                $motivationValue->value_string = $value;
+                $motivationValue->value_string = $value ?? '';
                 break;
             default:
                 throw new \InvalidArgumentException("Неправильное значение типа: $value_type");
@@ -874,41 +874,38 @@ class MotivationService
         $storeIds = ArrayHelper::getColumn(CityStore::find()->where(['visible' => '1'])->all(), 'id');
         foreach ($storeIds as $store_id) {
             if (isset($motivations[$store_id])) {
-                if (isset($salesOffline[$store_id])) {
-                    $correction = self::getMotivationValue($motivations[$store_id]->id, 8, $motivationCostsItemOffline->code);
-
-                    $motivationValueOffline = MotivationValue::find()->where(['motivation_id' => $motivations[$store_id]->id,
-                        'motivation_group_id' => $motivationValueGroupFact->id, 'value_id' => $motivationCostsItemOffline->code])->one();
-                    if (!$motivationValueOffline) {
-                        $motivationValueOffline = new MotivationValue;
-                        $motivationValueOffline->motivation_id = $motivations[$store_id]->id;
-                        $motivationValueOffline->motivation_group_id = $motivationValueGroupFact->id;
-                        $motivationValueOffline->value_id = $motivationCostsItemOffline->code;
-                        $motivationValueOffline->value_type = $motivationCostsItemOffline->data_type;
-                    }
-                    $motivationValueOffline->value_float = $salesOffline[$store_id]['total'] + $correction;
-                    $motivationValueOffline->save();
-                    if ($motivationValueOffline->getErrors()) {
-                        throw new \Exception(Json::encode($motivationValueOffline->getErrors()));
-                    }
+                $correction = self::getMotivationValue($motivations[$store_id]->id, 8, $motivationCostsItemOffline->code);
+
+                $motivationValueOffline = MotivationValue::find()->where(['motivation_id' => $motivations[$store_id]->id,
+                    'motivation_group_id' => $motivationValueGroupFact->id, 'value_id' => $motivationCostsItemOffline->code])->one();
+                if (!$motivationValueOffline) {
+                    $motivationValueOffline = new MotivationValue;
+                    $motivationValueOffline->motivation_id = $motivations[$store_id]->id;
+                    $motivationValueOffline->motivation_group_id = $motivationValueGroupFact->id;
+                    $motivationValueOffline->value_id = $motivationCostsItemOffline->code;
+                    $motivationValueOffline->value_type = $motivationCostsItemOffline->data_type;
                 }
-                if (isset($salesOnline[$store_id])) {
-                    $correction = self::getMotivationValue($motivations[$store_id]->id, 8, $motivationCostsItemOnline->code);
-
-                    $motivationValueOnline = MotivationValue::find()->where(['motivation_id' => $motivations[$store_id]->id,
-                        'motivation_group_id' => $motivationValueGroupFact->id, 'value_id' => $motivationCostsItemOnline->code])->one();
-                    if (!$motivationValueOnline) {
-                        $motivationValueOnline = new MotivationValue;
-                        $motivationValueOnline->motivation_id = $motivations[$store_id]->id;
-                        $motivationValueOnline->motivation_group_id = $motivationValueGroupFact->id;
-                        $motivationValueOnline->value_id = $motivationCostsItemOnline->code;
-                        $motivationValueOnline->value_type = $motivationCostsItemOnline->data_type;
-                    }
-                    $motivationValueOnline->value_float = $salesOnline[$store_id]['total'] + $correction;
-                    $motivationValueOnline->save();
-                    if ($motivationValueOnline->getErrors()) {
-                        throw new \Exception(Json::encode($motivationValueOnline->getErrors()));
-                    }
+                $motivationValueOffline->value_float = ($salesOffline[$store_id]['total'] ?? 0) + $correction;
+                $motivationValueOffline->save();
+                if ($motivationValueOffline->getErrors()) {
+                    throw new \Exception(Json::encode($motivationValueOffline->getErrors()));
+                }
+
+                $correction = self::getMotivationValue($motivations[$store_id]->id, 8, $motivationCostsItemOnline->code);
+
+                $motivationValueOnline = MotivationValue::find()->where(['motivation_id' => $motivations[$store_id]->id,
+                    'motivation_group_id' => $motivationValueGroupFact->id, 'value_id' => $motivationCostsItemOnline->code])->one();
+                if (!$motivationValueOnline) {
+                    $motivationValueOnline = new MotivationValue;
+                    $motivationValueOnline->motivation_id = $motivations[$store_id]->id;
+                    $motivationValueOnline->motivation_group_id = $motivationValueGroupFact->id;
+                    $motivationValueOnline->value_id = $motivationCostsItemOnline->code;
+                    $motivationValueOnline->value_type = $motivationCostsItemOnline->data_type;
+                }
+                $motivationValueOnline->value_float = ($salesOnline[$store_id]['total'] ?? 0) + $correction;
+                $motivationValueOnline->save();
+                if ($motivationValueOnline->getErrors()) {
+                    throw new \Exception(Json::encode($motivationValueOnline->getErrors()));
                 }
             }
         }
@@ -1001,41 +998,38 @@ class MotivationService
         $storeIds = ArrayHelper::getColumn(CityStore::find()->where(['visible' => '1'])->all(), 'id');
         foreach ($storeIds as $store_id) {
             if (isset($motivations[$store_id])) {
-                if (isset($salesProduct[$store_id])) {
-                    $correction = self::getMotivationValue($motivations[$store_id]->id, 8, $motivationCostsItemServices->code);
-
-                    $motivationValueService = MotivationValue::find()->where(['motivation_id' => $motivations[$store_id]->id,
-                        'motivation_group_id' => $motivationValueGroupFact->id, 'value_id' => $motivationCostsItemServices->code])->one();
-                    if (!$motivationValueService) {
-                        $motivationValueService = new MotivationValue;
-                        $motivationValueService->motivation_id = $motivations[$store_id]->id;
-                        $motivationValueService->motivation_group_id = $motivationValueGroupFact->id;
-                        $motivationValueService->value_id = $motivationCostsItemServices->code;
-                        $motivationValueService->value_type = $motivationCostsItemServices->data_type;
-                    }
-                    $motivationValueService->value_float = $salesProduct[$store_id]['total'] + $correction;
-                    $motivationValueService->save();
-                    if ($motivationValueService->getErrors()) {
-                        throw new \Exception(Json::encode($motivationValueService->getErrors()));
-                    }
+                $correction = self::getMotivationValue($motivations[$store_id]->id, 8, $motivationCostsItemServices->code);
+
+                $motivationValueService = MotivationValue::find()->where(['motivation_id' => $motivations[$store_id]->id,
+                    'motivation_group_id' => $motivationValueGroupFact->id, 'value_id' => $motivationCostsItemServices->code])->one();
+                if (!$motivationValueService) {
+                    $motivationValueService = new MotivationValue;
+                    $motivationValueService->motivation_id = $motivations[$store_id]->id;
+                    $motivationValueService->motivation_group_id = $motivationValueGroupFact->id;
+                    $motivationValueService->value_id = $motivationCostsItemServices->code;
+                    $motivationValueService->value_type = $motivationCostsItemServices->data_type;
                 }
-                if (isset($salesProductDelivery[$store_id])) {
-                    $correction = self::getMotivationValue($motivations[$store_id]->id, 8, $motivationCostsItemServicesDelivery->code);
-
-                    $motivationValueServiceDelivery = MotivationValue::find()->where(['motivation_id' => $motivations[$store_id]->id,
-                        'motivation_group_id' => $motivationValueGroupFact->id, 'value_id' => $motivationCostsItemServicesDelivery->code])->one();
-                    if (!$motivationValueServiceDelivery) {
-                        $motivationValueServiceDelivery = new MotivationValue;
-                        $motivationValueServiceDelivery->motivation_id = $motivations[$store_id]->id;
-                        $motivationValueServiceDelivery->motivation_group_id = $motivationValueGroupFact->id;
-                        $motivationValueServiceDelivery->value_id = $motivationCostsItemServicesDelivery->code;
-                        $motivationValueServiceDelivery->value_type = $motivationCostsItemServicesDelivery->data_type;
-                    }
-                    $motivationValueServiceDelivery->value_float = $salesProductDelivery[$store_id]['total'] + $correction;
-                    $motivationValueServiceDelivery->save();
-                    if ($motivationValueServiceDelivery->getErrors()) {
-                        throw new \Exception(Json::encode($motivationValueServiceDelivery->getErrors()));
-                    }
+                $motivationValueService->value_float = ($salesProduct[$store_id]['total'] ?? 0) + $correction;
+                $motivationValueService->save();
+                if ($motivationValueService->getErrors()) {
+                    throw new \Exception(Json::encode($motivationValueService->getErrors()));
+                }
+
+                $correction = self::getMotivationValue($motivations[$store_id]->id, 8, $motivationCostsItemServicesDelivery->code);
+
+                $motivationValueServiceDelivery = MotivationValue::find()->where(['motivation_id' => $motivations[$store_id]->id,
+                    'motivation_group_id' => $motivationValueGroupFact->id, 'value_id' => $motivationCostsItemServicesDelivery->code])->one();
+                if (!$motivationValueServiceDelivery) {
+                    $motivationValueServiceDelivery = new MotivationValue;
+                    $motivationValueServiceDelivery->motivation_id = $motivations[$store_id]->id;
+                    $motivationValueServiceDelivery->motivation_group_id = $motivationValueGroupFact->id;
+                    $motivationValueServiceDelivery->value_id = $motivationCostsItemServicesDelivery->code;
+                    $motivationValueServiceDelivery->value_type = $motivationCostsItemServicesDelivery->data_type;
+                }
+                $motivationValueServiceDelivery->value_float = ($salesProductDelivery[$store_id]['total'] ?? 0) + $correction;
+                $motivationValueServiceDelivery->save();
+                if ($motivationValueServiceDelivery->getErrors()) {
+                    throw new \Exception(Json::encode($motivationValueServiceDelivery->getErrors()));
                 }
             }
         }
@@ -1059,11 +1053,8 @@ class MotivationService
                     ->groupBy(['type'])
                     ->indexBy('type')
                     ->asArray()->all();
-                foreach ($writeOffs as $key => $data) {
-                    $motivationItemType = MotivationCostsItem::writeOffsToMotivationItemMap($key);
-                    if (empty($motivationItemType)) {
-                        continue;
-                    }
+                foreach (MotivationCostsItem::writeOffsToMotivationItemArray() as $key => $motivationItemType) {
+                    $data = $writeOffs[$key] ?? [];
                     $motivationCostsItem = MotivationCostsItem::find()->where(['name' => $motivationItemType])->one();
                     /** @var $motivationCostsItem MotivationCostsItem */
 
@@ -1078,7 +1069,7 @@ class MotivationService
                         $motivationValue->value_id = $motivationCostsItem->code;
                         $motivationValue->value_type = $motivationCostsItem->data_type;
                     }
-                    $motivationValue->value_float = $data['total'] + $correction;
+                    $motivationValue->value_float = ($data['total'] ?? 0) + $correction;
                     $motivationValue->save();
                     if ($motivationValue->getErrors()) {
                         throw new \Exception(Json::encode($motivationValue->getErrors()));
@@ -1201,4 +1192,18 @@ class MotivationService
                 6, 33, "float", $correction);
         }
     }
+
+    public static function initMonth1cFields($year, $month) {
+        $motivations = Motivation::find()
+            ->where(['year' => $year, 'month' => $month])
+            ->all();
+
+        $valueIdIndices = [12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 30];
+
+        foreach ($motivations as $motivation) {
+            foreach ($valueIdIndices as $index) {
+                self::saveOrUpdateMotivationValue($motivation->id, 6, $index, "float", 0);
+            }
+        }
+    }
 }