migrations/Sales/Version20200303104729_Contract.php line 1

  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations\Sales;
  4. use App\Doctrine\Type\Sales\ContractStatus;
  5. use App\Doctrine\Type\Sales\ContractType;
  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 Version20200303104729_Contract extends AbstractMigration
  12. {
  13.     public function getDescription(): string
  14.     {
  15.         return 'Add contract table';
  16.     }
  17.     public function up(Schema $schema): void
  18.     {
  19.         $this->addSql(ContractType::getRegistrationSQL());
  20.         $this->addSql(ContractStatus::getRegistrationSQL());
  21.         $contractTypeType ContractType::getName();
  22.         $contractStatusType ContractStatus::getName();
  23.         $defaultStatus ContractStatus::ONGOING->value;
  24.         $this->addSql("CREATE TABLE contract (
  25.             id                              SERIAL PRIMARY KEY,
  26.             slug                            CHARACTER VARYING           NOT NULL,
  27.             number                          CHARACTER VARYING           NOT NULL,
  28.             tenant_id                       INTEGER                     NOT NULL REFERENCES public.company (id),
  29.             client_id                       INTEGER                     NOT NULL REFERENCES public.company (id),
  30.             starting_on                     DATE                        NOT NULL DEFAULT CURRENT_DATE,
  31.             ending_on                       DATE,
  32.             type                            {$contractTypeType}         NOT NULL,
  33.             status                          {$contractStatusType}       NOT NULL DEFAULT '{$defaultStatus}',
  34.             
  35.             created_by                      INTEGER                     NOT NULL REFERENCES public.user (id),
  36.             updated_by                      INTEGER                              REFERENCES public.user (id),
  37.             created_at                      TIMESTAMP(0) WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
  38.             updated_at                      TIMESTAMP(0) WITH TIME ZONE,
  39.             deleted_at                      TIMESTAMP(0) WITH TIME ZONE,
  40.             
  41.             CONSTRAINT contract_slug_key UNIQUE (slug),
  42.             CONSTRAINT contract_number_key UNIQUE (number)
  43.         )");
  44.         $this->addSql("CREATE INDEX contract_tenant_id_idx ON contract (tenant_id)");
  45.         $this->addSql("CREATE INDEX contract_client_id_idx ON contract (client_id)");
  46.         $this->addSql("CREATE INDEX contract_created_by_idx ON contract (created_by)");
  47.         $this->addSql("CREATE INDEX contract_updated_by_idx ON contract (updated_by)");
  48.     }
  49.     public function down(Schema $schema): void
  50.     {
  51.         $this->addSql("DROP TABLE IF EXISTS contract");
  52.         $this->addSql(ContractStatus::getDeletionSQL());
  53.         $this->addSql(ContractType::getDeletionSQL());
  54.     }
  55. }