From: marina Date: Thu, 17 Apr 2025 06:17:51 +0000 (+0300) Subject: ERP-359 Создать логику расчета на месяц - сумма продаж вида для автопм X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=ae5624a1564713f70c65d4e09cc2e3701b2d79bb;p=erp24_rep%2Fyii-erp24%2F.git ERP-359 Создать логику расчета на месяц - сумма продаж вида для автопм --- diff --git a/erp24/controllers/AutoPlanogrammaController.php b/erp24/controllers/AutoPlanogrammaController.php index 45687c16..4af47320 100644 --- a/erp24/controllers/AutoPlanogrammaController.php +++ b/erp24/controllers/AutoPlanogrammaController.php @@ -177,22 +177,30 @@ class AutoPlanogrammaController extends BaseController $where = implode(' AND ', $conditions); $query = Yii::$app->db->createCommand(" - SELECT - c.name AS city_name, - p1.name AS product_name, - p1.category, - p1.subcategory, - SUM(sp.quantity) AS count, - SUM(sp.summ) AS sum - FROM sales s - LEFT JOIN sales_products sp ON sp.check_id = s.id - LEFT JOIN products_1c_nomenclature p1 ON p1.id = sp.product_id - LEFT JOIN export_import_table ex ON ex.export_val = store_id_1c - LEFT JOIN city_store c ON c.id = entity_id - WHERE $where - GROUP BY p1.name, p1.category, p1.subcategory, c.name, c.id - ORDER BY c.id DESC, category, subcategory, p1.name - ")->bindValues($params)->queryAll(); + SELECT + c.name AS city_name, + p1.name AS product_name, + p1.category, + p1.subcategory, + SUM(CASE + WHEN s.operation = 'Продажа' THEN sp.quantity + WHEN s.operation = 'Возврат' THEN -sp.quantity + ELSE 0 + END) AS count, + SUM(CASE + WHEN s.operation = 'Продажа' THEN sp.summ + WHEN s.operation = 'Возврат' THEN -sp.summ + ELSE 0 + END) AS sum + FROM sales s + LEFT JOIN sales_products sp ON sp.check_id = s.id + LEFT JOIN products_1c_nomenclature p1 ON p1.id = sp.product_id + LEFT JOIN export_import_table ex ON ex.export_val = store_id_1c + LEFT JOIN city_store c ON c.id = entity_id + WHERE $where + GROUP BY p1.name, p1.category, p1.subcategory, c.name, c.id + ORDER BY c.id DESC, category, subcategory, p1.name +")->bindValues($params)->queryAll(); $dataProvider = new ArrayDataProvider([ 'allModels' => $query, diff --git a/erp24/services/AutoPlannogrammaService.php b/erp24/services/AutoPlannogrammaService.php index a57736f7..6fd32f13 100644 --- a/erp24/services/AutoPlannogrammaService.php +++ b/erp24/services/AutoPlannogrammaService.php @@ -14,17 +14,24 @@ class AutoPlannogrammaService return CityStore::findAll(['visible' => CityStore::IS_VISIBLE]); } - private function getStoreSalesTotals(array $storeIds, $dateFrom, $productFilter = null): array + private function getStoreSalesTotals(array $storeIds, string $dateFrom, $productFilter = null): array { $query = (new Query()) ->select([ 'store_id' => 'ex.entity_id', - 'total_sum' => new Expression('SUM(sp.summ)') + 'total_sum' => new Expression(" + SUM(CASE + WHEN s.operation = 'Продажа' THEN sp.summ + WHEN s.operation = 'Возврат' THEN -sp.summ + ELSE 0 + END) + ") ]) ->from(['s' => 'sales']) ->leftJoin('sales_products sp', 'sp.check_id = s.id') ->leftJoin('export_import_table ex', 'ex.export_val = s.store_id_1c') ->where(['>=', 's.date', $dateFrom]) + ->andWhere(['ex.entity_id' => $storeIds]) ->groupBy('ex.entity_id'); if ($productFilter !== null) { @@ -33,8 +40,9 @@ class AutoPlannogrammaService $rows = $query->all(); $totals = []; + foreach ($rows as $row) { - $totals[$row['store_id']] = $row['total_sum']; + $totals[(int)$row['store_id']] = (float)$row['total_sum']; } return $totals;