diff --git a/base_location/migrations/12.0.1.0.0/post-migration.py b/base_location/migrations/12.0.1.0.0/post-migration.py index aee54faf0..093fb0564 100644 --- a/base_location/migrations/12.0.1.0.0/post-migration.py +++ b/base_location/migrations/12.0.1.0.0/post-migration.py @@ -12,6 +12,33 @@ def migrate(env, version): env.cr, "ALTER TABLE res_city_zip ADD %s INTEGER", (AsIs(column_name), ), ) + # Create a city for ZIPs without it + openupgrade.logged_query( + env.cr, """ + INSERT INTO res_city ( + name, state_id, country_id, + create_uid, create_date, write_uid, write_date + ) + SELECT + city, state_id, country_id, + MIN(create_uid), MIN(create_date), MIN(write_uid), MIN(write_date) + FROM res_better_zip + WHERE city_id IS NULL + GROUP BY city, state_id, country_id + ON CONFLICT DO NOTHING""", + ) + # Update city_id in res_better_zip + openupgrade.logged_query( + env.cr, """ + UPDATE res_better_zip rbz + SET city_id = rc.id + FROM res_city rc + WHERE rc.name = rbz.city + AND rc.state_id = rbz.state_id + AND rc.country_id = rbz.country_id + AND rbz.city_id IS NULL""", + ) + # Create records for new model openupgrade.logged_query( env.cr, """ INSERT INTO res_city_zip ( @@ -20,7 +47,8 @@ def migrate(env, version): SELECT id, name, city_id FROM res_better_zip - WHERE city_id IS NOT NULL""", + WHERE city_id IS NOT NULL + ON CONFLICT DO NOTHING""", (AsIs(column_name), ), ) # Recompute display name for entries inserted by SQL