migrations/Expediting/Version20200310163721_ExpeditingShippingSegment.php line 1
<?php
declare(strict_types=1);
namespace DoctrineMigrations\Expediting;
use App\Doctrine\Type\Expediting\DeliveryPriority;
use App\Doctrine\Type\Expediting\ExpeditingStatus;
use App\Doctrine\Type\Expediting\ShippingSegmentStatus;
use App\Doctrine\Type\Expediting\ShipmentType;
use App\Doctrine\Type\Expediting\TransportMode;
use App\Doctrine\Type\Expediting\TransportSpecification;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20200310163721_ExpeditingShippingSegment extends AbstractMigration
{
public function getDescription(): string
{
return 'Add shipping segments table';
}
public function up(Schema $schema): void
{
$deliveryPriorityType = DeliveryPriority::getName();
$shippingSegmentStatusType = ShippingSegmentStatus::getName();
$transferTypeType = ShipmentType::getName(asArray: true);
$transportModeType = TransportMode::getName();
$transportSpecificationType = TransportSpecification::getName();
$defaultPriority = DeliveryPriority::NORMAL->value;
$defaultStatus = ExpeditingStatus::PLANNED->value;
$defaultTransportSpec = TransportSpecification::STANDARD->value;
$this->addSql("CREATE TABLE expediting_shipping_segment (
id SERIAL PRIMARY KEY,
identifier UUID NOT NULL,
shipping_plan_id INTEGER NOT NULL REFERENCES public.expediting_shipping_plan (id),
status {$shippingSegmentStatusType} NOT NULL DEFAULT '{$defaultStatus}',
types {$transferTypeType},
etd DATE,
eta DATE,
-- Shipping
shipper_id INTEGER REFERENCES public.company (id),
consignee_id INTEGER REFERENCES public.company (id),
notify_party_id INTEGER REFERENCES public.company (id),
place_of_loading_id INTEGER REFERENCES public.place (id),
place_of_discharge_id INTEGER REFERENCES public.place (id),
currency CHARACTER VARYING(3),
freight_value DECIMAL(18, 5),
-- Transport
bill_number CHARACTER VARYING,
booking_number CHARACTER VARYING,
vector_reference CHARACTER VARYING,
transport_mode {$transportModeType} NOT NULL,
transport_company_id INTEGER REFERENCES public.company (id),
driver_id INTEGER REFERENCES public.fleet_driver (id),
vehicle_id INTEGER REFERENCES public.fleet_vehicle (id),
transport_specification {$transportSpecificationType} NOT NULL DEFAULT '{$defaultTransportSpec}',
-- QA/QC
priority {$deliveryPriorityType} DEFAULT '{$defaultPriority}',
high_value BOOLEAN DEFAULT false,
high_volume BOOLEAN DEFAULT false,
high_risk BOOLEAN DEFAULT false,
expeditable BOOLEAN DEFAULT false,
dangerous BOOLEAN DEFAULT false,
prohibited BOOLEAN DEFAULT false,
delayed BOOLEAN DEFAULT false,
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 expediting_shipping_segment_identifier_key UNIQUE (identifier)
)");
$this->addSql("COMMENT ON COLUMN expediting_shipping_segment.identifier IS '(DC2Type:ulid)'");
$this->addSql("CREATE INDEX expediting_shipping_segment_driver_id_idx ON expediting_shipping_segment (driver_id)");
$this->addSql("CREATE INDEX expediting_shipping_segment_vehicle_id_idx ON expediting_shipping_segment (vehicle_id)");
$this->addSql("CREATE INDEX expediting_shipping_segment_shipper_id_idx ON expediting_shipping_segment (shipper_id)");
$this->addSql("CREATE INDEX expediting_shipping_segment_consignee_id_idx ON expediting_shipping_segment (consignee_id)");
$this->addSql("CREATE INDEX expediting_shipping_segment_notify_party_id_idx ON expediting_shipping_segment (notify_party_id)");
$this->addSql("CREATE INDEX expediting_shipping_segment_transport_company_id_idx ON expediting_shipping_segment (transport_company_id)");
$this->addSql("CREATE INDEX expediting_shipping_segment_shipping_plan_id_idx ON expediting_shipping_segment (shipping_plan_id)");
$this->addSql("CREATE INDEX expediting_shipping_segment_place_of_loading_id_idx ON expediting_shipping_segment (place_of_loading_id)");
$this->addSql("CREATE INDEX expediting_shipping_segment_place_of_discharge_id_idx ON expediting_shipping_segment (place_of_discharge_id)");
$this->addSql("CREATE INDEX expediting_shipping_segment_created_by_idx ON expediting_shipping_segment (created_by)");
$this->addSql("CREATE INDEX expediting_shipping_segment_updated_by_idx ON expediting_shipping_segment (updated_by)");
}
public function down(Schema $schema): void
{
$this->addSql("DROP TABLE IF EXISTS expediting_shipping_segment");
}
}