migrations/Version20221130092833.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations;
  4. use Doctrine\DBAL\Schema\Schema;
  5. use Doctrine\Migrations\AbstractMigration;
  6. /**
  7.  * Auto-generated Migration: Please modify to your needs!
  8.  */
  9. final class Version20221130092833 extends AbstractMigration
  10. {
  11.     public function getDescription(): string
  12.     {
  13.         return '';
  14.     }
  15.     public function up(Schema $schema): void
  16.     {
  17.         // this up() migration is auto-generated, please modify it to your needs
  18.         $this->addSql('CREATE TABLE `supplier_product` (id INT AUTO_INCREMENT NOT NULL, supplier_id INT NOT NULL, reference VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, description LONGTEXT NOT NULL, image LONGTEXT DEFAULT NULL, brand VARCHAR(255) NOT NULL, taxonomy VARCHAR(255) NOT NULL, purchase_price INT NOT NULL, retail_price INT NOT NULL, shipping_costs INT NOT NULL, eco_tax INT NOT NULL, vat_rate DOUBLE PRECISION NOT NULL, stock INT NOT NULL, INDEX IDX_522F70B22ADD6D8C (supplier_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
  19.         $this->addSql('ALTER TABLE `supplier_product` ADD CONSTRAINT FK_522F70B22ADD6D8C FOREIGN KEY (supplier_id) REFERENCES company (id)');
  20.         $this->addSql('ALTER TABLE supplier_taxonomy ADD hash VARCHAR(255) NOT NULL');
  21.         $this->addSql('ALTER TABLE supplier_product ADD new TINYINT(1) NOT NULL');
  22.         $this->addSql('CREATE INDEX shop_product_reference_idx ON shop_product (reference)');
  23.         $this->addSql('CREATE INDEX supplier_product_reference_idx ON supplier_product (reference)');
  24.         $this->addSql('CREATE INDEX supplier_brand_name_idx ON supplier_brand (name)');
  25.         $this->addSql('CREATE INDEX supplier_taxonomy_hash_idx ON supplier_taxonomy (hash)');
  26.         $this->addSql('ALTER TABLE shop_product ADD image_url LONGTEXT DEFAULT NULL');
  27.         $this->addSql('ALTER TABLE `order` ADD comment VARCHAR(255)');
  28.         $this->addSql('ALTER TABLE order_detail ADD number_order VARCHAR(255)');
  29.         $this->addSql('
  30.             CREATE PROCEDURE import(IN param_supplier_id INT)
  31. BEGIN            
  32.                 
  33.                 DELETE FROM supplier_product
  34.                 WHERE reference IN (
  35.                     SELECT reference 
  36.                     FROM shop_product 
  37.                     WHERE supplier_id = param_supplier_id 
  38.                     AND state = "unwanted"
  39.                 );
  40.             
  41.                 
  42.                 UPDATE shop_product
  43.                 SET last_state = state,
  44.                     state      = "unavailable",
  45.                     updated_at=NOW()
  46.                 WHERE supplier_id = param_supplier_id
  47.                   AND reference NOT IN (
  48.                     SELECT reference
  49.                     FROM supplier_product
  50.                     WHERE supplier_product.supplier_id = param_supplier_id
  51.                 );
  52.                 
  53.                 
  54.         UPDATE supplier_product AS sup LEFT JOIN shop_product AS shp ON shp.`reference` = sup.`reference`  AND shp.`supplier_id` = param_supplier_id
  55.         SET sup.`new` = 1
  56.         WHERE sup.`supplier_id` = param_supplier_id AND shp.`reference` is NULL;
  57.                 
  58.                 INSERT INTO shop_product (image, image_url, supplier_id, updated_at, reference, name, description, state, states_history, stock, creation_date, shipping_mode)
  59.                 SELECT "image.png", image, supplier_id, NOW(), reference, name, description, "new", "a:0:{}", stock, creation_date, shipping_mode
  60.                 FROM supplier_product
  61.                 WHERE supplier_id = param_supplier_id
  62.                 AND `new` = 1;
  63.                 
  64.                 
  65.                 UPDATE shop_product
  66.                 INNER JOIN supplier_product sp ON (shop_product.supplier_id = sp.supplier_id AND shop_product.reference = sp.reference)
  67.                 INNER JOIN supplier_brand sb ON (sp.brand = sb.name AND shop_product.supplier_id = sb.supplier_id)
  68.                 INNER JOIN supplier_taxonomy st ON (sp.taxonomy = st.hash AND shop_product.supplier_id = st.supplier_id)
  69.                 SET shop_product.supplier_brand_id = sb.id,
  70.                     shop_product.brand_id = sb.brand_id,
  71.                     shop_product.supplier_taxonomy_id = st.id,
  72.                     shop_product.taxonomy_id = st.taxonomy_id
  73.                 WHERE sp.`new` = 1 AND sp.supplier_id = param_supplier_id;
  74.                 
  75.                 
  76.                 INSERT INTO shop_vat (name, rate)
  77.                 SELECT DISTINCT CONCAT(vat_rate * 100, "%"), vat_rate
  78.                 FROM supplier_product
  79.                 WHERE supplier_id = param_supplier_id
  80.                 AND vat_rate NOT IN (SELECT rate FROM shop_vat);
  81.                 
  82.                 
  83.                 INSERT INTO shop_price (product_id, vat_id, created_at, purchase_price, retail_price, shipping_costs, eco_tax, extra_cost)
  84.                 SELECT p.id, (SELECT shop_vat.id FROM shop_vat WHERE rate = sp.vat_rate), NOW(), sp.purchase_price, sp.retail_price, sp.shipping_costs, sp.eco_tax, 0
  85.                 FROM shop_product AS p
  86.                 INNER JOIN supplier_product sp ON (p.supplier_id = sp.supplier_id AND p.reference = sp.reference)
  87.                 WHERE sp.`new` = 1
  88.                 AND sp.supplier_id = param_supplier_id;
  89.                 
  90.                 
  91.                 UPDATE shop_product AS p
  92.                 INNER JOIN shop_price as c ON (c.product_id = p.id)
  93.                 INNER JOIN supplier_product sp ON (p.supplier_id = sp.supplier_id AND p.reference = sp.reference)
  94.                 SET p.current_price_id = c.id
  95.                 WHERE sp.`new` = 1
  96.                 AND sp.supplier_id = param_supplier_id;
  97.                 
  98.                 
  99.                 DELETE FROM shop_product WHERE current_price_id IS NULL AND supplier_id = param_supplier_id;
  100.                 
  101.                 
  102.                 UPDATE shop_product AS p
  103.                 INNER JOIN supplier_product sp ON (p.reference = sp.reference AND p.supplier_id = sp.supplier_id)
  104.                 SET p.stock = sp.stock
  105.                 WHERE p.supplier_id = param_supplier_id;
  106.                 
  107.                 UPDATE shop_product AS p
  108.                 INNER JOIN supplier_product sp ON (p.reference = sp.reference AND p.supplier_id = sp.supplier_id)
  109.                 SET p.shipping_mode = sp.shipping_mode
  110.                 WHERE p.supplier_id = param_supplier_id;
  111.                 
  112.                 UPDATE shop_product AS p
  113.                 SET p.last_state = state,
  114.                     p.state = "unavailable"
  115.                 WHERE p.supplier_id = param_supplier_id 
  116.                 AND p.stock = 0 
  117.                 AND (p.state != "unwanted" OR p.state != "deleted");
  118.                 
  119.                 
  120.                 UPDATE shop_product AS p
  121.                 SET p.state = p.last_state,
  122.                     p.last_state = "unavailable"
  123.                 WHERE p.supplier_id = param_supplier_id 
  124.                 AND p.last_state = "unavailable" 
  125.                 AND p.stock > 0 
  126.                 AND (p.state != "unwanted" OR p.state != "deleted");
  127.                 
  128.                 
  129.                 DELETE FROM supplier_product WHERE `new` = 1 AND supplier_id = param_supplier_id;
  130.                 
  131.                 
  132.                 UPDATE shop_product AS p
  133.                 INNER JOIN shop_price AS s ON p.current_price_id = s.id
  134.                 INNER JOIN shop_vat AS sv ON s.vat_id = sv.id
  135.                 INNER JOIN supplier_product sp ON (p.reference = sp.reference AND p.supplier_id = sp.supplier_id)
  136.                 SET p.last_state = state,
  137.                     p.state = "on_hold"
  138.                 WHERE p.supplier_id = param_supplier_id 
  139.                 AND (p.state = "published" OR p.state = "on_hold" OR p.state = "new")
  140.                 AND (
  141.                     s.purchase_price <> sp.purchase_price
  142.                     OR s.retail_price <> sp.retail_price
  143.                     OR s.eco_tax <> sp.eco_tax
  144.                     OR s.shipping_costs <> sp.shipping_costs
  145.                     OR sv.rate <> sp.vat_rate
  146.                 );
  147.                 
  148.                 
  149.                 INSERT INTO shop_price (product_id, vat_id, created_at, purchase_price, retail_price, shipping_costs, eco_tax, extra_cost)
  150.                 SELECT p.id, (SELECT shop_vat.id FROM shop_vat WHERE rate = sp.vat_rate), NOW(), sp.purchase_price, sp.retail_price, sp.shipping_costs, sp.eco_tax, 0
  151.                 FROM shop_product AS p
  152.                 INNER JOIN shop_price AS s ON p.current_price_id = s.id
  153.                 INNER JOIN shop_vat AS sv ON s.vat_id = sv.id
  154.                 INNER JOIN supplier_product sp ON (p.reference = sp.reference AND p.supplier_id = sp.supplier_id)
  155.                 WHERE (p.state = "published" OR p.state = "on_hold" OR p.state = "new")
  156.                 AND (
  157.                     s.purchase_price <> sp.purchase_price
  158.                     OR s.retail_price <> sp.retail_price
  159.                     OR s.eco_tax <> sp.eco_tax
  160.                     OR s.shipping_costs <> sp.shipping_costs
  161.                     OR sv.rate <> sp.vat_rate
  162.                 )
  163.                 AND sp.supplier_id = param_supplier_id;
  164.                 
  165.                 
  166.                 UPDATE shop_product AS p
  167.                 INNER JOIN (
  168.                     SELECT MAX(sp.id) AS price_id, p.id AS product_id
  169.                     FROM shop_product AS p
  170.                     INNER JOIN shop_price sp on p.id = sp.product_id
  171.                     WHERE p.supplier_id = param_supplier_id
  172.                     AND p.state = "on_hold"
  173.                     GROUP BY p.id
  174.                 ) sp on p.id = sp.product_id
  175.                 SET p.current_price_id = sp.price_id
  176.                 WHERE p.supplier_id = param_supplier_id
  177.                 AND p.state = "on_hold";
  178.                 
  179.                 
  180.                 DELETE FROM supplier_product WHERE supplier_id = param_supplier_id;
  181.             END
  182.         ');
  183.     }
  184.     public function down(Schema $schema): void
  185.     {
  186.         // this down() migration is auto-generated, please modify it to your needs
  187.         $this->addSql('ALTER TABLE `supplier_product` DROP FOREIGN KEY FK_522F70B22ADD6D8C');
  188.         $this->addSql('ALTER TABLE supplier_taxonomy DROP hash');
  189.         $this->addSql('ALTER TABLE `supplier_product` DROP new');
  190.         $this->addSql('DROP INDEX shop_product_reference_idx ON shop_product');
  191.         $this->addSql('DROP INDEX supplier_product_reference_idx ON supplier_product');
  192.         $this->addSql('DROP INDEX supplier_brand_name_idx ON supplier_brand');
  193.         $this->addSql('DROP INDEX supplier_taxonomy_hash_idx ON supplier_taxonomy');
  194.         $this->addSql('ALTER TABLE `shop_product` DROP image_url');
  195.         $this->addSql('ALTER TABLE `order` DROP comment');
  196.         $this->addSql('ALTER TABLE order_detail DROP number_order');
  197.         $this->addSql('DROP PROCEDURE IF EXISTS import');
  198.         $this->addSql('DROP PROCEDURE IF EXISTS images_imported');
  199.     }
  200. }