aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZakaria BOUZIANE2014-10-07 15:44:58 +0200
committerZakaria BOUZIANE2014-10-07 15:44:58 +0200
commitd2eb3a6d8b7fca06712426d416302934a56a0a28 (patch)
tree74074b2a9b8026ec6274ff456df7347fea37302f
parentbf37e97d8a86814b1bc2f844cbcff86ab0a43266 (diff)
downloadchouette-core-d2eb3a6d8b7fca06712426d416302934a56a0a28.tar.bz2
HUB Export : SISMO profile
-rw-r--r--app/exporters/chouette/hub/connection_link_exporter.rb2
-rw-r--r--app/exporters/chouette/hub/direction_exporter.rb39
-rw-r--r--app/exporters/chouette/hub/exporter.rb53
-rw-r--r--app/exporters/chouette/hub/journey_pattern_exporter.rb13
-rw-r--r--app/exporters/chouette/hub/line_exporter.rb2
-rw-r--r--app/exporters/chouette/hub/physical_stop_area_exporter.rb3
-rw-r--r--app/exporters/chouette/hub/route_exporter.rb44
-rw-r--r--app/exporters/chouette/hub/vehicle_journey_at_stop_exporter.rb29
-rw-r--r--app/exporters/chouette/hub/vehicle_journey_exporter.rb19
-rw-r--r--app/exporters/chouette/hub/vehicle_journey_operation_exporter.rb61
-rw-r--r--app/views/api/hub/arrets_generiques.hub.erb2
-rw-r--r--app/views/api/hub/arrets_physiques.hub.erb2
-rw-r--r--app/views/api/hub/chemins.hub.erb2
-rw-r--r--app/views/api/hub/correspondances.hub.erb2
-rw-r--r--app/views/api/hub/courses.hub.erb4
-rw-r--r--app/views/api/hub/courses_operations.hub.erb2
-rw-r--r--app/views/api/hub/directions.hub.erb1
-rw-r--r--app/views/api/hub/horaires.hub.erb4
-rw-r--r--app/views/api/hub/lignes.hub.erb2
-rw-r--r--app/views/api/hub/schemas.hub.erb1
-rw-r--r--config/deploy.rb2
-rw-r--r--config/locales/exports.yml6
22 files changed, 254 insertions, 41 deletions
diff --git a/app/exporters/chouette/hub/connection_link_exporter.rb b/app/exporters/chouette/hub/connection_link_exporter.rb
index c7d1820d8..e70c773b9 100644
--- a/app/exporters/chouette/hub/connection_link_exporter.rb
+++ b/app/exporters/chouette/hub/connection_link_exporter.rb
@@ -6,6 +6,8 @@ class Chouette::Hub::ConnectionLinkExporter
@connection_link = connection_link
@directory = directory
@template = File.open('app/views/api/hub/correspondances.hub.erb' ){ |f| f.read }
+ @departure = Chouette::StopArea.find(@connection_link.departure_id) if @connection_link.departure_id
+ @arrival = Chouette::StopArea.find(@connection_link.arrival_id) if @connection_link.arrival_id
end
def render()
diff --git a/app/exporters/chouette/hub/direction_exporter.rb b/app/exporters/chouette/hub/direction_exporter.rb
new file mode 100644
index 000000000..27f89b4a1
--- /dev/null
+++ b/app/exporters/chouette/hub/direction_exporter.rb
@@ -0,0 +1,39 @@
+class Chouette::Hub::DirectionExporter
+ include ERB::Util
+ attr_accessor :journey_pattern, :directory, :template
+
+ def initialize(journey_pattern, directory)
+ @journey_pattern = journey_pattern
+ @directory = directory
+ @template = File.open('app/views/api/hub/directions.hub.erb' ){ |f| f.read }
+ @arrival_stop_point = Chouette::StopPoint.find(@journey_pattern.arrival_stop_point_id) if @journey_pattern.arrival_stop_point_id
+ @direction = Chouette::StopArea.find(@arrival_stop_point.stop_area_id) if @arrival_stop_point
+ route = Chouette::Route.find(@journey_pattern.route_id) if @journey_pattern.route_id
+ @line = Chouette::Line.find(route.line_id) if route
+ end
+
+ def render()
+ ERB.new(@template).result(binding)
+ end
+
+ def hub_name
+ "/DIRECTION.TXT"
+ end
+
+ def self.save( journey_patterns, directory, hub_export)
+ journey_patterns.each do |journey_pattern|
+ self.new( journey_pattern, directory).tap do |specific_exporter|
+ specific_exporter.save
+ end
+ end
+ hub_export.log_messages.create( :severity => "ok", :key => "EXPORT|DIRECTION_COUNT", :arguments => {"0" => journey_patterns.size})
+ end
+
+ def save
+ File.open(directory + hub_name , "a") do |f|
+ f.write("DIRECTION\n") if f.size == 0
+ f.write(render)
+ end if journey_pattern.present?
+ end
+end
+
diff --git a/app/exporters/chouette/hub/exporter.rb b/app/exporters/chouette/hub/exporter.rb
index 4dcc00045..8b9bc226e 100644
--- a/app/exporters/chouette/hub/exporter.rb
+++ b/app/exporters/chouette/hub/exporter.rb
@@ -30,15 +30,15 @@ class Chouette::Hub::Exporter
def select_lines(object, ids)
if object == "network"
- ids.present? ? Chouette::Line.includes(:routes).where( :network_id => ids.split(",")).order(:name) :
- Chouette::Line.joins(:network).includes(:routes).order(:name)
+ ids.present? ? Chouette::Line.includes(:routes).where( :network_id => ids.split(",")).order(:objectid) :
+ Chouette::Line.joins(:network).includes(:routes).order(:objectid)
elsif object == "company"
- ids.present? ? Chouette::Line.includes(:routes).where( :company_id => ids.split(",")).order(:name) :
- Chouette::Line.joins(:company).includes(:routes).order(:name)
+ ids.present? ? Chouette::Line.includes(:routes).where( :company_id => ids.split(",")).order(:objectid) :
+ Chouette::Line.joins(:company).includes(:routes).order(:objectid)
elsif object == "line" && ids.present?
- Chouette::Line.includes(:routes).where( :id => ids.split(",")).order(:name)
+ Chouette::Line.includes(:routes).where( :id => ids.split(",")).order(:objectid)
else
- Chouette::Line.includes(:routes).order(:name)
+ Chouette::Line.includes(:routes).order(:objectid)
end
end
@@ -81,9 +81,23 @@ class Chouette::Hub::Exporter
@time_tables = select_time_tables(options[:start_date], options[:end_date])
@lines = select_lines( options[:o], options[:id] )
- @routes = lines.map(&:routes).flatten.sort {|a,b| (a.name && b.name) ? a.name <=> b.name : a.id <=> b.id} if lines_exportable?
- @journey_patterns = Chouette::JourneyPattern.where(:route_id => routes.map(&:id)).order(:name) if routes_exportable?
- @vehicle_journeys = Chouette::VehicleJourney.where(:route_id => routes.map(&:id)).order(:objectid) if routes_exportable?
+
+ #@routes = @lines.map(&:routes).flatten.sort {|a,b| (a.name && b.name) ? a.name <=> b.name : a.id <=> b.id} if lines_exportable?
+ @routes = []
+ if @lines
+ @lines.each { |line| @routes << Chouette::Route.where( "line_id = ?", line.id ) }
+ end
+ #@routes = @routes.flatten
+
+ #@journey_patterns = Chouette::JourneyPattern.where(:route_id => @routes.map(&:id)).order(:objectid) if routes_exportable?
+ @journey_patterns = []
+ if @routes
+ @routes.each { |subroutes| @journey_patterns << Chouette::JourneyPattern.where( :route_id => subroutes.map(&:id) ).order(:objectid) }
+ end
+ @journey_patterns = @journey_patterns.flatten
+
+ @routes = @routes.flatten
+ @vehicle_journeys = Chouette::VehicleJourney.where(:route_id => @routes.map(&:id)).order(:objectid) if routes_exportable?
vjs = []
tts = []
@@ -96,7 +110,7 @@ class Chouette::Hub::Exporter
@time_tables = tts.flatten.uniq
@vehicle_journeys = vjs.uniq
- vehicle_journey_at_stops = Chouette::VehicleJourneyAtStop.where( :vehicle_journey_id => @vehicle_journeys.map(&:id) ).order(:id) if vehicle_journeys_exportable?
+ vehicle_journey_at_stops = Chouette::VehicleJourneyAtStop.where( :vehicle_journey_id => @vehicle_journeys.map(&:id) ) #.order(:id) if vehicle_journeys_exportable?
if time_tables_exportable?
Chouette::Hub::TimeTableExporter.save(@time_tables, temp_dir, hub_export)
@@ -104,10 +118,19 @@ class Chouette::Hub::Exporter
log_overflow_warning(Chouette::TimeTable)
end
+ if journey_patterns_exportable?
+ Chouette::Hub::RouteExporter.save(@routes, temp_dir, hub_export)
+ Chouette::Hub::JourneyPatternExporter.save(@journey_patterns, temp_dir, hub_export)
+ Chouette::Hub::DirectionExporter.save(@journey_patterns, temp_dir, hub_export)
+ else
+ log_overflow_warning(Chouette::JourneyPattern) if routes_exportable?
+ end
+
if vehicle_journeys_exportable?
Chouette::Hub::VehicleJourneyExporter.save(@vehicle_journeys, temp_dir, hub_export)
- Chouette::Hub::VehicleJourneyAtStopExporter.save(vehicle_journey_at_stops, temp_dir, hub_export)
Chouette::Hub::VehicleJourneyOperationExporter.save(@vehicle_journeys, temp_dir, hub_export)
+ #Chouette::Hub::VehicleJourneyAtStopExporter.save(vehicle_journey_at_stops, temp_dir, hub_export)
+ Chouette::Hub::VehicleJourneyAtStopExporter.save(@vehicle_journeys, temp_dir, hub_export, vehicle_journey_at_stops.count)
else
log_overflow_warning(Chouette::VehicleJourney)
end
@@ -119,16 +142,10 @@ class Chouette::Hub::Exporter
Chouette::Hub::CommercialStopAreaExporter.save(commercial_stop_areas, temp_dir, hub_export)
Chouette::Hub::PhysicalStopAreaExporter.save(physical_stop_areas, temp_dir, hub_export)
- connection_links = Chouette::ConnectionLink.where( "departure_id IN (?) AND arrival_id IN (?)", (physical_stop_areas.map(&:id) + commercial_stop_areas.map(&:id)), (physical_stop_areas.map(&:id) + commercial_stop_areas.map(&:id)) )
+ connection_links = Chouette::ConnectionLink.where( "departure_id IN (?) AND arrival_id IN (?)", (physical_stop_areas.map(&:id) + commercial_stop_areas.map(&:id)), (physical_stop_areas.map(&:id) + commercial_stop_areas.map(&:id)) ).order(:id)
Chouette::Hub::ConnectionLinkExporter.save(connection_links, temp_dir, hub_export)
- if journey_patterns_exportable?
- Chouette::Hub::JourneyPatternExporter.save(@journey_patterns, temp_dir, hub_export)
- else
- log_overflow_warning(Chouette::JourneyPattern) if routes_exportable?
- end
-
if lines_exportable?
Chouette::Hub::LineExporter.save(@lines, temp_dir, hub_export)
networks = Chouette::Network.where( :id => @lines.map(&:network_id))
diff --git a/app/exporters/chouette/hub/journey_pattern_exporter.rb b/app/exporters/chouette/hub/journey_pattern_exporter.rb
index 03f20e6bf..27333d90e 100644
--- a/app/exporters/chouette/hub/journey_pattern_exporter.rb
+++ b/app/exporters/chouette/hub/journey_pattern_exporter.rb
@@ -7,6 +7,19 @@ class Chouette::Hub::JourneyPatternExporter
@directory = directory
@template = File.open('app/views/api/hub/chemins.hub.erb' ){ |f| f.read }
@type = "COM"
+ if @journey_pattern.route
+ if @journey_pattern.route.line_id
+ @line = Chouette::Line.find(@journey_pattern.route.line_id)
+ end
+ end
+ @stop_areas = []
+ if @journey_pattern.stop_points
+ @stop_points = @journey_pattern.stop_points.order(:position)
+ if @stop_points
+ @stop_points.each { |sp| @stop_areas << Chouette::StopArea.find(sp.stop_area_id) }
+ end
+ end
+ @stop_areas = @stop_areas.flatten
end
def render()
diff --git a/app/exporters/chouette/hub/line_exporter.rb b/app/exporters/chouette/hub/line_exporter.rb
index f8cf07b60..9804bf96c 100644
--- a/app/exporters/chouette/hub/line_exporter.rb
+++ b/app/exporters/chouette/hub/line_exporter.rb
@@ -6,6 +6,8 @@ class Chouette::Hub::LineExporter
@line = line
@directory = directory
@template = File.open('app/views/api/hub/lignes.hub.erb' ){ |f| f.read }
+ @company = @line.company
+ @network = @line.network
if (line.group_of_lines.count > 0)
@group_of_line = line.group_of_lines[0].objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2')
end
diff --git a/app/exporters/chouette/hub/physical_stop_area_exporter.rb b/app/exporters/chouette/hub/physical_stop_area_exporter.rb
index 23e5d73ec..13e236b68 100644
--- a/app/exporters/chouette/hub/physical_stop_area_exporter.rb
+++ b/app/exporters/chouette/hub/physical_stop_area_exporter.rb
@@ -7,6 +7,9 @@ class Chouette::Hub::PhysicalStopAreaExporter
@directory = directory
@template = File.open('app/views/api/hub/arrets_physiques.hub.erb' ){ |f| f.read }
@type = "NNNNNNNNNNNNNNNNNN"
+ if @stop_area.parent_id
+ @parent = Chouette::StopArea.find(@stop_area.parent_id)
+ end
@stop_area.referential.projection_type = "27562"
wgs84 = '+proj=lonlat +datum=WGS84 +ellps=WGS84'
diff --git a/app/exporters/chouette/hub/route_exporter.rb b/app/exporters/chouette/hub/route_exporter.rb
new file mode 100644
index 000000000..2d25df9e0
--- /dev/null
+++ b/app/exporters/chouette/hub/route_exporter.rb
@@ -0,0 +1,44 @@
+class Chouette::Hub::RouteExporter
+ include ERB::Util
+ attr_accessor :route, :directory, :template
+
+ def initialize(route, directory)
+ @route = route
+ @directory = directory
+ @template = File.open('app/views/api/hub/schemas.hub.erb' ){ |f| f.read }
+ @line = Chouette::Line.find(@route.line_id) if @route.line_id
+ @stop_areas = []
+ if @route.stop_points
+ @stop_points = @route.stop_points.order(:position)
+ if @stop_points
+ @stop_points.each { |sp| @stop_areas << Chouette::StopArea.find(sp.stop_area_id) }
+ end
+ end
+ @stop_areas = @stop_areas.flatten
+ end
+
+ def render()
+ ERB.new(@template).result(binding)
+ end
+
+ def hub_name
+ "/SCHEMA.TXT"
+ end
+
+ def self.save( routes, directory, hub_export)
+ routes.each do |route|
+ self.new( route, directory).tap do |specific_exporter|
+ specific_exporter.save
+ end
+ end
+ hub_export.log_messages.create( :severity => "ok", :key => "EXPORT|SCHEMA_COUNT", :arguments => {"0" => routes.size})
+ end
+
+ def save
+ File.open(directory + hub_name , "a") do |f|
+ f.write("SCHEMA\n") if f.size == 0
+ f.write(render)
+ end if route.present?
+ end
+end
+
diff --git a/app/exporters/chouette/hub/vehicle_journey_at_stop_exporter.rb b/app/exporters/chouette/hub/vehicle_journey_at_stop_exporter.rb
index 12cb5e1df..25e3bb864 100644
--- a/app/exporters/chouette/hub/vehicle_journey_at_stop_exporter.rb
+++ b/app/exporters/chouette/hub/vehicle_journey_at_stop_exporter.rb
@@ -2,11 +2,16 @@ class Chouette::Hub::VehicleJourneyAtStopExporter
include ERB::Util
attr_accessor :vehicle_journey_at_stop, :directory, :template
- def initialize(vehicle_journey_at_stop, directory)
+ def initialize(vehicle_journey_at_stop, directory, index, id)
@vehicle_journey_at_stop = vehicle_journey_at_stop
@directory = directory
+ @vehicle_journey_num = index
+ @vehicle_journey_id = id
@template = File.open('app/views/api/hub/horaires.hub.erb' ) { |f| f.read }
- @stop_area_code = Chouette::StopArea.find(@vehicle_journey_at_stop.stop_point.stop_area_id).objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2')
+ stop_point = @vehicle_journey_at_stop.stop_point
+ stop_area = stop_point.stop_area
+ @stop_area_code = stop_area.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if stop_area
+ @stop_area_id = stop_area.id if stop_area
@arrival_time = @vehicle_journey_at_stop.arrival_time.sec + 60 * @vehicle_journey_at_stop.arrival_time.min + 60 * 60 * @vehicle_journey_at_stop.arrival_time.hour
@arrival_type = "A"
@departure_time = @vehicle_journey_at_stop.departure_time.sec + 60 * @vehicle_journey_at_stop.departure_time.min + 60 * 60 * @vehicle_journey_at_stop.departure_time.hour
@@ -21,13 +26,23 @@ class Chouette::Hub::VehicleJourneyAtStopExporter
"/HORAIRE.TXT"
end
- def self.save( vehicle_journey_at_stops, directory, hub_export)
- vehicle_journey_at_stops.each do |vehicle_journey_at_stop|
- self.new( vehicle_journey_at_stop, directory).tap do |specific_exporter|
- specific_exporter.save
+ def self.save( vehicle_journeys, directory, hub_export, vehicle_journey_at_stops_count)
+ id = 1
+ vehicle_journeys.each_index do |index|
+ vehicle_journey_at_stops = Chouette::VehicleJourneyAtStop.where( :vehicle_journey_id => vehicle_journeys[index].id ).order(:arrival_time)
+ vehicle_journey_at_stops.each do |vehicle_journey_at_stop|
+ self.new( vehicle_journey_at_stop, directory, index, id).tap do |specific_exporter|
+ specific_exporter.save
+ id += 1
+ end
end
end
- hub_export.log_messages.create( :severity => "ok", :key => "EXPORT|VEHICLE_JOURNEY_AT_STOP_COUNT", :arguments => {"0" => vehicle_journey_at_stops.size})
+ #vehicle_journey_at_stops.each do |vehicle_journey_at_stop|
+ # self.new( vehicle_journey_at_stop, directory).tap do |specific_exporter|
+ # specific_exporter.save
+ # end
+ #end
+ hub_export.log_messages.create( :severity => "ok", :key => "EXPORT|VEHICLE_JOURNEY_AT_STOP_COUNT", :arguments => {"0" => vehicle_journey_at_stops_count})
end
def save
diff --git a/app/exporters/chouette/hub/vehicle_journey_exporter.rb b/app/exporters/chouette/hub/vehicle_journey_exporter.rb
index 96b458953..b710b2d7a 100644
--- a/app/exporters/chouette/hub/vehicle_journey_exporter.rb
+++ b/app/exporters/chouette/hub/vehicle_journey_exporter.rb
@@ -19,16 +19,27 @@ class Chouette::Hub::VehicleJourneyExporter
@departure_time_sec = departure_time.sec + ( departure_time.min + departure_time.hour * 60 ) * 60
@arrival_time_sec = arrival_time.sec + ( arrival_time.min + arrival_time.hour * 60 ) * 60
@validity = 0
- @vehicle_journey.time_tables.map(&:int_day_types).each { |v| @validity += v }
+ @vehicle_journey.time_tables.map(&:int_day_types).each { |v| @validity |= v }
- periods = Chouette::TimeTablePeriod.where( :time_table_id => @vehicle_journey.time_tables.map(&:id) ).map(&:id)
+ periods = Chouette::TimeTable.where( :id => @vehicle_journey.time_tables.map(&:id) ).map(&:objectid)
@periods = ""
unless periods.empty?
- @periods += periods[0].to_s
+ @periods += periods[0].sub(/(\w*\:\w*\:)(\w*)/, '\2')
periods.shift
end
unless periods.empty?
- periods.each { |p| @periods += "|" + p.to_s }
+ periods.each { |p| @periods += "|" + p.sub(/(\w*\:\w*\:)(\w*)/, '\2') }
+ end
+ # USE @renvoi for PMR and TAD and create RENVOI.TXT File
+ @renvoi = ""
+ if @vehicle_journey.mobility_restricted_suitability
+ @renvoi = "1"
+ end
+ File.open(directory + "/RENVOI.TXT" , "a") do |f|
+ if f.size == 0
+ f.write("RENVOI\n")
+ f.write("a:PMR:1\n")
+ end
end
end
diff --git a/app/exporters/chouette/hub/vehicle_journey_operation_exporter.rb b/app/exporters/chouette/hub/vehicle_journey_operation_exporter.rb
index 3a45f2cab..37b4cc8f9 100644
--- a/app/exporters/chouette/hub/vehicle_journey_operation_exporter.rb
+++ b/app/exporters/chouette/hub/vehicle_journey_operation_exporter.rb
@@ -7,6 +7,65 @@ class Chouette::Hub::VehicleJourneyOperationExporter
@number = index
@directory = directory
@template = File.open('app/views/api/hub/courses_operations.hub.erb' ) { |f| f.read }
+ # HUB TMode vs. Neptune TMode
+ # transport_mode = "TAD_PMR" if (@vehicle_journey.flexible_service && @vehicle_journey.mobility_restricted_suitability) # SISMO profile : NO TAD_PMR MODE.
+ if @vehicle_journey.flexible_service
+ transport_mode = "TAD"
+ else
+ case @vehicle_journey.transport_mode
+ when "Interchange"
+ transport_mode = ""
+ when "Unknown"
+ transport_mode = ""
+ when "Coach"
+ if @vehicle_journey.mobility_restricted_suitability
+ transport_mode = "CAR_PMR"
+ else
+ transport_mode = "CAR"
+ end
+ when "Air"
+ transport_mode = "AVION"
+ when "Waterborne"
+ transport_mode = "BATEAU"
+ when "Bus"
+ if @vehicle_journey.mobility_restricted_suitability
+ transport_mode = "BUS_PMR"
+ else
+ transport_mode = "BUS"
+ end
+ when "Ferry"
+ transport_mode = "BATEAU"
+ when "Walk"
+ transport_mode = ""
+ when "Metro"
+ transport_mode = "METRO"
+ when "Shuttle"
+ transport_mode = ""
+ when "RapidTransit"
+ transport_mode = ""
+ when "Taxi"
+ transport_mode = "TAXIBUS"
+ when "LocalTrain"
+ transport_mode = "TRAIN"
+ when "Train"
+ transport_mode = "TRAIN"
+ when "LongDistance_train"
+ transport_mode = "TRAIN"
+ when "Tramway"
+ transport_mode = "TRAM"
+ when "Trolleybus"
+ transport_mode = "TROLLEY"
+ when "PrivateVehicle"
+ transport_mode = ""
+ when "Bicycle"
+ transport_mode = "VELO"
+ when "Other"
+ transport_mode = ""
+ else
+ transport_mode = ""
+ end
+ end
+ @transport_mode = transport_mode
end
def render()
@@ -28,7 +87,7 @@ class Chouette::Hub::VehicleJourneyOperationExporter
# specific_exporter.save
# end
#end
- hub_export.log_messages.create( :severity => "ok", :key => "EXPORT|VEHICLE_JOURNEY_COUNT", :arguments => {"0" => vehicle_journeys.size})
+ hub_export.log_messages.create( :severity => "ok", :key => "EXPORT|VEHICLE_JOURNEY_OPERATION_COUNT", :arguments => {"0" => vehicle_journeys.size})
end
def save
diff --git a/app/views/api/hub/arrets_generiques.hub.erb b/app/views/api/hub/arrets_generiques.hub.erb
index bb989920f..89fe718a2 100644
--- a/app/views/api/hub/arrets_generiques.hub.erb
+++ b/app/views/api/hub/arrets_generiques.hub.erb
@@ -1 +1 @@
-<%= @stop_area.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') %>;<%= @stop_area.name %>;<%= @stop_area.nearest_topic_name %>;<%= @type %>;;;;;;<%= @stop_area.comment %>;<%= @stop_area.id %>
+<%= @stop_area.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if @stop_area.objectid %>;<%= @stop_area.name if @stop_area.name %>;<%= @stop_area.nearest_topic_name if @stop_area.nearest_topic_name %>;<%= @type %>;;<%= (@stop_area.latitude && @stop_area.longitude) ? RGeo::CoordSys::Proj4::transform_coords(@from_projection, @to_projection, @stop_area.longitude, @stop_area.latitude)[0] : '' %>;<%= (@stop_area.latitude && @stop_area.longitude) ? RGeo::CoordSys::Proj4::transform_coords(@from_projection, @to_projection, @stop_area.longitude, @stop_area.latitude)[1] : '' %>;<%= @stop_area.city_name if @stop_area.city_name %>;<%= @stop_area.country_code if @stop_area.country_code %>;<%= @stop_area.comment if @stop_area.comment %>;<%= @stop_area.id %>
diff --git a/app/views/api/hub/arrets_physiques.hub.erb b/app/views/api/hub/arrets_physiques.hub.erb
index a63ee2335..8164ae35c 100644
--- a/app/views/api/hub/arrets_physiques.hub.erb
+++ b/app/views/api/hub/arrets_physiques.hub.erb
@@ -1 +1 @@
-<%= @stop_area.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') %>;<%= @stop_area.name %>;;<%= @type %>;<%= Chouette::StopArea.find(@stop_area.parent_id).objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') %>;<%= (@stop_area.latitude && @stop_area.longitude) ? RGeo::CoordSys::Proj4::transform_coords(@from_projection, @to_projection, @stop_area.longitude, @stop_area.latitude)[0] : -1 %>;<%= (@stop_area.latitude && @stop_area.longitude) ? RGeo::CoordSys::Proj4::transform_coords(@from_projection, @to_projection, @stop_area.longitude, @stop_area.latitude)[1] : -1 %>;<%= @stop_area.city_name %>;<%= @stop_area.country_code %>;<%= @stop_area.comment %>;<%= @stop_area.id %>
+<%= @stop_area.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if @stop_area.objectid %>;<%= @stop_area.name if @stop_area.name %>;<%= @stop_area.nearest_topic_name if @stop_area.nearest_topic_name %>;<%= @type %>;<%= @parent.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if @parent %>;<%= (@stop_area.latitude && @stop_area.longitude) ? RGeo::CoordSys::Proj4::transform_coords(@from_projection, @to_projection, @stop_area.longitude, @stop_area.latitude)[0] : -1 %>;<%= (@stop_area.latitude && @stop_area.longitude) ? RGeo::CoordSys::Proj4::transform_coords(@from_projection, @to_projection, @stop_area.longitude, @stop_area.latitude)[1] : -1 %>;<%= @stop_area.city_name if @stop_area.city_name %>;<%= @stop_area.country_code if @stop_area.country_code %>;<%= @stop_area.comment if @stop_area.comment %>;<%= @stop_area.id %>
diff --git a/app/views/api/hub/chemins.hub.erb b/app/views/api/hub/chemins.hub.erb
index 37c5b1260..9d94cebd0 100644
--- a/app/views/api/hub/chemins.hub.erb
+++ b/app/views/api/hub/chemins.hub.erb
@@ -1 +1 @@
-<%= Chouette::Line.find(@journey_pattern.route.line_id).objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') %>;<%= @journey_pattern.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') %>;<%= @journey_pattern.registration_number %>;<%= @journey_pattern.name %>;<%= @journey_pattern.route.wayback == 'A' ? 1 : 2 %>;<%= @type %>;<% @journey_pattern.stop_points.each do |sp| %>;<%= Chouette::StopArea.find(sp.stop_area_id).objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') %>;<%= sp.stop_area_id %>;;<% end %>
+<%= @line.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if @line %>;<%= @journey_pattern.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if @journey_pattern.objectid %>;<%= @journey_pattern.registration_number if @journey_pattern.registration_number %>;<%= @journey_pattern.name if @journey_pattern.name %>;<%= (@journey_pattern.route.wayback == 'A' ? 1 : 2) if @journey_pattern.route %>;<%= @type %>;<% @stop_areas.each do |s| %>;<%= s.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if s.objectid %>;<%= s.id %>;;<% end %>
diff --git a/app/views/api/hub/correspondances.hub.erb b/app/views/api/hub/correspondances.hub.erb
index 91fdd9215..77c558953 100644
--- a/app/views/api/hub/correspondances.hub.erb
+++ b/app/views/api/hub/correspondances.hub.erb
@@ -1 +1 @@
-<%= Chouette::StopArea.find(@connection_link.departure_id).objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') %>;<%= @connection_link.departure_id %>;<%= Chouette::StopArea.find(@connection_link.arrival_id).objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') %>;<%= @connection_link.arrival_id %>;<%= @connection_link.link_distance %>;<%= @connection_link.default_duration %>;<%= @connection_link.id %>
+<%= @departure.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if @departure %>;<%= @connection_link.departure_id %>;<%= @arrival.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') %>;<%= @connection_link.arrival_id %>;<%= @connection_link.link_distance %>;<%= @connection_link.default_duration %>;<%= @connection_link.id %>
diff --git a/app/views/api/hub/courses.hub.erb b/app/views/api/hub/courses.hub.erb
index b0ef2fe2b..cf711ca6b 100644
--- a/app/views/api/hub/courses.hub.erb
+++ b/app/views/api/hub/courses.hub.erb
@@ -1,2 +1,2 @@
-<%= @numero %>;;;<%= @departure_stop_area.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') %>;<%= @departure_time_sec %>;<%= @line.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') %>;<%= @journey_pattern.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') %>;<%= "D" %>;<%= (@route.wayback == "R") ? 2 : 1 %>;<%= @validity %>;;<%= @departure_stop_area.id %>;;<%= @periods %>;<%= 1 %>;
-<%= @numero %>;;;<%= @arrival_stop_area.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') %>;<%= @arrival_time_sec %>;<%= @line.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') %>;<%= @journey_pattern.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') %>;<%= "A" %>;<%= (@route.wayback == "R") ? 2 : 1 %>;<%= @validity %>;;<%= @arrival_stop_area.id %>;;<%= @periods %>;<%= 1 %>;
+<%= @numero %>;;;<%= @departure_stop_area.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if @departure_stop_area %>;<%= @departure_time_sec %>;<%= @line.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if @line %>;<%= @journey_pattern.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if @journey_pattern %>;<%= "D" %>;<%= (@route.wayback == "R") ? 2 : 1 %>;<%= @validity %>;;<%= @departure_stop_area.id if @departure_stop_area %>;<%= @renvoi %>;<%= @periods %>;<%= 1 %>;<%= @vehicle_journey.id %>
+<%= @numero %>;;;<%= @arrival_stop_area.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if @arrival_stop_area %>;<%= @arrival_time_sec %>;<%= @line.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if @line %>;<%= @journey_pattern.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if @journey_pattern %>;<%= "A" %>;<%= (@route.wayback == "R") ? 2 : 1 %>;<%= @validity %>;;<%= @arrival_stop_area.id if @arrival_stop_area %>;<%= @renvoi %>;<%= @periods %>;<%= 1 %>;<%= @vehicle_journey.id %>
diff --git a/app/views/api/hub/courses_operations.hub.erb b/app/views/api/hub/courses_operations.hub.erb
index ee6b27581..503018825 100644
--- a/app/views/api/hub/courses_operations.hub.erb
+++ b/app/views/api/hub/courses_operations.hub.erb
@@ -1 +1 @@
-<%= @number %>;<%= @vehicle_journey.published_journey_identifier %>;;;<%= @vehicle_journey.transport_mode %>;;
+<%= @number %>;<%= @vehicle_journey.published_journey_identifier %>;;;<%= @transport_mode %>;;
diff --git a/app/views/api/hub/directions.hub.erb b/app/views/api/hub/directions.hub.erb
new file mode 100644
index 000000000..bce4b0a9c
--- /dev/null
+++ b/app/views/api/hub/directions.hub.erb
@@ -0,0 +1 @@
+<%= @direction.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if @direction %>;<%= @line.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if @line %>;<%= (@journey_pattern.route.wayback == 'A' ? 1 : 2) if @journey_pattern.route %>;<%= @journey_pattern.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if @journey_pattern.objectid %>
diff --git a/app/views/api/hub/horaires.hub.erb b/app/views/api/hub/horaires.hub.erb
index 7716976d6..c9d170be8 100644
--- a/app/views/api/hub/horaires.hub.erb
+++ b/app/views/api/hub/horaires.hub.erb
@@ -1,2 +1,2 @@
-<%= @stop_area_code %>;<%= @arrival_time %>;<%= @arrival_type %>;<%= @vehicle_journey_at_stop.vehicle_journey_id %>;<%= @vehicle_journey_at_stop.vehicle_journey.journey_pattern_id %>;<%= @vehicle_journey_at_stop.stop_point.stop_area.id %>;<%= @vehicle_journey_at_stop.id %>
-<%= @stop_area_code %>;<%= @departure_time %>;<%= @departure_type %>;<%= @vehicle_journey_at_stop.vehicle_journey_id %>;<%= @vehicle_journey_at_stop.vehicle_journey.journey_pattern_id %>;<%= @vehicle_journey_at_stop.stop_point.stop_area.id %>;<%= @vehicle_journey_at_stop.id %>
+<%= @stop_area_code %>;<%= @arrival_time %>;<%= @arrival_type %>;<%= @vehicle_journey_num %>;<%= @vehicle_journey_at_stop.vehicle_journey.journey_pattern_id %>;<%= @stop_area_id %>;<%= 2 * @vehicle_journey_id - 1 %>
+<%= @stop_area_code %>;<%= @departure_time %>;<%= @departure_type %>;<%= @vehicle_journey_num %>;<%= @vehicle_journey_at_stop.vehicle_journey.journey_pattern_id %>;<%= @stop_area_id %>;<%= 2 * @vehicle_journey_id %>
diff --git a/app/views/api/hub/lignes.hub.erb b/app/views/api/hub/lignes.hub.erb
index f8b007044..7fb7d24a8 100644
--- a/app/views/api/hub/lignes.hub.erb
+++ b/app/views/api/hub/lignes.hub.erb
@@ -1 +1 @@
-<%= @line.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') %>;<%= @line.number %>;<%= @line.name %>;;;<%= Chouette::Company.find(@line.company_id).objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') %>;<%= Chouette::Network.find(@line.network_id).objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') %>;<%= @group_of_line %>;<%= @line.id %>
+<%= @line.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if @line.objectid %>;<%= @line.number %>;<%= @line.name %>;<%= @line.registration_number %>;;<%= @ompany.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if @ompany %>;<%= @network.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if @network %>;<%= @group_of_line %>;<%= @line.id %>
diff --git a/app/views/api/hub/schemas.hub.erb b/app/views/api/hub/schemas.hub.erb
new file mode 100644
index 000000000..3a93294f8
--- /dev/null
+++ b/app/views/api/hub/schemas.hub.erb
@@ -0,0 +1 @@
+<%= @line.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if @line %>;<%= @route.wayback == 'A' ? 1 : 2 %><% @stop_areas.each do |s| %>;<%= s.objectid.sub(/(\w*\:\w*\:)(\w*)/, '\2') if s.objectid %>;<%= s.id %><% end %>
diff --git a/config/deploy.rb b/config/deploy.rb
index 5d3324c74..ba622453f 100644
--- a/config/deploy.rb
+++ b/config/deploy.rb
@@ -12,7 +12,7 @@ set :group_writable, true
set :rake, "bundle exec rake"
set :keep_releases, 4
set :rails_env, "production" #added for delayed job
-set :user, "metienne"
+set :user, "zbouziane"
set :deploy_via, :copy
set :copy_via, :scp
set :copy_exclude, ".git/*"
diff --git a/config/locales/exports.yml b/config/locales/exports.yml
index bc9683d0b..041bde2c8 100644
--- a/config/locales/exports.yml
+++ b/config/locales/exports.yml
@@ -43,7 +43,10 @@ en:
ACCES_LINK_COUNT: "Access Link count : %{0}"
ACCES_POINT_COUNT: "Access Point count : %{0}"
TIME_TABLE_COUNT: "Time Table count : %{0}"
+ DIRECTION_COUNT: "Direction count : %{0}"
+ SCHEMA_COUNT: "Schema count : %{0}"
VEHICLE_JOURNEY_COUNT: "Vehicle journey count : %{0}"
+ VEHICLE_JOURNEY_OPERATION_COUNT: "Vehicle journey operation count : %{0}"
VEHICLE_JOURNEY_AT_STOP_COUNT: "Vehicle journey At Stop count : %{0}"
PHYSICAL_STOP_AREA_COUNT: "Physical Stop Areas count : %{0}"
COMMERCIAL_STOP_AREA_COUNT: "Logical Stop Areas count : %{0}"
@@ -161,7 +164,10 @@ fr:
ACCES_LINK_COUNT: "Nombre de liaison d'accès exportées : %{0}"
ACCES_POINT_COUNT: "Nombre de points d'accès exportés : %{0}"
TIME_TABLE_COUNT: "Nombre de tableaux de marche : %{0}"
+ DIRECTION_COUNT: "Nombre de directions : %{0}"
+ SCHEMA_COUNT: "Nombre de schémas : %{0}"
VEHICLE_JOURNEY_COUNT: "Nombre de courses : %{0}"
+ VEHICLE_JOURNEY_OPERATION_COUNT: "Nombre de courses opérations : %{0}"
VEHICLE_JOURNEY_AT_STOP_COUNT: "Nombre d'horaires : %{0}"
PHYSICAL_STOP_AREA_COUNT: "Nombre d'arrêts physiques : %{0}"
COMMERCIAL_STOP_AREA_COUNT: "Nombre d'arrêts logiques : %{0}"