$plan_query = PlanStore::find()
->andWhere([
'BETWEEN',
- 'DATE_FORMAT(CONCAT_WS(\'.\', plan_store.year, plan_store.month, plan_store.day), \'%Y-%m-%d\')',
+ 'TO_CHAR(CONCAT_WS(\'.\', plan_store.year, plan_store.month, plan_store.day), \'%Y-%m-%d\')',
date('Y-m-d', strtotime($this->date_start)),
date('Y-m-d', strtotime($this->date_end))
])
'store_dynamic.store_id = plan_store.store_id',
[
'<=',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(CONCAT_WS(\'.\', plan_store.year, plan_store.month, plan_store.day), \'%Y-%m-%d\')')
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(CONCAT_WS(\'.\', plan_store.year, plan_store.month, plan_store.day), \'%Y-%m-%d\')')
],
[
'>',
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(CONCAT_WS(\'.\', plan_store.year, plan_store.month, plan_store.day), \'%Y-%m-%d\')')
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(CONCAT_WS(\'.\', plan_store.year, plan_store.month, plan_store.day), \'%Y-%m-%d\')')
],
'store_dynamic.category = 1'
]
$plan_query->select([
'plan' => $this->attributes_array[$this->attribute_name]['plan_attribute'][0] ?? 1,
- 'date' => 'DATE_FORMAT(CONCAT_WS(\'.\', plan_store.year, plan_store.month, plan_store.day), \'%Y-%m-%d\')',
+ 'date' => 'TO_CHAR(CONCAT_WS(\'.\', plan_store.year, plan_store.month, plan_store.day), \'%Y-%m-%d\')',
'cluster_id' => 'store_dynamic.value_int',
'store_id' => 'store_dynamic.store_id'
]);
$plan_query->groupBy([
- 'DATE_FORMAT(CONCAT_WS(\'.\', plan_store.year, plan_store.month, plan_store.day), \'%Y-%m-%d\')',
+ 'TO_CHAR(CONCAT_WS(\'.\', plan_store.year, plan_store.month, plan_store.day), \'%Y-%m-%d\')',
'store_dynamic.value_int',
'store_dynamic.store_id'
]);
[
'BETWEEN',
'dates_column.date',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
]
);
'store_dynamic',
[
'OR',
- ['LIKE', 'admin.store_arr', new Expression('CONCAT("%," , store_dynamic.store_id, ",%")')],
- ['LIKE', 'admin.store_arr', new Expression('CONCAT("" , store_dynamic.store_id, ",%")')],
- ['LIKE', 'admin.store_arr', new Expression('CONCAT("%," , store_dynamic.store_id, "")')],
- ['LIKE', 'admin.store_arr', new Expression('CONCAT("" , store_dynamic.store_id, "")')],
+ ['LIKE', 'admin.store_arr', new Expression("CONCAT('%,' , store_dynamic.store_id, ',%')")],
+ ['LIKE', 'admin.store_arr', new Expression("CONCAT('' , store_dynamic.store_id, ',%')")],
+ ['LIKE', 'admin.store_arr', new Expression("CONCAT('%,' , store_dynamic.store_id, '')")],
+ ['LIKE', 'admin.store_arr', new Expression("CONCAT('' , store_dynamic.store_id, '')")],
]
);
//region Даты
// Нужно для соединения составляющих запроса (left join)
$dates_query = (new Query())->from('(
- SELECT :date_end - INTERVAL (units.mul + (10 * tens.mul) + (100 * hundreds.mul) + (1000 * thousands.mul)) DAY AS date
+ SELECT TO_CHAR(date (:date_end) - (units.mul + (10 * tens.mul) + (100 * hundreds.mul) + (1000 * thousands.mul)) * INTERVAL \'1 DAY\', \'%Y-%m-%d\') AS date
FROM (SELECT 0 AS mul UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS units
CROSS JOIN (SELECT 0 AS mul UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS tens
CROSS JOIN (SELECT 0 AS mul UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS hundreds
[
'BETWEEN',
'dates_column.date',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
]
);
//endregion
$sales_query = Sales::find();
$sales_query->addSelect([
- 'date' => 'if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))',
- 'shift_type' => 'if(HOUR(sales.date) >= 8 && HOUR(sales.date) < 20, 1, 2)',
+ 'date' => 'CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date, \'%Y-%m-%d\') END',
+ 'shift_type' => 'CASE WHEN extract(HOUR from sales.date) >= 8 AND extract(HOUR from sales.date) < 20 THEN 1 ELSE 2 END',
'cluster_id' => 'store_dynamic.value_int',
'store_dynamic_id' => 'store_dynamic.id',
'store_id' => 'city_store.id'
'store_dynamic.store_id = sales.store_id',
[
'<=',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))')
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date, \'%Y-%m-%d\') END')
],
[
'>',
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
- new Expression('if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))')
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
+ new Expression('CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date, \'%Y-%m-%d\') END')
],
'store_dynamic.category = 1'
]
$invalid_sales = Sales::find()->alias('invalid_sales')->andWhere(['invalid_sales.operation' => Sales::OPERATION_RETURN])->select(['check_id' => 'invalid_sales.sales_check']);
$invalid_sales->andWhere([
'>=',
- 'if (HOUR(invalid_sales.date) < 8, DATE_FORMAT(DATE_SUB(invalid_sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\'))',
+ 'CASE WHEN extract(HOUR from invalid_sales.date) < 8 THEN TO_CHAR(invalid_sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(invalid_sales.date, \'%Y-%m-%d\') END',
date('Y-m-d', strtotime($this->date_start))
]);
$invalid_sales->andWhere([
'<=',
- 'if (HOUR(invalid_sales.date) < 8, DATE_FORMAT(DATE_SUB(invalid_sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\'))',
+ 'CASE WHEN extract(HOUR from invalid_sales.date) < 8 THEN TO_CHAR(invalid_sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(invalid_sales.date, \'%Y-%m-%d\') END',
date('Y-m-d', strtotime('+1 week', strtotime($this->date_end)))
]);
//endregion
$sales_query->addGroupBy([
- 'if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))',
- 'if(HOUR(sales.date) >= 8 && HOUR(sales.date) < 20, 1, 2)',
+ 'CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date, \'%Y-%m-%d\') END',
+ 'CASE WHEN extract(HOUR from sales.date) >= 8 AND extract(HOUR from sales.date) < 20 THEN 1 ELSE 2 END',
'store_dynamic.value_int',
'store_dynamic.id',
'city_store.id'
$write_offs_query = WriteOffs::find();
$write_offs_query->addSelect([
- 'date' => 'DATE_FORMAT(write_offs.date, \'%Y-%m-%d\')',
- 'shift_type' => 'if(HOUR(write_offs.date) >= 8 && HOUR(write_offs.date) < 20, 1, 2)',
+ 'date' => 'TO_CHAR(write_offs.date::timestamp, \'%Y-%m-%d\')',
+ 'shift_type' => 'CASE WHEN extract(HOUR from write_offs.date) >= 8 AND extract(HOUR from write_offs.date) < 20 THEN 1 ELSE 2 END',
'cluster_id' => 'store_dynamic.value_int',
'store_dynamic_id' => 'store_dynamic.id',
'store_id' => 'city_store.id'
'store_dynamic.store_id = export_import_table.entity_id',
[
'<=',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(write_offs.date, \'%Y-%m-%d\')')
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(write_offs.date::timestamp, \'%Y-%m-%d\')')
],
[
'>',
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(write_offs.date, \'%Y-%m-%d\')')
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(write_offs.date::timestamp, \'%Y-%m-%d\')')
],
'store_dynamic.category = 1',
]
]);
$write_offs_query->addGroupBy([
- 'DATE_FORMAT(write_offs.date, \'%Y-%m-%d\')',
- 'if(HOUR(write_offs.date) >= 8 && HOUR(write_offs.date) < 20, 1, 2)',
+ 'TO_CHAR(write_offs.date::timestamp, \'%Y-%m-%d\')',
+ 'CASE WHEN extract(HOUR from write_offs.date) >= 8 AND extract(HOUR from write_offs.date) < 20 THEN 1 ELSE 2 END',
'store_dynamic.value_int',
'store_dynamic.id',
'city_store.id'
'store_dynamic.store_id = sales.store_id',
[
'<=',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))')
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('CASE WHEN extract (HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END')
],
[
'>',
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
- new Expression('if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))')
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
+ new Expression('CASE WHEN extract (HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END')
],
'store_dynamic.category = 1'
]
'store_dynamic.store_id = export_import_table.entity_id',
[
'<=',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(write_offs.date, \'%Y-%m-%d\')')
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(write_offs.date::timestamp, \'%Y-%m-%d\')')
],
[
'>',
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(write_offs.date, \'%Y-%m-%d\')')
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(write_offs.date::timestamp, \'%Y-%m-%d\')')
],
'store_dynamic.category = 1'
]
//Продажи
$sales_query->andWhere([
'BETWEEN',
- 'if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))',
+ 'CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END',
date('Y-m-d', strtotime($this->date_start)),
date('Y-m-d', strtotime($this->date_end))
]);
$sales_products->andWhere([
'BETWEEN',
- 'if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))',
+ 'CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END',
date('Y-m-d', strtotime($this->date_start)),
date('Y-m-d', strtotime($this->date_end))
]);
//Списания
$write_offs_query->andWhere([
'BETWEEN',
- 'DATE_FORMAT(write_offs.date, \'%Y-%m-%d\')',
+ 'TO_CHAR(write_offs.date::timestamp, \'%Y-%m-%d\')',
date('Y-m-d', strtotime($this->date_start)),
date('Y-m-d', strtotime($this->date_end))
]);
//По продуктам
$write_offs_product_query->andWhere([
'BETWEEN',
- 'DATE_FORMAT(write_offs.date, \'%Y-%m-%d\')',
+ 'TO_CHAR(write_offs.date::timestamp, \'%Y-%m-%d\')',
date('Y-m-d', strtotime($this->date_start)),
date('Y-m-d', strtotime($this->date_end))
]);
//Продажи
$sales_query->andWhere([
- 'if(HOUR(sales.date) >= 8 && HOUR(sales.date) < 20, 1, 2)' => $this->mode_shift
+ 'CASE WHEN extract(HOUR from sales.date) >= 8 AND extract(HOUR from sales.date) < 20 THEN 1 ELSE 2 END' => $this->mode_shift
]);
$sales_products->andWhere([
- 'if(HOUR(sales.date) >= 8 && HOUR(sales.date) < 20, 1, 2)' => $this->mode_shift
+ 'CASE WHEN extract(HOUR from sales.date) >= 8 AND extract(HOUR from sales.date) < 20 THEN 1 ELSE 2 END' => $this->mode_shift
]);
//Списания
$write_offs_query->andWhere([
- 'if(HOUR(write_offs.date) >= 8 && HOUR(write_offs.date) < 20, 1, 2)' => $this->mode_shift
+ 'CASE WHEN extract(HOUR from write_offs.date) >= 8 AND extract(HOUR from write_offs.date) < 20 THEN 1 ELSE 2 END' => $this->mode_shift
]);
//По продуктам
$write_offs_product_query->andWhere([
- 'if(HOUR(write_offs.date) >= 8 && HOUR(write_offs.date) < 20, 1, 2)' => $this->mode_shift
+ 'CASE WHEN extract(HOUR from write_offs.date) >= 8 AND extract(HOUR from write_offs.date) < 20 THEN 1 ELSE 2 END' => $this->mode_shift
]);
//Основной запрос
} else if ($this->mode_shift === 3) {
//Продажи
$sales_query->andWhere([
- 'if(HOUR(sales.date) >= 8 && HOUR(sales.date) < 20, 1, 2)' => [1, 2]
+ 'CASE WHEN extract(HOUR from sales.date) >= 8 AND extract(HOUR from sales.date) < 20 THEN 1 ELSE 2 END' => [1, 2]
]);
$sales_products->andWhere([
- 'if(HOUR(sales.date) >= 8 && HOUR(sales.date) < 20, 1, 2)' => [1, 2]
+ 'CASE WHEN extract(HOUR from sales.date) >= 8 AND extract(HOUR from sales.date) < 20 THEN 1 ELSE 2 END' => [1, 2]
]);
//Списания
$write_offs_query->andWhere([
- 'if(HOUR(write_offs.date) >= 8 && HOUR(write_offs.date) < 20, 1, 2)' => [1, 2]
+ 'CASE WHEN extract(HOUR from write_offs.date) >= 8 AND extract(HOUR from write_offs.date) < 20 THEN 1 ELSE 2 END' => [1, 2]
]);
//По продуктам
$write_offs_product_query->andWhere([
- 'if(HOUR(write_offs.date) >= 8 && HOUR(write_offs.date) < 20, 1, 2)' => [1, 2]
+ 'CASE WHEN extract(HOUR from write_offs.date) >= 8 AND extract(HOUR from write_offs.date) < 20 THEN 1 ELSE 2 END' => [1, 2]
]);
//Основной запрос
[
'BETWEEN',
'dates_column.date',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
]
);
//endregion
$sales_query = Sales::find();
$sales_query->addSelect([
- 'date' => 'if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))',
- 'shift_type' => 'if(HOUR(sales.date) >= 8 && HOUR(sales.date) < 20, 1, 2)',
+ 'date' => 'CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END',
+ 'shift_type' => 'CASE WHEN extract(HOUR from sales.date) >= 8 AND extract(HOUR from sales.date) < 20 THEN 1 ELSE 2 END',
'cluster_id' => 'store_dynamic.value_int',
'store_dynamic_id' => 'store_dynamic.id',
'store_id' => 'city_store.id'
'store_dynamic.store_id = sales.store_id',
[
'<=',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))')
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END')
],
[
'>',
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
- new Expression('if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))')
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
+ new Expression('CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END')
],
]
);
'store_dynamic.store_id = invalid_sales.store_id',
[
'<=',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('if (HOUR(invalid_sales.date) < 8, DATE_FORMAT(DATE_SUB(invalid_sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\'))')
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('CASE WHEN extract(HOUR from invalid_sales.date) < 8 THEN TO_CHAR(invalid_sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\') END')
],
[
'>',
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
- new Expression('if (HOUR(invalid_sales.date) < 8, DATE_FORMAT(DATE_SUB(invalid_sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\'))')
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
+ new Expression('CASE WHEN extract(HOUR from invalid_sales.date) < 8 THEN TO_CHAR(invalid_sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\') END')
],
]
);
$invalid_sales->andWhere(['invalid_sales.operation' => Sales::OPERATION_RETURN])
->select([
- 'date' => 'if (HOUR(invalid_sales.date) < 8, DATE_FORMAT(DATE_SUB(invalid_sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\'))',
- 'shift_type' => 'if(HOUR(invalid_sales.date) >= 8 && HOUR(invalid_sales.date) < 20, 1, 2)',
+ 'date' => 'CASE WHEN extract(HOUR from invalid_sales.date) < 8 THEN TO_CHAR(invalid_sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\') END',
+ 'shift_type' => 'case WHEN exctract(HOUR from invalid_sales.date) >= 8 AND extract(HOUR from invalid_sales.date) < 20 THEN 1 ELSE 2 END',
'cluster_id' => 'store_dynamic.value_int',
'store_dynamic_id' => 'store_dynamic.id',
'store_id' => 'city_store.id'
$invalid_sales->andWhere([
'>=',
- 'if (HOUR(invalid_sales.date) < 8, DATE_FORMAT(DATE_SUB(invalid_sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\'))',
+ 'CASE WHEN extract(HOUR from invalid_sales.date) < 8 THEN TO_CHAR(invalid_sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\') END',
date('Y-m-d', strtotime($date_start))
]);
$invalid_sales->andWhere([
'<',
- 'if (HOUR(invalid_sales.date) < 8, DATE_FORMAT(DATE_SUB(invalid_sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\'))',
+ 'CASE WHEN extract(HOUR from invalid_sales.date) < 8 THEN TO_CHAR(invalid_sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\') END',
date('Y-m-d', strtotime($date_end))
]);
$invalid_sales->groupBy([
- 'if (HOUR(invalid_sales.date) < 8, DATE_FORMAT(DATE_SUB(invalid_sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\'))',
- 'if(HOUR(invalid_sales.date) >= 8 && HOUR(invalid_sales.date) < 20, 1, 2)',
+ 'CASE WHEN extract(HOUR from invalid_sales.date) < 8 THEN TO_CHAR(invalid_sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\') END',
+ 'CASE WHEN extract(HOUR from invalid_sales.date) >= 8 AND extract(HOUR from invalid_sales.date) < 20 THEN 1 ELSE 2 END',
'store_dynamic.value_int',
'store_dynamic.id',
'city_store.id'
$sales_query->andWhere('sales.order_id = \'\'');
$sales_query->addGroupBy([
- 'if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))',
- 'if(HOUR(sales.date) >= 8 && HOUR(sales.date) < 20, 1, 2)',
+ 'CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END',
+ 'CASE WHEN extract(HOUR from sales.date) >= 8 AND extract(HOUR from sales.date) < 20 THEN 1 ELSE 2 END',
'store_dynamic.value_int',
'store_dynamic.id',
'city_store.id'
'store_dynamic.store_id = admin_payroll_days.store_id',
[
'<=',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(admin_payroll_days.date, \'%Y-%m-%d\')')
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(admin_payroll_days.date::timestamp, \'%Y-%m-%d\')')
],
[
'>',
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(admin_payroll_days.date, \'%Y-%m-%d\')')
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(admin_payroll_days.date::timestamp, \'%Y-%m-%d\')')
],
]
);
//Продажи
$sales_query->andWhere([
'BETWEEN',
- 'if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))',
+ 'CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END',
date('Y-m-d', strtotime($date_start)),
date('Y-m-d', strtotime($date_end))
]);
//Продажи
$sales_query->andWhere([
- 'if(HOUR(sales.date) >= 8 && HOUR(sales.date) < 20, 1, 2)' => [1, 2]
+ 'CASE WHEN extract(HOUR from sales.date) >= 8 AND extract(HOUR from sales.date) < 20 THEN 1 ELSE 2 END' => [1, 2]
]);
//AdminPayrollDays
]);
$query->addSelect([
- 'sales_sum' => 'SUM(sub_sales.sales_sum) - SUM(if (invalid_sub_sales.invalid_sales IS NOT NULL, invalid_sub_sales.invalid_sales, 0))',
- 'count_sales' => 'SUM(sub_sales.count) - SUM(if (invalid_sub_sales.invalid_count IS NOT NULL, invalid_sub_sales.invalid_count, 0))',
+ 'sales_sum' => 'SUM(sub_sales.sales_sum) - SUM(CASE WHEN invalid_sub_sales.invalid_sales IS NOT NULL THEN invalid_sub_sales.invalid_sales ELSE 0 END)',
+ 'count_sales' => 'SUM(sub_sales.count) - SUM(CASE WHEN invalid_sub_sales.invalid_count IS NOT NULL THEN invalid_sub_sales.invalid_count ELSE 0 END)',
]);
$select_array_sales_query = [];
$range = array_merge(range(8, 23), range(0, 7));
foreach ($range as $item) {
- $select_array_sales_query['count_sales_in_' . $item . '_hour'] = 'SUM(if (TIME_FORMAT(sales.date, \'%H:%i:%s\') >= TIME_FORMAT(CONCAT_WS(\':\', ' . $item . ', 0, 0), \'%H:%i:%s\') AND TIME_FORMAT(sales.date, \'%H:%i:%s\') <= TIME_FORMAT(CONCAT_WS(\':\', ' . $item . ', 59, 59), \'%H:%i:%s\'), 1, 0))';
+ $select_array_sales_query['count_sales_in_' . $item . '_hour'] = 'SUM(CASE WHEN TO_CHAR(sales.date::timestamp, \'%H:%i:%s\') >= TO_CHAR(CONCAT_WS(\':\', ' . $item . ', 0, 0), \'%H:%i:%s\') AND TO_CHAR(sales.date::timestamp, \'%H:%i:%s\') <= TO_CHAR(CONCAT_WS(\':\', ' . $item . ', 59, 59), \'%H:%i:%s\') THEN 1 ELSE 0 END)';
$select_array_query['count_sales_in_' . $item . '_hour'] = 'SUM(sub_sales.count_sales_in_' . $item . '_hour)';
}
//region Даты
// Нужно для соединения составляющих запроса (left join)
$dates_query = (new Query())->from('(
- SELECT :date_end - INTERVAL (units.mul + (10 * tens.mul) + (100 * hundreds.mul) + (1000 * thousands.mul)) DAY AS date
+ SELECT :date_end - (units.mul + (10 * tens.mul) + (100 * hundreds.mul) + (1000 * thousands.mul)) * INTERVAL \'1 DAY\' AS date
FROM (SELECT 0 AS mul UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS units
CROSS JOIN (SELECT 0 AS mul UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS tens
CROSS JOIN (SELECT 0 AS mul UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS hundreds
[
'BETWEEN',
'dates_column.date',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
]
);
//endregion
$sales_query = Sales::find();
$sales_query->addSelect([
- 'date' => 'DATE_FORMAT(sales.date, \'%Y-%m-%d\')',
+ 'date' => 'TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\')',
'cluster_id' => 'store_dynamic.value_int',
'store_dynamic_id' => 'store_dynamic.id',
'store_id' => 'city_store.id'
'store_dynamic.store_id = sales.store_id',
[
'<=',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(sales.date, \'%Y-%m-%d\')')
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\')')
],
[
'>',
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(sales.date, \'%Y-%m-%d\')')
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\')')
],
]
);
'store_dynamic.store_id = invalid_sales.store_id',
[
'<=',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\')')
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\')')
],
[
'>',
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\')')
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\')')
],
]
);
$invalid_sales->andWhere(['invalid_sales.operation' => Sales::OPERATION_RETURN])
->select([
- 'date' => 'DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\')',
+ 'date' => 'TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\')',
'cluster_id' => 'store_dynamic.value_int',
'store_dynamic_id' => 'store_dynamic.id',
'store_id' => 'city_store.id'
$invalid_sales->andWhere([
'>=',
- 'DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\')',
+ 'TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\')',
date('Y-m-d', strtotime($date_start))
]);
$invalid_sales->andWhere([
'<',
- 'DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\')',
+ 'TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\')',
date('Y-m-d', strtotime($date_end))
]);
$invalid_sales->groupBy([
- 'DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\')',
+ 'TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\')',
'store_dynamic.value_int',
'store_dynamic.id',
'city_store.id'
$sales_query->andWhere('sales.order_id = \'\'');
$sales_query->addGroupBy([
- 'DATE_FORMAT(sales.date, \'%Y-%m-%d\')',
+ 'TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\')',
'store_dynamic.value_int',
'store_dynamic.id',
'city_store.id'
$write_offs_query = WriteOffs::find();
$write_offs_query->addSelect([
- 'date' => 'DATE_FORMAT(write_offs.date, \'%Y-%m-%d\')',
+ 'date' => 'TO_CHAR(write_offs.date::timestamp, \'%Y-%m-%d\')',
'cluster_id' => 'store_dynamic.value_int',
'store_dynamic_id' => 'store_dynamic.id',
'store_id' => 'city_store.id'
'store_dynamic.store_id = export_import_table.entity_id',
[
'<=',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(write_offs.date, \'%Y-%m-%d\')')
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(write_offs.date::timestamp, \'%Y-%m-%d\')')
],
[
'>',
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(write_offs.date, \'%Y-%m-%d\')')
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(write_offs.date::timestamp, \'%Y-%m-%d\')')
],
]
);
]);
$write_offs_query->addGroupBy([
- 'DATE_FORMAT(write_offs.date, \'%Y-%m-%d\')',
+ 'TO_CHAR(write_offs.date::timestamp, \'%Y-%m-%d\')',
'store_dynamic.value_int',
'store_dynamic.id',
'city_store.id'
//Продажи
$sales_query->andWhere([
'BETWEEN',
- 'DATE_FORMAT(sales.date, \'%Y-%m-%d\')',
+ 'TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\')',
date('Y-m-d', strtotime($date_start)),
date('Y-m-d', strtotime($date_end))
]);
//Списания
$write_offs_query->andWhere([
'BETWEEN',
- 'DATE_FORMAT(write_offs.date, \'%Y-%m-%d\')',
+ 'TO_CHAR(write_offs.date::timestamp, \'%Y-%m-%d\')',
date('Y-m-d', strtotime($date_start)),
date('Y-m-d', strtotime($date_end))
]);
]);
$query->addSelect([
- 'sales_sum' => 'SUM(sub_sales.sales_sum) - SUM(if (invalid_sub_sales.invalid_sales IS NOT NULL, invalid_sub_sales.invalid_sales, 0))',
- 'count_sales' => 'SUM(sub_sales.count) - SUM(if (invalid_sub_sales.invalid_count IS NOT NULL, invalid_sub_sales.invalid_count, 0))',
+ 'sales_sum' => 'SUM(sub_sales.sales_sum) - SUM(CASE WHEN invalid_sub_sales.invalid_sales IS NOT NULL THEN invalid_sub_sales.invalid_sales ELSE 0 END)',
+ 'count_sales' => 'SUM(sub_sales.count) - SUM(CASE WHEN invalid_sub_sales.invalid_count IS NOT NULL THEN invalid_sub_sales.invalid_count ELSE 0 END)',
]);
$select_array_sales_query = [];
$range = array_merge(range(8, 23), range(0, 7));
foreach ($range as $item) {
- $select_array_sales_query['count_sales_in_' . $item . '_hour'] = 'SUM(if (TIME_FORMAT(sales.date, \'%H:%i:%s\') >= TIME_FORMAT(CONCAT_WS(\':\', ' . $item . ', 0, 0), \'%H:%i:%s\') AND TIME_FORMAT(sales.date, \'%H:%i:%s\') <= TIME_FORMAT(CONCAT_WS(\':\', ' . $item . ', 59, 59), \'%H:%i:%s\'), 1, 0))';
+ $select_array_sales_query['count_sales_in_' . $item . '_hour'] = 'SUM(CASE WHEN TO_CHAR(sales.date::timestamp, \'%H:%i:%s\') >= TO_CHAR(CONCAT_WS(\':\', ' . $item . ', 0, 0), \'%H:%i:%s\') AND TO_CHAR(sales.date::timestamp, \'%H:%i:%s\') <= TO_CHAR(CONCAT_WS(\':\', ' . $item . ', 59, 59), \'%H:%i:%s\') THEN 1 ELSE 0 END)';
$select_array_query['count_sales_in_' . $item . '_hour'] = 'SUM(sub_sales.count_sales_in_' . $item . '_hour)';
}
//region Даты
// Нужно для соединения составляющих запроса (left join)
$dates_query = (new Query())->from('(
- SELECT :date_end - INTERVAL (units.mul + (10 * tens.mul) + (100 * hundreds.mul) + (1000 * thousands.mul)) DAY AS date
+ SELECT :date_end - (units.mul + (10 * tens.mul) + (100 * hundreds.mul) + (1000 * thousands.mul)) * INTERVAL \'1 DAY\' AS date
FROM (SELECT 0 AS mul UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS units
CROSS JOIN (SELECT 0 AS mul UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS tens
CROSS JOIN (SELECT 0 AS mul UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS hundreds
[
'BETWEEN',
'dates_column.date',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
]
);
//endregion
$sales_query = Sales::find();
$sales_query->addSelect([
- 'date' => 'if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))',
- 'shift_type' => 'if(HOUR(sales.date) >= 8 && HOUR(sales.date) < 20, 1, 2)',
+ 'date' => 'CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END',
+ 'shift_type' => 'CASE WHEN extract(HOUR from sales.date) >= 8 AND extract(HOUR from sales.date) < 20 THEN 1 ELSE 2 END',
'cluster_id' => 'store_dynamic.value_int',
'store_dynamic_id' => 'store_dynamic.id',
'store_id' => 'city_store.id'
'store_dynamic.store_id = sales.store_id',
[
'<=',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))')
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END')
],
[
'>',
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
- new Expression('if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))')
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
+ new Expression('CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END')
],
]
);
$invalid_sales = Sales::find()->alias('invalid_sales')->andWhere(['invalid_sales.operation' => Sales::OPERATION_RETURN])->select(['check_id' => 'invalid_sales.sales_check']);
$invalid_sales->andWhere([
'>=',
- 'if (HOUR(invalid_sales.date) < 8, DATE_FORMAT(DATE_SUB(invalid_sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\'))',
+ 'CASE WHEN extract(HOUR from invalid_sales.date) < 8 THEN TO_CHAR(invalid_sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\') END',
date('Y-m-d', strtotime($date_start))
]);
$invalid_sales->andWhere([
'<=',
- 'if (HOUR(invalid_sales.date) < 8, DATE_FORMAT(DATE_SUB(invalid_sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\'))',
+ 'CASE WHEN extract(HOUR from invalid_sales.date) < 8 THEN TO_CHAR(invalid_sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\') END',
date('Y-m-d', strtotime('+1 week', strtotime($date_start)))
]);
$sales_query->andWhere('sales.order_id = \'\'');
$sales_query->addGroupBy([
- 'if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))',
- 'if(HOUR(sales.date) >= 8 && HOUR(sales.date) < 20, 1, 2)',
+ 'CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END',
+ 'CASE WHEN extract(HOUR from sales.date) >= 8 AND extract(HOUR from sales.date) < 20 THEN 1 ELSE 2 END',
'store_dynamic.value_int',
'store_dynamic.id',
'city_store.id'
//Продажи
$sales_query->andWhere([
'BETWEEN',
- 'if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))',
+ 'CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END',
date('Y-m-d', strtotime($date_start)),
date('Y-m-d', strtotime($date_end))
]);
//Продажи
$sales_query->andWhere([
- 'if(HOUR(sales.date) >= 8 && HOUR(sales.date) < 20, 1, 2)' => [1, 2]
+ 'CASE WHEN extract(HOUR from sales.date) >= 8 AND extract(HOUR from sales.date) < 20 THEN 1 ELSE 2 END' => [1, 2]
]);
//Основной запрос
////endregion
$sales_query->addSelect([
- 'count_users' => 'SUM( IF (sales.phone IS NOT NULL AND sales.phone != \'\', 1, 0))',
- 'first_minus_user_bonus' => 'SUM( IF (users.first_minus_balance = users_bonus.date, 1, 0))',
- 'second_minus_user_bonus' => 'SUM( IF (users.first_minus_balance < users_bonus.date, 1, 0))'
+ 'count_users' => 'SUM( CASE WHEN sales.phone IS NOT NULL AND sales.phone != \'\' THEN 1 ELSE 0 END)',
+ 'first_minus_user_bonus' => 'SUM( CASE WHEN users.first_minus_balance = users_bonus.date THEN 1 ELSE 0 END)',
+ 'second_minus_user_bonus' => 'SUM( CASE WHEN users.first_minus_balance < users_bonus.date THEN 1 ELSE 0 END)'
]);
$query->addSelect([
//region Даты
// Нужно для соединения составляющих запроса (left join)
$dates_query = (new Query())->from('(
- SELECT :date_end - INTERVAL (units.mul + (10 * tens.mul) + (100 * hundreds.mul) + (1000 * thousands.mul)) DAY AS date
+ SELECT :date_end - (units.mul + (10 * tens.mul) + (100 * hundreds.mul) + (1000 * thousands.mul)) * INTERVAL \'1 DAY\' AS date
FROM (SELECT 0 AS mul UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS units
CROSS JOIN (SELECT 0 AS mul UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS tens
CROSS JOIN (SELECT 0 AS mul UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS hundreds
[
'BETWEEN',
'dates_column.date',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
]
);
//endregion
$sales_query = Sales::find();
$sales_query->addSelect([
- 'date' => 'DATE_FORMAT(sales.date, \'%Y-%m-%d\')',
+ 'date' => 'TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\')',
'cluster_id' => 'store_dynamic.value_int',
'store_dynamic_id' => 'store_dynamic.id',
'store_id' => 'city_store.id'
'store_dynamic.store_id = sales.store_id',
[
'<=',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(sales.date, \'%Y-%m-%d\')')
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\')')
],
[
'>',
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(sales.date, \'%Y-%m-%d\')')
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\')')
],
]
);
$invalid_sales = Sales::find()->alias('invalid_sales')->andWhere(['invalid_sales.operation' => Sales::OPERATION_RETURN])->select(['check_id' => 'invalid_sales.sales_check']);
$invalid_sales->andWhere([
'>=',
- 'DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\')',
+ 'TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\')',
date('Y-m-d', strtotime($date_start))
]);
$invalid_sales->andWhere([
'<=',
- 'DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\')',
+ 'TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\')',
date('Y-m-d', strtotime('+1 week', strtotime($date_start)))
]);
$sales_query->andWhere('sales.order_id = \'\'');
$sales_query->addGroupBy([
- 'DATE_FORMAT(sales.date, \'%Y-%m-%d\')',
+ 'TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\')',
'store_dynamic.value_int',
'store_dynamic.id',
'city_store.id'
//Продажи
$sales_query->andWhere([
'BETWEEN',
- 'DATE_FORMAT(sales.date, \'%Y-%m-%d\')',
+ 'TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\')',
date('Y-m-d', strtotime($date_start)),
date('Y-m-d', strtotime($date_end))
]);
////endregion
$sales_query->addSelect([
- 'count_users' => 'SUM( IF (sales.phone IS NOT NULL AND sales.phone != \'\', 1, 0))',
- 'first_minus_user_bonus' => 'SUM( IF (users.first_minus_balance = users_bonus.date, 1, 0))',
- 'second_minus_user_bonus' => 'SUM( IF (users.first_minus_balance < users_bonus.date, 1, 0))'
+ 'count_users' => 'SUM( CASE WHEN sales.phone IS NOT NULL AND sales.phone != \'\' THEN 1 ELSE 0 END)',
+ 'first_minus_user_bonus' => 'SUM( CASE WHEN users.first_minus_balance = users_bonus.date THEN 1 ELSE 0 END)',
+ 'second_minus_user_bonus' => 'SUM( CASE WHEN users.first_minus_balance < users_bonus.date THEN 1 ELSE 0 END)'
]);
$query->addSelect([
//region Даты
// Нужно для соединения составляющих запроса (left join)
$dates_query = (new Query())->from('(
- SELECT :date_end - INTERVAL (units.mul + (10 * tens.mul) + (100 * hundreds.mul) + (1000 * thousands.mul)) DAY AS date
+ SELECT :date_end - (units.mul + (10 * tens.mul) + (100 * hundreds.mul) + (1000 * thousands.mul)) * INTERVAL \'1 DAY\' AS date
FROM (SELECT 0 AS mul UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS units
CROSS JOIN (SELECT 0 AS mul UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS tens
CROSS JOIN (SELECT 0 AS mul UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS hundreds
[
'BETWEEN',
'dates_column.date',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
]
);
//endregion
$matrix_query = Sales::find();
$matrix_query->addSelect([
- 'date' => 'if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))',
- 'shift_type' => 'if(HOUR(sales.date) >= 8 && HOUR(sales.date) < 20, 1, 2)',
+ 'date' => 'CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END',
+ 'shift_type' => 'CASE WHEN extract(HOUR from sales.date) >= 8 AND extract(HOUR from sales.date) < 20 THEN 1 ELSE 2 END',
'cluster_id' => 'store_dynamic.value_int',
'store_dynamic_id' => 'store_dynamic.id',
'store_id' => 'city_store.id'
'store_dynamic.store_id = sales.store_id',
[
'<=',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))')
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END')
],
[
'>',
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
- new Expression('if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))')
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
+ new Expression('CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END')
],
]
);
$invalid_sales = Sales::find()->alias('invalid_sales')->andWhere(['invalid_sales.operation' => Sales::OPERATION_RETURN])->select(['check_id' => 'invalid_sales.sales_check']);
$invalid_sales->andWhere([
'>=',
- 'if (HOUR(invalid_sales.date) < 8, DATE_FORMAT(DATE_SUB(invalid_sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\'))',
+ 'CASE WHEN extract(HOUR from invalid_sales.date) < 8 THEN TO_CHAR(invalid_sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\') END',
date('Y-m-d', strtotime($date_start))
]);
$invalid_sales->andWhere([
'<=',
- 'if (HOUR(invalid_sales.date) < 8, DATE_FORMAT(DATE_SUB(invalid_sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\'))',
+ 'CASE WHEN extract(HOUR from invalid_sales.date) < 8 THEN TO_CHAR(invalid_sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\') END',
date('Y-m-d', strtotime('+1 week', strtotime($date_start)))
]);
/* Конец проверки продажи */
$matrix_query->andWhere(['NOT IN', 'sales.id', $invalid_sales]);
$matrix_query->addGroupBy([
- 'if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))',
- 'if(HOUR(sales.date) >= 8 && HOUR(sales.date) < 20, 1, 2)',
+ 'CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END',
+ 'CASE WHEN extract(HOUR from sales.date) >= 8 AND extract(HOUR from sales.date) < 20 THEN 1 ELSE 2 END',
'store_dynamic.value_int',
'store_dynamic.id',
'city_store.id'
'AND',
[
'>=',
- 'if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))',
+ 'CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END',
date('Y-m-d', strtotime($date_start))
],
[
'<=',
- 'if (HOUR(sales.date) < 8, DATE_FORMAT(DATE_SUB(sales.date, INTERVAL 1 DAY), \'%Y-%m-%d\'), DATE_FORMAT(sales.date, \'%Y-%m-%d\'))',
+ 'CASE WHEN extract(HOUR from sales.date) < 8 THEN TO_CHAR(sales.date - INTERVAL \'1 DAY\', \'%Y-%m-%d\') ELSE TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\') END',
date('Y-m-d', strtotime($date_end))
]
]);
$matrix_query->leftJoin(['matrix_group' => $matrix_group], '(products_1c.id = matrix_group.id OR products_1c.parent_id = matrix_group.id)')
->addSelect([
- 'matrix_base_summ' => 'SUM(if (matrix_group.parent_id = \'' . $matrix_base_guid . '\' OR matrix_group.id = \'' . $matrix_base_guid . '\', sales_products.summ, 0))', // Базовая
- 'matrix_season_summ' => 'SUM(if (matrix_group.parent_id = \'' . $matrix_season_guid . '\' OR matrix_group.id = \'' . $matrix_season_guid . '\', sales_products.summ, 0))', // Сезонная
- 'matrix_new_summ' => 'SUM(if (matrix_group.parent_id = \'' . $matrix_new_guid . '\' OR matrix_group.id = \'' . $matrix_new_guid . '\', sales_products.summ, 0))' // Новая
+ 'matrix_base_summ' => 'SUM(CASE WHEN matrix_group.parent_id = \'' . $matrix_base_guid . '\' OR matrix_group.id = \'' . $matrix_base_guid . '\' THEN sales_products.summ ELSE 0 EMD)', // Базовая
+ 'matrix_season_summ' => 'SUM(CASE WHEN matrix_group.parent_id = \'' . $matrix_season_guid . '\' OR matrix_group.id = \'' . $matrix_season_guid . '\' THEN sales_products.summ ELSE 0 END)', // Сезонная
+ 'matrix_new_summ' => 'SUM(CASE WHEN matrix_group.parent_id = \'' . $matrix_new_guid . '\' OR matrix_group.id = \'' . $matrix_new_guid . '\' THEN sales_products.summ ELSE 0 END)' // Новая
]);
$query->leftJoin(
//Продажи
$matrix_query->andWhere([
- 'if(HOUR(sales.date) >= 8 && HOUR(sales.date) < 20, 1, 2)' => [1, 2]
+ 'CASE WHEN extract(HOUR from sales.date) >= 8 AND extract(HOUR from sales.date) < 20 THEN 1 ELSE 2 END' => [1, 2]
]);
//Основной запрос
//region Даты
// Нужно для соединения составляющих запроса (left join)
$dates_query = (new Query())->from('(
- SELECT :date_end - INTERVAL (units.mul + (10 * tens.mul) + (100 * hundreds.mul) + (1000 * thousands.mul)) DAY AS date
+ SELECT :date_end - (units.mul + (10 * tens.mul) + (100 * hundreds.mul) + (1000 * thousands.mul)) * INTERVAL \'1 DAY\' AS date
FROM (SELECT 0 AS mul UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS units
CROSS JOIN (SELECT 0 AS mul UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS tens
CROSS JOIN (SELECT 0 AS mul UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS hundreds
[
'BETWEEN',
'dates_column.date',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
]
);
//endregion
$matrix_query = Sales::find();
$matrix_query->addSelect([
- 'date' => 'DATE_FORMAT(sales.date, \'%Y-%m-%d\')',
+ 'date' => 'TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\')',
'cluster_id' => 'store_dynamic.value_int',
'store_dynamic_id' => 'store_dynamic.id',
'store_id' => 'city_store.id'
'store_dynamic.store_id = sales.store_id',
[
'<=',
- new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(sales.date, \'%Y-%m-%d\')')
+ new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\')')
],
[
'>',
- new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'),
- new Expression('DATE_FORMAT(sales.date, \'%Y-%m-%d\')')
+ new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'),
+ new Expression('TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\')')
],
]
);
$invalid_sales = Sales::find()->alias('invalid_sales')->andWhere(['invalid_sales.operation' => Sales::OPERATION_RETURN])->select(['check_id' => 'invalid_sales.sales_check']);
$invalid_sales->andWhere([
'>=',
- 'DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\')',
+ 'TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\')',
date('Y-m-d', strtotime($date_start))
]);
$invalid_sales->andWhere([
'<=',
- 'DATE_FORMAT(invalid_sales.date, \'%Y-%m-%d\')',
+ 'TO_CHAR(invalid_sales.date::timestamp, \'%Y-%m-%d\')',
date('Y-m-d', strtotime('+1 week', strtotime($date_start)))
]);
/* Конец проверки продажи */
$matrix_query->andWhere(['NOT IN', 'sales.id', $invalid_sales]);
$matrix_query->addGroupBy([
- 'DATE_FORMAT(sales.date, \'%Y-%m-%d\')',
+ 'TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\')',
'store_dynamic.value_int',
'store_dynamic.id',
'city_store.id'
'AND',
[
'>=',
- 'DATE_FORMAT(sales.date, \'%Y-%m-%d\')',
+ 'TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\')',
date('Y-m-d', strtotime($date_start))
],
[
'<=',
- 'DATE_FORMAT(sales.date, \'%Y-%m-%d\')',
+ 'TO_CHAR(sales.date::timestamp, \'%Y-%m-%d\')',
date('Y-m-d', strtotime($date_end))
]
]);
$matrix_query->leftJoin(['matrix_group' => $matrix_group], '(products_1c.id = matrix_group.id OR products_1c.parent_id = matrix_group.id)')
->addSelect([
- 'matrix_base_summ' => 'SUM(if (matrix_group.parent_id = \'' . $matrix_base_guid . '\' OR matrix_group.id = \'' . $matrix_base_guid . '\', sales_products.summ, 0))', // Базовая
- 'matrix_season_summ' => 'SUM(if (matrix_group.parent_id = \'' . $matrix_season_guid . '\' OR matrix_group.id = \'' . $matrix_season_guid . '\', sales_products.summ, 0))', // Сезонная
- 'matrix_new_summ' => 'SUM(if (matrix_group.parent_id = \'' . $matrix_new_guid . '\' OR matrix_group.id = \'' . $matrix_new_guid . '\', sales_products.summ, 0))' // Новая
+ 'matrix_base_summ' => 'SUM(CASE WHEN matrix_group.parent_id = \'' . $matrix_base_guid . '\' OR matrix_group.id = \'' . $matrix_base_guid . '\' THEN sales_products.summ ELSE 0 END)', // Базовая
+ 'matrix_season_summ' => 'SUM(CASE WHEN matrix_group.parent_id = \'' . $matrix_season_guid . '\' OR matrix_group.id = \'' . $matrix_season_guid . '\' THEN sales_products.summ ELSE 0 END)', // Сезонная
+ 'matrix_new_summ' => 'SUM(CASE WHEN matrix_group.parent_id = \'' . $matrix_new_guid . '\' OR matrix_group.id = \'' . $matrix_new_guid . '\' THEN sales_products.summ ELSE 0 END)' // Новая
]);
$query->leftJoin(