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;
}