diff options
Diffstat (limited to 'app/models/merge.rb')
| -rw-r--r-- | app/models/merge.rb | 31 | 
1 files changed, 26 insertions, 5 deletions
| diff --git a/app/models/merge.rb b/app/models/merge.rb index 7df7aa590..eadeccaa7 100644 --- a/app/models/merge.rb +++ b/app/models/merge.rb @@ -135,12 +135,14 @@ class Merge < ApplicationModel      referential_stop_points_by_route = referential_stop_points.group_by(&:route_id) -    referential_routes_constraint_zones = referential.switch do +    referential_routing_constraint_zones = referential.switch do        referential.routing_constraint_zones.each_with_object(Hash.new { |h,k| h[k] = [] }) do |routing_constraint_zone, hash|          hash[routing_constraint_zone.route_id] << routing_constraint_zone        end      end +    referential_routing_constraint_zones_new_ids = {} +      new.switch do        referential_routes.each do |route|          existing_route = new.routes.find_by line_id: route.line_id, checksum: route.checksum @@ -179,9 +181,9 @@ class Merge < ApplicationModel            stop_point_ids_mapping = Hash[[old_stop_point_ids, new_stop_point_ids].transpose]            # RoutingConstraintZones -          routes_constraint_zones = referential_routes_constraint_zones[route.id] +          routing_constraint_zones = referential_routing_constraint_zones[route.id] -          routes_constraint_zones.each do |routing_constraint_zone| +          routing_constraint_zones.each do |routing_constraint_zone|              objectid = new.routing_constraint_zones.where(objectid: routing_constraint_zone.objectid).exists? ? nil : routing_constraint_zone.objectid              stop_point_ids = routing_constraint_zone.stop_point_ids.map { |id| stop_point_ids_mapping[id] }.compact @@ -197,7 +199,6 @@ class Merge < ApplicationModel              )              new_route.routing_constraint_zones.build attributes -            # No checksum check. RoutingConstraintZones are always recreated            end            new_route.save! @@ -205,6 +206,19 @@ class Merge < ApplicationModel            if new_route.checksum != route.checksum              raise "Checksum has changed: \"#{route.checksum}\", \"#{route.checksum_source}\" -> \"#{new_route.checksum}\", \"#{new_route.checksum_source}\""            end + +          if new_route.routing_constraint_zones.map(&:checksum).sort != routing_constraint_zones.map(&:checksum).sort +            raise "Checksum has changed in RoutingConstraintZones: \"#{new_route.routing_constraint_zones.map(&:checksum).sort}\" -> \"#{route.routing_constraint_zones.map(&:checksum).sort}\"" +          end + +          new_route.routing_constraint_zones.each do |new_routing_constraint_zone| +            routing_constraint_zone = routing_constraint_zones.find { |c| c.checksum = new_routing_constraint_zone.checksum } +            if routing_constraint_zone +              referential_routing_constraint_zones_new_ids[routing_constraint_zone.id] = new_routing_constraint_zone.id +            else +              raise "Can't find RoutingConstraintZone for checksum #{new_routing_constraint_zone.checksum} into #{routing_constraint_zones.inspect}" +            end +          end          end        end      end @@ -311,6 +325,7 @@ class Merge < ApplicationModel              # all other primary must be changed              route_id: existing_associated_journey_pattern.route_id,              journey_pattern_id: existing_associated_journey_pattern.id, +            ignored_routing_contraint_zone_ids: []            )            new_vehicle_journey = new.vehicle_journeys.build attributes @@ -350,10 +365,16 @@ class Merge < ApplicationModel              new_vehicle_journey.purchase_windows << associated_purchase_window            end +          # Rewrite ignored_routing_contraint_zone_ids + +          new_vehicle_journey.ignored_routing_contraint_zone_ids = vehicle_journey.ignored_routing_contraint_zone_ids.map do |id| +            referential_routing_constraint_zones_new_ids[id] +          end.compact +            new_vehicle_journey.save!            if new_vehicle_journey.checksum != vehicle_journey.checksum -            raise "Checksum has changed: #{vehicle_journey.checksum_source} #{new_vehicle_journey.checksum_source}" +            raise "Checksum has changed: \"#{vehicle_journey.checksum_source}\" \"#{vehicle_journey.checksum}\" -> \"#{new_vehicle_journey.checksum_source}\" \"#{new_vehicle_journey.checksum}\""            end            new_vehicle_journey_ids[vehicle_journey.id] = new_vehicle_journey.id | 
