vendor/bluue/products-bundle/migrations/Version20221227131457.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace ProductsBundleMigrations;
  4. use Doctrine\DBAL\Schema\Schema;
  5. use Symfony\Component\Uid\UuidV6;
  6. use Doctrine\Migrations\AbstractMigration;
  7. final class Version20221227131457 extends AbstractMigration
  8. {
  9.     public function up(Schema $schema): void
  10.     {
  11.         $this->addSql('SET FOREIGN_KEY_CHECKS=0');
  12.         $this->addSql('ALTER TABLE products_bundle__declination_context ADD reference VARCHAR(128) DEFAULT NULL, ADD wholesale_price NUMERIC(20, 6) DEFAULT NULL, ADD sell_price NUMERIC(20, 6) DEFAULT NULL, ADD is_active TINYINT(1) DEFAULT 1 NOT NULL');
  13.         $this->addSql('CREATE INDEX reference ON products_bundle__declination_context (reference)');
  14.         $this->addSql('CREATE INDEX wholesale_price ON products_bundle__declination_context (wholesale_price)');
  15.         $this->addSql('CREATE INDEX sell_price ON products_bundle__declination_context (sell_price)');
  16.         $this->addSql('CREATE INDEX is_active ON products_bundle__declination_context (is_active)');
  17.         $this->addSql('ALTER TABLE products_bundle__product_context ADD eco_part_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', ADD tax_rule_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', ADD currency_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', ADD name VARCHAR(255) DEFAULT \'\' NOT NULL, ADD description LONGTEXT DEFAULT NULL, ADD summary LONGTEXT DEFAULT NULL, ADD reference VARCHAR(255) DEFAULT NULL, ADD eco_part_amount NUMERIC(20, 6) DEFAULT NULL, ADD changeable_tax_rule TINYINT(1) DEFAULT 0 NOT NULL, ADD wholesale_price NUMERIC(20, 6) DEFAULT NULL, ADD sell_price NUMERIC(20, 6) DEFAULT NULL, ADD is_active TINYINT(1) DEFAULT 1 NOT NULL, ADD source VARCHAR(255) DEFAULT NULL');
  18.         $this->addSql('ALTER TABLE products_bundle__product_context ADD CONSTRAINT FK_F37E0B8CAE870F68 FOREIGN KEY (eco_part_id) REFERENCES products_bundle__eco_part (id)');
  19.         $this->addSql('ALTER TABLE products_bundle__product_context ADD CONSTRAINT FK_F37E0B8C3506A35B FOREIGN KEY (tax_rule_id) REFERENCES tax_rule (id)');
  20.         $this->addSql('ALTER TABLE products_bundle__product_context ADD CONSTRAINT FK_F37E0B8C38248176 FOREIGN KEY (currency_id) REFERENCES currency (id)');
  21.         $this->addSql('CREATE INDEX IDX_F37E0B8CAE870F68 ON products_bundle__product_context (eco_part_id)');
  22.         $this->addSql('CREATE INDEX IDX_F37E0B8C3506A35B ON products_bundle__product_context (tax_rule_id)');
  23.         $this->addSql('CREATE INDEX IDX_F37E0B8C38248176 ON products_bundle__product_context (currency_id)');
  24.         $this->addSql('CREATE INDEX reference ON products_bundle__product_context (reference)');
  25.         $this->addSql('CREATE INDEX name ON products_bundle__product_context (name)');
  26.         $this->addSql('CREATE INDEX wholesale_price ON products_bundle__product_context (wholesale_price)');
  27.         $this->addSql('CREATE INDEX sell_price ON products_bundle__product_context (sell_price)');
  28.         $this->addSql('CREATE INDEX is_active ON products_bundle__product_context (is_active)');
  29.         $this->addSql('ALTER TABLE products_bundle__declination_context ADD created_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', ADD updated_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', ADD deleted_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', ADD created_at DATETIME DEFAULT NULL, ADD updated_at DATETIME DEFAULT NULL, ADD deleted_at DATETIME DEFAULT NULL');
  30.         $this->addSql('ALTER TABLE products_bundle__declination_context ADD CONSTRAINT FK_B1F3A380B03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id)');
  31.         $this->addSql('ALTER TABLE products_bundle__declination_context ADD CONSTRAINT FK_B1F3A380896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id)');
  32.         $this->addSql('ALTER TABLE products_bundle__declination_context ADD CONSTRAINT FK_B1F3A380C76F1F52 FOREIGN KEY (deleted_by_id) REFERENCES user (id)');
  33.         $this->addSql('CREATE INDEX IDX_B1F3A380B03A8386 ON products_bundle__declination_context (created_by_id)');
  34.         $this->addSql('CREATE INDEX IDX_B1F3A380896DBBDE ON products_bundle__declination_context (updated_by_id)');
  35.         $this->addSql('CREATE INDEX IDX_B1F3A380C76F1F52 ON products_bundle__declination_context (deleted_by_id)');
  36.         $this->addSql('ALTER TABLE products_bundle__product_context ADD created_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', ADD updated_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', ADD deleted_by_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', ADD created_at DATETIME DEFAULT NULL, ADD updated_at DATETIME DEFAULT NULL, ADD deleted_at DATETIME DEFAULT NULL');
  37.         $this->addSql('ALTER TABLE products_bundle__product_context ADD CONSTRAINT FK_F37E0B8CB03A8386 FOREIGN KEY (created_by_id) REFERENCES user (id)');
  38.         $this->addSql('ALTER TABLE products_bundle__product_context ADD CONSTRAINT FK_F37E0B8C896DBBDE FOREIGN KEY (updated_by_id) REFERENCES user (id)');
  39.         $this->addSql('ALTER TABLE products_bundle__product_context ADD CONSTRAINT FK_F37E0B8CC76F1F52 FOREIGN KEY (deleted_by_id) REFERENCES user (id)');
  40.         $this->addSql('CREATE INDEX IDX_F37E0B8CB03A8386 ON products_bundle__product_context (created_by_id)');
  41.         $this->addSql('CREATE INDEX IDX_F37E0B8C896DBBDE ON products_bundle__product_context (updated_by_id)');
  42.         $this->addSql('CREATE INDEX IDX_F37E0B8CC76F1F52 ON products_bundle__product_context (deleted_by_id)');
  43.         $this->addSql('UPDATE products_bundle__declination_context SET created_at = CURRENT_TIMESTAMP WHERE created_at IS NULL');
  44.         $this->addSql('UPDATE products_bundle__declination_context SET updated_at = CURRENT_TIMESTAMP WHERE updated_at IS NULL');
  45.         $this->addSql('UPDATE products_bundle__product_context SET created_at = CURRENT_TIMESTAMP WHERE created_at IS NULL');
  46.         $this->addSql('UPDATE products_bundle__product_context SET updated_at = CURRENT_TIMESTAMP WHERE updated_at IS NULL');
  47.         $this->addSql('ALTER TABLE products_bundle__declination_context CHANGE created_at created_at DATETIME NOT NULL, CHANGE updated_at updated_at DATETIME NOT NULL');
  48.         $this->addSql('ALTER TABLE products_bundle__product_context CHANGE created_at created_at DATETIME NOT NULL, CHANGE updated_at updated_at DATETIME NOT NULL');
  49.         $this->addSql('ALTER TABLE products_bundle__product_translations DROP FOREIGN KEY FK_9017C31B232D562B');
  50.         $this->addSql('ALTER TABLE products_bundle__product_translations ADD CONSTRAINT FK_9017C31B232D562B FOREIGN KEY (object_id) REFERENCES products_bundle__product_context (id) ON DELETE CASCADE');
  51.         $this->addSql('SET FOREIGN_KEY_CHECKS=1');
  52.     }
  53.     public function postUp(Schema $schema): void
  54.     {
  55.         parent::postUp($schema);
  56.         $conn $this->connection;
  57.         $contexts $conn->executeQuery("SELECT id FROM context")->fetchAllAssociative();
  58.         echo "debut declinations \n";
  59.         $declinations $conn->executeQuery('SELECT id, reference, wholesale_price, sell_price, is_active FROM products_bundle__declination WHERE deleted_at IS NULL')->fetchAllAssociative();
  60.         foreach ($declinations as $decli) {
  61.             $keys 'created_at, updated_at, ';
  62.             $values '\'2023-01-01 00:00:00\', \'2023-01-01 00:00:00\', ';
  63.             foreach ($decli as $key => $el) {
  64.                 $keys .= ($key == 'id' 'declination_id' $key) . ', ';
  65.                 if ($key == 'id') {
  66.                     $value UuidV6::fromBinary($el)->toRfc4122();
  67.                     $value '0x' str_replace('-'''$value);
  68.                 } elseif (!$el) {
  69.                     $value 'NULL';
  70.                 } else {
  71.                     $value "'" $el "'";
  72.                 }
  73.                 $values .= $value ', ';
  74.             }
  75.             foreach ($contexts as $c) {
  76.                 $id = (new UuidV6())->toRfc4122();
  77.                 $cId UuidV6::fromBinary($c['id'])->toRfc4122();
  78.                 $query 'INSERT INTO products_bundle__declination_context (' $keys 'context_id, id) VALUES (' $values '0x' str_replace('-'''$cId) . ', 0x' str_replace('-'''$id) . ')';
  79.                 $conn->executeStatement($query);
  80.             }
  81.         }
  82.         echo "fin declinations \n";
  83.         // partie products
  84.         echo "debut products \n";
  85.         $products $conn->executeQuery('SELECT id, name, summary, description, source, reference, eco_part_id, eco_part_amount, tax_rule_id, changeable_tax_rule, currency_id, wholesale_price, sell_price, is_active FROM products_bundle__product WHERE deleted_at IS NULL')->fetchAllAssociative();
  86.         foreach ($products as $p) {
  87.             $p_uuid UuidV6::fromBinary($p['id'])->toRfc4122();
  88.             $keys 'created_at, updated_at, ';
  89.             $values '\'2023-01-01 00:00:00\', \'2023-01-01 00:00:00\', ';
  90.             foreach ($p as $key => $el) {
  91.                 $keys .= ($key == 'id' 'product_id' $key) . ', ';
  92.                 if ($key == 'id') {
  93.                     $value UuidV6::fromBinary($el)->toRfc4122();
  94.                     $value '0x' str_replace('-'''$value);
  95.                 } elseif (!$el) {
  96.                     $value 'NULL';
  97.                 } elseif (str_contains($key'_id')) {
  98.                     $value UuidV6::fromBinary($el)->toRfc4122();
  99.                     $value '0x' str_replace('-'''$value);
  100.                 } else {
  101.                     $el addslashes($el);
  102.                     $value "'" $el "'";
  103.                 }
  104.                 $values .= $value ', ';
  105.             }
  106.             foreach ($contexts as $c) {
  107.                 $id = (new UuidV6())->toRfc4122();
  108.                 $cId UuidV6::fromBinary($c['id'])->toRfc4122();
  109.                 $query 'INSERT INTO products_bundle__product_context (' $keys 'context_id, id) VALUES (' $values '0x' str_replace('-'''$cId) . ', 0x' str_replace('-'''$id) . ')';
  110.                 $conn->executeStatement($query);
  111.             }
  112.             // traitement traductions
  113.             $productTranslations $conn->executeQuery("SELECT id, object_id, locale, field FROM products_bundle__product_translations WHERE object_id = UNHEX(CONCAT('', REPLACE('" $p_uuid "', '-', '')))")->fetchAllAssociative();
  114.             $products_contexts $conn->executeQuery("SELECT id, name, summary, description, source FROM products_bundle__product_context WHERE product_id = UNHEX(CONCAT('', REPLACE('" $p_uuid "', '-', '')))")->fetchAllAssociative();
  115.             $first true;
  116.             foreach ($products_contexts as $pc) {
  117.                 $pc_uuid UuidV6::fromBinary($pc['id'])->toRfc4122();
  118.                 $pc_uuid '0x' str_replace('-'''$pc_uuid);
  119.                 $name_fr false;
  120.                 $summary_fr false;
  121.                 $description_fr false;
  122.                 $source_fr false;
  123.                 if ($first) {
  124.                     foreach ($productTranslations as $pt) {
  125.                         if ($pt['locale'] == 'fr') {
  126.                             if ($pt['field'] == 'name') {
  127.                                 $name_fr true;
  128.                             } elseif ($pt['field'] == 'summary') {
  129.                                 $summary_fr true;
  130.                             } elseif ($pt['field'] == 'description') {
  131.                                 $description_fr true;
  132.                             } elseif ($pt['field'] == 'source') {
  133.                                 $source_fr true;
  134.                             }
  135.                         }
  136.                         $pt_id $pt['id'];
  137.                         $conn->executeStatement("UPDATE products_bundle__product_translations SET object_id = " $pc_uuid " WHERE id = " $pt_id);
  138.                     }
  139.                     $first false;
  140.                 }
  141.                 if (!$name_fr) {
  142.                     $value $pc['name'];
  143.                     if (!$value) {
  144.                         $value 'NULL';
  145.                     } else {
  146.                         $value addslashes($value);
  147.                         $value "'" $value "'";
  148.                     }
  149.                     $conn->executeStatement("INSERT INTO products_bundle__product_translations (id, object_id, locale, field, content) VALUES (NULL, " $pc_uuid ", 'fr', 'name', " $value ")");
  150.                 }
  151.                 if (!$summary_fr) {
  152.                     $value $pc['summary'];
  153.                     if (!$value) {
  154.                         $value 'NULL';
  155.                     } else {
  156.                         $value addslashes($value);
  157.                         $value "'" $value "'";
  158.                     }
  159.                     $conn->executeStatement("INSERT INTO products_bundle__product_translations (id, object_id, locale, field, content) VALUES (NULL, " $pc_uuid ", 'fr', 'summary', " $value ")");
  160.                 }
  161.                 if (!$description_fr) {
  162.                     $value $pc['description'];
  163.                     if (!$value) {
  164.                         $value 'NULL';
  165.                     } else {
  166.                         $value addslashes($value);
  167.                         $value "'" $value "'";
  168.                     }
  169.                     $conn->executeStatement("INSERT INTO products_bundle__product_translations (id, object_id, locale, field, content) VALUES (NULL, " $pc_uuid ", 'fr', 'description', " $value ")");
  170.                 }
  171.                 if (!$source_fr) {
  172.                     $value $pc['source'];
  173.                     if (!$value) {
  174.                         $value 'NULL';
  175.                     } else {
  176.                         $value addslashes($value);
  177.                         $value "'" $value "'";
  178.                     }
  179.                     $conn->executeStatement("INSERT INTO products_bundle__product_translations (id, object_id, locale, field, content) VALUES (NULL, " $pc_uuid ", 'fr', 'source', " $value ")");
  180.                 }
  181.             }
  182.         }
  183.         echo "fin products \n";
  184.     }
  185.     public function down(Schema $schema): void
  186.     {
  187.     }
  188. }