migrations/Purchasing/Version20200306134629_PurchasingOrder.php line 1

  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations\Purchasing;
  4. use App\Doctrine\Type\Purchasing\PurchaseOrderStatus;
  5. use App\Doctrine\Type\Sales\Incoterm;
  6. use Doctrine\DBAL\Schema\Schema;
  7. use Doctrine\Migrations\AbstractMigration;
  8. /**
  9.  * Auto-generated Migration: Please modify to your needs!
  10.  */
  11. final class Version20200306134629_PurchasingOrder extends AbstractMigration
  12. {
  13.     public function getDescription(): string
  14.     {
  15.         return 'Add order table';
  16.     }
  17.     public function up(Schema $schema): void
  18.     {
  19.         $incotermType Incoterm::getName();
  20.         $orderStatusType PurchaseOrderStatus::getName();
  21.         $defaultStatus PurchaseOrderStatus::PLACED->value;
  22.         $this->addSql("CREATE TABLE purchasing_order (
  23.             id                              SERIAL PRIMARY KEY,
  24.             identifier                      UUID                        NOT NULL,
  25.             slug                            CHARACTER VARYING           NOT NULL,
  26.             -- Procurement
  27.             number                          CHARACTER VARYING           NOT NULL,
  28.             group_number                    CHARACTER VARYING,
  29.             tracking_number                 CHARACTER VARYING,
  30.             incoterm                        {$incotermType},
  31.             customer_id                     INTEGER                              REFERENCES public.company (id),
  32.             supplier_id                     INTEGER                              REFERENCES public.company (id),
  33.             issued_by                       INTEGER                              REFERENCES public.user (id),
  34.             source_id                       INTEGER                              REFERENCES public.file (id),
  35.             currency                        CHARACTER VARYING(3),
  36.             -- Labels
  37.             high_value                      BOOLEAN                     NOT NULL DEFAULT false,
  38.             high_volume                     BOOLEAN                     NOT NULL DEFAULT false,
  39.             high_risk                       BOOLEAN                     NOT NULL DEFAULT false,
  40.             -- Tracking
  41.             placed_on                       DATE                        NOT NULL DEFAULT CURRENT_DATE,
  42.             delayed                         BOOLEAN                     NOT NULL DEFAULT false,
  43.             status                          {$orderStatusType}          NOT NULL DEFAULT '{$defaultStatus}',
  44.             created_by                      INTEGER                     NOT NULL REFERENCES public.user (id),
  45.             updated_by                      INTEGER                              REFERENCES public.user (id),
  46.             created_at                      TIMESTAMP(0) WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
  47.             updated_at                      TIMESTAMP(0) WITH TIME ZONE,
  48.             deleted_at                      TIMESTAMP(0) WITH TIME ZONE,
  49.             CONSTRAINT purchasing_order_identifier_key UNIQUE (identifier),
  50.             CONSTRAINT purchasing_order_customer_id_number_key UNIQUE (customer_id, number),
  51.             CONSTRAINT purchasing_order_slug_key UNIQUE (slug)
  52.         )");
  53.         $this->addSql("COMMENT ON COLUMN purchasing_order.identifier IS '(DC2Type:ulid)'");
  54.         $this->addSql("CREATE INDEX purchasing_order_customer_id_idx ON purchasing_order (customer_id)");
  55.         $this->addSql("CREATE INDEX purchasing_order_supplier_id_idx ON purchasing_order (supplier_id)");
  56.         $this->addSql("CREATE INDEX purchasing_order_source_id_idx ON purchasing_order (source_id)");
  57.         $this->addSql("CREATE INDEX purchasing_order_issued_by_idx ON purchasing_order (issued_by)");
  58.         $this->addSql("CREATE INDEX purchasing_order_created_by_idx ON purchasing_order (created_by)");
  59.         $this->addSql("CREATE INDEX purchasing_order_updated_by_idx ON purchasing_order (updated_by)");
  60.     }
  61.     public function down(Schema $schema): void
  62.     {
  63.         $this->addSql("DROP TABLE IF EXISTS purchasing_order");
  64.     }
  65. }