]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
[ERP-130] Добавил себестоимости в брак
authorAlexander Smirnov <fredeom@mail.ru>
Wed, 28 Aug 2024 14:51:21 +0000 (17:51 +0300)
committerAlexander Smirnov <fredeom@mail.ru>
Wed, 28 Aug 2024 14:51:21 +0000 (17:51 +0300)
erp24/services/MotivationService.php

index 6b9b446aae7cdc9195391013073a255c1453814c..d1c605708274f5bda30a0bb079444d5d73d7499a 100644 (file)
@@ -13,6 +13,7 @@ use yii_app\records\MotivationValue;
 use yii_app\records\MotivationValueGroup;
 use yii_app\records\CityStore;
 use yii_app\records\MotivationCostsItem;
+use yii_app\records\SelfCostProduct;
 use yii_app\records\WriteOffs;
 use yii_app\records\Products1c;
 use yii_app\records\ProductsClass;
@@ -386,36 +387,37 @@ class MotivationService
                 continue;
             }
 
-            $motivationValueGroup = MotivationValueGroup::find()->where(['alias' => 'week' . $ind])->one();
-
             if ($exportImportTable) {
-                $writeOffs = WriteOffs::find()->select(['sum(summ) as total', 'type'])
+                $writeOffs = WriteOffs::find()->select(['items', 'type'])
                     ->where(['between', 'date', $weekStart, $weekEnd])
                     ->andWhere(['store_id' => $exportImportTable->export_val])
-                    ->groupBy(['type'])
                     ->indexBy('type')
                     ->asArray()->all();
 
+                $selfCostProduct = SelfCostProduct::find()->select(['price', 'product_guid'])
+                    ->where(['between', 'date', $weekStart, $weekEnd])
+                    ->andWhere(['store_id' => $store_id])
+                    ->indexBy('product_guid')
+                    ->asArray()->all();
+
                 foreach (MotivationCostsItem::getWriteOffsItems() as $key) {
-                    $data = $writeOffs[$key] ?? [];
+                    $data = $writeOffs[$key] ?? null;
+                    $sum = 0;
+                    if (!empty($data)) {
+                        try {
+                            $json = Json::decode($data['items'] ?? '[]');
+
+                            foreach ($json as $itemArr) {
+                                $sum += ($selfCostProduct[$itemArr['product_id']]["price"] ?? 0) * ($itemArr['quantity'] ?? 0);
+                            }
+                        } catch (\Exception $ex) {}
+                    }
                     $motivationItemType = MotivationCostsItem::writeOffsToMotivationItemMap($key);
                     $motivationCostsItem = MotivationCostsItem::find()->where(['name' => $motivationItemType])->one();
                     /** @var $motivationCostsItem MotivationCostsItem */
-                    if ($motivation) {
-                        $motivationValue = MotivationValue::find()->where(['motivation_id' => $motivation->id,
-                            'motivation_group_id' => $motivationValueGroup->id, 'value_id' => $motivationCostsItem->code])->one();
-                        if (!$motivationValue) {
-                            $motivationValue = new MotivationValue;
-                            $motivationValue->motivation_id = $motivation->id;
-                            $motivationValue->motivation_group_id = $motivationValueGroup->id;
-                            $motivationValue->value_id = $motivationCostsItem->code;
-                            $motivationValue->value_type = $motivationCostsItem->data_type;
-                        }
-                        $motivationValue->value_float = $data['total'] ?? 0;
-                        $motivationValue->save();
-                        if ($motivationValue->getErrors()) {
-                            throw new \Exception(Json::encode($motivationValue->getErrors()));
-                        }
+                    if ($motivation && $motivationCostsItem) {
+                        self::saveOrUpdateMotivationValue($motivation->id, 'week' . $ind, $motivationCostsItem->code,
+                            MotivationCostsItem::DATA_TYPE_FLOAT, $sum);
                     }
                 }
             }