]> gitweb.erp-flowers.ru Git - yii-erp24/.git/commitdiff
moving to pgsql charts-for-management
authorAlexander Smirnov <fredeom@mail.ru>
Wed, 27 Mar 2024 08:23:33 +0000 (11:23 +0300)
committerAlexander Smirnov <fredeom@mail.ru>
Wed, 27 Mar 2024 08:23:33 +0000 (11:23 +0300)
erp24/actions/dashboardSales/indexAction.php
erp24/controllers/ChartsForManagementController.php
erp24/records/ChartDataSearch.php
erp24/records/DashboardSales.php
erp24/views/charts-for-management/write-offs-position-chart.php

index 821a7c058d2d4194d970f8579743e42ac2d5b024..5daebbdebb7c97dfca6efb3f0b86bfeb0392eb12 100755 (executable)
@@ -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();
index fdbd43d3206bdc7c5e16608ec80b9d7553af99a6..d8f14672679a1d01d63b97ad2d539dc975640b71 100644 (file)
@@ -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' => 'Брак'
index d633003b8de41f99e85c1ce59eddd268866e3da7..3f506099ef1c18c2a0c6ac190acb7d2784157253 100644 (file)
@@ -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(
index 801b8c0e088448463528d48cdfdd3219d1240ac2..8b3ae471719bd50de1479fcf96aee4f06abe0b83 100755 (executable)
@@ -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(),
index cef5b0ae003bd9295edd69d7c280227fa8a8bd54..e0fc9022ca4e5fb9279578064091c4bb1998ce1b 100644 (file)
@@ -579,7 +579,7 @@ $this->registerJs(<<<JS
         let stores_in_cluster;
         
         $.ajax({
-            url: 'get-control-data-ajax',
+            url: '/charts-for-management/get-control-data-ajax',
             method: 'POST',
             dataType: 'json',
             data: dates,
@@ -734,7 +734,7 @@ $this->registerJs(<<<JS
             }
             
             $.ajax({
-                url: 'get-data-ajax',
+                url: '/charts-for-management/get-data-ajax',
                 method: 'POST',
                 dataType: 'json',
                 data: data,