migrations/Purchasing/Version20200306134629_PurchasingOrder.php line 1
<?php
declare(strict_types=1);
namespace DoctrineMigrations\Purchasing;
use App\Doctrine\Type\Purchasing\PurchaseOrderStatus;
use App\Doctrine\Type\Sales\Incoterm;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20200306134629_PurchasingOrder extends AbstractMigration
{
public function getDescription(): string
{
return 'Add order table';
}
public function up(Schema $schema): void
{
$incotermType = Incoterm::getName();
$orderStatusType = PurchaseOrderStatus::getName();
$defaultStatus = PurchaseOrderStatus::PLACED->value;
$this->addSql("CREATE TABLE purchasing_order (
id SERIAL PRIMARY KEY,
identifier UUID NOT NULL,
slug CHARACTER VARYING NOT NULL,
-- Procurement
number CHARACTER VARYING NOT NULL,
group_number CHARACTER VARYING,
tracking_number CHARACTER VARYING,
incoterm {$incotermType},
customer_id INTEGER REFERENCES public.company (id),
supplier_id INTEGER REFERENCES public.company (id),
issued_by INTEGER REFERENCES public.user (id),
source_id INTEGER REFERENCES public.file (id),
currency CHARACTER VARYING(3),
-- Labels
high_value BOOLEAN NOT NULL DEFAULT false,
high_volume BOOLEAN NOT NULL DEFAULT false,
high_risk BOOLEAN NOT NULL DEFAULT false,
-- Tracking
placed_on DATE NOT NULL DEFAULT CURRENT_DATE,
delayed BOOLEAN NOT NULL DEFAULT false,
status {$orderStatusType} NOT NULL DEFAULT '{$defaultStatus}',
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 purchasing_order_identifier_key UNIQUE (identifier),
CONSTRAINT purchasing_order_customer_id_number_key UNIQUE (customer_id, number),
CONSTRAINT purchasing_order_slug_key UNIQUE (slug)
)");
$this->addSql("COMMENT ON COLUMN purchasing_order.identifier IS '(DC2Type:ulid)'");
$this->addSql("CREATE INDEX purchasing_order_customer_id_idx ON purchasing_order (customer_id)");
$this->addSql("CREATE INDEX purchasing_order_supplier_id_idx ON purchasing_order (supplier_id)");
$this->addSql("CREATE INDEX purchasing_order_source_id_idx ON purchasing_order (source_id)");
$this->addSql("CREATE INDEX purchasing_order_issued_by_idx ON purchasing_order (issued_by)");
$this->addSql("CREATE INDEX purchasing_order_created_by_idx ON purchasing_order (created_by)");
$this->addSql("CREATE INDEX purchasing_order_updated_by_idx ON purchasing_order (updated_by)");
}
public function down(Schema $schema): void
{
$this->addSql("DROP TABLE IF EXISTS purchasing_order");
}
}