<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20210702054416 extends AbstractMigration
{
public function getDescription(): string
{
return '';
}
public function up(Schema $schema): void
{
// this up() migration is auto-generated, please modify it to your needs
$this->addSql('CREATE TABLE order_shipping_vehicle_feature (order_shipping_id INT NOT NULL, vehicle_feature_id INT NOT NULL, INDEX IDX_57FFB79253358C7E (order_shipping_id), INDEX IDX_57FFB792E57637E4 (vehicle_feature_id), PRIMARY KEY(order_shipping_id, vehicle_feature_id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
$this->addSql('ALTER TABLE order_shipping_vehicle_feature ADD CONSTRAINT FK_57FFB79253358C7E FOREIGN KEY (order_shipping_id) REFERENCES order_shipping (id) ON DELETE CASCADE');
$this->addSql('ALTER TABLE order_shipping_vehicle_feature ADD CONSTRAINT FK_57FFB792E57637E4 FOREIGN KEY (vehicle_feature_id) REFERENCES vehicle_feature (id) ON DELETE CASCADE');
$this->addSql('DROP TABLE order_vehicle_feature');
$this->addSql('ALTER TABLE order_shipping ADD state VARCHAR(100) NOT NULL, ADD start_time TIME DEFAULT NULL, ADD end_time TIME DEFAULT NULL, CHANGE date date DATETIME DEFAULT NULL');
$this->addSql('CREATE INDEX idx_state ON order_shipping (state)');
// IMPORTANT: make sure to run this migration when all unfulfilled orders are still pending!!!
// update existing shipped orders
$this->addSql('UPDATE order_shipping LEFT JOIN orders ON orders.id=order_shipping.order_id SET
order_shipping.start_time=orders.delivery_start_time,
order_shipping.end_time=orders.delivery_end_time,
order_shipping.date=orders.delivery_date,
order_shipping.state=\'state.delivered\'
WHERE orders.state=\'Entregado\'
');
$this->addSql('UPDATE order_shipping LEFT JOIN orders ON orders.id=order_shipping.order_id SET
order_shipping.start_time=orders.delivery_start_time,
order_shipping.end_time=orders.delivery_end_time,
order_shipping.date=orders.delivery_date,
order_shipping.state=\'state.returned\'
WHERE orders.state=\'Fallido\'
');
$this->addSql('UPDATE order_shipping LEFT JOIN orders ON orders.id=order_shipping.order_id SET
order_shipping.start_time=orders.delivery_start_time,
order_shipping.end_time=orders.delivery_end_time,
order_shipping.date=orders.delivery_date,
order_shipping.state=\'state.cancelled\'
WHERE orders.state=\'Anulado\'
');
$this->addSql('UPDATE order_shipping LEFT JOIN orders ON orders.id=order_shipping.order_id SET
order_shipping.start_time=orders.delivery_start_time,
order_shipping.end_time=orders.delivery_end_time,
order_shipping.date=orders.delivery_date,
order_shipping.state=\'state.preparing\'
WHERE orders.state=\'Preparing\'
');
$this->addSql('UPDATE order_shipping LEFT JOIN orders ON orders.id=order_shipping.order_id SET
order_shipping.start_time=orders.delivery_start_time,
order_shipping.end_time=orders.delivery_end_time,
order_shipping.date=orders.delivery_date,
order_shipping.state=\'state.transit\'
WHERE orders.state=\'Despachado\'
');
// create new shippings for pending orders
$this->addSql('INSERT INTO order_shipping(created_by_id, created_at, updated_by_id, updated_at, order_id, date, start_time, end_time, delivery_order, `state`)
SELECT 1, NOW(), 1, NOW(), orders.id, orders.delivery_date, orders.delivery_start_time, orders.delivery_end_time,0,\'state.pending\' FROM orders WHERE state=\'Pendiente\'
');
$this->addSql('UPDATE orders SET state="state.open" WHERE state="Pendiente" OR state="Preparing" OR state="Despachado" OR state="Fallido"');
$this->addSql('UPDATE orders SET state="state.closed" WHERE state="Entregado"');
$this->addSql('UPDATE orders SET state="state.cancelled" WHERE state="Anulado"');
$this->addSql('ALTER TABLE orders DROP delivery_date, DROP delivery_start_time, DROP delivery_end_time');
}
public function down(Schema $schema): void
{
// this down() migration is auto-generated, please modify it to your needs
$this->addSql('CREATE TABLE order_vehicle_feature (order_id INT NOT NULL, vehicle_feature_id INT NOT NULL, INDEX IDX_CBADEB558D9F6D38 (order_id), INDEX IDX_CBADEB55E57637E4 (vehicle_feature_id), PRIMARY KEY(order_id, vehicle_feature_id)) DEFAULT CHARACTER SET utf8 COLLATE `utf8_unicode_ci` ENGINE = InnoDB COMMENT = \'\' ');
$this->addSql('ALTER TABLE order_vehicle_feature ADD CONSTRAINT FK_CBADEB558D9F6D38 FOREIGN KEY (order_id) REFERENCES orders (id) ON DELETE CASCADE');
$this->addSql('ALTER TABLE order_vehicle_feature ADD CONSTRAINT FK_CBADEB55E57637E4 FOREIGN KEY (vehicle_feature_id) REFERENCES vehicle_feature (id) ON DELETE CASCADE');
$this->addSql('DROP TABLE order_shipping_vehicle_feature');
$this->addSql('ALTER TABLE order_shipping DROP start_time, DROP end_time, CHANGE date date DATETIME NOT NULL');
$this->addSql('ALTER TABLE orders ADD delivery_date DATETIME NOT NULL, ADD delivery_start_time TIME DEFAULT NULL, ADD delivery_end_time TIME DEFAULT NULL');
$this->addSql('DROP INDEX idx_state ON order_shipping');
$this->addSql('ALTER TABLE order_shipping DROP state');
}
public function isTransactional(): bool
{
return false;
}
}