diff options
Diffstat (limited to 'app/models/merge.rb')
| -rw-r--r-- | app/models/merge.rb | 80 |
1 files changed, 73 insertions, 7 deletions
diff --git a/app/models/merge.rb b/app/models/merge.rb index 562e19343..683acba82 100644 --- a/app/models/merge.rb +++ b/app/models/merge.rb @@ -84,13 +84,11 @@ class Merge < ActiveRecord::Base new.save! - referential.metadatas.each do |metadata| - metadata.line_ids.each do |line_id| - metadata.periodes.each do |period| - # TODO - puts "Clean data for #{line_id} #{period}" - end - end + line_periods = LinePeriods.from_metadatas(referential.metadatas) + + line_periods.each do |line_id, periods| + # TODO + puts "Clean data for #{line_id} #{periods.inspect}" end # let's merge data :) @@ -164,6 +162,7 @@ class Merge < ActiveRecord::Base new.switch do referential_journey_patterns.each do |journey_pattern| # find parent route by checksum + # TODO add line_id for security associated_route_checksum = referential_routes_checksums[journey_pattern.route_id] existing_associated_route = new.routes.find_by checksum: associated_route_checksum @@ -202,6 +201,7 @@ class Merge < ActiveRecord::Base new.switch do referential_vehicle_journeys.each do |vehicle_journey| # find parent journey pattern by checksum + # TODO add line_id for security 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 @@ -239,6 +239,72 @@ class Merge < ActiveRecord::Base end end + referential_time_tables_by_id, referential_time_tables_with_lines = referential.switch do + 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") + + 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 + end + + [ time_tables_by_id, time_tables_by_lines ] + end + + new.switch do + referential_time_tables_with_lines.each do |line_id, time_tables_properties| + line = workbench.line_referential.lines.find(line_id) + + time_tables_properties.each do |properties| + time_table = referential_time_tables_by_id[properties[:id]] + + attributes = time_table.attributes.merge( + id: nil, + comment: "Ligne #{line.name} - #{time_table.comment}", + calendar_id: nil, + objectid: "merge:time_table:#{line_id}-#{time_table.checksum}" + ) + candidate_time_table = new.time_tables.build attributes + + time_table.dates.each do |date| + date_attributes = date.attributes.merge( + id: nil, + time_table_id: nil + ) + candidate_time_table.dates.build date_attributes + end + time_table.periods.each do |period| + period_attributes = period.attributes.merge( + id: nil, + time_table_id: nil + ) + candidate_time_table.periods.build period_attributes + end + + candidate_time_table.intersect_periods! line_periods.periods(line_id) + + # FIXME + candidate_time_table.set_current_checksum_source + candidate_time_table.update_checksum + + existing_time_table = new.time_tables.find_by checksum: candidate_time_table.checksum + + unless existing_time_table + candidate_time_table.save! + + # if new_time_table.checksum != time_table.checksum + # raise "Checksum has changed: #{time_table.checksum_source} #{new_time_table.checksum_source}" + # end + + existing_time_table = candidate_time_table + end + + # TODO associate VehicleJourney + end + end + end end def save_current |
