addSql(sprintf('ALTER TABLE %s ADD COLUMN latitude NUMERIC(10, 7) DEFAULT NULL', $table)); $this->addSql(sprintf('ALTER TABLE %s ADD COLUMN longitude NUMERIC(10, 7) DEFAULT NULL', $table)); $this->addSql(sprintf('ALTER TABLE %s ADD COLUMN geo_manual BOOLEAN DEFAULT false NOT NULL', $table)); $this->addSql(sprintf('ALTER TABLE %s ADD COLUMN geocoded_at TIMESTAMP(0) WITH TIME ZONE DEFAULT NULL', $table)); $this->comment($table, 'latitude', 'Latitude WGS84 de l adresse (geocodage BAN ou pin manuel). NULL = non geolocalisee, exclue du calcul de tournee (RG-6.05).'); $this->comment($table, 'longitude', 'Longitude WGS84 de l adresse (geocodage BAN ou pin manuel). NULL = non geolocalisee.'); $this->comment($table, 'geo_manual', 'Pin positionne/corrige a la main : si vrai, le geocodage auto ne reecrit plus les coordonnees (RG-6.08). Faux par defaut.'); $this->comment($table, 'geocoded_at', 'Date du dernier geocodage automatique reussi (NULL si jamais geocode ou pin 100% manuel).'); } } public function down(Schema $schema): void { foreach (self::TABLES as $table) { $this->addSql(sprintf('ALTER TABLE %s DROP COLUMN latitude', $table)); $this->addSql(sprintf('ALTER TABLE %s DROP COLUMN longitude', $table)); $this->addSql(sprintf('ALTER TABLE %s DROP COLUMN geo_manual', $table)); $this->addSql(sprintf('ALTER TABLE %s DROP COLUMN geocoded_at', $table)); } } /** * Emet un `COMMENT ON COLUMN` en dollar-quoting Postgres ($_$...$_$) pour * eviter tout echappement. */ private function comment(string $table, string $column, string $description): void { $this->addSql(sprintf( 'COMMENT ON COLUMN %s.%s IS $_$%s$_$', '"'.str_replace('"', '""', $table).'"', '"'.str_replace('"', '""', $column).'"', $description, )); } }