migrations/Sales/Version20200303132432_WorkOrder.php line 1

  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations\Sales;
  4. use App\Doctrine\Type\Sales\Incoterm;
  5. use App\Doctrine\Type\Sales\WorkOrderStatus;
  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 Version20200303132432_WorkOrder extends AbstractMigration
  12. {
  13.     public function getDescription(): string
  14.     {
  15.         return 'Add work order table';
  16.     }
  17.     public function up(Schema $schema): void
  18.     {
  19.         $this->addSql(Incoterm::getRegistrationSQL());
  20.         $this->addSql(WorkOrderStatus::getRegistrationSQL());
  21.         $incotermType Incoterm::getName();
  22.         $workOrderStatusType WorkOrderStatus::getName();
  23.         $defaultStatus WorkOrderStatus::DRAFTED->value;
  24.         $this->addSql("CREATE TABLE work_order (
  25.             id                              SERIAL PRIMARY KEY,
  26.             slug                            CHARACTER VARYING           NOT NULL,
  27.             reference                       CHARACTER VARYING           NOT NULL,
  28.             issued_by                       INTEGER                              REFERENCES public.user (id),
  29.             client_id                       INTEGER                     NOT NULL REFERENCES public.company (id),
  30.             supplier_id                     INTEGER                              REFERENCES public.company (id),
  31.             contract_id                     INTEGER                              REFERENCES public.contract (id),
  32.             place_of_loading_id             INTEGER                     NOT NULL REFERENCES public.place (id),
  33.             place_of_discharge_id           INTEGER                     NOT NULL REFERENCES public.place (id),
  34.             source_id                       INTEGER                              REFERENCES public.file (id),
  35.             datasheet                       JSONB                       NOT NULL,
  36.             status                          {$workOrderStatusType}      NOT NULL DEFAULT '{$defaultStatus}',
  37.             incoterm                        {$incotermType},
  38.             requested_on                    DATE                        NOT NULL,
  39.             available_on                    DATE                        NOT NULL,
  40.             created_by                      INTEGER                     NOT NULL REFERENCES public.user (id),
  41.             updated_by                      INTEGER                              REFERENCES public.user (id),
  42.             created_at                      TIMESTAMP(0) WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
  43.             updated_at                      TIMESTAMP(0) WITH TIME ZONE,
  44.             deleted_at                      TIMESTAMP(0) WITH TIME ZONE,
  45.             CONSTRAINT work_order_slug_key UNIQUE (slug),
  46.             CONSTRAINT work_order_reference_key UNIQUE (reference),
  47.             CONSTRAINT work_order_source_id_key UNIQUE (source_id)
  48.         )");
  49.         $this->addSql("COMMENT ON COLUMN work_order.datasheet IS '(DC2Type:json_document)'");
  50.         $this->addSql("CREATE INDEX work_order_issued_by_idx ON work_order (issued_by)");
  51.         $this->addSql("CREATE INDEX work_order_client_id_idx ON work_order (client_id)");
  52.         $this->addSql("CREATE INDEX work_order_supplier_id_idx ON work_order (supplier_id)");
  53.         $this->addSql("CREATE INDEX work_order_contract_id_idx ON work_order (contract_id)");
  54.         $this->addSql("CREATE INDEX work_order_place_of_loading_id_idx ON work_order (place_of_loading_id)");
  55.         $this->addSql("CREATE INDEX work_order_place_of_discharge_id_idx ON work_order (place_of_discharge_id)");
  56.         $this->addSql("CREATE INDEX work_order_source_id_idx ON work_order (source_id)");
  57.         $this->addSql("CREATE INDEX work_order_created_by_idx ON work_order (created_by)");
  58.         $this->addSql("CREATE INDEX work_order_updated_by_idx ON work_order (updated_by)");
  59.     }
  60.     public function down(Schema $schema): void
  61.     {
  62.         $this->addSql("DROP TABLE IF EXISTS work_order");
  63.         $this->addSql(WorkOrderStatus::getDeletionSQL());
  64.         $this->addSql(Incoterm::getDeletionSQL());
  65.     }
  66. }