From fc49ed73039dd260a82dc653a39b1cf38392d277 Mon Sep 17 00:00:00 2001 From: Vladimir Fomichev Date: Tue, 3 Sep 2024 18:06:32 +0300 Subject: [PATCH] =?utf8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?utf8?q?=D0=BC=D0=B5=D1=82=D0=BE=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/services/MotivationService.php | 50 +++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/erp24/services/MotivationService.php b/erp24/services/MotivationService.php index 5186306a..b67217a1 100644 --- a/erp24/services/MotivationService.php +++ b/erp24/services/MotivationService.php @@ -1389,13 +1389,55 @@ class MotivationService $endDate = date('Y-m-d', strtotime($endDate)); - $sum = (float)SelfCostProduct::find() - ->where(['store_id' => $storeId]) + $salesRecords = Sales::find() + ->select(['id', 'date']) // Выбираем id и дату чека + ->where(['store_id' => $storeId, 'operation' => 'Продажа']) ->andWhere(['>=', 'date', $startDate]) ->andWhere(['<=', 'date', $endDate]) - ->sum('price'); + ->asArray() + ->all(); + + // Если нет подходящих чеков, сразу возвращаем 0 + if (empty($salesRecords)) { + return 0.0; + } + + $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; + } - return $sum; + // Умножаем себестоимость на количество и добавляем к общей сумме + $totalSum += $selfCost * $quantity; + } + } + Yii::info("Стоимость товара " . $totalSum); + return $totalSum; } /** -- 2.39.5