diff options
Diffstat (limited to 'app/models')
| -rw-r--r-- | app/models/chouette/vehicle_journey.rb | 52 | ||||
| -rw-r--r-- | app/models/referential.rb | 5 | ||||
| -rw-r--r-- | app/models/referential_cloning.rb | 4 |
3 files changed, 39 insertions, 22 deletions
diff --git a/app/models/chouette/vehicle_journey.rb b/app/models/chouette/vehicle_journey.rb index 8b5354863..818287b04 100644 --- a/app/models/chouette/vehicle_journey.rb +++ b/app/models/chouette/vehicle_journey.rb @@ -355,32 +355,48 @@ module Chouette end end - def fill_passing_time_at_borders - encountered_borders = [] + def fill_passing_times! + encountered_empty_vjas = [] previous_stop = nil vehicle_journey_at_stops.each do |vjas| sp = vjas.stop_point - if sp.stop_area.area_type == "border" - encountered_borders << vjas + if vjas.arrival_time.nil? && vjas.departure_time.nil? + encountered_empty_vjas << vjas else - if encountered_borders.any? - before_cost = journey_pattern.costs_between previous_stop.stop_point, encountered_borders.first.stop_point - after_cost = journey_pattern.costs_between encountered_borders.last.stop_point, sp - if before_cost && before_cost[:distance] && after_cost && after_cost[:distance] - before_distance = before_cost[:distance].to_f - after_distance = after_cost[:distance].to_f + if encountered_empty_vjas.any? + raise "Cannot extrapolate passing times without an initial time" if previous_stop.nil? + distance_between_known = 0 + distance_from_last_known = 0 + cost = journey_pattern.costs_between previous_stop.stop_point, encountered_empty_vjas.first.stop_point + raise "MISSING cost between #{previous_stop.stop_point.stop_area.registration_number} AND #{encountered_empty_vjas.first.stop_point.stop_area.registration_number}" unless cost.present? + distance_between_known += cost[:distance].to_f + cost = journey_pattern.costs_between encountered_empty_vjas.last.stop_point, sp + raise "MISSING cost between #{encountered_empty_vjas.last.stop_point.stop_area.registration_number} AND #{sp.stop_area.registration_number}" unless cost.present? + distance_between_known += cost[:distance].to_f + distance_between_known += encountered_empty_vjas.each_slice(2).inject(0) do |sum, slice| + cost = journey_pattern.costs_between slice.first.stop_point, slice.last.stop_point + raise "MISSING cost between #{slice.first.stop_point.stop_area.registration_number} AND #{slice.last.stop_point.stop_area.registration_number}" unless cost.present? + sum + cost[:distance].to_f + end + + previous = previous_stop + encountered_empty_vjas.each do |empty_vjas| + cost = journey_pattern.costs_between previous.stop_point, empty_vjas.stop_point + raise "MISSING cost between #{previous.stop_point.stop_area.registration_number} AND #{empty_vjas.stop_point.stop_area.registration_number}" unless cost.present? + distance_from_last_known += cost[:distance] + arrival_time = vjas.arrival_time + (vjas.arrival_day_offset - previous_stop.departure_day_offset)*24.hours - time = previous_stop.departure_time + before_distance / (before_distance+after_distance) * (arrival_time - previous_stop.departure_time) + time = previous_stop.departure_time + distance_from_last_known.to_f / distance_between_known.to_f * (arrival_time - previous_stop.departure_time) day_offset = time.day - 1 time -= day_offset*24.hours - encountered_borders.each do |b| - b.update_attribute :arrival_time, time - b.update_attribute :arrival_day_offset, previous_stop.arrival_day_offset + day_offset - b.update_attribute :departure_time, time - b.update_attribute :departure_day_offset, previous_stop.departure_day_offset + day_offset - end + + empty_vjas.update_attribute :arrival_time, time + empty_vjas.update_attribute :arrival_day_offset, previous_stop.arrival_day_offset + day_offset + empty_vjas.update_attribute :departure_time, time + empty_vjas.update_attribute :departure_day_offset, previous_stop.departure_day_offset + day_offset + previous = empty_vjas end - encountered_borders = [] + encountered_empty_vjas = [] end previous_stop = vjas end diff --git a/app/models/referential.rb b/app/models/referential.rb index 933bc78e3..b4f64fad1 100644 --- a/app/models/referential.rb +++ b/app/models/referential.rb @@ -59,7 +59,6 @@ class Referential < ApplicationModel belongs_to :referential_suite - scope :pending, -> { where(ready: false, failed_at: nil, archived_at: nil) } scope :active, -> { where(ready: true, failed_at: nil, archived_at: nil) } scope :failed, -> { where.not(failed_at: nil) } @@ -271,7 +270,8 @@ class Referential < ApplicationModel stop_area_referential: from.stop_area_referential, created_from: from, objectid_format: from.objectid_format, - metadatas: from.metadatas.map { |m| ReferentialMetadata.new_from(m, organisation) } + metadatas: from.metadatas.map { |m| ReferentialMetadata.new_from(m, organisation) }, + ready: false ) end @@ -471,6 +471,7 @@ class Referential < ApplicationModel end def destroy_schema + return unless ActiveRecord::Base.connection.schema_names.include?(slug) Apartment::Tenant.drop slug end diff --git a/app/models/referential_cloning.rb b/app/models/referential_cloning.rb index 4179ba312..cb8ad3630 100644 --- a/app/models/referential_cloning.rb +++ b/app/models/referential_cloning.rb @@ -54,7 +54,7 @@ class ReferentialCloning < ApplicationModel end def dump_command - "PGPASSWORD=#{password} pg_dump --host #{host} --username #{username} --schema=#{source_schema} #{database}" + "PGPASSWORD='#{password}' pg_dump --host #{host} --username #{username} --schema=#{source_schema} #{database}" end def sed_command @@ -62,7 +62,7 @@ class ReferentialCloning < ApplicationModel end def restore_command - "PGPASSWORD=#{password} psql -q --host #{host} --username #{username} #{database}" + "PGPASSWORD='#{password}' psql -q --host #{host} --username #{username} #{database}" end def clean |
