]);
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([
$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';
$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';