aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorZakaria BOUZIANE2014-07-07 17:15:10 +0200
committerZakaria BOUZIANE2014-07-07 17:15:10 +0200
commita77d67e7807f90ea24e96b5c1a9e6bbb290170b0 (patch)
tree80b395a4a06b41369a3cf3eb006f98ea14ed7f22 /app
parent22c280f7042b554d8382b7d7511132efcd067ad6 (diff)
parentc5228e916b7b468a56c3c8a7441ac6973b875fff (diff)
downloadchouette-core-a77d67e7807f90ea24e96b5c1a9e6bbb290170b0.tar.bz2
Merge branch 'tad_pmr' into sismo
Conflicts: Gemfile Gemfile.lock db/schema.rb
Diffstat (limited to 'app')
-rw-r--r--app/controllers/lines_controller.rb1
-rw-r--r--app/exporters/chouette/hub/commercial_stop_area_exporter.rb36
-rw-r--r--app/exporters/chouette/hub/connection_link_exporter.rb35
-rw-r--r--app/exporters/chouette/hub/exporter.rb185
-rw-r--r--app/exporters/chouette/hub/journey_pattern_exporter.rb36
-rw-r--r--app/exporters/chouette/hub/line_exporter.rb35
-rw-r--r--app/exporters/chouette/hub/physical_stop_area_exporter.rb37
-rw-r--r--app/exporters/chouette/hub/time_table_exporter.rb46
-rw-r--r--app/exporters/chouette/hub/vehicle_journey_at_stop_exporter.rb39
-rw-r--r--app/exporters/chouette/hub/vehicle_journey_exporter.rb36
-rw-r--r--app/models/export.rb5
-rw-r--r--app/models/hub_export.rb35
-rw-r--r--app/views/api/hub/chemin/show.hub.erb1
-rw-r--r--app/views/api/hub/correspondance/show.hub.erb1
-rw-r--r--app/views/api/hub/course/show.hub.erb1
-rw-r--r--app/views/api/hub/horaire/show.hub.erb2
-rw-r--r--app/views/api/hub/ligne/show.hub.erb1
-rw-r--r--app/views/api/hub/periode/show.hub.erb1
-rw-r--r--app/views/api/hub/stop_area/commercial_show.hub.erb1
-rw-r--r--app/views/api/hub/stop_area/physical_show.hub.erb1
-rw-r--r--app/views/api/hub/stops/show.hub.erb1
-rw-r--r--app/views/api/hub/time_tables/show.hub.erb1
-rw-r--r--app/views/exports/_fields_hub_export.erb2
-rw-r--r--app/views/help/exports.textile10
-rw-r--r--app/views/lines/_form.erb2
-rw-r--r--app/views/lines/show.html.erb36
-rw-r--r--app/views/vehicle_journeys/_form.html.erb2
-rw-r--r--app/views/vehicle_journeys/show.html.erb22
28 files changed, 608 insertions, 3 deletions
diff --git a/app/controllers/lines_controller.rb b/app/controllers/lines_controller.rb
index effb0deba..6f717549a 100644
--- a/app/controllers/lines_controller.rb
+++ b/app/controllers/lines_controller.rb
@@ -17,7 +17,6 @@ class LinesController < ChouetteController
end
end
-
def show
@map = LineMap.new(resource).with_helpers(self)
@routes = @line.routes
diff --git a/app/exporters/chouette/hub/commercial_stop_area_exporter.rb b/app/exporters/chouette/hub/commercial_stop_area_exporter.rb
new file mode 100644
index 000000000..201fce3d2
--- /dev/null
+++ b/app/exporters/chouette/hub/commercial_stop_area_exporter.rb
@@ -0,0 +1,36 @@
+class Chouette::Hub::CommercialStopAreaExporter
+ include ERB::Util
+ attr_accessor :stop_area, :directory, :template
+
+ def initialize(stop_area, directory)
+ @stop_area = stop_area
+ @directory = directory
+ @template = File.open('app/views/api/hub/stop_area/commercial_show.hub.erb' ){ |f| f.read }
+ @type = "ONNNNNNNNNNNNNNNNN"
+ end
+
+ def render()
+ ERB.new(@template).result(binding)
+ end
+
+ def hub_name
+ "/ARRET.TXT"
+ end
+
+ def self.save( stop_areas, directory, hub_export)
+ stop_areas.each do |stop_area|
+ self.new( stop_area, directory).tap do |specific_exporter|
+ specific_exporter.save
+ end
+ end
+ hub_export.log_messages.create( :severity => "ok", :key => "EXPORT|COMMERCIAL_STOP_AREA_COUNT", :arguments => {"0" => stop_areas.size})
+ end
+
+ def save
+ File.open(directory + hub_name , "a") do |f|
+ f.write("ARRET\n") if f.size == 0
+ f.write(render)
+ end if stop_area.present?
+ end
+end
+
diff --git a/app/exporters/chouette/hub/connection_link_exporter.rb b/app/exporters/chouette/hub/connection_link_exporter.rb
new file mode 100644
index 000000000..b3be19396
--- /dev/null
+++ b/app/exporters/chouette/hub/connection_link_exporter.rb
@@ -0,0 +1,35 @@
+class Chouette::Hub::Connection_LinkExporter
+ include ERB::Util
+ attr_accessor :connection_link, :directory, :template
+
+ def initialize(connection_link, directory)
+ @connection_link = connection_link
+ @directory = directory
+ @template = File.open('app/views/api/hub/correspondance/show.hub.erb' ){ |f| f.read }
+ end
+
+ def render()
+ ERB.new(@template).result(binding)
+ end
+
+ def hub_name
+ "/CORRESPONDANCE.TXT"
+ end
+
+ def self.save( connection_links, directory, hub_export)
+ connection_links.each do |connection_link|
+ self.new( connection_link, directory).tap do |specific_exporter|
+ specific_exporter.save
+ end
+ end
+ hub_export.log_messages.create( :severity => "ok", :key => "EXPORT|CONNECTION_LINK_COUNT", :arguments => {"0" => connection_links.size})
+ end
+
+ def save
+ File.open(directory + hub_name , "a") do |f|
+ f.write("CORRESPONDANCE\n") if f.size == 0
+ f.write(render)
+ end if connection_link.present?
+ end
+end
+
diff --git a/app/exporters/chouette/hub/exporter.rb b/app/exporters/chouette/hub/exporter.rb
new file mode 100644
index 000000000..4b846fee0
--- /dev/null
+++ b/app/exporters/chouette/hub/exporter.rb
@@ -0,0 +1,185 @@
+class Chouette::Hub::Exporter
+
+ attr_reader :referential
+ attr_reader :hub_export, :lines, :routes, :journey_patterns
+ attr_reader :time_tables, :vehicle_journeys
+
+ def initialize(referential, hub_export)
+ @referential = referential
+ @hub_export = hub_export
+ @lines = nil
+ @routes = nil
+ @journey_patterns = nil
+ @time_tables = nil
+ @vehicle_journeys = nil
+ end
+
+ def select_time_tables(start_date, end_date)
+ #TODO considere options[:o], options[:id]
+ all_time_tables = Chouette::TimeTable.all
+ time_tables = []
+ s_date = Date.strptime(start_date, "%Y-%m-%d")
+ e_date = Date.strptime(end_date, "%Y-%m-%d")
+ while s_date <= e_date
+ (all_time_tables - time_tables).each { |time_table| time_tables << time_table if time_table.include_day?(s_date) }
+ s_date = s_date.next_day
+ end
+ return time_tables
+ end
+
+ 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)
+ elsif object == "company"
+ ids.present? ? Chouette::Line.includes(:routes).where( :company_id => ids.split(",")).order(:name) :
+ Chouette::Line.joins(:company).includes(:routes).order(:name)
+ elsif object == "line" && ids.present?
+ Chouette::Line.includes(:routes).where( :id => ids.split(",")).order(:name)
+ else
+ Chouette::Line.includes(:routes).order(:name)
+ end
+ end
+
+ def time_tables_exportable?
+ time_tables
+ end
+
+ def routes_exportable?
+ routes # && routes.size < 150
+ end
+
+ def lines_exportable?
+ lines # && lines.size < 150
+ end
+
+ def journey_patterns_exportable?
+ journey_patterns # && journey_patterns.size < 150
+ end
+
+ def vehicle_journeys_exportable?
+ vehicle_journeys
+ end
+
+ def log_overflow_warning( target_class)
+ hub_export.log_messages.create( :severity => "warning", :key => "EXPORT_ERROR|EXCEPTION",
+ :arguments => {"0" => I18n.t( 'export_log_messages.messages.overflow',
+ :count => 150, :data => target_class.model_name.human.pluralize)})
+ end
+
+ def export(zip_file_path, options = {})
+ begin
+ referential.switch
+
+ FileUtils.rm(zip_file_path) if File.exists? zip_file_path
+
+ hub_export.log_messages.create( :severity => "ok", :key => "EXPORT", :arguments => {"0" => "HUB"})
+
+ Dir.mktmpdir(nil, "/tmp"){ |temp_dir|
+
+ @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(:id) if routes_exportable?
+
+ vjs = []
+ tts = []
+ @vehicle_journeys.each do |vj|
+ unless (vj.time_tables & @time_tables).empty?
+ vjs << vj
+ tts << (vj.time_tables & @time_tables)
+ end
+ end
+ @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?
+
+ if time_tables_exportable?
+ Chouette::Hub::TimeTableExporter.save(@time_tables, temp_dir, hub_export)
+ else
+ log_overflow_warning(Chouette::TimeTable)
+ 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)
+ else
+ log_overflow_warning(Chouette::VehicleJourney)
+ end
+
+ stop_points = Chouette::StopPoint.where( :id => vehicle_journey_at_stops.map(&:stop_point_id)).order(:id)
+ physical_stop_areas = Chouette::StopArea.where( :id => stop_points.map(&:stop_area_id)).order(:parent_id)
+ commercial_stop_areas = Chouette::StopArea.where( :id => physical_stop_areas.map(&:parent_id)).order(:id)
+
+ 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( "deprture_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)) )
+
+ 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)
+ else
+ log_overflow_warning(Chouette::Line)
+ end
+
+ if routes_exportable?
+ #Chouette::Hub::RouteExporter.save( routes, temp_dir, hub_export)
+ else
+ log_overflow_warning(Chouette::Route) if lines_exportable?
+ end
+
+ # if too many lines
+ # there may be too many stop_areas
+ if lines_exportable?
+ stop_areas = Chouette::StopArea.joins( :stop_points => [:route => :line]).where(:lines => {:id => lines.map(&:id)}).uniq.order(:name)
+ #Chouette::Hub::StopAreaExporter.save( stop_areas, temp_dir, hub_export, "Quay")
+
+ commercial_stop_areas = Chouette::StopArea.where( :id => stop_areas.map(&:parent_id).compact.uniq).order(:name)
+ #Chouette::Hub::StopAreaExporter.save( commercial_stop_areas, temp_dir, hub_export, "CommercialStopPoint")
+ end
+
+ if( options[:o] == "line" and not options[:id].present?) # Add all objects
+ stop_places = referential.stop_areas.stop_place.order(:name)
+ #Chouette::Hub::StopAreaExporter.save( stop_places, temp_dir, hub_export, "StopPlace")
+
+ itls = referential.stop_areas.itl.order(:name)
+ #Chouette::Hub::StopAreaExporter.save( itls, temp_dir, hub_export, "ITL")
+
+ connection_links = referential.connection_links.order(:name)
+ #Chouette::Hub::ConnectionLinkExporter.save( connection_links, temp_dir, hub_export)
+
+ access_links = referential.access_links.order(:name)
+ #Chouette::Hub::AccessLinkExporter.save(access_links, temp_dir, hub_export)
+
+ access_points = referential.access_points.order(:name)
+ #Chouette::Hub::AccessPointExporter.save(access_points, temp_dir, hub_export)
+
+ end
+
+ ::Zip::ZipFile.open(zip_file_path, ::Zip::ZipFile::CREATE) do |zipfile|
+ Dir[File.join(temp_dir, '*.TXT')].each do |f|
+ #Rails.logger.error("Adding File #{File.basename(f)}")
+ zipfile.add(File.basename(f), f)
+ end
+ end
+ }
+ ensure
+ # Always cleanup files
+ #FileUtils.remove_entry(temp_directory)
+ end
+ end
+
+end
+
diff --git a/app/exporters/chouette/hub/journey_pattern_exporter.rb b/app/exporters/chouette/hub/journey_pattern_exporter.rb
new file mode 100644
index 000000000..12c157408
--- /dev/null
+++ b/app/exporters/chouette/hub/journey_pattern_exporter.rb
@@ -0,0 +1,36 @@
+class Chouette::Hub::JourneyPatternExporter
+ 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/chemin/show.hub.erb' ){ |f| f.read }
+ @type = "COM"
+ end
+
+ def render()
+ ERB.new(@template).result(binding)
+ end
+
+ def hub_name
+ "/CHEMIN.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|JOURNEY_PATTERN_COUNT", :arguments => {"0" => journey_patterns.size})
+ end
+
+ def save
+ File.open(directory + hub_name , "a") do |f|
+ f.write("CHEMIN\n") if f.size == 0
+ f.write(render)
+ end if journey_pattern.present?
+ end
+end
+
diff --git a/app/exporters/chouette/hub/line_exporter.rb b/app/exporters/chouette/hub/line_exporter.rb
new file mode 100644
index 000000000..b9575876a
--- /dev/null
+++ b/app/exporters/chouette/hub/line_exporter.rb
@@ -0,0 +1,35 @@
+class Chouette::Hub::LineExporter
+ include ERB::Util
+ attr_accessor :line, :directory, :template
+
+ def initialize(line, directory)
+ @line = line
+ @directory = directory
+ @template = File.open('app/views/api/hub/ligne/show.hub.erb' ){ |f| f.read }
+ end
+
+ def render()
+ ERB.new(@template).result(binding)
+ end
+
+ def hub_name
+ "/LIGNE.TXT"
+ end
+
+ def self.save( lines, directory, hub_export)
+ lines.each do |line|
+ self.new( line, directory).tap do |specific_exporter|
+ specific_exporter.save
+ end
+ end
+ hub_export.log_messages.create( :severity => "ok", :key => "EXPORT|LINE_COUNT", :arguments => {"0" => lines.size})
+ end
+
+ def save
+ File.open(directory + hub_name , "a") do |f|
+ f.write("LIGNE\n") if f.size == 0
+ f.write(render)
+ end if line.present?
+ end
+end
+
diff --git a/app/exporters/chouette/hub/physical_stop_area_exporter.rb b/app/exporters/chouette/hub/physical_stop_area_exporter.rb
new file mode 100644
index 000000000..4a2666321
--- /dev/null
+++ b/app/exporters/chouette/hub/physical_stop_area_exporter.rb
@@ -0,0 +1,37 @@
+class Chouette::Hub::PhysicalStopAreaExporter
+ include ERB::Util
+ attr_accessor :stop_area, :directory, :template
+
+ def initialize(stop_area, directory)
+ @stop_area = stop_area
+ @directory = directory
+ @template = File.open('app/views/api/hub/stop_area/physical_show.hub.erb' ){ |f| f.read }
+ @type = "NNNNNNNNNNNNNNNNNN"
+ @stop_area.referential.projection_type = "27562"
+ end
+
+ def render()
+ ERB.new(@template).result(binding)
+ end
+
+ def hub_name
+ "/ARRET.TXT"
+ end
+
+ def self.save( stop_areas, directory, hub_export)
+ stop_areas.each do |stop_area|
+ self.new( stop_area, directory).tap do |specific_exporter|
+ specific_exporter.save
+ end
+ end
+ hub_export.log_messages.create( :severity => "ok", :key => "EXPORT|PHYSICAL_STOP_AREA_COUNT", :arguments => {"0" => stop_areas.size})
+ end
+
+ def save
+ File.open(directory + hub_name , "a") do |f|
+ f.write("ARRET\n") if f.size == 0
+ f.write(render)
+ end if stop_area.present?
+ end
+end
+
diff --git a/app/exporters/chouette/hub/time_table_exporter.rb b/app/exporters/chouette/hub/time_table_exporter.rb
new file mode 100644
index 000000000..1e91ead6c
--- /dev/null
+++ b/app/exporters/chouette/hub/time_table_exporter.rb
@@ -0,0 +1,46 @@
+class Chouette::Hub::TimeTableExporter
+ include ERB::Util
+ attr_accessor :time_table, :directory, :template, :start_date, :end_date
+
+ def initialize(time_table, directory)
+ @time_table = time_table
+ @directory = directory
+ @template = File.open('app/views/api/hub/periode/show.hub.erb' ){ |f| f.read }
+ @calendar = ""
+ s_date = @time_table.start_date
+ e_date = @time_table.end_date
+ while s_date <= e_date
+ if time_table.include_day?(s_date)
+ @calendar += "1"
+ else
+ @calendar += "0"
+ end
+ s_date = s_date.next_day
+ end
+ end
+
+ def render()
+ ERB.new(@template).result(binding)
+ end
+
+ def hub_name
+ "/PERIODE.TXT"
+ end
+
+ def self.save(time_tables, directory, hub_export)
+ time_tables.each do |time_table|
+ self.new(time_table, directory).tap do |specific_exporter|
+ specific_exporter.save
+ end
+ end
+ hub_export.log_messages.create( :severity => "ok", :key => "EXPORT|TIME_TABLE_COUNT", :arguments => {"0" => time_tables.size})
+ end
+
+ def save
+ File.open(directory + hub_name , "a") do |f|
+ f.write("PERIODE\n") if f.size == 0
+ f.write(render)
+ end if time_table.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
new file mode 100644
index 000000000..e78048ecb
--- /dev/null
+++ b/app/exporters/chouette/hub/vehicle_journey_at_stop_exporter.rb
@@ -0,0 +1,39 @@
+class Chouette::Hub::VehicleJourneyAtStopExporter
+ include ERB::Util
+ attr_accessor :vehicle_journey_at_stop, :directory, :template
+
+ def initialize(vehicle_journey_at_stop, directory)
+ @vehicle_journey_at_stop = vehicle_journey_at_stop
+ @directory = directory
+ @template = File.open('app/views/api/hub/horaire/show.hub.erb' ) { |f| f.read }
+ @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
+ @departure_type = "D"
+ end
+
+ def render()
+ ERB.new(@template).result(binding)
+ end
+
+ def hub_name
+ "/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
+ end
+ end
+ hub_export.log_messages.create( :severity => "ok", :key => "EXPORT|VEHICLE_JOURNEY_AT_STOP_COUNT", :arguments => {"0" => vehicle_journey_at_stops.size})
+ end
+
+ def save
+ File.open(directory + hub_name , "a") do |f|
+ f.write("HORAIRE\n") if f.size == 0
+ f.write(render)
+ end if vehicle_journey_at_stop.present?
+ end
+end
+
diff --git a/app/exporters/chouette/hub/vehicle_journey_exporter.rb b/app/exporters/chouette/hub/vehicle_journey_exporter.rb
new file mode 100644
index 000000000..ced67fdd8
--- /dev/null
+++ b/app/exporters/chouette/hub/vehicle_journey_exporter.rb
@@ -0,0 +1,36 @@
+class Chouette::Hub::VehicleJourneyExporter
+ include ERB::Util
+ attr_accessor :vehicle_journey, :directory, :template
+
+ def initialize(vehicle_journey, directory)
+ @vehicle_journey = vehicle_journey
+ @directory = directory
+ @template = File.open('app/views/api/hub/course/show.hub.erb' ) { |f| f.read }
+ end
+
+ def render()
+ ERB.new(@template).result(binding)
+ end
+
+ def hub_name
+ "/COURSE.TXT"
+ end
+
+ def self.save( vehicle_journeys, directory, hub_export)
+ vehicle_journeys.each do |vehicle_journey|
+ #Chouette::Hub::VehicleJourneyAtStopExporter.save(vehicle_journey.vehicle_journey_at_stops, directory, hub_export)
+ self.new( vehicle_journey, directory).tap do |specific_exporter|
+ specific_exporter.save
+ end
+ end
+ hub_export.log_messages.create( :severity => "ok", :key => "EXPORT|VEHICLE_JOURNEY_COUNT", :arguments => {"0" => vehicle_journeys.size})
+ end
+
+ def save
+ File.open(directory + hub_name , "a") do |f|
+ f.write("COURSE\n") if f.size == 0
+ f.write(render)
+ end if vehicle_journey.present?
+ end
+end
+
diff --git a/app/models/export.rb b/app/models/export.rb
index f684ddef5..98b3f0ace 100644
--- a/app/models/export.rb
+++ b/app/models/export.rb
@@ -102,7 +102,8 @@ class Export < ActiveRecord::Base
"CsvExport" => "CSV",
"GtfsExport" => "GTFS",
"NetexExport" => "NeTEx",
- "KmlExport" => "KML"
+ "KmlExport" => "KML",
+ "HubExport" => "HUB"
}
name_by_format[format]
end
@@ -112,7 +113,7 @@ class Export < ActiveRecord::Base
subclasses.map(&:to_s)
else
# FIXME
- %w{NeptuneExport CsvExport GtfsExport NetexExport KmlExport}
+ %w{NeptuneExport CsvExport GtfsExport NetexExport KmlExport HubExport}
end
end
diff --git a/app/models/hub_export.rb b/app/models/hub_export.rb
new file mode 100644
index 000000000..3d93cbfae
--- /dev/null
+++ b/app/models/hub_export.rb
@@ -0,0 +1,35 @@
+class HubExport < Export
+
+ option :start_date
+ option :end_date
+
+ after_initialize :init_period
+
+ def init_period
+ unless Chouette::TimeTable.start_validity_period.nil?
+ if start_date.nil?
+ self.start_date = Chouette::TimeTable.start_validity_period
+ end
+ if end_date.nil?
+ self.end_date = Chouette::TimeTable.end_validity_period
+ end
+ end
+ end
+
+ def export_options
+ if (start_date.empty? && end_date.empty?)
+ super.merge(:format => :hub).except(:start_date).except(:end_date)
+ elsif start_date.empty?
+ super.merge(:format => :hub, :end_date => end_date).except(:start_date)
+ elsif end_date.empty?
+ super.merge(:format => :hub, :start_date => start_date).except(:end_date)
+ else
+ super.merge(:format => :hub, :start_date => start_date, :end_date => end_date)
+ end
+ end
+
+ def exporter
+ exporter ||= ::Chouette::Hub::Exporter.new(referential, self)
+ end
+
+end
diff --git a/app/views/api/hub/chemin/show.hub.erb b/app/views/api/hub/chemin/show.hub.erb
new file mode 100644
index 000000000..ed6e9a4d1
--- /dev/null
+++ b/app/views/api/hub/chemin/show.hub.erb
@@ -0,0 +1 @@
+<%= @journey_pattern.route.line_id %>;<%= @journey_pattern.id %>;<%= @journey_pattern.registration_number %>;<%= @journey_pattern.name %>;<%= @journey_pattern.route.wayback == 'A' ? 1 : 2 %>;<%= @type %>;<% @journey_pattern.stop_points.each do |sp| %>;<%= sp.stop_area_id %>;<%= sp.stop_area.registration_number %>;;<% end %>
diff --git a/app/views/api/hub/correspondance/show.hub.erb b/app/views/api/hub/correspondance/show.hub.erb
new file mode 100644
index 000000000..8d4c5ba7c
--- /dev/null
+++ b/app/views/api/hub/correspondance/show.hub.erb
@@ -0,0 +1 @@
+<%= @connection_link.departure_id %>;<%= @connection_link.departure.registration_number %>;<%= @connection_link.arrival_id %>;<%= @connection_link.arrival.registration_number %>;<%= @connection_link.link_distance %>;<%= @connection_link.default_duration %>;<%= @connection_link.id %>
diff --git a/app/views/api/hub/course/show.hub.erb b/app/views/api/hub/course/show.hub.erb
new file mode 100644
index 000000000..d92939dc2
--- /dev/null
+++ b/app/views/api/hub/course/show.hub.erb
@@ -0,0 +1 @@
+<%= @vehicle_journey.id %>;;;;;<%= @vehicle_journey.route.line_id %>;<%= @vehicle_journey.journey_pattern.id %>;...
diff --git a/app/views/api/hub/horaire/show.hub.erb b/app/views/api/hub/horaire/show.hub.erb
new file mode 100644
index 000000000..bebea0959
--- /dev/null
+++ b/app/views/api/hub/horaire/show.hub.erb
@@ -0,0 +1,2 @@
+<%= @vehicle_journey_at_stop.stop_point.stop_area_id %>;<%= @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.registration_number %>;<%= @vehicle_journey_at_stop.id %>
+<%= @vehicle_journey_at_stop.stop_point.stop_area_id %>;<%= @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.registration_number %>;<%= @vehicle_journey_at_stop.id %>
diff --git a/app/views/api/hub/ligne/show.hub.erb b/app/views/api/hub/ligne/show.hub.erb
new file mode 100644
index 000000000..ee6d4de8f
--- /dev/null
+++ b/app/views/api/hub/ligne/show.hub.erb
@@ -0,0 +1 @@
+<%= @line.id %>;<%= @line.objectid %>;<%= @line.name %>;;;<%= @line.company_id %>;<%= @line.network_id %>;;<%= @line.registration_number %>
diff --git a/app/views/api/hub/periode/show.hub.erb b/app/views/api/hub/periode/show.hub.erb
new file mode 100644
index 000000000..342e4016f
--- /dev/null
+++ b/app/views/api/hub/periode/show.hub.erb
@@ -0,0 +1 @@
+<%= @time_table.id %>;<%= @time_table.comment %>;<%= @time_table.start_date %>;<%= @time_table.end_date %>;<%= @calendar %>
diff --git a/app/views/api/hub/stop_area/commercial_show.hub.erb b/app/views/api/hub/stop_area/commercial_show.hub.erb
new file mode 100644
index 000000000..a7cc7585a
--- /dev/null
+++ b/app/views/api/hub/stop_area/commercial_show.hub.erb
@@ -0,0 +1 @@
+<%= @stop_area.id %>;<%= @stop_area.name %>;;<%= @type %>;;;;<%= @stop_area.country_code %>;<%= @stop_area.country_code %>;<%= @stop_area.comment %>;<%= @stop_area.registration_number %>
diff --git a/app/views/api/hub/stop_area/physical_show.hub.erb b/app/views/api/hub/stop_area/physical_show.hub.erb
new file mode 100644
index 000000000..f2aee2e6d
--- /dev/null
+++ b/app/views/api/hub/stop_area/physical_show.hub.erb
@@ -0,0 +1 @@
+<%= @stop_area.id %>;<%= @stop_area.name %>;;<%= @type %>;<%= @stop_area.parent_id %>;<%= @stop_area.projection_x %>;<%= @stop_area.projection_y %>;<%= @stop_area.country_code %>;<%= @stop_area.country_code %>;<%= @stop_area.comment %>;<%= @stop_area.registration_number %>
diff --git a/app/views/api/hub/stops/show.hub.erb b/app/views/api/hub/stops/show.hub.erb
new file mode 100644
index 000000000..2bab51c97
--- /dev/null
+++ b/app/views/api/hub/stops/show.hub.erb
@@ -0,0 +1 @@
+<%= @stop.code %>;<%= @stop.name %>;<%= @stop.description if @stop.description? %>;<%= @stop.type %>;<%= @stop.short_name %>;<%= @stop.x %>;<%= @stop.y %>;<%= @stop.city %>;<%= @stop.administrative_code %>;<%= @stop.comment if @stop.comment? %>;<%= @stop.object_id %>
diff --git a/app/views/api/hub/time_tables/show.hub.erb b/app/views/api/hub/time_tables/show.hub.erb
new file mode 100644
index 000000000..a1c99a7ea
--- /dev/null
+++ b/app/views/api/hub/time_tables/show.hub.erb
@@ -0,0 +1 @@
+<%= @line.objectid %>;<%= @line.name %>;<%= @line.company.objectid %>;<%= @line.network.objectid %>
diff --git a/app/views/exports/_fields_hub_export.erb b/app/views/exports/_fields_hub_export.erb
new file mode 100644
index 000000000..f23d10780
--- /dev/null
+++ b/app/views/exports/_fields_hub_export.erb
@@ -0,0 +1,2 @@
+<%= form.input :start_date, :as => :date_picker %>
+<%= form.input :end_date, :as => :date_picker %>
diff --git a/app/views/help/exports.textile b/app/views/help/exports.textile
index c1da06a11..c82f8cea2 100644
--- a/app/views/help/exports.textile
+++ b/app/views/help/exports.textile
@@ -14,6 +14,7 @@ h3. Formats disponibles
- CSV := format tabulaire spécifique à Chouette (cf "CSV":csv)
- GTFS := format destiné à ["Google Transit":https://developers.google.com/transit/gtfs/?hl=fr] ; les données exportées en GTFS sont explicités ["ICI":http://www.normes-donnees-tc.org/format-dechange/autres-normes/]
- KML := format contenant l'ensemble des données cartographiées pouvant ainsi être importée dans un SIG
+- HUB := format tabulaire interne CityWay
h3. Options des formats
@@ -43,6 +44,15 @@ fixe le fuseau horaire (paramètre obligatoire des données GTFS)
* *CSV* : pas d'option particulière
+* *HUB* :
+
+- Début de période := permet d'exporter uniquement les courses circulant à partir de cette date
+- Fin de période := permet d'exporter uniquement les courses circulant jusqu'à cette date
+- Fuseau horaire :=
+fixe le fuseau horaire (paramètre obligatoire des données GTFS)
+ la valeur proposée par défaut est celle de l'espace de données =:
+
+
h3. Consultation des résultats
diff --git a/app/views/lines/_form.erb b/app/views/lines/_form.erb
index c844fbab4..554de3319 100644
--- a/app/views/lines/_form.erb
+++ b/app/views/lines/_form.erb
@@ -8,6 +8,8 @@
<%= form.input :registration_number %>
<%= form.input :number %>
<%= form.input :transport_mode, :as => :select, :collection => Chouette::Line.transport_modes, :include_blank => false, :member_label => Proc.new { |mode| t("transport_modes.label.#{mode}") } %>
+ <%= form.input :mobility_restricted_suitability, :as => :select, :collection => [[@line.human_attribute_name("accessible"), true], [@line.human_attribute_name("not_accessible"), false]], :include_blank => true %>
+ <%= form.input :flexible_service, :as => :select, :collection => [[@line.human_attribute_name("on_demaond_fs"), true], [@line.human_attribute_name("regular_fs"), false]], :include_blank => true %>
<%= form.input :comment %>
<%= form.input :objectid, :required => !@line.new_record? %>
<% end %>
diff --git a/app/views/lines/show.html.erb b/app/views/lines/show.html.erb
index d62be2066..2b9961ca2 100644
--- a/app/views/lines/show.html.erb
+++ b/app/views/lines/show.html.erb
@@ -40,6 +40,42 @@
<label><%= @line.human_attribute_name("transport_mode") %>: </label>
<%= t("transport_modes.label.#{@line.transport_mode}") %>
</p>
+
+ <p>
+ <label><%= @line.human_attribute_name("mobility_restricted_suitability") %> : </label>
+ <% if @line.mobility_restricted_suitability.nil? %>
+ <%= @line.human_attribute_name("unspecified_mrs") %>
+ <% elsif @line.mobility_restricted_suitability? %>
+ <%= @line.human_attribute_name("accessible") %>
+ <% else %>
+ <%= @line.human_attribute_name("not_accessible") %>
+ <% end %>
+ <br>&nbsp;&nbsp;<%= @line.human_attribute_name("number_of_mrs_vj") %> : <%= @line.vehicle_journeys.where("mobility_restricted_suitability = ?", true).count %>
+ <br>&nbsp;&nbsp;<%= @line.human_attribute_name("number_of_non_mrs_vj") %> : <%= @line.vehicle_journeys.where("mobility_restricted_suitability = ?", false).count %>
+ <br>&nbsp;&nbsp;<%= @line.human_attribute_name("number_of_null_mrs_vj") %> : <%= @line.vehicle_journeys.count -
+ (@line.vehicle_journeys.where("mobility_restricted_suitability = ?", true).count +
+ @line.vehicle_journeys.where("mobility_restricted_suitability = ?", false).count) %>
+ </p>
+ <p>
+ <label><%= @line.human_attribute_name("flexible_service") %> : </label>
+ <% if @line.flexible_service.nil? %>
+ <%= @line.human_attribute_name("unspecified_fs") %>
+ <% elsif @line.flexible_service? %>
+ <%= @line.human_attribute_name("on_demaond_fs") %>
+ <% else %>
+ <%= @line.human_attribute_name("regular_fs") %>
+ <% end %>
+ <br>&nbsp;&nbsp;<%= @line.human_attribute_name("number_of_fs_vj") %> : <%= @line.vehicle_journeys.where("flexible_service = ?", true).count %>
+ <br>&nbsp;&nbsp;<%= @line.human_attribute_name("number_of_non_fs_vj") %> : <%= @line.vehicle_journeys.where("flexible_service = ?", false).count %>
+ <br>&nbsp;&nbsp;<%= @line.human_attribute_name("number_of_null_fs_vj") %>
+ <% if @line.flexible_service.nil? %>
+ (<%= @line.human_attribute_name("default_fs_msg") %>)
+ <% end %>
+ : <%= @line.vehicle_journeys.count -
+ (@line.vehicle_journeys.where("flexible_service = ?", true).count +
+ @line.vehicle_journeys.where("flexible_service = ?", false).count) %>
+ </p>
+
<p>
<label><%= @line.human_attribute_name("comment") %>: </label>
<%= @line.comment %>
diff --git a/app/views/vehicle_journeys/_form.html.erb b/app/views/vehicle_journeys/_form.html.erb
index 530fce22e..859a9027a 100644
--- a/app/views/vehicle_journeys/_form.html.erb
+++ b/app/views/vehicle_journeys/_form.html.erb
@@ -5,6 +5,8 @@
<%= form.input :published_journey_identifier %>
<%= form.input :comment %>
<%= form.input :transport_mode_name, :as => :select, :collection => Chouette::Line.transport_modes, :include_blank => true, :member_label => Proc.new { |mode| t("transport_modes.label.#{mode}") } %>
+ <%= form.input :mobility_restricted_suitability, :as => :select, :collection => [[@vehicle_journey.human_attribute_name("accessible"), true], [@vehicle_journey.human_attribute_name("not_accessible"), false]], :include_blank => true %>
+ <%= form.input :flexible_service, :as => :select, :collection => [[@vehicle_journey.human_attribute_name("on_demaond_fs"), true], [@vehicle_journey.human_attribute_name("regular_fs"), false]], :include_blank => true %>
<%= form.input :status_value %>
<%= form.input :facility %>
<%= form.input :vehicle_type_identifier%>
diff --git a/app/views/vehicle_journeys/show.html.erb b/app/views/vehicle_journeys/show.html.erb
index e083e81e6..235268575 100644
--- a/app/views/vehicle_journeys/show.html.erb
+++ b/app/views/vehicle_journeys/show.html.erb
@@ -22,6 +22,28 @@
<label><%= @vehicle_journey.human_attribute_name("published_journey_identifier") %>: </label>
<%= @vehicle_journey.published_journey_identifier %>
</p>
+
+ <p>
+ <label><%= @vehicle_journey.human_attribute_name("mobility_restricted_suitability") %>: </label>
+ <% if @vehicle_journey.mobility_restricted_suitability.nil? %>
+ <%= @vehicle_journey.human_attribute_name("unspecified_mrs") %>
+ <% elsif @vehicle_journey.mobility_restricted_suitability? %>
+ <%= @vehicle_journey.human_attribute_name("accessible") %>
+ <% else %>
+ <%= @vehicle_journey.human_attribute_name("not_accessible") %>
+ <% end %>
+ </p>
+ <p>
+ <label><%= @vehicle_journey.human_attribute_name("flexible_service") %>: </label>
+ <% if @vehicle_journey.flexible_service.nil? %>
+ <%= @vehicle_journey.human_attribute_name("unspecified_fs") %>
+ <% elsif @vehicle_journey.flexible_service? %>
+ <%= @vehicle_journey.human_attribute_name("on_demaond_fs") %>
+ <% else %>
+ <%= @vehicle_journey.human_attribute_name("regular_fs") %>
+ <% end %>
+ </p>
+
<p>
<label><%= @vehicle_journey.human_attribute_name("comment") %>: </label>
<%= @vehicle_journey.comment %>