На дашборде /dashboard/sales для магазинов с большой долей доставки
(например, 07 Аэродромная 28) средний чек расходился с суммой продаж:
avg = sum_count_query / cnt_count_query, при этом колонка «сумма продаж»
показывала результат другого запроса (getSalesSum) с более узким
фильтром.
Привожу getSalesCountSum к тем же условиям:
- LEFT JOIN sales sc ON sc.id = s.sales_check
- sc.order_id IS NULL OR IN ('','0') — отбрасываем строки, привязанные
через sales_check к доставочной продаже;
- s.marketplace_order_id IS NULL OR ='' — отбрасываем продажи маркетплейсов.
После фикса avg = sum / cnt совпадает с тем, что выводится в колонке
«сумма продаж».
Тесты (9/9 GREEN): unit на структуру SQL и биндинг параметров +
интеграционные на реальной БД (insert/rollback в транзакции),
проверяющие исключение маркетплейс- и доставочно-связанных продаж.
{
$connection = Yii::$app->getDb();
{
$connection = Yii::$app->getDb();
+ // ERP-372: фильтры синхронизированы с getSalesSum(), чтобы счётчик чеков
+ // и сумма совпадали со значениями в колонке «сумма продаж» на дашборде.
+ // Без JOIN sales sc и условия по marketplace_order_id средний чек
+ // расходился с суммой продаж для магазинов с большой долей доставки
+ // (например, 07 Аэродромная 28).
$orderCondition = "
AND
(
$orderCondition = "
AND
(
+ s.\"order_id\" = '0'
+ )
+ AND
+ (
+ sc.\"order_id\" IS NULL
+ OR
+ sc.\"order_id\" = ''
+ OR
+ sc.\"order_id\" = '0'
+ )
+ AND
+ (
+ s.\"marketplace_order_id\" IS NULL
+ OR
+ s.\"marketplace_order_id\" = ''
+ )
- sum(case when phone is distinct from NULL THEN 1 ELSE 0 END) as bonus_clients_cnt,
- sum(summ-skidka) as summ,
- store_id,
- to_char(date,'YYYY-MM-DD') as date_t
- FROM
- sales
+ sum(case when s.phone is distinct from NULL THEN 1 ELSE 0 END) as bonus_clients_cnt,
+ sum(s.summ - s.skidka) as summ,
+ s.store_id,
+ to_char(s.date,'YYYY-MM-DD') as date_t
+ FROM
+ sales s
+ LEFT JOIN
+ sales sc ON sc.id = s.sales_check
+ s.operation=:operation
+
}
$payArrCondition = "
AND
}
$payArrCondition = "
AND
-
- \"pay_arr\" IN (" . $payType . ")
+
+ s.\"pay_arr\" IN (" . $payType . ")
ORDER BY
date_t DESC,
cnt DESC
ORDER BY
date_t DESC,
cnt DESC