From: Alexander Smirnov Date: Wed, 27 Mar 2024 08:23:33 +0000 (+0300) Subject: moving to pgsql charts-for-management X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=812b89b3289ce6721ba1645295668e945a5e24f7;p=yii-erp24%2F.git moving to pgsql charts-for-management --- diff --git a/erp24/actions/dashboardSales/indexAction.php b/erp24/actions/dashboardSales/indexAction.php index 821a7c0..5daebbd 100755 --- a/erp24/actions/dashboardSales/indexAction.php +++ b/erp24/actions/dashboardSales/indexAction.php @@ -79,7 +79,7 @@ class indexAction extends Action $allRanges = DashboardFieldsProperty::getAllRanges(); $totalRows = DashboardSales::find() - ->andWhere(['`store_id`'=> $allovedStoreArray]) + ->andWhere(['store_id'=> $allovedStoreArray]) ->joinWith('field') ->andWhere(['>=', 'date', $dateFrom]) ->andWhere(['<=', 'date', $dateTo]) @@ -87,7 +87,7 @@ class indexAction extends Action ->all(); $dashboardFieldsLinksPrepared = DashboardFieldsLinks::find() - ->andWhere(['`dashboard_id`'=> $dashboardId]) + ->andWhere(['dashboard_id'=> $dashboardId]) ->joinWith('field') ->asArray() ->all(); diff --git a/erp24/controllers/ChartsForManagementController.php b/erp24/controllers/ChartsForManagementController.php index fdbd43d..d8f1467 100644 --- a/erp24/controllers/ChartsForManagementController.php +++ b/erp24/controllers/ChartsForManagementController.php @@ -235,10 +235,10 @@ class ChartsForManagementController extends Controller '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, '')")], ] ) @@ -249,7 +249,7 @@ class ChartsForManagementController extends Controller 'cluster_id' => 'store_dynamic.value_int', 'store_id' => 'store_dynamic.store_id', 'store_name' => 'city_store.name', - 'date_from' => 'DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')', + 'date_from' => 'TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')', ] ) ->andWhere( @@ -257,23 +257,23 @@ class ChartsForManagementController extends Controller 'OR', [ 'AND', - ['BETWEEN', 'DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d %H:%i:%s\')', $date_start, $date_end], - ['BETWEEN', 'DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d %H:%i:%s\')', $date_start, $date_end], + ['BETWEEN', 'store_dynamic.date_from', $date_start, $date_end], + ['BETWEEN', 'store_dynamic.date_to', $date_start, $date_end], ], [ 'AND', - ['BETWEEN', 'DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d %H:%i:%s\')', $date_start, $date_end], - ['>=', 'DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d %H:%i:%s\')', $date_end], + ['BETWEEN', 'store_dynamic.date_from', $date_start, $date_end], + ['>=', 'store_dynamic.date_to', $date_end], ], [ 'AND', - ['<=', 'DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d %H:%i:%s\')', $date_start], - ['BETWEEN', 'DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d %H:%i:%s\')', $date_start, $date_end], + ['<=', 'store_dynamic.date_from', $date_start], + ['BETWEEN', 'store_dynamic.date_to', $date_start, $date_end], ], [ 'AND', - ['<=', 'DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d %H:%i:%s\')', $date_start], - ['>=', 'DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d %H:%i:%s\')', $date_start], + ['<=', 'store_dynamic.date_from', $date_start], + ['>=', 'store_dynamic.date_to', $date_start], ], ] ) @@ -567,13 +567,13 @@ class ChartsForManagementController extends Controller 'store_dynamic.store_id = city_store.id', [ '>=', - new Expression('DATE_FORMAT(write_offs.date, \'%Y-%m-%d\')'), - new Expression('DATE_FORMAT(store_dynamic.date_from, \'%Y-%m-%d\')'), + new Expression('TO_CHAR(write_offs.date::timestamp, \'%Y-%m-%d\')'), + new Expression('TO_CHAR(store_dynamic.date_from::timestamp, \'%Y-%m-%d\')'), ], [ '<', - new Expression('DATE_FORMAT(write_offs.date, \'%Y-%m-%d\')'), - new Expression('DATE_FORMAT(store_dynamic.date_to, \'%Y-%m-%d\')'), + new Expression('TO_CHAR(write_offs.date::timestamp, \'%Y-%m-%d\')'), + new Expression('TO_CHAR(store_dynamic.date_to::timestamp, \'%Y-%m-%d\')'), ] ] ) @@ -585,7 +585,7 @@ class ChartsForManagementController extends Controller 'city_store.id' => $store_id ]) ->andWhere([ - 'DATE_FORMAT(write_offs.date, \'%Y-%m-%d\')' => $date + 'TO_CHAR(write_offs.date::timestamp, \'%Y-%m-%d\')' => $date ]) ->andWhere([ 'write_offs.type' => 'Брак' diff --git a/erp24/records/ChartDataSearch.php b/erp24/records/ChartDataSearch.php index d633003..3f50609 100644 --- a/erp24/records/ChartDataSearch.php +++ b/erp24/records/ChartDataSearch.php @@ -374,7 +374,7 @@ class ChartDataSearch $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)) ]) @@ -385,13 +385,13 @@ class ChartDataSearch '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' ] @@ -399,13 +399,13 @@ class ChartDataSearch $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' ]); @@ -416,8 +416,8 @@ class ChartDataSearch [ '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\')'), ] ); @@ -540,10 +540,10 @@ class ChartDataSearch '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, '')")], ] ); @@ -554,7 +554,7 @@ class ChartDataSearch //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 @@ -572,8 +572,8 @@ class ChartDataSearch [ '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 @@ -599,8 +599,8 @@ class ChartDataSearch $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' @@ -618,13 +618,13 @@ class ChartDataSearch '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' ] @@ -635,13 +635,13 @@ class ChartDataSearch $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))) ]); @@ -651,8 +651,8 @@ class ChartDataSearch //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' @@ -664,8 +664,8 @@ class ChartDataSearch $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' @@ -688,13 +688,13 @@ class ChartDataSearch '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', ] @@ -705,8 +705,8 @@ class ChartDataSearch ]); $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' @@ -737,13 +737,13 @@ class ChartDataSearch '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' ] @@ -787,13 +787,13 @@ class ChartDataSearch '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' ] @@ -824,14 +824,14 @@ class ChartDataSearch //Продажи $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)) ]); @@ -839,7 +839,7 @@ class ChartDataSearch //Списания $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)) ]); @@ -847,7 +847,7 @@ class ChartDataSearch //По продуктам $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)) ]); @@ -866,21 +866,21 @@ class ChartDataSearch //Продажи $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 ]); //Основной запрос @@ -899,21 +899,21 @@ class ChartDataSearch } 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] ]); //Основной запрос @@ -1106,8 +1106,8 @@ class ChartDataSearch [ '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 @@ -1133,8 +1133,8 @@ class ChartDataSearch $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' @@ -1152,13 +1152,13 @@ class ChartDataSearch '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') ], ] ); @@ -1179,21 +1179,21 @@ class ChartDataSearch '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' @@ -1201,19 +1201,19 @@ class ChartDataSearch $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' @@ -1230,8 +1230,8 @@ class ChartDataSearch $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' @@ -1264,13 +1264,13 @@ class ChartDataSearch '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\')') ], ] ); @@ -1300,7 +1300,7 @@ class ChartDataSearch //Продажи $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)) ]); @@ -1328,7 +1328,7 @@ class ChartDataSearch //Продажи $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 @@ -1407,8 +1407,8 @@ class ChartDataSearch ]); $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 = []; @@ -1416,7 +1416,7 @@ class ChartDataSearch $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)'; } @@ -1551,7 +1551,7 @@ class ChartDataSearch //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 @@ -1569,8 +1569,8 @@ class ChartDataSearch [ '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 @@ -1596,7 +1596,7 @@ class ChartDataSearch $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' @@ -1614,13 +1614,13 @@ class ChartDataSearch '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\')') ], ] ); @@ -1641,20 +1641,20 @@ class ChartDataSearch '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' @@ -1662,18 +1662,18 @@ class ChartDataSearch $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' @@ -1690,7 +1690,7 @@ class ChartDataSearch $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' @@ -1703,7 +1703,7 @@ class ChartDataSearch $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' @@ -1726,13 +1726,13 @@ class ChartDataSearch '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\')') ], ] ); @@ -1742,7 +1742,7 @@ class ChartDataSearch ]); $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' @@ -1756,7 +1756,7 @@ class ChartDataSearch //Продажи $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)) ]); @@ -1764,7 +1764,7 @@ class ChartDataSearch //Списания $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)) ]); @@ -1844,8 +1844,8 @@ class ChartDataSearch ]); $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 = []; @@ -1853,7 +1853,7 @@ class ChartDataSearch $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)'; } @@ -1985,7 +1985,7 @@ class ChartDataSearch //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 @@ -2003,8 +2003,8 @@ class ChartDataSearch [ '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 @@ -2030,8 +2030,8 @@ class ChartDataSearch $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' @@ -2049,13 +2049,13 @@ class ChartDataSearch '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') ], ] ); @@ -2065,13 +2065,13 @@ class ChartDataSearch $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))) ]); @@ -2084,8 +2084,8 @@ class ChartDataSearch $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' @@ -2099,7 +2099,7 @@ class ChartDataSearch //Продажи $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)) ]); @@ -2119,7 +2119,7 @@ class ChartDataSearch //Продажи $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] ]); //Основной запрос @@ -2178,9 +2178,9 @@ class ChartDataSearch ////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([ @@ -2283,7 +2283,7 @@ class ChartDataSearch //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 @@ -2301,8 +2301,8 @@ class ChartDataSearch [ '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 @@ -2328,7 +2328,7 @@ class ChartDataSearch $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' @@ -2346,13 +2346,13 @@ class ChartDataSearch '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\')') ], ] ); @@ -2362,13 +2362,13 @@ class ChartDataSearch $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))) ]); @@ -2381,7 +2381,7 @@ class ChartDataSearch $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' @@ -2395,7 +2395,7 @@ class ChartDataSearch //Продажи $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)) ]); @@ -2462,9 +2462,9 @@ class ChartDataSearch ////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([ @@ -2566,7 +2566,7 @@ class ChartDataSearch //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 @@ -2584,8 +2584,8 @@ class ChartDataSearch [ '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 @@ -2609,8 +2609,8 @@ class ChartDataSearch $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' @@ -2628,13 +2628,13 @@ class ChartDataSearch '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') ], ] ); @@ -2644,13 +2644,13 @@ class ChartDataSearch $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))) ]); /* Конец проверки продажи */ @@ -2664,8 +2664,8 @@ class ChartDataSearch $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' @@ -2675,12 +2675,12 @@ class ChartDataSearch '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)) ] ]); @@ -2711,9 +2711,9 @@ class ChartDataSearch $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( @@ -2747,7 +2747,7 @@ class ChartDataSearch //Продажи $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] ]); //Основной запрос @@ -2887,7 +2887,7 @@ class ChartDataSearch //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 @@ -2905,8 +2905,8 @@ class ChartDataSearch [ '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 @@ -2930,7 +2930,7 @@ class ChartDataSearch $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' @@ -2948,13 +2948,13 @@ class ChartDataSearch '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\')') ], ] ); @@ -2964,13 +2964,13 @@ class ChartDataSearch $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))) ]); /* Конец проверки продажи */ @@ -2984,7 +2984,7 @@ class ChartDataSearch $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' @@ -2994,12 +2994,12 @@ class ChartDataSearch '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)) ] ]); @@ -3030,9 +3030,9 @@ class ChartDataSearch $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( diff --git a/erp24/records/DashboardSales.php b/erp24/records/DashboardSales.php index 801b8c0..8b3ae47 100755 --- a/erp24/records/DashboardSales.php +++ b/erp24/records/DashboardSales.php @@ -120,7 +120,7 @@ class DashboardSales extends \yii\db\ActiveRecord { return ArrayHelper::getColumn( self::find() - ->select(['store_id' => new \yii\db\Expression("DISTINCT(`store_id`)")]) + ->select(['store_id' => new \yii\db\Expression("DISTINCT(store_id)")]) // ->cache(600) ->asArray() ->all(), diff --git a/erp24/views/charts-for-management/write-offs-position-chart.php b/erp24/views/charts-for-management/write-offs-position-chart.php index cef5b0a..e0fc902 100644 --- a/erp24/views/charts-for-management/write-offs-position-chart.php +++ b/erp24/views/charts-for-management/write-offs-position-chart.php @@ -579,7 +579,7 @@ $this->registerJs(<<registerJs(<<