diff options
| author | Alban Peignier | 2017-12-26 22:05:49 +0100 | 
|---|---|---|
| committer | Alban Peignier | 2018-01-05 10:23:29 +0100 | 
| commit | 97a9a7d921d412fd8300c9d84e719ee494079c3b (patch) | |
| tree | 6ea695518e72de526bf9955966a0136ac3670cea | |
| parent | cc624a4db9cb69ed78725f24eec74ece96eea1a2 (diff) | |
| download | chouette-core-97a9a7d921d412fd8300c9d84e719ee494079c3b.tar.bz2 | |
Merge VehicleJourneys and VehicleJourneyAtStops. Refs #5299
| -rw-r--r-- | app/models/merge.rb | 50 | ||||
| -rw-r--r-- | spec/models/merge_spec.rb | 7 | 
2 files changed, 56 insertions, 1 deletions
| diff --git a/app/models/merge.rb b/app/models/merge.rb index 9a8862fb2..562e19343 100644 --- a/app/models/merge.rb +++ b/app/models/merge.rb @@ -33,8 +33,9 @@ class Merge < ActiveRecord::Base      save_current    rescue => e -    Rails.logger.error "Merge failed: #{e}" +    Rails.logger.error "Merge failed: #{e} #{e.backtrace.join("\n")}"      update status: :failed +    raise e if Rails.env.test?    ensure      attributes = { ended_at: Time.now }      attributes[:status] = :successful if status == :running @@ -158,6 +159,8 @@ class Merge < ActiveRecord::Base        [journey_patterns, journey_patterns_stop_areas_objectids]      end +    referential_journey_patterns_checksums = Hash[referential_journey_patterns.map { |j| [ j.id, j.checksum ] }] +      new.switch do        referential_journey_patterns.each do |journey_pattern|          # find parent route by checksum @@ -191,6 +194,51 @@ class Merge < ActiveRecord::Base          end        end      end + +    referential_vehicle_journeys = referential.switch do +      referential.vehicle_journeys.includes(:vehicle_journey_at_stops).all.to_a +    end + +    new.switch do +      referential_vehicle_journeys.each do |vehicle_journey| +        # find parent journey pattern by checksum +        associated_journey_pattern_checksum = referential_journey_patterns_checksums[vehicle_journey.journey_pattern_id] +        existing_associated_journey_pattern = new.journey_patterns.find_by checksum: associated_journey_pattern_checksum + +        existing_vehicle_journey = new.vehicle_journeys.find_by journey_pattern_id: existing_associated_journey_pattern.id, checksum: vehicle_journey.checksum + +        unless existing_vehicle_journey +          attributes = vehicle_journey.attributes.merge( +            id: nil, + +            objectid: "merge:vehicle_journey:#{existing_associated_journey_pattern.checksum}-#{vehicle_journey.checksum}", #FIXME + +            # all other primary must be changed +            route_id: existing_associated_journey_pattern.route_id, +            journey_pattern_id: existing_associated_journey_pattern.id, +          ) +          new_vehicle_journey = new.vehicle_journeys.build attributes + +          # Create VehicleJourneyAtStops + +          vehicle_journey.vehicle_journey_at_stops.each_with_index do |vehicle_journey_at_stop, index| +            at_stop_attributes = vehicle_journey_at_stop.attributes.merge( +              id: nil, +              stop_point_id: existing_associated_journey_pattern.stop_points[index].id +            ) +            new_vehicle_journey.vehicle_journey_at_stops.build at_stop_attributes +          end + +          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}" +          end +        end + +      end +    end +    end    def save_current diff --git a/spec/models/merge_spec.rb b/spec/models/merge_spec.rb index c36a0aa4a..e9ae3762b 100644 --- a/spec/models/merge_spec.rb +++ b/spec/models/merge_spec.rb @@ -32,6 +32,13 @@ RSpec.describe Merge do            FactoryGirl.create :journey_pattern, route: route, stop_points: route.stop_points.sample(3)          end        end + +      referential.journey_patterns.each do |journey_pattern| +        3.times do +          v = FactoryGirl.create :vehicle_journey, journey_pattern: journey_pattern, company: company +          puts v.checksum_source +        end +      end      end      merge = Merge.create!(workbench: referential.workbench, referentials: [referential, referential]) | 
