From 3295285f8b67633d3caa53d878f382a9def2784e Mon Sep 17 00:00:00 2001 From: Vladimir Fomichev Date: Wed, 4 Sep 2024 09:10:39 +0300 Subject: [PATCH] =?utf8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D0=BB=20?= =?utf8?q?=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20=D0=BF=D0=BE=D0=B4=D1=81=D1=87?= =?utf8?q?=D0=B5=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/services/MotivationService.php | 61 ++++++++++++++-------------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/erp24/services/MotivationService.php b/erp24/services/MotivationService.php index b67217a1..43a9d6ca 100644 --- a/erp24/services/MotivationService.php +++ b/erp24/services/MotivationService.php @@ -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; } -- 2.39.5