]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
обновил метод подсчета
authorVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 4 Sep 2024 06:10:39 +0000 (09:10 +0300)
committerVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Wed, 4 Sep 2024 06:10:39 +0000 (09:10 +0300)
erp24/services/MotivationService.php

index b67217a1887741c1d2d9522510b817ce2103f6f5..43a9d6cabf7dbf3ffc9fac64aaa53500887c4b1f 100644 (file)
@@ -1402,41 +1402,42 @@ class MotivationService
             return 0.0;
         }
 
+
+        $salesIds = array_column($salesRecords, 'id');
+        $saleDates = array_column($salesRecords, 'date', 'id');
+
+
+        $salesProducts = SalesProducts::find()
+            ->select(['check_id', 'product_id', 'quantity'])
+            ->where(['check_id' => $salesIds])
+            ->asArray()
+            ->all();
+
+        $productIds = array_unique(array_column($salesProducts, 'product_id'));
+        $selfCosts = SelfCostProduct::find()
+            ->select(['product_guid', 'price', 'date'])
+            ->where(['store_id' => $storeId, 'product_guid' => $productIds])
+            ->andWhere(['date' => array_map(fn($date) => date('Y-m-d', strtotime($date)), $saleDates)])
+            ->asArray()
+            ->all();
+
+        $selfCostsMap = [];
+        foreach ($selfCosts as $cost) {
+            $selfCostsMap[$cost['product_guid']][$cost['date']] = $cost['price'];
+        }
+
         $totalSum = 0.0;
 
-        foreach ($salesRecords as $salesRecord) {
-            $salesId = $salesRecord['id'];
-            $saleDate = date('Y-m-d', strtotime($salesRecord['date']));
-            Yii::info("Чек " . $salesRecord['id']);
-            // Получить список продуктов и их количество для текущего чека
-            $salesProducts = SalesProducts::find()
-                ->select(['product_id', 'quantity'])
-                ->where(['check_id' => $salesId])
-                ->asArray()
-                ->all();
-
-            // Для каждого продукта рассчитать себестоимость и суммировать
-            foreach ($salesProducts as $salesProduct) {
-                $productId = $salesProduct['product_id'];
-                $quantity = (float)$salesProduct['quantity'];
-
-                // Найти себестоимость продукта в таблице SelfCostProduct
-                $selfCost = SelfCostProduct::find()
-                    ->select('price')
-                    ->where(['store_id' => $storeId, 'product_guid' => $productId])
-                    ->andWhere(['date' => $saleDate]) // Проверяем себестоимость на дату продажи
-                    ->scalar(); // Получаем цену
-
-                // Если себестоимость не найдена, пропускаем этот продукт
-                if ($selfCost === null) {
-                    continue;
-                }
+        foreach ($salesProducts as $product) {
+            $productId = $product['product_id'];
+            $quantity = (float)$product['quantity'];
+            $checkDate = date('Y-m-d', strtotime($saleDates[$product['check_id']]));
 
-                // Умножаем себестоимость на количество и добавляем к общей сумме
-                $totalSum += $selfCost * $quantity;
+            if (isset($selfCostsMap[$productId][$checkDate])) {
+                $totalSum += $selfCostsMap[$productId][$checkDate] * $quantity;
             }
         }
-        Yii::info("Стоимость товара " . $totalSum);
+
         return $totalSum;
     }