migrations/Inventory/Version20220902103551_InventoryItemMovement.php line 1

  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations\Inventory;
  4. use App\Doctrine\Type\Inventory\MovementType;
  5. use Doctrine\DBAL\Schema\Schema;
  6. use Doctrine\Migrations\AbstractMigration;
  7. /**
  8.  * Auto-generated Migration: Please modify to your needs!
  9.  */
  10. final class Version20220902103551_InventoryItemMovement extends AbstractMigration
  11. {
  12.     public function getDescription(): string
  13.     {
  14.         return 'Add inventory item movement table';
  15.     }
  16.     public function up(Schema $schema): void
  17.     {
  18.         $movementType MovementType::getName();
  19.         $this->addSql("CREATE TABLE inventory_item_movement (
  20.             id                              SERIAL PRIMARY KEY,
  21.             identifier                      UUID                        NOT NULL,
  22.             item_id                         INTEGER                     NOT NULL REFERENCES public.expediting_item (id),
  23.             inventory_item_id               INTEGER                     NOT NULL REFERENCES public.inventory_item (id),
  24.             movement_id                     INTEGER                              REFERENCES public.inventory_package_movement (id),
  25.             source_unitization_id           INTEGER                              REFERENCES public.inventory_item_unitization (id),
  26.             destination_unitization_id      INTEGER                              REFERENCES public.inventory_item_unitization (id),
  27.             disposal_id                     INTEGER                              REFERENCES public.inventory_item_disposal (id),
  28.             withdrawal_id                   INTEGER                              REFERENCES public.inventory_withdrawal (id),
  29.             quantity                        INTEGER                     NOT NULL,
  30.             unit_price                      DECIMAL(18, 5)              NOT NULL,
  31.             value                           DECIMAL(18, 5)              NOT NULL,
  32.             type                            {$movementType}             NOT NULL,
  33.             completed_at                    TIMESTAMP(0) WITH TIME ZONE NOT NULL,
  34.             created_by                      INTEGER                     NOT NULL REFERENCES public.user (id),
  35.             updated_by                      INTEGER                              REFERENCES public.user (id),
  36.             created_at                      TIMESTAMP(0) WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
  37.             updated_at                      TIMESTAMP(0) WITH TIME ZONE,
  38.             deleted_at                      TIMESTAMP(0) WITH TIME ZONE,
  39.             CONSTRAINT inventory_item_movement_identifier_key UNIQUE (identifier),
  40.             CONSTRAINT inventory_item_movement_xor_origin CHECK (
  41.                 (type = 'ENTRY' AND (
  42.                     (movement_id IS NOT NULL AND source_unitization_id IS     NULL) OR
  43.                     (movement_id IS     NULL AND source_unitization_id IS NOT NULL)
  44.                 )) OR
  45.                 (type = 'EXIT' AND (
  46.                     (movement_id IS     NULL AND withdrawal_id IS NOT NULL AND destination_unitization_id IS NOT NULL AND disposal_id IS NOT NULL) OR
  47.                     (movement_id IS NOT NULL AND withdrawal_id IS     NULL AND destination_unitization_id IS NOT NULL AND disposal_id IS NOT NULL) OR
  48.                     (movement_id IS NOT NULL AND withdrawal_id IS NOT NULL AND destination_unitization_id IS     NULL AND disposal_id IS NOT NULL) OR
  49.                     (movement_id IS NOT NULL AND withdrawal_id IS NOT NULL AND destination_unitization_id IS NOT NULL AND disposal_id IS     NULL)
  50.                 ))
  51.             )
  52.         )");
  53.         $this->addSql("COMMENT ON COLUMN inventory_item_movement.identifier IS '(DC2Type:ulid)'");
  54.         $this->addSql("CREATE INDEX inventory_item_movement_item_id_idx ON inventory_item_movement (item_id)");
  55.         $this->addSql("CREATE INDEX inventory_item_movement_inventory_item_id_idx ON inventory_item_movement (inventory_item_id)");
  56.         $this->addSql("CREATE INDEX inventory_item_movement_movement_id_idx ON inventory_item_movement (movement_id)");
  57.         $this->addSql("CREATE INDEX inventory_item_movement_source_unitization_id_idx ON inventory_item_movement (source_unitization_id)");
  58.         $this->addSql("CREATE INDEX inventory_item_movement_destination_unitization_id_idx ON inventory_item_movement (destination_unitization_id)");
  59.         $this->addSql("CREATE INDEX inventory_item_movement_withdrawal_id_idx ON inventory_item_movement (withdrawal_id)");
  60.         $this->addSql("CREATE INDEX inventory_item_movement_disposal_id_idx ON inventory_item_movement (disposal_id)");
  61.         $this->addSql("CREATE INDEX inventory_item_movement_created_by_idx ON inventory_item_movement (created_by)");
  62.         $this->addSql("CREATE INDEX inventory_item_movement_updated_by_idx ON inventory_item_movement (updated_by)");
  63.     }
  64.     public function down(Schema $schema): void
  65.     {
  66.         $this->addSql("DROP TABLE IF EXISTS inventory_item_movement");
  67.     }
  68. }