aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/merge.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/merge.rb')
-rw-r--r--app/models/merge.rb25
1 files changed, 24 insertions, 1 deletions
diff --git a/app/models/merge.rb b/app/models/merge.rb
index 2824e1f83..aca2f4d4d 100644
--- a/app/models/merge.rb
+++ b/app/models/merge.rb
@@ -145,12 +145,19 @@ class Merge < ApplicationModel
end
end
+ referential_route_opposite_route_ids = referential.switch do
+ Hash[referential.routes.where('opposite_route_id is not null').pluck(:id, :opposite_route_id)]
+ end
+
referential_routing_constraint_zones_new_ids = {}
new.switch do
+ route_ids_mapping = {}
+
referential_routes.each do |route|
existing_route = new.routes.find_by line_id: route.line_id, checksum: route.checksum
if existing_route
+ route_ids_mapping[route.id] = existing_route.id
existing_route.merge_metadata_from route
else
objectid = Chouette::Route.where(objectid: route.objectid).exists? ? nil : route.objectid
@@ -159,7 +166,7 @@ class Merge < ApplicationModel
objectid: objectid,
# line_id is the same
# all other primary must be changed
- opposite_route_id: nil #FIXME
+ opposite_route_id: nil # merged after
)
new_route = new.routes.build attributes
@@ -179,6 +186,8 @@ class Merge < ApplicationModel
# We need to create StopPoints to known new primary keys
new_route.save!
+ route_ids_mapping[route.id] = new_route.id
+
old_stop_point_ids = route_stop_points.sort_by(&:position).map(&:id)
new_stop_point_ids = new_route.stop_points.sort_by(&:position).map(&:id)
@@ -225,6 +234,20 @@ class Merge < ApplicationModel
end
end
end
+
+ referential_route_opposite_route_ids.each do |route_id, opposite_route_id|
+ new_route_id = route_ids_mapping[route_id]
+ new_opposite_route_id = route_ids_mapping[opposite_route_id]
+
+ new_route = nil
+ if new_route_id && new_opposite_route_id
+ if new_route = new.routes.find_by(id: new_route_id)
+ new_route.update_column :opposite_route_id, new_opposite_route_id
+ end
+ end
+
+ Rails.logger.warn "Can't merge opposite route for Route #{route_id}" unless new_route
+ end
end
# JourneyPatterns