$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;
}
/**