aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/controllers/referentials_controller.rb1
-rw-r--r--app/models/chouette/vehicle_journey.rb52
-rw-r--r--app/models/referential.rb5
-rw-r--r--app/models/referential_cloning.rb4
-rw-r--r--app/policies/referential_policy.rb2
-rw-r--r--app/views/workbenches/show.html.slim5
6 files changed, 44 insertions, 25 deletions
diff --git a/app/controllers/referentials_controller.rb b/app/controllers/referentials_controller.rb
index 8addfbc32..80f954cde 100644
--- a/app/controllers/referentials_controller.rb
+++ b/app/controllers/referentials_controller.rb
@@ -136,7 +136,6 @@ class ReferentialsController < ChouetteController
def create_resource(referential)
referential.organisation = current_organisation
- referential.ready = true
super
end
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
diff --git a/app/policies/referential_policy.rb b/app/policies/referential_policy.rb
index 14f81cf5c..4b8b40b36 100644
--- a/app/policies/referential_policy.rb
+++ b/app/policies/referential_policy.rb
@@ -34,7 +34,7 @@ class ReferentialPolicy < ApplicationPolicy
end
def unarchive?
- !referential_read_only? && record.archived? && !record.merged? && organisation_match? && user.has_permission?('referentials.update')
+ record.ready? && record.archived? && !record.merged? && organisation_match? && user.has_permission?('referentials.update')
end
def common_lines?
diff --git a/app/views/workbenches/show.html.slim b/app/views/workbenches/show.html.slim
index b0276c5ce..213c9e5f2 100644
--- a/app/views/workbenches/show.html.slim
+++ b/app/views/workbenches/show.html.slim
@@ -62,7 +62,10 @@
attribute: Proc.new {|w| w.merged_at ? l(w.merged_at, format: :short) : '-'} \
) \
],
- selectable: ->(ref){ @workbench.referentials.include?(ref) },
+ selectable: ->(ref) { \
+ @workbench.referentials.include?(ref) && \
+ !ref.pending? \
+ },
cls: 'table has-filter has-search',
action: :index