From b0dcea06f89491237c080adb07320a79f53431d5 Mon Sep 17 00:00:00 2001 From: marina Date: Mon, 26 May 2025 13:02:05 +0300 Subject: [PATCH] =?utf8?q?=D1=81=D1=83=D0=BC=D0=BC=D0=B8=D1=80=D0=BE=D0=B2?= =?utf8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B2=D0=BE=D0=B7=D0=B2=D1=80=D0=B0?= =?utf8?q?=D1=82=D0=BE=D0=B2=20=D0=B8=20=D0=B2=D1=8B=D1=87=D0=B8=D1=82?= =?utf8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B4=D0=B0=D0=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/services/AutoPlannogrammaService.php | 38 +++++++++++++++------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/erp24/services/AutoPlannogrammaService.php b/erp24/services/AutoPlannogrammaService.php index 5bb2ddc1..3481cf59 100644 --- a/erp24/services/AutoPlannogrammaService.php +++ b/erp24/services/AutoPlannogrammaService.php @@ -83,21 +83,23 @@ class AutoPlannogrammaService ]); if ($type == self::TYPE_SALES) { - $weightedSumExpression = new Expression("SUM(CASE - WHEN TO_CHAR($alias.date, 'YYYY-MM') = :month3 THEN - CASE WHEN $alias.operation = 'Возврат' THEN -$productAlias.summ * 3 ELSE $productAlias.summ * 3 END - WHEN TO_CHAR($alias.date, 'YYYY-MM') = :month2 THEN - CASE WHEN $alias.operation = 'Возврат' THEN -$productAlias.summ * 2 ELSE $productAlias.summ * 2 END - WHEN TO_CHAR($alias.date, 'YYYY-MM') = :month1 THEN - CASE WHEN $alias.operation = 'Возврат' THEN -$productAlias.summ * 1 ELSE $productAlias.summ * 1 END - ELSE 0 END)", [ + $weightedSumExpression = new Expression("SUM( + CASE + WHEN TO_CHAR($alias.date, 'YYYY-MM') = :month3 AND $alias.operation = 'Продажа' THEN $productAlias.summ * 3 + WHEN TO_CHAR($alias.date, 'YYYY-MM') = :month3 AND $alias.operation = 'Возврат' THEN -$productAlias.summ * 3 + WHEN TO_CHAR($alias.date, 'YYYY-MM') = :month2 AND $alias.operation = 'Продажа' THEN $productAlias.summ * 2 + WHEN TO_CHAR($alias.date, 'YYYY-MM') = :month2 AND $alias.operation = 'Возврат' THEN -$productAlias.summ * 2 + WHEN TO_CHAR($alias.date, 'YYYY-MM') = :month1 AND $alias.operation = 'Продажа' THEN $productAlias.summ * 1 + WHEN TO_CHAR($alias.date, 'YYYY-MM') = :month1 AND $alias.operation = 'Возврат' THEN -$productAlias.summ * 1 + ELSE 0 + END + )", [ ':month1' => $month1, ':month2' => $month2, ':month3' => $month3, ]); - } - + // Основной запрос с CTE $query = (new Query()) ->select([ @@ -212,7 +214,13 @@ class AutoPlannogrammaService $storeIds = array_intersect($storeIds, [(int)$filters['store_id']]); } - $sumExpression = $type === self::TYPE_WRITE_OFFS ? 'SUM(wp.summ)' : "SUM(CASE WHEN s.operation = 'Возврат' THEN -sp.summ ELSE sp.summ END)"; + $sumExpression = $type === self::TYPE_WRITE_OFFS + ? 'SUM(wp.summ)' + : "SUM(CASE + WHEN s.operation = 'Продажа' THEN sp.summ + WHEN s.operation = 'Возврат' THEN -sp.summ + ELSE 0 + END)"; $fromTable = $type === self::TYPE_WRITE_OFFS ? ['w' => 'write_offs'] : ['s' => 'sales']; $productJoinCondition = $type === self::TYPE_WRITE_OFFS ? 'wp.product_id' : 'sp.product_id'; $storeJoinCondition = $type === self::TYPE_WRITE_OFFS ? 'ex.export_val = w.store_id' : 'ex.export_val = s.store_id_1c'; @@ -344,7 +352,13 @@ class AutoPlannogrammaService $storeIds = array_intersect($storeIds, [(int)$filters['store_id']]); } - $sumExpression = $type === self::TYPE_WRITE_OFFS ? 'SUM(wp.summ)' : "SUM(CASE WHEN s.operation = 'Возврат' THEN -sp.summ ELSE sp.summ END)"; + $sumExpression = $type === self::TYPE_WRITE_OFFS + ? 'SUM(wp.summ)' + : "SUM(CASE + WHEN s.operation = 'Продажа' THEN sp.summ + WHEN s.operation = 'Возврат' THEN -sp.summ + ELSE 0 + END)"; $fromTable = $type === self::TYPE_WRITE_OFFS ? ['w' => 'write_offs'] : ['s' => 'sales']; $productJoinCondition = $type === self::TYPE_WRITE_OFFS ? 'wp.product_id' : 'sp.product_id'; $storeJoinCondition = $type === self::TYPE_WRITE_OFFS ? 'ex.export_val = w.store_id' : 'ex.export_val = s.store_id_1c'; -- 2.39.5