diff options
| author | Alban Peignier | 2018-04-22 23:49:42 +0200 | 
|---|---|---|
| committer | Alban Peignier | 2018-04-22 23:49:42 +0200 | 
| commit | edcff17d80927f7efc3f4014918c05358c992d9c (patch) | |
| tree | 0a1e8b4e9df3fadf327cdb7132ff5578e18c7fcc | |
| parent | a619aea097fc777e6b054cb85e70cbd87e5ccb1a (diff) | |
| download | chouette-core-edcff17d80927f7efc3f4014918c05358c992d9c.tar.bz2 | |
Associate TimeTable & VehicleJourneys by using VehicleJourney ids and not checksum. Refs #6648
| -rw-r--r-- | app/models/merge.rb | 16 | 
1 files changed, 13 insertions, 3 deletions
| diff --git a/app/models/merge.rb b/app/models/merge.rb index 450cd98bd..7df7aa590 100644 --- a/app/models/merge.rb +++ b/app/models/merge.rb @@ -285,6 +285,8 @@ class Merge < ApplicationModel        [purchase_windows_by_checksum, vehicle_journey_purchase_window_checksums]      end +    new_vehicle_journey_ids = {} +      new.switch do        referential_vehicle_journeys.each do |vehicle_journey|          # find parent journey pattern by checksum @@ -299,6 +301,7 @@ class Merge < ApplicationModel          if existing_vehicle_journey            existing_vehicle_journey.merge_metadata_from vehicle_journey +          new_vehicle_journey_ids[vehicle_journey.id] = existing_vehicle_journey.id          else            objectid = Chouette::VehicleJourney.where(objectid: vehicle_journey.objectid).exists? ? nil : vehicle_journey.objectid            attributes = vehicle_journey.attributes.merge( @@ -352,6 +355,8 @@ class Merge < ApplicationModel            if new_vehicle_journey.checksum != vehicle_journey.checksum              raise "Checksum has changed: #{vehicle_journey.checksum_source} #{new_vehicle_journey.checksum_source}"            end + +          new_vehicle_journey_ids[vehicle_journey.id] = new_vehicle_journey.id          end        end @@ -363,14 +368,14 @@ class Merge < ApplicationModel        time_tables_by_id = Hash[referential.time_tables.includes(:dates, :periods).all.to_a.map { |t| [t.id, t] }]        time_tables_with_associated_lines = -        referential.time_tables.joins(vehicle_journeys: {route: :line}).pluck("lines.id", :id, "vehicle_journeys.checksum") +        referential.time_tables.joins(vehicle_journeys: {route: :line}).pluck("lines.id", :id, "vehicle_journeys.id")        # Because TimeTables will be modified according metadata periods        # we're loading timetables per line (line is associated to a period list)        #        # line_id: [ { time_table.id, vehicle_journey.checksum } ]        time_tables_by_lines = time_tables_with_associated_lines.inject(Hash.new { |h,k| h[k] = [] }) do |hash, row| -        hash[row.shift] << {id: row.first, vehicle_journey_checksum: row.second} +        hash[row.shift] << {id: row.first, vehicle_journey_id: row.second}          hash        end @@ -440,7 +445,12 @@ class Merge < ApplicationModel            # associate VehicleJourney -          associated_vehicle_journey = line.vehicle_journeys.find_by!(checksum: properties[:vehicle_journey_checksum]) +          new_vehicle_journey_id = new_vehicle_journey_ids[properties[:vehicle_journey_id]] +          unless new_vehicle_journey_id +            raise "TimeTable #{existing_time_table.inspect} associated to a not-merged VehicleJourney: #{properties[:vehicle_journey_id]}" +          end + +          associated_vehicle_journey = line.vehicle_journeys.find(new_vehicle_journey_id)            associated_vehicle_journey.time_tables << existing_time_table          end        end | 
