migrations/Finance/Version20200511103553_FinanceTax.php line 1

  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations\Finance;
  4. use App\Doctrine\Type\Finance\ChargeableType;
  5. use App\Doctrine\Type\Finance\ExpenseType;
  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 Version20200511103553_FinanceTax extends AbstractMigration
  12. {
  13.     public function getDescription() : string
  14.     {
  15.         return 'Add chargeable table';
  16.     }
  17.     public function up(Schema $schema) : void
  18.     {
  19.         $chargeableType ChargeableType::getName();
  20.         $expenseType ExpenseType::getName();
  21.         $this->addSql("CREATE TABLE finance_tax (
  22.             id                          SERIAL PRIMARY KEY,
  23.             bill_id                     INTEGER                              REFERENCES public.finance_bill (id),
  24.             invoice_id                  INTEGER                              REFERENCES public.finance_invoice (id),
  25.             chargeable_id               INTEGER                              REFERENCES public.finance_chargeable (id),
  26.             name                        CHARACTER VARYING           NOT NULL,
  27.             amount                      DECIMAL(18, 2)              NOT NULL,
  28.             rate                        DECIMAL(5, 2)               NOT NULL,
  29.             CONSTRAINT finance_tax_xor_taxable CHECK (
  30.                 (bill_id IS NOT NULL AND invoice_id IS     NULL AND chargeable_id IS     NULL) OR
  31.                 (bill_id IS     NULL AND invoice_id IS NOT NULL AND chargeable_id IS     NULL) OR
  32.                 (bill_id IS     NULL AND invoice_id IS     NULL AND chargeable_id IS NOT NULL)
  33.             )
  34.         )");
  35.         $this->addSql("CREATE INDEX finance_tax_bill_id_idx ON finance_tax (bill_id)");
  36.         $this->addSql("CREATE INDEX finance_tax_invoice_id_idx ON finance_tax (invoice_id)");
  37.         $this->addSql("CREATE INDEX finance_tax_chargeable_id_idx ON finance_tax (chargeable_id)");
  38.     }
  39.     public function down(Schema $schema) : void
  40.     {
  41.         $this->addSql("DROP TABLE IF EXISTS finance_tax");
  42.     }
  43. }