migrations/Inventory/Version20220902103551_InventoryItemMovement.php line 1
<?php
declare(strict_types=1);
namespace DoctrineMigrations\Inventory;
use App\Doctrine\Type\Inventory\MovementType;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20220902103551_InventoryItemMovement extends AbstractMigration
{
public function getDescription(): string
{
return 'Add inventory item movement table';
}
public function up(Schema $schema): void
{
$movementType = MovementType::getName();
$this->addSql("CREATE TABLE inventory_item_movement (
id SERIAL PRIMARY KEY,
identifier UUID NOT NULL,
item_id INTEGER NOT NULL REFERENCES public.expediting_item (id),
inventory_item_id INTEGER NOT NULL REFERENCES public.inventory_item (id),
movement_id INTEGER REFERENCES public.inventory_package_movement (id),
source_unitization_id INTEGER REFERENCES public.inventory_item_unitization (id),
destination_unitization_id INTEGER REFERENCES public.inventory_item_unitization (id),
disposal_id INTEGER REFERENCES public.inventory_item_disposal (id),
withdrawal_id INTEGER REFERENCES public.inventory_withdrawal (id),
quantity INTEGER NOT NULL,
unit_price DECIMAL(18, 5) NOT NULL,
value DECIMAL(18, 5) NOT NULL,
type {$movementType} NOT NULL,
completed_at TIMESTAMP(0) WITH TIME ZONE NOT NULL,
created_by INTEGER NOT NULL REFERENCES public.user (id),
updated_by INTEGER REFERENCES public.user (id),
created_at TIMESTAMP(0) WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP(0) WITH TIME ZONE,
deleted_at TIMESTAMP(0) WITH TIME ZONE,
CONSTRAINT inventory_item_movement_identifier_key UNIQUE (identifier),
CONSTRAINT inventory_item_movement_xor_origin CHECK (
(type = 'ENTRY' AND (
(movement_id IS NOT NULL AND source_unitization_id IS NULL) OR
(movement_id IS NULL AND source_unitization_id IS NOT NULL)
)) OR
(type = 'EXIT' AND (
(movement_id IS NULL AND withdrawal_id IS NOT NULL AND destination_unitization_id IS NOT NULL AND disposal_id IS NOT NULL) OR
(movement_id IS NOT NULL AND withdrawal_id IS NULL AND destination_unitization_id IS NOT NULL AND disposal_id IS NOT NULL) OR
(movement_id IS NOT NULL AND withdrawal_id IS NOT NULL AND destination_unitization_id IS NULL AND disposal_id IS NOT NULL) OR
(movement_id IS NOT NULL AND withdrawal_id IS NOT NULL AND destination_unitization_id IS NOT NULL AND disposal_id IS NULL)
))
)
)");
$this->addSql("COMMENT ON COLUMN inventory_item_movement.identifier IS '(DC2Type:ulid)'");
$this->addSql("CREATE INDEX inventory_item_movement_item_id_idx ON inventory_item_movement (item_id)");
$this->addSql("CREATE INDEX inventory_item_movement_inventory_item_id_idx ON inventory_item_movement (inventory_item_id)");
$this->addSql("CREATE INDEX inventory_item_movement_movement_id_idx ON inventory_item_movement (movement_id)");
$this->addSql("CREATE INDEX inventory_item_movement_source_unitization_id_idx ON inventory_item_movement (source_unitization_id)");
$this->addSql("CREATE INDEX inventory_item_movement_destination_unitization_id_idx ON inventory_item_movement (destination_unitization_id)");
$this->addSql("CREATE INDEX inventory_item_movement_withdrawal_id_idx ON inventory_item_movement (withdrawal_id)");
$this->addSql("CREATE INDEX inventory_item_movement_disposal_id_idx ON inventory_item_movement (disposal_id)");
$this->addSql("CREATE INDEX inventory_item_movement_created_by_idx ON inventory_item_movement (created_by)");
$this->addSql("CREATE INDEX inventory_item_movement_updated_by_idx ON inventory_item_movement (updated_by)");
}
public function down(Schema $schema): void
{
$this->addSql("DROP TABLE IF EXISTS inventory_item_movement");
}
}