feat: manual sorting of additional services
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace DoctrineMigrations;
|
||||
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
use Doctrine\Migrations\AbstractMigration;
|
||||
|
||||
final class Version20260804140000 extends AbstractMigration
|
||||
{
|
||||
public function getDescription(): string
|
||||
{
|
||||
return 'Add manual ordering position to additional services';
|
||||
}
|
||||
|
||||
public function up(Schema $schema): void
|
||||
{
|
||||
// The default only backfills existing rows; it is dropped again so the column matches the mapping.
|
||||
$this->addSql('ALTER TABLE additional_service ADD position INT DEFAULT 0 NOT NULL');
|
||||
$this->addSql('ALTER TABLE additional_service ALTER COLUMN position DROP DEFAULT');
|
||||
|
||||
// Seed the positions with the ordering the admin overview used before, so nothing changes
|
||||
// visually until someone actually drags a row.
|
||||
$this->addSql('
|
||||
UPDATE additional_service s
|
||||
JOIN (
|
||||
SELECT id, ROW_NUMBER() OVER (
|
||||
PARTITION BY accommodation_id
|
||||
ORDER BY date_from ASC, (price <> 0) ASC, label ASC
|
||||
) AS rn
|
||||
FROM additional_service
|
||||
) o ON o.id = s.id
|
||||
SET s.position = o.rn
|
||||
');
|
||||
}
|
||||
|
||||
public function down(Schema $schema): void
|
||||
{
|
||||
$this->addSql('ALTER TABLE additional_service DROP position');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user