migrations/Expediting/Version20200308155022_ExpeditingItem.php line 1

  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations\Expediting;
  4. use App\Doctrine\Type\Expediting\DeliveryPriority;
  5. use App\Doctrine\Type\Expediting\ExpeditableStatus;
  6. use App\Doctrine\Type\Expediting\ItemType;
  7. use App\Doctrine\Type\Expediting\UnitOfMeasurement;
  8. use Doctrine\DBAL\Schema\Schema;
  9. use Doctrine\Migrations\AbstractMigration;
  10. /**
  11.  * Auto-generated Migration: Please modify to your needs!
  12.  */
  13. final class Version20200308155022_ExpeditingItem extends AbstractMigration
  14. {
  15.     public function getDescription(): string
  16.     {
  17.         return 'Add item table';
  18.     }
  19.     public function up(Schema $schema): void
  20.     {
  21.         $itemTypeType ItemType::getName();
  22.         $expeditableStatusType ExpeditableStatus::getName();
  23.         $unitOfMeasurementType UnitOfMeasurement::getName();
  24.         $deliveryPriorityType DeliveryPriority::getName();
  25.         $defaultPriority DeliveryPriority::NORMAL->value;
  26.         $this->addSql("CREATE TABLE expediting_item (
  27.             id                              SERIAL PRIMARY KEY,
  28.             identifier                      UUID                        NOT NULL,
  29.             freight_id                      INTEGER                     NOT NULL REFERENCES public.expediting_freight (id),
  30.             customer_id                     INTEGER                     NOT NULL REFERENCES public.company (id),
  31.             asset_id                        INTEGER                              REFERENCES public.company_asset (id),
  32.             flow_id                         INTEGER                              REFERENCES public.purchasing_flow (id),
  33.             order_id                        INTEGER                              REFERENCES public.purchasing_order (id),
  34.             line_item_id                    INTEGER                              REFERENCES public.purchasing_line_item (id),
  35.             item_id                         INTEGER                              REFERENCES public.expediting_item (id),
  36.             type                            {$itemTypeType}             NOT NULL,
  37.             slug                            CHARACTER VARYING           NOT NULL,
  38.             status                          {$expeditableStatusType}    NOT NULL,
  39.             reference                       CHARACTER VARYING,
  40.             number                          CHARACTER VARYING,
  41.             material_number                 CHARACTER VARYING,
  42.             package_number                  CHARACTER VARYING,
  43.             unit_of_measurement             {$unitOfMeasurementType},
  44.             requested_delivery_on           DATE,
  45.             supplier_description            CHARACTER VARYING,
  46.             client_description              CHARACTER VARYING,
  47.             quantity                        INTEGER,
  48.             unit_price                      DECIMAL(18, 5),
  49.             value                           DECIMAL(18, 5),
  50.             packed                          BOOLEAN                              DEFAULT false,
  51.             -- Shipping
  52.             priority                        {$deliveryPriorityType}              DEFAULT '{$defaultPriority}',
  53.             high_value                      BOOLEAN                              DEFAULT false,
  54.             high_volume                     BOOLEAN                              DEFAULT false,
  55.             high_risk                       BOOLEAN                              DEFAULT false,
  56.             expeditable                     BOOLEAN                              DEFAULT false,
  57.             dangerous                       BOOLEAN                              DEFAULT false,
  58.             prohibited                      BOOLEAN                              DEFAULT false,
  59.             -- QA/QC
  60.             certified                       BOOLEAN                              DEFAULT false,
  61.             fat_required                    BOOLEAN                              DEFAULT false,
  62.             -- Catalogue
  63.             unique_part                     BOOLEAN                              DEFAULT false,
  64.             manufactured                    BOOLEAN                              DEFAULT false,
  65.             listed                          BOOLEAN                              DEFAULT false,
  66.             retired                         BOOLEAN                              DEFAULT false,
  67.             created_by                      INTEGER                     NOT NULL REFERENCES public.user (id),
  68.             updated_by                      INTEGER                              REFERENCES public.user (id),
  69.             created_at                      TIMESTAMP(0) WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
  70.             updated_at                      TIMESTAMP(0) WITH TIME ZONE,
  71.             deleted_at                      TIMESTAMP(0) WITH TIME ZONE,
  72.             CONSTRAINT expediting_item_slug_key UNIQUE (slug),
  73.             CONSTRAINT expediting_item_reference_key UNIQUE (reference),
  74.             CONSTRAINT expediting_item_identifier_key UNIQUE (identifier)
  75.         )");
  76.             //, CONSTRAINT expediting_item_package_number_key UNIQUE (line_item_id, package_number)
  77.         $this->addSql("COMMENT ON COLUMN expediting_item.identifier IS '(DC2Type:ulid)'");
  78.         $this->addSql("CREATE INDEX expediting_item_freight_id_idx ON expediting_item (freight_id)");
  79.         $this->addSql("CREATE INDEX expediting_item_item_id_idx ON expediting_item (item_id)");
  80.         $this->addSql("CREATE INDEX expediting_item_order_id_idx ON expediting_item (order_id)");
  81.         $this->addSql("CREATE INDEX expediting_item_line_item_id_idx ON expediting_item (line_item_id)");
  82.         $this->addSql("CREATE INDEX expediting_item_customer_id_idx ON expediting_item (customer_id)");
  83.         $this->addSql("CREATE INDEX expediting_item_asset_id_idx ON expediting_item (asset_id)");
  84.         $this->addSql("CREATE INDEX expediting_item_flow_id_idx ON expediting_item (flow_id)");
  85.         $this->addSql("CREATE INDEX expediting_item_created_by_idx ON expediting_item (created_by)");
  86.         $this->addSql("CREATE INDEX expediting_item_updated_by_idx ON expediting_item (updated_by)");
  87.     }
  88.     public function down(Schema $schema): void
  89.     {
  90.         $this->addSql("DROP TABLE IF EXISTS expediting_item");
  91.     }
  92. }