Commit 53eb6c31a36795765953a713a9849cdd21abc7e1

Authored by Mihail
1 parent 706a1491

add migration for details and details_crosses triggers

common/config/main-local.php
... ... @@ -2,7 +2,6 @@
2 2 return [
3 3 'components' => [
4 4 'db' => [
5   - //'class' => 'yii\db\Connection',
6 5 'class' => 'backend\components\base\CustomDbConnection',
7 6 'dsn' => 'mysql:host=195.248.225.150;dbname=italautocomua',
8 7 'username' => 'italautocomua',
... ... @@ -10,6 +9,14 @@ return [
10 9 'charset' => 'utf8',
11 10 'tablePrefix' => 'w_',
12 11 ],
  12 + 'full_privileges_db' => [
  13 + 'class' => 'backend\components\base\CustomDbConnection',
  14 + 'dsn' => 'mysql:host=195.248.225.150;dbname=italautocomua',
  15 + 'username' => 'percona',
  16 + 'password' => 'PpvSuMGEnLr4UKnVGUZPRa5wPCHF98Jf',
  17 + 'charset' => 'utf8',
  18 + 'tablePrefix' => 'w_',
  19 + ],
13 20 'mailer' => [
14 21 'class' => 'yii\swiftmailer\Mailer',
15 22 'viewPath' => '@common/mail',
... ...
console/migrations/m151013_062829_deletePrefixFunction.php
... ... @@ -10,9 +10,10 @@ use yii\db\Migration;
10 10 */
11 11 class m151013_062829_deletePrefixFunction extends Migration
12 12 {
  13 +
13 14 public function safeUp()
14 15 {
15   - $find_prefix = <<< SQL
  16 + $find_prefix = <<< MySQL
16 17 CREATE FUNCTION FindPrefix(p_importer_id int, p_brand VARCHAR(100)) RETURNS VARCHAR(50)
17 18 BEGIN
18 19 DECLARE _prefix varchar(10);
... ... @@ -21,9 +22,9 @@ class m151013_062829_deletePrefixFunction extends Migration
21 22  
22 23 RETURN (_prefix);
23 24 END
24   -SQL;
  25 +MySQL;
25 26  
26   - $delete_prefix = <<< SQL
  27 + $delete_prefix = <<< MySQL
27 28 CREATE FUNCTION DeletePrefix(p_articul VARCHAR(150), p_importer_id int, p_brand VARCHAR(100)) RETURNS VARCHAR(150)
28 29 BEGIN
29 30 DECLARE _articul varchar(10);
... ... @@ -31,7 +32,7 @@ SQL;
31 32 select substring(p_articul, LENGTH( FindPrefix( p_importer_id, p_brand ) ) + 1 ) into _articul;
32 33 RETURN (_articul);
33 34 END
34   -SQL;
  35 +MySQL;
35 36  
36 37 $this->execute($find_prefix);
37 38 $this->execute($delete_prefix);
... ... @@ -41,13 +42,13 @@ SQL;
41 42 public function safedown()
42 43 {
43 44  
44   - $find_prefix = <<< SQL
  45 + $find_prefix = <<< MySQL
45 46 drop FUNCTION FindPrefix;
46   -SQL;
  47 +MySQL;
47 48  
48   - $delete_prefix = <<< SQL
  49 + $delete_prefix = <<< MySQL
49 50 drop FUNCTION DeletePrefix;
50   -SQL;
  51 +MySQL;
51 52  
52 53 $this->execute($find_prefix);
53 54 $this->execute($delete_prefix);
... ...
console/migrations/m151016_080952_editDetailsCrossesTrigger.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\db\Migration;
  4 +
  5 +/**
  6 + * Class m151016_080952_editDetailsCrossesTrigger
  7 + * заменим существующий триггер на новый и переименуем его на более информативное имя
  8 + * с w_details_crosses на w_details_crosses_before_insert
  9 + * существующая функциональность сохраняется
  10 + * добавляется замена брендов и вставка новых брендов в таблицу w_brand
  11 + */
  12 +class m151016_080952_editDetailsCrossesTrigger extends Migration
  13 +{
  14 + public function init()
  15 + {
  16 + // используем специальное подключение с супер правами
  17 + $this->db = 'full_privileges_db';
  18 + parent::init();
  19 + }
  20 +
  21 + public function safeUp()
  22 + {
  23 + $drop_trigger = 'Drop trigger if exists w_details_crosses';
  24 +
  25 + $before_insert_trigger = <<< MySQL
  26 + CREATE DEFINER=`root`@`localhost` TRIGGER `w_details_crosses_before_insert` BEFORE INSERT ON `w_details_crosses`
  27 + FOR EACH ROW BEGIN
  28 + DECLARE vBrand varchar(150);
  29 + SET vBrand = '';
  30 +
  31 +
  32 + SELECT to_brand INTO vBrand from w_brands_replace where from_brand = NEW.BRAND;
  33 +
  34 + IF vBrand = '' or vBrand = NULL then
  35 + insert ignore into w_brands (BRAND) values(NEW.BRAND);
  36 + else
  37 + SET NEW.BRAND = vBrand;
  38 + end if;
  39 +
  40 + SET vBrand = '';
  41 +
  42 +
  43 + SELECT to_brand INTO vBrand from w_brands_replace where from_brand = NEW.CROSS_BRAND;
  44 +
  45 + IF vBrand = '' or vBrand = NULL then
  46 + insert ignore into w_brands (BRAND) values(NEW.CROSS_BRAND);
  47 + else
  48 + SET NEW.CROSS_BRAND = vBrand;
  49 + end if;
  50 +
  51 + insert ignore into `w_details_description`(`name`, `brand`)
  52 + values (NEW.`ARTICLE`,NEW.`BRAND`),(NEW.`CROSS_ARTICLE`,NEW.`CROSS_BRAND`);
  53 + END
  54 +MySQL;
  55 +
  56 + $this->execute($drop_trigger);
  57 + $this->execute($before_insert_trigger);
  58 +
  59 + }
  60 +
  61 + public function safedown()
  62 + {
  63 + // вернем все как было
  64 + $drop_trigger = 'Drop trigger if exists w_details_crosses_before_insert';
  65 +
  66 + $before_insert_trigger = <<< MySQL
  67 + CREATE DEFINER=`italautocomua`@`localhost` TRIGGER `w_details_crosses` BEFORE INSERT ON `w_details_crosses`
  68 + FOR EACH ROW BEGIN
  69 + insert ignore into `w_details_description`(`name`, `brand`)
  70 + values (NEW.`ARTICLE`,NEW.`BRAND`),(NEW.`CROSS_ARTICLE`,NEW.`CROSS_BRAND`);
  71 + END
  72 +MySQL;
  73 +
  74 + $this->execute($drop_trigger);
  75 + $this->execute($before_insert_trigger);
  76 +
  77 +
  78 + }
  79 +
  80 +}
... ...
console/migrations/m151016_090927_editDetailsTrigger.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\db\Migration;
  4 +
  5 +/**
  6 + * Class m151016_090927_editDetailsTrigger
  7 + * заменим существующий триггер на новый и переименуем его на более информативное имя
  8 + * с w_details на w_details_before_insert
  9 + * существующая функциональность сохраняется
  10 + * добавляется замена брендов и вставка новых брендов в таблицу w_brand,
  11 + * а также поиск и замена налогов товаров по таблице w_details_replace
  12 + */
  13 +class m151016_090927_editDetailsTrigger extends Migration
  14 +{
  15 + public function init()
  16 + {
  17 + // используем специальное подключение с супер правами
  18 + $this->db = 'full_privileges_db';
  19 + parent::init();
  20 + }
  21 +
  22 + public function safeUp()
  23 + {
  24 + $drop_trigger = 'Drop trigger if exists w_details';
  25 +
  26 + $before_insert_trigger = <<< MySQL
  27 + CREATE DEFINER=`root`@`localhost` TRIGGER `w_details_before_insert` BEFORE INSERT ON `w_details`
  28 + FOR EACH ROW BEGIN
  29 + DECLARE vBrand varchar(150);
  30 + DECLARE vArticle varchar(100);
  31 + SET vBrand = '';
  32 + SET vArticle = '';
  33 +
  34 + SELECT to_brand INTO vBrand from w_brands_replace where from_brand = NEW.BRAND;
  35 +
  36 + IF vBrand = '' or vBrand = NULL then
  37 + insert ignore into w_brands (BRAND) values(NEW.BRAND);
  38 + else
  39 + SET NEW.BRAND = vBrand;
  40 + end if;
  41 +
  42 + SET vBrand = '';
  43 +
  44 + SELECT to_name, to_brand INTO vArticle, vBrand from w_details_replace where from_name = NEW.ARTICLE AND from_brand = NEW.BRAND;
  45 +
  46 + IF vArticle != '' AND vArticle != NULL then
  47 + SET NEW.BRAND = vBrand;
  48 + SET NEW.ARTICLE = vArticle;
  49 + end if;
  50 +
  51 + INSERT INTO `w_details_description`(`name`, `brand`, `supplier_description`, `article`)
  52 + values (NEW.`ARTICLE`,NEW.`BRAND`,NEW.`DESCR`,NEW.`FULL_ARTICLE`)
  53 + on duplicate key update `supplier_description` = if (`supplier_description` = '',values(`supplier_description`),`supplier_description`);
  54 + END
  55 +MySQL;
  56 +
  57 + $this->execute($drop_trigger);
  58 + $this->execute($before_insert_trigger);
  59 +
  60 + }
  61 +
  62 + public function safedown()
  63 + {
  64 + // вернем все как было
  65 + $drop_trigger = 'Drop trigger if exists w_details_before_insert';
  66 +
  67 + $before_insert_trigger = <<< MySQL
  68 + CREATE DEFINER=`italautocomua`@`localhost` TRIGGER `w_details` BEFORE INSERT ON `w_details`
  69 + FOR EACH ROW BEGIN
  70 + INSERT INTO `w_details_description`(`name`, `brand`, `supplier_description`, `article`)
  71 + values (NEW.`ARTICLE`,NEW.`BRAND`,NEW.`DESCR`,NEW.`FULL_ARTICLE`)
  72 + on duplicate key update `supplier_description` = if (`supplier_description` = '',values(`supplier_description`),`supplier_description`);
  73 + END
  74 +MySQL;
  75 +
  76 + $this->execute($drop_trigger);
  77 + $this->execute($before_insert_trigger);
  78 +
  79 + }
  80 +}
... ...