migrations/Version20260729210000.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.  * Lot 2 : panier persistant, devis et commandes.
  8.  *
  9.  * Voir LOT2.md pour les choix de conception. Les tables Orders/OrdersDetails du
  10.  * tutoriel d'origine ne sont pas touchées : elles restent inutilisées.
  11.  */
  12. final class Version20260729210000 extends AbstractMigration
  13. {
  14.     public function getDescription(): string
  15.     {
  16.         return 'Lot 2 : cart, cart_item, quote, quote_item, sales_order';
  17.     }
  18.     public function up(Schema $schema): void
  19.     {
  20.         $this->addSql('
  21.             CREATE TABLE cart (
  22.                 id INT AUTO_INCREMENT NOT NULL,
  23.                 user_id INT NOT NULL,
  24.                 entreprise_id INT DEFAULT NULL,
  25.                 delivery_agence_id INT DEFAULT NULL,
  26.                 status VARCHAR(20) NOT NULL,
  27.                 label VARCHAR(255) DEFAULT NULL,
  28.                 created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\',
  29.                 updated_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\',
  30.                 INDEX IDX_CART_USER (user_id),
  31.                 INDEX IDX_CART_ENTREPRISE (entreprise_id),
  32.                 INDEX IDX_CART_AGENCE (delivery_agence_id),
  33.                 PRIMARY KEY(id)
  34.             ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB
  35.         ');
  36.         $this->addSql('
  37.             CREATE TABLE cart_item (
  38.                 id INT AUTO_INCREMENT NOT NULL,
  39.                 cart_id INT NOT NULL,
  40.                 tarif_id INT DEFAULT NULL,
  41.                 reference VARCHAR(100) NOT NULL,
  42.                 designation VARCHAR(255) NOT NULL,
  43.                 product_slug VARCHAR(255) DEFAULT NULL,
  44.                 quantity INT NOT NULL,
  45.                 unit_price DOUBLE PRECISION NOT NULL,
  46.                 discount_rate DOUBLE PRECISION NOT NULL,
  47.                 discount_source VARCHAR(20) DEFAULT NULL,
  48.                 added_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\',
  49.                 INDEX IDX_CART_ITEM_CART (cart_id),
  50.                 INDEX IDX_CART_ITEM_TARIF (tarif_id),
  51.                 PRIMARY KEY(id)
  52.             ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB
  53.         ');
  54.         $this->addSql('
  55.             CREATE TABLE quote (
  56.                 id INT AUTO_INCREMENT NOT NULL,
  57.                 user_id INT NOT NULL,
  58.                 entreprise_id INT DEFAULT NULL,
  59.                 delivery_agence_id INT DEFAULT NULL,
  60.                 parent_quote_id INT DEFAULT NULL,
  61.                 reference VARCHAR(30) NOT NULL,
  62.                 status VARCHAR(30) NOT NULL,
  63.                 total_ht DOUBLE PRECISION NOT NULL,
  64.                 vat_rate DOUBLE PRECISION NOT NULL,
  65.                 minimum_order_fee DOUBLE PRECISION NOT NULL,
  66.                 created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\',
  67.                 sent_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\',
  68.                 validated_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\',
  69.                 expires_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\',
  70.                 sage_reference VARCHAR(50) DEFAULT NULL,
  71.                 sage_exported_at DATETIME DEFAULT NULL COMMENT \'(DC2Type:datetime_immutable)\',
  72.                 sage_status VARCHAR(30) DEFAULT NULL,
  73.                 UNIQUE INDEX UNIQ_QUOTE_REFERENCE (reference),
  74.                 INDEX idx_quote_status (status),
  75.                 INDEX idx_quote_created (created_at),
  76.                 INDEX IDX_QUOTE_USER (user_id),
  77.                 INDEX IDX_QUOTE_ENTREPRISE (entreprise_id),
  78.                 INDEX IDX_QUOTE_AGENCE (delivery_agence_id),
  79.                 INDEX IDX_QUOTE_PARENT (parent_quote_id),
  80.                 PRIMARY KEY(id)
  81.             ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB
  82.         ');
  83.         $this->addSql('
  84.             CREATE TABLE quote_item (
  85.                 id INT AUTO_INCREMENT NOT NULL,
  86.                 quote_id INT NOT NULL,
  87.                 reference VARCHAR(100) NOT NULL,
  88.                 designation VARCHAR(255) NOT NULL,
  89.                 product_slug VARCHAR(255) DEFAULT NULL,
  90.                 quantity INT NOT NULL,
  91.                 unit_price DOUBLE PRECISION NOT NULL,
  92.                 discount_rate DOUBLE PRECISION NOT NULL,
  93.                 discount_source VARCHAR(20) DEFAULT NULL,
  94.                 INDEX IDX_QUOTE_ITEM_QUOTE (quote_id),
  95.                 PRIMARY KEY(id)
  96.             ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB
  97.         ');
  98.         $this->addSql('
  99.             CREATE TABLE sales_order (
  100.                 id INT AUTO_INCREMENT NOT NULL,
  101.                 quote_id INT DEFAULT NULL,
  102.                 entreprise_id INT DEFAULT NULL,
  103.                 sage_reference VARCHAR(50) NOT NULL,
  104.                 status VARCHAR(30) NOT NULL,
  105.                 total_ttc DOUBLE PRECISION NOT NULL,
  106.                 ordered_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\',
  107.                 sage_updated_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\',
  108.                 UNIQUE INDEX UNIQ_SALES_ORDER_SAGE (sage_reference),
  109.                 INDEX idx_sales_order_sage (sage_reference),
  110.                 INDEX IDX_SALES_ORDER_QUOTE (quote_id),
  111.                 INDEX IDX_SALES_ORDER_ENTREPRISE (entreprise_id),
  112.                 PRIMARY KEY(id)
  113.             ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB
  114.         ');
  115.         $this->addSql('ALTER TABLE cart ADD CONSTRAINT FK_CART_USER FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE');
  116.         $this->addSql('ALTER TABLE cart ADD CONSTRAINT FK_CART_ENTREPRISE FOREIGN KEY (entreprise_id) REFERENCES entreprise (id) ON DELETE SET NULL');
  117.         $this->addSql('ALTER TABLE cart ADD CONSTRAINT FK_CART_AGENCE FOREIGN KEY (delivery_agence_id) REFERENCES agence (id) ON DELETE SET NULL');
  118.         $this->addSql('ALTER TABLE cart_item ADD CONSTRAINT FK_CART_ITEM_CART FOREIGN KEY (cart_id) REFERENCES cart (id) ON DELETE CASCADE');
  119.         $this->addSql('ALTER TABLE cart_item ADD CONSTRAINT FK_CART_ITEM_TARIF FOREIGN KEY (tarif_id) REFERENCES tarifs (id) ON DELETE SET NULL');
  120.         $this->addSql('ALTER TABLE quote ADD CONSTRAINT FK_QUOTE_USER FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE');
  121.         $this->addSql('ALTER TABLE quote ADD CONSTRAINT FK_QUOTE_ENTREPRISE FOREIGN KEY (entreprise_id) REFERENCES entreprise (id) ON DELETE SET NULL');
  122.         $this->addSql('ALTER TABLE quote ADD CONSTRAINT FK_QUOTE_AGENCE FOREIGN KEY (delivery_agence_id) REFERENCES agence (id) ON DELETE SET NULL');
  123.         $this->addSql('ALTER TABLE quote ADD CONSTRAINT FK_QUOTE_PARENT FOREIGN KEY (parent_quote_id) REFERENCES quote (id) ON DELETE SET NULL');
  124.         $this->addSql('ALTER TABLE quote_item ADD CONSTRAINT FK_QUOTE_ITEM_QUOTE FOREIGN KEY (quote_id) REFERENCES quote (id) ON DELETE CASCADE');
  125.         $this->addSql('ALTER TABLE sales_order ADD CONSTRAINT FK_SALES_ORDER_QUOTE FOREIGN KEY (quote_id) REFERENCES quote (id) ON DELETE SET NULL');
  126.         $this->addSql('ALTER TABLE sales_order ADD CONSTRAINT FK_SALES_ORDER_ENTREPRISE FOREIGN KEY (entreprise_id) REFERENCES entreprise (id) ON DELETE SET NULL');
  127.     }
  128.     public function down(Schema $schema): void
  129.     {
  130.         $this->addSql('ALTER TABLE sales_order DROP FOREIGN KEY FK_SALES_ORDER_ENTREPRISE');
  131.         $this->addSql('ALTER TABLE sales_order DROP FOREIGN KEY FK_SALES_ORDER_QUOTE');
  132.         $this->addSql('ALTER TABLE quote_item DROP FOREIGN KEY FK_QUOTE_ITEM_QUOTE');
  133.         $this->addSql('ALTER TABLE quote DROP FOREIGN KEY FK_QUOTE_PARENT');
  134.         $this->addSql('ALTER TABLE quote DROP FOREIGN KEY FK_QUOTE_AGENCE');
  135.         $this->addSql('ALTER TABLE quote DROP FOREIGN KEY FK_QUOTE_ENTREPRISE');
  136.         $this->addSql('ALTER TABLE quote DROP FOREIGN KEY FK_QUOTE_USER');
  137.         $this->addSql('ALTER TABLE cart_item DROP FOREIGN KEY FK_CART_ITEM_TARIF');
  138.         $this->addSql('ALTER TABLE cart_item DROP FOREIGN KEY FK_CART_ITEM_CART');
  139.         $this->addSql('ALTER TABLE cart DROP FOREIGN KEY FK_CART_AGENCE');
  140.         $this->addSql('ALTER TABLE cart DROP FOREIGN KEY FK_CART_ENTREPRISE');
  141.         $this->addSql('ALTER TABLE cart DROP FOREIGN KEY FK_CART_USER');
  142.         $this->addSql('DROP TABLE sales_order');
  143.         $this->addSql('DROP TABLE quote_item');
  144.         $this->addSql('DROP TABLE quote');
  145.         $this->addSql('DROP TABLE cart_item');
  146.         $this->addSql('DROP TABLE cart');
  147.     }
  148. }