aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlban Peignier2012-06-19 14:43:15 +0200
committerAlban Peignier2012-06-19 14:43:15 +0200
commit79cf607092029d050a0fb62907f2c920341386c0 (patch)
treeb462b54a278d2403cc62b3705559f8928c15d522
parent4b83eeb9d19c8e362af209d6227bf7c782b1abdb (diff)
parentd142fee1e270ded464e3fb482d5a075b8f640a6c (diff)
downloadchouette-core-79cf607092029d050a0fb62907f2c920341386c0.tar.bz2
Merge branch 'master' of chouette.dryade.priv:/srv/git/chouette2
-rw-r--r--Gemfile1
-rw-r--r--Gemfile.lock60
-rw-r--r--app/assets/stylesheets/common.css.scss3
-rw-r--r--app/assets/stylesheets/layout.css.scss22
-rw-r--r--app/assets/stylesheets/lines.css.scss7
-rw-r--r--app/assets/stylesheets/referentials.css.scss7
-rw-r--r--app/assets/stylesheets/vehicle_journeys.css.scss127
-rw-r--r--app/controllers/time_tables_controller.rb16
-rw-r--r--app/controllers/vehicle_journeys_controller.rb20
-rw-r--r--app/helpers/time_tables_helper.rb37
-rw-r--r--app/helpers/vehicle_journeys_helper.rb19
-rw-r--r--app/models/export.rb9
-rw-r--r--app/models/export_log_message.rb5
-rw-r--r--app/models/import_log_message.rb2
-rw-r--r--app/views/help/index.textile21
-rw-r--r--app/views/referentials/show.html.erb2
-rw-r--r--app/views/routes/_route.html.erb19
-rw-r--r--app/views/routes/show.html.erb3
-rw-r--r--app/views/time_table_periods/_form.html.erb4
-rw-r--r--app/views/vehicle_journeys/_form.html.erb44
-rw-r--r--app/views/vehicle_journeys/_time_table.html.erb18
-rw-r--r--app/views/vehicle_journeys/_vehicle_journey_at_stop_fields.html.erb33
-rw-r--r--app/views/vehicle_journeys/edit.html.erb8
-rw-r--r--app/views/vehicle_journeys/edit.js.erb9
-rw-r--r--app/views/vehicle_journeys/index.html.erb56
-rw-r--r--app/views/vehicle_journeys/new.html.erb4
-rw-r--r--app/views/vehicle_journeys/select_journey_pattern.js.erb6
-rw-r--r--app/views/vehicle_journeys/show.html.erb32
-rw-r--r--config/locales/exports.yml17
-rw-r--r--config/locales/layouts.yml4
-rw-r--r--config/locales/routes.yml6
-rw-r--r--config/locales/time_tables.yml10
-rw-r--r--config/locales/vehicle_journeys.yml46
-rw-r--r--config/routes.rb9
-rw-r--r--spec/routing/vehicle_journeys_routing_spec.rb13
-rw-r--r--spec/views/vehicle_journeys/_form.html.erb_spec.rb5
-rw-r--r--spec/views/vehicle_journeys/_vehicle_journey_at_stop_fields.html.erb_spec.rb61
-rw-r--r--spec/views/vehicle_journeys/edit.html.erb_spec.rb22
-rw-r--r--spec/views/vehicle_journeys/new.html.erb_spec.rb22
39 files changed, 711 insertions, 98 deletions
diff --git a/Gemfile b/Gemfile
index 519bf4fd6..034b1e86d 100644
--- a/Gemfile
+++ b/Gemfile
@@ -22,6 +22,7 @@ end
gem "map_layers", "~> 0.0.4"
gem "georuby-ext", :git => 'git://github.com/dryade/georuby-ext.git'
+#gem 'user_interface', :git => 'git://github.com/dryade/user-interface.git'
gem 'user_interface', :git => 'git://sim.dryade.priv/user_interface'
gem 'json'
gem 'cocoon'
diff --git a/Gemfile.lock b/Gemfile.lock
index 03f9e748b..c7b5a62b9 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,6 +1,6 @@
GIT
remote: git://chouette.dryade.priv/ninoxe
- revision: 8b078199d237b4d0b26a881b7a93ddf671163cf5
+ revision: d9c03d4ae42f1bc229949504f0002954b3f6caee
specs:
ninoxe (0.0.8)
GeoRuby
@@ -62,7 +62,7 @@ GIT
GIT
remote: git://sim.dryade.priv/user_interface
- revision: a9f62359e65e42e9329bf4dbbd0c5a63a42119a4
+ revision: c75665070cace889923bea6a0fb1f7ff724d1368
specs:
user_interface (0.0.1)
rails (~> 3.1.0)
@@ -129,30 +129,30 @@ GEM
xpath (~> 0.1.4)
childprocess (0.3.2)
ffi (~> 1.0.6)
- cocoon (1.0.20)
+ cocoon (1.0.22)
coffee-rails (3.1.1)
coffee-script (>= 2.2.0)
railties (~> 3.1.0)
coffee-script (2.2.0)
coffee-script-source
execjs
- coffee-script-source (1.3.1)
+ coffee-script-source (1.3.3)
composite_primary_keys (4.1.2)
activerecord (~> 3.1)
- database_cleaner (0.7.2)
- delayed_job (3.0.2)
+ database_cleaner (0.8.0)
+ delayed_job (3.0.3)
activesupport (~> 3.0)
delayed_job_active_record (0.3.2)
activerecord (> 2.1.0)
delayed_job (~> 3.0.0)
- devise (2.0.4)
+ devise (2.1.0)
bcrypt-ruby (~> 3.0)
- orm_adapter (~> 0.0.3)
+ orm_adapter (~> 0.0.7)
railties (~> 3.1)
warden (~> 1.1.1)
diff-lcs (1.1.3)
erubis (2.7.0)
- execjs (1.3.1)
+ execjs (1.4.0)
multi_json (~> 1.0)
factory_girl (2.6.4)
activesupport (>= 2.3.9)
@@ -168,13 +168,13 @@ GEM
geokit (1.6.5)
multi_json
georuby (1.9.7)
- guard (1.0.2)
- ffi (>= 0.5.0)
- thor (~> 0.14.6)
- guard-rspec (0.7.0)
- guard (>= 0.10.0)
+ guard (1.1.1)
+ listen (>= 0.4.2)
+ thor (>= 0.14.6)
+ guard-rspec (1.0.1)
+ guard (>= 1.1)
has_scope (0.5.1)
- highline (1.6.11)
+ highline (1.6.12)
hike (1.2.1)
i18n (0.6.0)
inherited_resources (1.3.1)
@@ -185,11 +185,12 @@ GEM
railties (~> 3.0)
thor (~> 0.14)
jruby-jars (1.6.7.2)
- jruby-openssl (0.7.6.1)
+ jruby-openssl (0.7.7)
bouncy-castle-java (>= 1.5.0146.1)
- jruby-rack (1.1.5)
+ jruby-rack (1.1.6)
jruby-rack-worker (0.3-java)
jruby-rack (>= 1.0.1)
+ json (1.7.3)
json (1.7.3-java)
json_pure (1.7.3)
launchy (2.1.0)
@@ -200,6 +201,10 @@ GEM
spoon (~> 0.0.1)
libwebsocket (0.1.3)
addressable
+ listen (0.4.5)
+ rb-fchange (~> 0.0.5)
+ rb-fsevent (~> 0.9.1)
+ rb-inotify (~> 0.8.8)
mail (2.3.3)
i18n (>= 0.4.0)
mime-types (~> 1.16)
@@ -211,11 +216,11 @@ GEM
net-ssh (>= 1.99.1)
net-sftp (2.0.5)
net-ssh (>= 2.0.9)
- net-ssh (2.3.0)
+ net-ssh (2.5.2)
net-ssh-gateway (1.1.0)
net-ssh (>= 1.99.1)
- nokogiri (1.5.2)
- nokogiri (1.5.2-java)
+ nokogiri (1.5.4)
+ nokogiri (1.5.4-java)
orm_adapter (0.0.7)
polyamorous (0.5.0)
activerecord (~> 3.0)
@@ -249,6 +254,11 @@ GEM
actionpack (~> 3.0)
activerecord (~> 3.0)
polyamorous (~> 0.5.0)
+ rb-fchange (0.0.5)
+ ffi
+ rb-fsevent (0.9.1)
+ rb-inotify (0.8.8)
+ ffi (>= 0.5.0)
rdoc (3.12)
json (~> 1.4)
remarkable (4.0.0.alpha4)
@@ -267,7 +277,7 @@ GEM
rspec-core (~> 2.10.0)
rspec-expectations (~> 2.10.0)
rspec-mocks (~> 2.10.0)
- rspec-core (2.10.0)
+ rspec-core (2.10.1)
rspec-expectations (2.10.0)
diff-lcs (~> 1.1.3)
rspec-mocks (2.10.1)
@@ -277,14 +287,14 @@ GEM
railties (>= 3.0)
rspec (~> 2.10.0)
rubyzip (0.9.8)
- sass (3.1.18)
+ sass (3.1.19)
sass-rails (3.1.4)
actionpack (~> 3.1.0)
railties (~> 3.1.0)
sass (>= 3.1.4)
sprockets (~> 2.0.0)
tilt (~> 1.3.2)
- selenium-webdriver (2.21.2)
+ selenium-webdriver (2.22.2)
childprocess (>= 0.2.5)
ffi (~> 1.0)
libwebsocket (~> 0.1.3)
@@ -298,11 +308,11 @@ GEM
hike (~> 1.2)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
- squeel (1.0.1)
+ squeel (1.0.5)
activerecord (~> 3.0)
activesupport (~> 3.0)
polyamorous (~> 0.5.0)
- therubyrhino (1.73.3)
+ therubyrhino (1.73.4)
thor (0.14.6)
tilt (1.3.3)
treetop (1.4.10)
diff --git a/app/assets/stylesheets/common.css.scss b/app/assets/stylesheets/common.css.scss
index 9f9ce3346..b6d91a318 100644
--- a/app/assets/stylesheets/common.css.scss
+++ b/app/assets/stylesheets/common.css.scss
@@ -43,6 +43,9 @@
padding-left: 12px;
}
+ a.link {
+ background: url(image-path('icons/link-small.png')) no-repeat 0% 50%;
+ }
a.edit {
background: url(image-path('user_interface/ui/edit-small.png')) no-repeat 0% 50%;
}
diff --git a/app/assets/stylesheets/layout.css.scss b/app/assets/stylesheets/layout.css.scss
index e93ec699c..79126e7ed 100644
--- a/app/assets/stylesheets/layout.css.scss
+++ b/app/assets/stylesheets/layout.css.scss
@@ -7,12 +7,16 @@ $text_color: #222;
@import "user_interface/layout";
-#header .infos div.title h1 {
- border: 1px solid white;
- font-size: 30px;
- margin: 20px 0 0 100px;
- padding: 3px 15px 3px 15px;
- font-weight: bold;
+#header .infos div.title
+{
+ margin: 20px 0 0 30px;
+
+ h1 {
+ font-family: "Comic Sans", "Comic Sans MS", cursive;
+ font-size: 32px;
+ font-weight: bold;
+ padding: 0px;
+ }
}
@@ -54,6 +58,10 @@ $text_color: #222;
background: url(image-path('user_interface/ui/add.png')) no-repeat;
}
+ a.link {
+ background: url(image-path('icons/link.png')) no-repeat;
+ }
+
a.select_parent {
background: url(image-path('icons/select_parent.png')) no-repeat;
}
@@ -61,4 +69,4 @@ $text_color: #222;
a.select_areas {
background: url(image-path('icons/select_parent.png')) no-repeat;
}
-} \ No newline at end of file
+}
diff --git a/app/assets/stylesheets/lines.css.scss b/app/assets/stylesheets/lines.css.scss
index 07ed34e5b..f66f8badd 100644
--- a/app/assets/stylesheets/lines.css.scss
+++ b/app/assets/stylesheets/lines.css.scss
@@ -61,6 +61,13 @@
padding: 0 5px 0 5px;}
h3.routes { clear: both; }
+ .route {
+ margin-bottom: 0px;
+ .info {
+ margin-bottom: 30px;
+ }
+ }
+
.summary p label {
font-weight: bold;
}
diff --git a/app/assets/stylesheets/referentials.css.scss b/app/assets/stylesheets/referentials.css.scss
index 721474cbd..dd03adb05 100644
--- a/app/assets/stylesheets/referentials.css.scss
+++ b/app/assets/stylesheets/referentials.css.scss
@@ -2,6 +2,13 @@
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
+#workspace.referentials.show
+{
+ .summary p label {
+ font-weight: bold;
+ }
+}
+
ul.logos {
margin: 30px 30px 0 0;
diff --git a/app/assets/stylesheets/vehicle_journeys.css.scss b/app/assets/stylesheets/vehicle_journeys.css.scss
new file mode 100644
index 000000000..0bfabc38b
--- /dev/null
+++ b/app/assets/stylesheets/vehicle_journeys.css.scss
@@ -0,0 +1,127 @@
+// Place all the styles related to the routes controller here.
+// They will automatically be included in application.css.
+// You can use Sass (SCSS) here: http://sass-lang.com/
+@import "common";
+
+#workspace.vehicle_journeys.edit, #workspace.vehicle_journeys.new
+{
+ #route_color{ width: 100px;
+ color: white;
+ font-weight: bold;}
+ .journey_pattern_dependent_list {
+ tr.no_stop {
+ display: none;
+ }
+ }
+ .time_table_list {
+ padding-left: 25%;
+ }
+}
+
+#workspace.vehicle_journeys.index
+{
+ table{ margin: 20px 0 0 0; }
+
+ tr.odd{}
+ tr.even{ background-color: #DEFFA8; }
+
+ thead tr{ background-color: #95CB3E; }
+
+ tbody { margin: 10px;}
+
+ tr{
+
+ th{
+ padding: 5px 7px 5px 7px;
+ text-align: center;
+ }
+
+ th.calendars {
+ font-size: 11px;
+ }
+
+ th.title {
+ text-align: left;
+ }
+
+ td{
+ padding: 5px 7px 5px 7px;
+ text-align: center;
+ }
+
+ td.hours{
+ font-size: 12px;
+ color: #516a29;
+ }
+
+ td.stop_area{
+ text-align: left;
+ font-size: 12px;
+ font-weight: bold;
+ }
+ }
+
+}
+
+#workspace.vehicle_journeys.show, #workspace.vehicle_journeys.edit {
+ .vehicle_journey_at_stops {
+ thead {
+ th { text-align: center; }
+ th.hour { width: 130px; }
+ tr {
+ background-color: #95CB3E;
+ color: white;
+ }
+ }
+ tbody {
+ td.hour { text-align: center; }
+ tr label { width: 100% }
+ tr.odd { }
+ tr.even { background-color: #DEFFA8; }
+ }
+ }
+}
+
+#workspace.vehicle_journeys.show
+{
+ .summary p label {
+ font-weight: bold;
+ }
+
+ .time_table:after {
+ @include after_div_for_object;
+ }
+
+ .time_tables {
+ margin-top: 20px;
+ }
+
+ .time_tables:after {
+ @include content_to_clear;
+ }
+
+ .vehicle_journey_time_tables {
+ clear: both;
+ margin: 0px;
+ padding: 0px;
+ }
+
+ .time_table {
+ @include div_for_object;
+ /* to create multi-column index */
+ width: 350px;
+ height: 100px;
+ float: left;
+ padding-right: 10px;
+
+ span.included_day_type {
+ font-weight: bolder;
+ color: black;
+ }
+ span.excluded_day_type {
+ }
+ }
+}
+
+
+
diff --git a/app/controllers/time_tables_controller.rb b/app/controllers/time_tables_controller.rb
index dbecde0eb..a3e2c85c4 100644
--- a/app/controllers/time_tables_controller.rb
+++ b/app/controllers/time_tables_controller.rb
@@ -6,8 +6,24 @@ class TimeTablesController < ChouetteController
belongs_to :referential
+ def comment_filter
+ respond_to do |format|
+ format.json { render :json => filtered_time_tables_maps}
+ end
+
+ end
+
protected
+ def filtered_time_tables_maps
+ filtered_time_tables.collect do |time_table|
+ { :id => time_table.id, :name => time_table.comment }
+ end
+ end
+ def filtered_time_tables
+ referential.time_tables.select{ |t| t.comment =~ /#{params[:q]}/i }
+ end
+
def collection
@q = referential.time_tables.search(params[:q])
@time_tables ||= @q.result(:distinct => true).order(:comment).paginate(:page => params[:page], :per_page => 10)
diff --git a/app/controllers/vehicle_journeys_controller.rb b/app/controllers/vehicle_journeys_controller.rb
index 3a99d531b..596a7f90c 100644
--- a/app/controllers/vehicle_journeys_controller.rb
+++ b/app/controllers/vehicle_journeys_controller.rb
@@ -1,23 +1,37 @@
class VehicleJourneysController < ChouetteController
defaults :resource_class => Chouette::VehicleJourney
+ respond_to :js, :only => [:select_journey_pattern, :edit]
+
belongs_to :referential do
belongs_to :line, :parent_class => Chouette::Line do
belongs_to :route, :parent_class => Chouette::Route
end
end
+ def select_journey_pattern
+ if params[:journey_pattern_id]
+ selected_journey_pattern = Chouette::JourneyPattern.find( params[:journey_pattern_id])
+
+ @vehicle_journey = vehicle_journey
+ @vehicle_journey.update_journey_pattern(selected_journey_pattern)
+ end
+ end
+
protected
+
+ alias_method :vehicle_journey, :resource
def collection
- @q = parent.vehicle_journeys.search(params[:q])
- @vehicle_journeys ||= @q.result(:distinct => true).paginate(:page => params[:page], :per_page => 10)
+ @q = parent.sorted_vehicle_journeys.search(params[:q])
+ @vehicle_journeys ||= @q.result(:distinct => true).order( "vehicle_journey_at_stops.departure_time").paginate(:page => params[:page], :per_page => 10)
@matrix ||= matrix
end
def matrix
{}.tap do |hash|
- @vehicle_journeys.each do |vj|
+ Chouette::VehicleJourney.find( @vehicle_journeys.map { |v| v.id } ).
+ each do |vj|
vj.vehicle_journey_at_stops.each do |vjas|
hash[ "#{vj.id}-#{vjas.stop_point_id}"] = vjas
end
diff --git a/app/helpers/time_tables_helper.rb b/app/helpers/time_tables_helper.rb
new file mode 100644
index 000000000..a7607f7a0
--- /dev/null
+++ b/app/helpers/time_tables_helper.rb
@@ -0,0 +1,37 @@
+module TimeTablesHelper
+ def bounding_info(time_table)
+ return t('time_tables.time_table.empty') if time_table.bounding_dates.empty?
+ t('time_tables.time_table.bounding',
+ :start => l(time_table.bounding_dates.min),
+ :end => l(time_table.bounding_dates.max))
+ end
+ def bounding_short_info(dates)
+ return t('time_tables.time_table.empty') if dates.empty?
+ "#{l(dates.min)} #{l(dates.max)}"
+ end
+ def time_table_bounding( time_table)
+ bounding_short_info( time_table.bounding_dates)
+ end
+ def time_tables_shortest_info( vehicle)
+ bounding_short_info( vehicle.bounding_dates)
+ end
+ def time_tables_info( vehicle)
+ vehicle.time_tables.map do |time_table|
+ "#{time_table_bounding( time_table)} - #{composition_info(time_table)}"
+ end.join( "\n")
+ end
+
+ def composition_info(time_table)
+ return if time_table.bounding_dates.empty?
+ if time_table.dates.empty?
+ t('time_tables.time_table.periods_count', :count => time_table.periods.count)
+ elsif time_table.periods.empty?
+ t('time_tables.time_table.dates_count', :count => time_table.dates.count)
+ else
+ t('time_tables.time_table.periods_dates_count',
+ :dates_count => time_table.dates.count,
+ :periods_count => time_table.periods.count)
+ end
+ end
+end
+
diff --git a/app/helpers/vehicle_journeys_helper.rb b/app/helpers/vehicle_journeys_helper.rb
new file mode 100644
index 000000000..34b367424
--- /dev/null
+++ b/app/helpers/vehicle_journeys_helper.rb
@@ -0,0 +1,19 @@
+module VehicleJourneysHelper
+ def vehicle_title( vehicle)
+ return t('vehicle_journeys.vehicle_journey.title_stopless') if vehicle.vehicle_journey_at_stops.empty?
+ first_vjas = vehicle.vehicle_journey_at_stops.first
+ t('vehicle_journeys.vehicle_journey.title',
+ :name => vehicle.published_journey_name,
+ :stop => first_vjas.stop_point.stop_area.name,
+ :time => l(first_vjas.departure_time, :format => :hour)).gsub( / /, ' ')
+ end
+ def edit_vehicle_title( vehicle)
+ return t('vehicle_journeys.edit.title_stopless') if vehicle.vehicle_journey_at_stops.empty?
+ first_vjas = vehicle.vehicle_journey_at_stops.first
+ t('vehicle_journeys.edit.title',
+ :name => vehicle.published_journey_name,
+ :stop => first_vjas.stop_point.stop_area.name,
+ :time => l(first_vjas.departure_time, :format => :hour)).gsub( / /, ' ')
+ end
+end
+
diff --git a/app/models/export.rb b/app/models/export.rb
index a202e77ef..4fd6ff2f1 100644
--- a/app/models/export.rb
+++ b/app/models/export.rb
@@ -21,6 +21,10 @@ class Export < ActiveRecord::Base
end
end
+ def exporter
+ exporter ||= ::Chouette::Exporter.new(referential.slug)
+ end
+
def options
read_attribute(:options) || write_attribute(:options, {})
end
@@ -42,7 +46,7 @@ class Export < ActiveRecord::Base
end
def export_options
- { :export_id => self.id, :output_file => file }
+ { :export_id => self.id }
end
before_validation :define_default_attributes, :on => :create
@@ -61,8 +65,7 @@ class Export < ActiveRecord::Base
begin
log_messages.create :key => :started
- # TODO
- # Make real export here
+ exporter.export file, export_options
update_attribute :status, "completed"
rescue => e
diff --git a/app/models/export_log_message.rb b/app/models/export_log_message.rb
index 61068689c..8d6a09a6b 100644
--- a/app/models/export_log_message.rb
+++ b/app/models/export_log_message.rb
@@ -4,7 +4,7 @@ class ExportLogMessage < ActiveRecord::Base
acts_as_list :scope => :export
validates_presence_of :key
- validates_inclusion_of :severity, :in => %w{info warning error}
+ validates_inclusion_of :severity, :in => %w{info warning error ok uncheck fatal}
def arguments=(arguments)
write_attribute :arguments, (arguments.to_json if arguments.present?)
@@ -31,6 +31,7 @@ class ExportLogMessage < ActiveRecord::Base
end
def full_message
- I18n.translate key, arguments.symbolize_keys.merge(:scope => "export_log_messages.messages")
+ last_key=key.rpartition("|").last
+ I18n.translate last_key, arguments.symbolize_keys.merge(:scope => "export_log_messages.messages").merge(:default => :undefined).merge(:key => last_key)
end
end
diff --git a/app/models/import_log_message.rb b/app/models/import_log_message.rb
index f06a61213..ae331eb20 100644
--- a/app/models/import_log_message.rb
+++ b/app/models/import_log_message.rb
@@ -3,7 +3,7 @@ class ImportLogMessage < ActiveRecord::Base
acts_as_list :scope => :import
validates_presence_of :key
- validates_inclusion_of :severity, :in => %w{info warning error}
+ validates_inclusion_of :severity, :in => %w{info warning error ok uncheck fatal}
def arguments=(arguments)
write_attribute :arguments, (arguments.to_json if arguments.present?)
diff --git a/app/views/help/index.textile b/app/views/help/index.textile
index bea9502ec..838689df3 100644
--- a/app/views/help/index.textile
+++ b/app/views/help/index.textile
@@ -3,7 +3,7 @@ layout: default
title: Présentation
---
-Chouette v2 : it&eacute;ration 7 du 04/06/2012
+Chouette v2 : it&eacute;ration 8 du 19/06/2012
Cette it&eacute;ration pr&eacute;sente les formulaires de :
@@ -11,11 +11,16 @@ Cette it&eacute;ration pr&eacute;sente les formulaires de :
* transporteurs
* lignes
** s&eacute;quences d'arr&ecirc;ts
-** missions
+*** missions
+*** courses/horaires
* arr&ecirc;ts
+** arr&ecirc;ts physiques
+** zones d'arr&ecirc;t
+** ITL
* calendriers d'application
* correspondances
-* imports Neptune
+* imports Neptune et CSV
+* exports Neptune
l'avancement actuel permet de :
@@ -25,20 +30,20 @@ l'avancement actuel permet de :
* d&eacute;placer un arr&ecirc;t depuis la carte (voir mode op&eacute;ratoire dans l'aide des arr&ecirc;ts)
* associer les arr&ecirc;ts &agrave; leurs parents
* ajouter des fils &agrave; un arr&ecirc;t
-* importer des lignes au format Neptune (fichier ZIP uniquement)
+* importer des lignes aux formats Neptune et CSV (zip et fichier non compress&eacute;)
+* exporter des lignes au format Neptune (zip)
* &eacute;diter des s&eacute;quences d'arr&ecirc;ts :
** ajouter, d&eacute;placer et retirer des arr&ecirc;ts dans la s&eacute;quence
** ajouter, modifier les missions de la s&eacute;quence
+** afficher, ajouter, modifier, supprimer des courses/horaires
* pr&eacute;ciser des param&egrave;tres g&eacute;n&eacute;raux de l'espace de donn&eacute;es
les actions suivantes ne sont pas encore disponible :
* afficher le fond G&eacute;oportail
-* associer une ITL &agrave; une ligne
-* imports &agrave; d'autres formats que Neptune
-* exports de donn&eacute;es
+* exports de donn&eacute;es &agrave; d'autres formats que Neptune (GTFS/CSV)
* d&eacute;finir l'emprise g&eacute;n&eacute;rale du r&eacute;seau
* g&eacute;rer le second r&eacute;f&eacute;rentiel de projection
-* consulter/cr&eacute;er/&eacute;diter les courses et les horaires
+* afficher des informations dans le tableau de bord
diff --git a/app/views/referentials/show.html.erb b/app/views/referentials/show.html.erb
index e72c0ad06..2f2afdbed 100644
--- a/app/views/referentials/show.html.erb
+++ b/app/views/referentials/show.html.erb
@@ -1,6 +1,6 @@
<%= title_tag @referential.name %>
-<div>
+<div class="summary">
<p>
<label><%= Referential.human_attribute_name("slug") %>: </label>
<%= @referential.slug %>
diff --git a/app/views/routes/_route.html.erb b/app/views/routes/_route.html.erb
index 7804ec068..4ec720e5d 100644
--- a/app/views/routes/_route.html.erb
+++ b/app/views/routes/_route.html.erb
@@ -1,9 +1,20 @@
<%= div_for(route) do %>
- <div class="wayback">
- <%= link_to image_tag("icons/#{route.wayback}.png"), referential_line_route_path( @referential, @line, route) %>
- </div>
- <div class="route">
+ <%= link_to image_tag("icons/#{route.wayback}.png"), referential_line_route_path( @referential, @line, route) %>
+ <div>
<%= link_to route.name, referential_line_route_path( @referential, @line, route) %>
</div>
+ <div class="info">
+ <% if route.number.blank? %>
+ <%= route.human_attribute_name('number') %> <%= route.number %> -
+ <% end %>
+ <% if route.direction.blank? %>
+ <%= route.human_attribute_name('direction') %> <%= route.direction %> -
+ <% end %>
+ <%= route.human_attribute_name('wayback_code') %> <%= (route.wayback=="A") ? t('route.wayback.positive') : t('wayback.negative') %>
+ <div class="actions">
+ <%= link_to t("routes.actions.edit"), edit_referential_line_route_path(@referential, @line, route), :class => "edit" %> |
+ <%= link_to t("vehicle_journeys.actions.index"), referential_line_route_vehicle_journeys_path(@referential, @line, route), :class => "link" %>
+ </div>
+ </div>
<% end %>
diff --git a/app/views/routes/show.html.erb b/app/views/routes/show.html.erb
index 72524846b..0666fdcf5 100644
--- a/app/views/routes/show.html.erb
+++ b/app/views/routes/show.html.erb
@@ -93,6 +93,9 @@
<li>
<%= link_to t('journey_patterns.actions.new'), new_referential_line_route_journey_pattern_path(@referential, @line, @route), :class => "add" %>
</li>
+ <li>
+ <%= link_to t('vehicle_journeys.actions.index'), referential_line_route_vehicle_journeys_path(@referential, @line, @route), :class => "link" %>
+ </li>
</ul>
<% end %>
diff --git a/app/views/time_table_periods/_form.html.erb b/app/views/time_table_periods/_form.html.erb
index 8369e9701..6f390c7d5 100644
--- a/app/views/time_table_periods/_form.html.erb
+++ b/app/views/time_table_periods/_form.html.erb
@@ -1,7 +1,7 @@
<%= semantic_form_for [@referential, @time_table, @time_table_period] do |form| %>
<%= form.inputs do %>
- <%= form.input :periodstart, :as => :date, :label => @time_table_period.human_attribute_name("period_start") %>
- <%= form.input :periodend, :as => :date, :label => @time_table_period.human_attribute_name("period_end") %>
+ <%= form.input :period_start, :as => :date, :label => @time_table_period.human_attribute_name("period_start") %>
+ <%= form.input :period_end, :as => :date, :label => @time_table_period.human_attribute_name("period_end") %>
<% end %>
<%= form.buttons do %>
<%= form.commit_button %>
diff --git a/app/views/vehicle_journeys/_form.html.erb b/app/views/vehicle_journeys/_form.html.erb
index 9a7d84ed8..582253b0f 100644
--- a/app/views/vehicle_journeys/_form.html.erb
+++ b/app/views/vehicle_journeys/_form.html.erb
@@ -1,5 +1,6 @@
<%= semantic_form_for [@referential, @line, @route, @vehicle_journey] do |form| %>
<%= form.inputs do %>
+ <%= form.input :journey_pattern, :as => :select, :collection => @route.journey_patterns, :include_blank => false, :member_label => Proc.new { |jp| journey_name(jp) } %>
<%= form.input :published_journey_name %>
<%= form.input :published_journey_identifier %>
<%= form.input :comment %>
@@ -16,7 +17,34 @@
</li>
<% end %>
- <%= render :partial => "vehicle_journeys/vehicle_journey_at_stop_fields" %>
+ <%= form.inputs :class => "stop_times", :name => @vehicle_journey.human_attribute_name(:vehicle_journey_at_stop_ids) do %>
+ <table border="0" class="vehicle_journey_at_stops">
+ <thead>
+ <tr>
+ <th class="hour title"><%= t('.arrival') %></th>
+ <th class="stop title" ><%= t('.stop_title') %></th>
+ <th class="hour title"><%= t('.departure') %></th>
+ </tr>
+ </thead>
+ <!--
+ <= form.semantic_fields_for :vehicle_journey_at_stops do |vjas| >
+ <= vjas.object.stop_point.stop_area.name >
+ <= vjas.input :_destroy, :as => :hidden >
+ <= vjas.input :departure_time, :as => :time >
+
+ < end >
+ -->
+ <tbody class="journey_pattern_dependent_list">
+ <%= render :partial => "vehicle_journeys/vehicle_journey_at_stop_fields",
+ :collection => @vehicle_journey.vehicle_journey_at_stops, :as => :vehicle_journey_at_stop %>
+ </tbody>
+ </table>
+ <% end %>
+ <%= form.inputs :class => "time_tables", :name=> @vehicle_journey.human_attribute_name(:time_table_ids) do %>
+ <div class="time_table_list">
+ <%= form.input :time_table_tokens, :label => t('.time_tables'), :as => :text, :input_html => { :"data-pre" => ( @vehicle_journey.time_tables.map { |time_table| { :id => time_table.id, :name => time_table.comment } } ).to_json } %>
+ </div>
+ <% end %>
<% end %>
@@ -27,3 +55,17 @@
<% end %>
<% end %>
+<% unless @vehicle_journey.new_record? %>
+ <%= javascript_include_tag edit_referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey, :format => :js) %>
+<% end %>
+
+<script>
+ $(function() {
+ $( "#vehicle_journey_time_table_tokens" ).tokenInput('<%= comment_filter_referential_time_tables_path(@referential, :format => :json) %>', {
+ crossDomain: false,
+ prePopulate: $('#time_table_tokens').data('pre'),
+ minChars: 3,
+ });
+ });
+</script>
+
diff --git a/app/views/vehicle_journeys/_time_table.html.erb b/app/views/vehicle_journeys/_time_table.html.erb
new file mode 100644
index 000000000..fccee5ff8
--- /dev/null
+++ b/app/views/vehicle_journeys/_time_table.html.erb
@@ -0,0 +1,18 @@
+<%= div_for(time_table, :class => "time_table") do %>
+ <%= link_to time_table.comment, [@referential, time_table] %>
+ <div class="info">
+ <%= composition_info(time_table) %> -
+ <% unless time_table.periods.empty? %>
+ <% %w(monday tuesday wednesday thursday friday saturday sunday).each do |day_type| %>
+ <span class="<%= time_table.send( day_type) ? "included_day_type" : "excluded_day_type" %>">
+ <%= time_table.human_attribute_name(day_type).first(2) %>
+ </span>
+ <% end %>
+ <% end %> -
+ <%= bounding_info(time_table) %>
+ <div class="actions">
+ <%= link_to t("actions.edit"), edit_referential_time_table_path(@referential, time_table), :class => "edit" %>
+ </div>
+ </div>
+<% end %>
+
diff --git a/app/views/vehicle_journeys/_vehicle_journey_at_stop_fields.html.erb b/app/views/vehicle_journeys/_vehicle_journey_at_stop_fields.html.erb
index 9ef3b509b..f6feab945 100644
--- a/app/views/vehicle_journeys/_vehicle_journey_at_stop_fields.html.erb
+++ b/app/views/vehicle_journeys/_vehicle_journey_at_stop_fields.html.erb
@@ -1,11 +1,24 @@
- <% @vehicle_journey.vehicle_journey_at_stops.each_with_index do |vjas, index| %>
- <li class="time input optional">
- <input name=<%= "vehicle_journey[vehicle_journey_at_stops_attributes][#{index}][departure_time(3i)]" %> type="hidden" value="1">
- <input name=<%= "vehicle_journey[vehicle_journey_at_stops_attributes][#{index}][departure_time(2i)]" %> type="hidden" value="1">
- <input name=<%= "vehicle_journey[vehicle_journey_at_stops_attributes][#{index}][departure_time(1i)]" %> type="hidden" value="2000">
- <label for=<%= "date_vehicle_journey_vehicle_journey_at_stops_attributes_#{index}_departure_time_5i" %>><%= vjas.stop_point.stop_area.name %></label>
- <%= select_hour(vjas.departure_time.hour, :field_name => "vehicle_journey[vehicle_journey_at_stops_attributes][#{index}][departure_time(4i)]") %>
- <%= select_minute(vjas.departure_time.min, :field_name => "vehicle_journey[vehicle_journey_at_stops_attributes][#{index}][departure_time(5i)]") %>
- </li>
- <% end %>
+<% vjas = vehicle_journey_at_stop %>
+<tr class="time input optional <%= vjas._destroy ? "no_stop" : "" %> <%= (vehicle_journey_at_stop_counter%2==0) ? "odd" : "even" %>">
+ <td>
+ <%= select_hour(vjas.arrival_time ? vjas.arrival_time.hour : 0, :prefix => "vehicle_journey", :field_name => "vehicle_journey_at_stops_attributes[#{vehicle_journey_at_stop_counter}][arrival_time(4i)]") %>
+ <%= select_minute(vjas.arrival_time ? vjas.arrival_time.min : 0, :prefix => "vehicle_journey", :field_name => "vehicle_journey_at_stops_attributes[#{vehicle_journey_at_stop_counter}][arrival_time(5i)]") %>
+ </td>
+ <td>
+ <input name=<%= "vehicle_journey[vehicle_journey_at_stops_attributes][#{vehicle_journey_at_stop_counter}][id]" %> type="hidden" value="<%= vjas.id %>">
+ <input name=<%= "vehicle_journey[vehicle_journey_at_stops_attributes][#{vehicle_journey_at_stop_counter}][_destroy]" %> type="hidden" value="<%= vjas._destroy ? "1" : "0" %>">
+ <input name=<%= "vehicle_journey[vehicle_journey_at_stops_attributes][#{vehicle_journey_at_stop_counter}][stop_point_id]" %> type="hidden" value="<%= vjas.stop_point_id %>">
+ <input name=<%= "vehicle_journey[vehicle_journey_at_stops_attributes][#{vehicle_journey_at_stop_counter}][departure_time(3i)]" %> type="hidden" value="1">
+ <input name=<%= "vehicle_journey[vehicle_journey_at_stops_attributes][#{vehicle_journey_at_stop_counter}][departure_time(2i)]" %> type="hidden" value="1">
+ <input name=<%= "vehicle_journey[vehicle_journey_at_stops_attributes][#{vehicle_journey_at_stop_counter}][departure_time(1i)]" %> type="hidden" value="2000">
+ <input name=<%= "vehicle_journey[vehicle_journey_at_stops_attributes][#{vehicle_journey_at_stop_counter}][arrival_time(3i)]" %> type="hidden" value="1">
+ <input name=<%= "vehicle_journey[vehicle_journey_at_stops_attributes][#{vehicle_journey_at_stop_counter}]arrival_time(2i)]" %> type="hidden" value="1">
+ <input name=<%= "vehicle_journey[vehicle_journey_at_stops_attributes][#{vehicle_journey_at_stop_counter}][arrival_time(1i)]" %> type="hidden" value="2000">
+ <label for=<%= "vehicle_journey_vehicle_journey_at_stops_attributes_#{vehicle_journey_at_stop_counter}_departure_time_5i" %>><%= vjas.stop_point.stop_area.name %></label>
+ </td>
+ <td>
+ <%= select_hour(vjas.departure_time ? vjas.departure_time.hour : 0, :prefix => "vehicle_journey", :field_name => "vehicle_journey_at_stops_attributes[#{vehicle_journey_at_stop_counter}][departure_time(4i)]") %>
+ <%= select_minute(vjas.departure_time ? vjas.departure_time.min : 0, :prefix => "vehicle_journey", :field_name => "vehicle_journey_at_stops_attributes[#{vehicle_journey_at_stop_counter}][departure_time(5i)]") %>
+ </td>
+</tr>
diff --git a/app/views/vehicle_journeys/edit.html.erb b/app/views/vehicle_journeys/edit.html.erb
index c1079a16d..fcb0c2bd9 100644
--- a/app/views/vehicle_journeys/edit.html.erb
+++ b/app/views/vehicle_journeys/edit.html.erb
@@ -1,4 +1,4 @@
-<%= title_tag t('vehicle_journeys.edit.title' ) %>
+<%= title_tag edit_vehicle_title(@vehicle_journey) %>
<div class="vehicle_journey">
<div class="summary">
@@ -7,13 +7,9 @@
<%= link_to line_formatted_name( @line), [@referential, @line] %>
</p>
<p>
- <label><%= Chouette::Route.model_name.human %>: </label>
+ <label><%= @vehicle_journey.human_attribute_name(:route) %>: </label>
<%= link_to @route.name, [@referential, @line, @route] %>
</p>
- <p>
- <label><%= Chouette::JourneyPattern.model_name.human %>: </label>
- <%= link_to journey_name(@vehicle_journey.journey_pattern), [@referential, @line, @route, @vehicle_journey.journey_pattern] %>
- </p>
<div>
<div>
diff --git a/app/views/vehicle_journeys/edit.js.erb b/app/views/vehicle_journeys/edit.js.erb
new file mode 100644
index 000000000..b16d9d343
--- /dev/null
+++ b/app/views/vehicle_journeys/edit.js.erb
@@ -0,0 +1,9 @@
+$(document).ready(function() {
+ $("#vehicle_journey_journey_pattern_id").change(
+ function(){
+ var url = "<%= select_journey_pattern_referential_line_route_vehicle_journey_path( @referential, @line, @route, @vehicle_journey)%>?journey_pattern_id="+
+ $("#vehicle_journey_journey_pattern_input select option:selected").attr("value");
+ $.get(url);
+ }
+ )
+});
diff --git a/app/views/vehicle_journeys/index.html.erb b/app/views/vehicle_journeys/index.html.erb
index cbb43408c..8d000bac3 100644
--- a/app/views/vehicle_journeys/index.html.erb
+++ b/app/views/vehicle_journeys/index.html.erb
@@ -10,8 +10,8 @@
<label><%= Chouette::Route.model_name.human %>: </label>
<%= link_to @route.name, [@referential, @line, @route] %>
</p>
- <div>
-<div>
+ </div>
+</div>
<h3 class="vehicle_journeys"><%= t('.vehicle_journeys') %></h3>
<div class="pagination">
<div class="page_info">
@@ -20,25 +20,57 @@
<%= will_paginate @vehicle_journeys, :container => false %>
</div>
<div class="vehicle_journeys paginated_content">
- <table border="1">
- <tr>
- <th> "vide"</th>
- <% @vehicle_journeys.each do |vj| %>
- <th> <%= link_to "c", [@referential, @line, @route, vj]%></th>
- <% end %>
- </tr>
+ <table>
+ <thead>
+ <tr>
+ <th class="title">Missions : </th>
+ <% @vehicle_journeys.each do |vj| %>
+ <th> <%= link_to vj.journey_pattern.published_name.blank? ? vj.journey_pattern.id: vj.journey_pattern.published_name.first(8),
+ [@referential, @line, @route, vj.journey_pattern]%></th>
+ <% end %>
+ </tr>
+ <tr>
+ <th class="title">Calendriers : </th>
+ <% @vehicle_journeys.each do |vj| %>
+ <th title="<%= time_tables_info( vj) %>" class="calendars">
+ <%= time_tables_shortest_info( vj) %>
+ </th>
+ <% end %>
+ </tr>
+ <tr>
+ <th class="title">Courses : </th>
+ <% @vehicle_journeys.each do |vj| %>
+ <th> <%= link_to "c", [@referential, @line, @route, vj]%></th>
+ <% end %>
+ </tr>
+ </thead>
+ <tbody>
<% @route.stop_points.each_with_index do |sp, index| %>
- <tr>
- <td><%= sp.stop_area.name %></td>
+ <tr class="<%= cycle('odd', 'even') %>">
+ <td class="stop_area"><%= sp.stop_area.name %></td>
<% @vehicle_journeys.each do |vj| %>
- <td><%= @matrix["#{vj.id}-#{sp.id}"] ? l( @matrix["#{vj.id}-#{sp.id}"].departure_time, :format => :hour) : "" %></td>
+ <td class="hours"><%= @matrix["#{vj.id}-#{sp.id}"] ? l( @matrix["#{vj.id}-#{sp.id}"].departure_time, :format => :hour) : "" %></td>
<% end %>
</tr>
<% end %>
+ </tbody>
</table>
</div>
<% content_for :sidebar do %>
<ul class="actions">
+ <li>
+ <%= link_to t('vehicle_journeys.actions.new'), new_referential_line_route_vehicle_journey_path(@referential, @line, @route), :class => "add" %>
+ </li>
</ul>
+<h3><%= t(".selection") %></h3>
+
+<h4><%= Chouette::JourneyPattern.model_name.human.pluralize %></h4>
+
+<ul class="selection">
+<% @route.journey_patterns.each do |journey_pattern| %>
+<li><%= link_with_search journey_pattern.name, "journey_pattern_id_eq" => journey_pattern.id %></li>
<% end %>
+<li><%= link_with_search t(".selection_all"), {"journey_pattern_id_eq" => nil}, :class => "all" %></li>
+</ul>
+<% end %>
diff --git a/app/views/vehicle_journeys/new.html.erb b/app/views/vehicle_journeys/new.html.erb
index fd7bb34ac..db344438e 100644
--- a/app/views/vehicle_journeys/new.html.erb
+++ b/app/views/vehicle_journeys/new.html.erb
@@ -1,4 +1,4 @@
-<%= title_tag t('vehicle_journeys.new.title') %>
+<%= title_tag t('vehicle_journeys.new.title') %>
<div class="vehicle_journey">
<div class="summary">
@@ -7,7 +7,7 @@
<%= link_to line_formatted_name( @line), [@referential, @line] %>
</p>
<p>
- <label><%= Chouette::Route.model_name.human %>: </label>
+ <label><%= @vehicle_journey.human_attribute_name(:route) %>: </label>
<%= link_to @route.name, [@referential, @line, @route] %>
</p>
<div>
diff --git a/app/views/vehicle_journeys/select_journey_pattern.js.erb b/app/views/vehicle_journeys/select_journey_pattern.js.erb
new file mode 100644
index 000000000..3487da1ae
--- /dev/null
+++ b/app/views/vehicle_journeys/select_journey_pattern.js.erb
@@ -0,0 +1,6 @@
+$('.journey_pattern_dependent_list').html('<%= escape_javascript(
+ render(:partial => 'vehicle_journeys/vehicle_journey_at_stop_fields',
+ :collection => @vehicle_journey.vehicle_journey_at_stops,
+ :as => :vehicle_journey_at_stop)).html_safe %>');
+
+
diff --git a/app/views/vehicle_journeys/show.html.erb b/app/views/vehicle_journeys/show.html.erb
index a89d2261b..06f6f0c9f 100644
--- a/app/views/vehicle_journeys/show.html.erb
+++ b/app/views/vehicle_journeys/show.html.erb
@@ -1,4 +1,4 @@
-<%= title_tag t('vehicle_journeys.edit.title' ) %>
+<%= title_tag vehicle_title(@vehicle_journey) %>
<div class="vehicle_journey">
<div class="summary">
@@ -7,11 +7,11 @@
<%= link_to line_formatted_name( @line), [@referential, @line] %>
</p>
<p>
- <label><%= Chouette::Route.model_name.human %>: </label>
+ <label><%= @vehicle_journey.human_attribute_name(:route) %>: </label>
<%= link_to @route.name, [@referential, @line, @route] %>
</p>
<p>
- <label><%= Chouette::JourneyPattern.model_name.human %>: </label>
+ <label><%= @vehicle_journey.human_attribute_name(:journey_pattern) %>: </label>
<%= link_to journey_name(@vehicle_journey.journey_pattern), [@referential, @line, @route, @vehicle_journey.journey_pattern] %>
</p>
<p>
@@ -52,6 +52,32 @@
</p>
</div>
</div>
+<h3><%= @vehicle_journey.human_attribute_name(:vehicle_journey_at_stop_ids) %></h3>
+<div class="vehicle_journey_at_stops">
+ <table border="0" >
+ <thead>
+ <tr>
+ <th class="hour title"><%= t('.arrival') %></th>
+ <th class="stop title" ><%= t('.stop_title') %></th>
+ <th class="hour title"><%= t('.departure') %></th>
+ </tr>
+ <thead>
+ <tbody>
+ <% @vehicle_journey.vehicle_journey_at_stops.each_with_index do |vjas, index| %>
+ <tr class="<%= index%2==0 ? "odd" : "even" %>">
+ <td class="hour"><%= vjas.arrival_time ? l( vjas.arrival_time, :format => :hour) : "" %></td>
+ <td><%= link_to vjas.stop_point.stop_area.name, [@referential, vjas.stop_point.stop_area] %></td>
+ <td class="hour"><%= vjas.departure_time ? l( vjas.departure_time, :format => :hour) : "" %></td>
+ </tr>
+ <% end %>
+ </tbody>
+ </table>
+</div>
+
+<h3><%= t('.time_tables') %></h3>
+<div class="vehicle_journey_time_tables">
+<%= render :partial => "vehicle_journeys/time_table", :collection => @vehicle_journey.time_tables %>
+</div>
<% content_for :sidebar do %>
<ul class="actions">
<li><%= link_to t('vehicle_journeys.actions.edit'), edit_referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey), :class => "edit" %></li>
diff --git a/config/locales/exports.yml b/config/locales/exports.yml
index 74b7cd387..19beced06 100644
--- a/config/locales/exports.yml
+++ b/config/locales/exports.yml
@@ -20,10 +20,15 @@ en:
started: Started export
completed: Completed export
failed: Failed export
+ undefined: %{key} undefined
+ NEPTUNE_EXPORT: Neptune Export
+ NEPTUNE_EXPORTED_LINE: "Line %{0} (%{1}) exported"
severities:
info: Information
+ ok: Ok
warning: Warning
error: Error
+ fatal: Fatal
activerecord:
models:
export:
@@ -59,13 +64,21 @@ fr:
started: Export démarré
completed: Export achevé avec succès
failed: Export interromptu
+ undefined: %{key} non défini
+ NEPTUNE_EXPORT: Export Neptune
+ NEPTUNE_EXPORTED_LINE: "Ligne %{0} (%{1}) exportée"
severities:
info: Information
+ ok: Ok
warning: Alerte
error: Erreur
+ fatal: Fatal
activerecord:
- models:
- export: Export
+ models:
+ export:
+ zero: export
+ one: export
+ other: exports
neptune_export:
zero: Export Neptune
one: Export Neptune
diff --git a/config/locales/layouts.yml b/config/locales/layouts.yml
index d4b78e014..a665578c1 100644
--- a/config/locales/layouts.yml
+++ b/config/locales/layouts.yml
@@ -7,7 +7,7 @@ en:
profile: "My Profile"
sign_out: "Sign out"
tabs:
- dashboard: "Dashboard"
+ dashboard: "dashboard"
fr:
layouts:
back_to_dashboard: "Retour au Tableau de Bord"
@@ -17,4 +17,4 @@ fr:
profile: "Mon Profil"
sign_out: "Déconnexion"
tabs:
- dashboard: "Tableau de bord"
+ dashboard: "tableau de bord"
diff --git a/config/locales/routes.yml b/config/locales/routes.yml
index 4d0c7842d..7ab2ca623 100644
--- a/config/locales/routes.yml
+++ b/config/locales/routes.yml
@@ -27,6 +27,9 @@ en:
other: routes
attributes:
route:
+ wayback:
+ positive: forward
+ negative: backward
line: Line
name: Name
published_name: Published name
@@ -69,6 +72,9 @@ fr:
other: "Séquences d'arrêts"
attributes:
route:
+ wayback:
+ positive: Aller
+ negative: Retour
line: Ligne
name: Nom
published_name: Nom public
diff --git a/config/locales/time_tables.yml b/config/locales/time_tables.yml
index e10d8a5f8..421838586 100644
--- a/config/locales/time_tables.yml
+++ b/config/locales/time_tables.yml
@@ -1,6 +1,11 @@
en:
time_tables:
time_table:
+ empty: empty
+ bounding: from %{start} to %{end}
+ periods_count: "periods: %{count}"
+ dates_count: "dates: %{count}"
+ periods_dates_count: "dates: %{dates_count}, periods: %{periods_count}"
actions:
new: Add a new timetable
edit: Edit this timetable
@@ -62,6 +67,11 @@ en:
fr:
time_tables:
time_table:
+ empty: vide
+ bounding: du %{start} au %{end}
+ periods_count: "périodes: %{count}"
+ dates_count: "dates: %{count}"
+ periods_dates_count: "dates: %{dates_count}, périodes: %{periods_count}"
actions:
new: Ajouter un calendrier
edit: Modifier ce calendrier
diff --git a/config/locales/vehicle_journeys.yml b/config/locales/vehicle_journeys.yml
index 18882bad8..12f94a191 100644
--- a/config/locales/vehicle_journeys.yml
+++ b/config/locales/vehicle_journeys.yml
@@ -1,6 +1,10 @@
en:
vehicle_journeys:
+ vehicle_journey:
+ title_stopless: Vehicle journey %{name}
+ title: Vehicle journey %{name} leaving from %{stop} at %{time}
actions:
+ index: "Vehicle time's board"
new: Add a new vehicle journey
edit: Edit this vehicle journey
destroy: Remove this vehicle journey
@@ -8,11 +12,25 @@ en:
new:
title: Add a new vehicle journey
edit:
- title: Update vehicle journey %{vehicle journey}
+ title_stopless: Update vehicle journey %{name}
+ title: Update vehicle journey %{name} leaving from %{stop} at %{time}
+ form:
+ stop_title: Stop
+ departure: Departure
+ arrival: Arrival
+ time_tables: Associated calendars to vehicle journey
show:
title: Vehicle Journey %{vehicle journey}
+ stop_title: Stop
+ departure: Departure
+ arrival: Arrival
+ time_tables: Calendars list
+ bounding: From %{start} to %{end}
index:
- title: Vehicle journeys on route {%route}
+ title: Vehicle journeys on route %{route}
+ vehicle_journeys: "Departure's times"
+ selection: Filter on
+ selection_all: All
activerecord:
models:
vehicle_journey:
@@ -33,6 +51,8 @@ en:
published_journey_identifier: Published Identifier
facility: Facility
vehicletypeidentifier: Vehicle Type Identifier
+ time_table_ids: Calendar list
+ vehicle_journey_at_stop_ids: Time list
objectid: Neptune identifier
object_version: Version
creation_time: Created on
@@ -40,7 +60,11 @@ en:
fr:
vehicle_journeys:
+ vehicle_journey:
+ title_stopless: Course %{name}
+ title: Course %{name} partant de %{stop} à %{time}
actions:
+ index: "Horaires des courses"
new: "Ajouter une course"
edit: "Modifier cette course"
destroy: "Supprimer cette course"
@@ -48,11 +72,25 @@ fr:
new:
title: "Ajouter une course"
edit:
- title: "Modifier la course au départ de %{stop} à %{time} sur la séquence %{route}"
+ title_stopless: "Modifier la course %{name}"
+ title: "Modifier la course partant de %{stop} à %{time}"
+ form:
+ stop_title: Arrêt
+ departure: Départ
+ arrival: Arrivée
+ time_tables: Calendriers associés à la course
show:
title: "Course au départ de %{stop} à %{time} sur la séquence %{route}"
+ stop_title: Arrêt
+ departure: Départ
+ arrival: Arrivée
+ time_tables: Liste des calendriers
+ bounding: De %{start} à %{end}
index:
title: "Courses de la séquence d'arrêts %{route}"
+ vehicle_journeys: "Horaires de départ aux arrêts"
+ selection: Filtrer sur
+ selection_all: Tous
activerecord:
models:
vehicle_journey:
@@ -73,6 +111,8 @@ fr:
published_journey_identifier: Identifiant public
facility: Equipement
vehicle_type_identifier: "Type d'identifiant du véhicule"
+ time_table_ids: "Liste des calendriers"
+ vehicle_journey_at_stop_ids: Liste des horaires
objectid: Identifiant Neptune
object_version: Version
creation_time: Créé le
diff --git a/config/routes.rb b/config/routes.rb
index ba4f29ab6..313c52106 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -32,7 +32,11 @@ ChouetteIhm::Application.routes.draw do
end
resources :routes do
resources :journey_patterns
- resources :vehicle_journeys
+ resources :vehicle_journeys do
+ member do
+ get 'select_journey_pattern'
+ end
+ end
resources :stop_points do
collection do
post :sort
@@ -47,6 +51,9 @@ ChouetteIhm::Application.routes.draw do
resources :companies, :stop_areas
resources :time_tables do
+ collection do
+ get :comment_filter
+ end
resources :time_table_dates
resources :time_table_periods
end
diff --git a/spec/routing/vehicle_journeys_routing_spec.rb b/spec/routing/vehicle_journeys_routing_spec.rb
new file mode 100644
index 000000000..9be09d9b1
--- /dev/null
+++ b/spec/routing/vehicle_journeys_routing_spec.rb
@@ -0,0 +1,13 @@
+require 'spec_helper'
+
+describe VehicleJourneysController do
+ describe "routing" do
+ it "routes to #select_journey_pattern" do
+ get( "/referentials/1/lines/2/routes/3/vehicle_journeys/4/select_journey_pattern" ).should route_to(
+ "vehicle_journeys#select_journey_pattern",
+ "referential_id"=>"1", "line_id"=>"2", "route_id"=>"3", "id"=>"4"
+ )
+ end
+ end
+end
+
diff --git a/spec/views/vehicle_journeys/_form.html.erb_spec.rb b/spec/views/vehicle_journeys/_form.html.erb_spec.rb
index 121566448..385de64c9 100644
--- a/spec/views/vehicle_journeys/_form.html.erb_spec.rb
+++ b/spec/views/vehicle_journeys/_form.html.erb_spec.rb
@@ -31,6 +31,11 @@ describe "/vehicle_journeys/_form" do
end
end
end
+ it "renders _vehicle_journey_at_stop_fields partial for each vehicle_journey_at_stop" do
+ render
+ view.should render_template(:partial => "_vehicle_journey_at_stop_fields", :count => vehicle_journey.vehicle_journey_at_stops.count)
+ end
+
it "should render vehicle_journey_at_stop's departure time" do
render
rendered.should have_selector("form") do |form_node|
diff --git a/spec/views/vehicle_journeys/_vehicle_journey_at_stop_fields.html.erb_spec.rb b/spec/views/vehicle_journeys/_vehicle_journey_at_stop_fields.html.erb_spec.rb
new file mode 100644
index 000000000..70b0fc4ef
--- /dev/null
+++ b/spec/views/vehicle_journeys/_vehicle_journey_at_stop_fields.html.erb_spec.rb
@@ -0,0 +1,61 @@
+require 'spec_helper'
+
+describe "/vehicle_journeys/_vehicle_journey_at_stop_fields" do
+
+ let!(:referential) { assign :referential, create(:referential) }
+ let!(:line) { assign :line, create(:line) }
+ let!(:route) { assign :route, create(:route, :line => line) }
+ let!(:vehicle_journey) { assign :vehicle_journey, create(:vehicle_journey, :route => route) }
+ let!(:vehicle_journey_at_stop) { assign :vehicle_journey_at_stop, vehicle_journey.vehicle_journey_at_stops.first }
+ let!(:vehicle_journey_at_stop_counter) { assign :vehicle_journey_at_stop_counter, 0 }
+
+ def render_collection
+ render( :partial => "vehicle_journeys/vehicle_journey_at_stop_fields", :collection => vehicle_journey.vehicle_journey_at_stops, :as => :vehicle_journey_at_stop)
+ end
+ def field_name
+ "vehicle_journey[vehicle_journey_at_stops_attributes][0]"
+ end
+ it "should render vehicle_journey_at_stop's departure time" do
+ render_collection
+ rendered.should have_selector("td select", :name => "#{field_name}[departure_time(5i)]")
+ end
+
+ it "should render vehicle_journey_at_stop's stop_point_id" do
+ render_collection
+ rendered.should have_selector("td input", :name => "#{field_name}[stop_point_id]",
+ :value => vehicle_journey_at_stop.stop_point_id)
+ end
+ it "should render vehicle_journey_at_stop's id" do
+ render_collection
+ rendered.should have_selector("td input", :name => "#{field_name}[id]",
+ :value => vehicle_journey_at_stop.id)
+ end
+ it "should render vehicle_journey_at_stop's _destroy" do
+ render_collection
+ rendered.should have_selector("td input", :name => "#{field_name}[_destroy]",
+ :value => (vehicle_journey_at_stop._destroy ? "1" : "0"))
+ end
+ it "should render vehicle_journey_at_stop's stop name" do
+ render_collection
+ rendered.should have_selector("td label", :text => vehicle_journey_at_stop.stop_point.stop_area.name )
+ end
+ context "for a destroyed vehicle_journey_at_stop" do
+ before(:each) do
+ vehicle_journey_at_stop.stub!(:_destroy => true)
+ end
+ it "should render tr.no_stop" do
+ pending
+ render_collection
+ rendered.should have_selector("tr.no_stop")
+ end
+ end
+ context "for a destroyed vehicle_journey_at_stop" do
+ before(:each) do
+ vehicle_journey_at_stop.stub!(:_destroy => true)
+ end
+ it "should not render tr.no_stop" do
+ render_collection
+ rendered.should_not have_selector("tr.no_stop")
+ end
+ end
+end
diff --git a/spec/views/vehicle_journeys/edit.html.erb_spec.rb b/spec/views/vehicle_journeys/edit.html.erb_spec.rb
new file mode 100644
index 000000000..7d69f3ec1
--- /dev/null
+++ b/spec/views/vehicle_journeys/edit.html.erb_spec.rb
@@ -0,0 +1,22 @@
+require 'spec_helper'
+
+describe "/vehicle_journeys/edit" do
+
+ let!(:referential) { assign :referential, create(:referential) }
+ let!(:line) { assign :line, create(:line) }
+ let!(:route) { assign :route, create(:route, :line => line) }
+ let!(:vehicle_journey) { assign :vehicle_journey, create(:vehicle_journey, :route => route) }
+
+ it "renders _form" do
+ render
+ view.should render_template(:partial => "_form")
+ end
+ context "summary part" do
+ it "should render route name" do
+ render
+ rendered.should have_selector( ".summary a", :text => route.name)
+ end
+ end
+
+end
+
diff --git a/spec/views/vehicle_journeys/new.html.erb_spec.rb b/spec/views/vehicle_journeys/new.html.erb_spec.rb
new file mode 100644
index 000000000..152c48e46
--- /dev/null
+++ b/spec/views/vehicle_journeys/new.html.erb_spec.rb
@@ -0,0 +1,22 @@
+require 'spec_helper'
+
+describe "/vehicle_journeys/new" do
+
+ let!(:referential) { assign :referential, create(:referential) }
+ let!(:line) { assign :line, create(:line) }
+ let!(:route) { assign :route, create(:route, :line => line) }
+ let!(:vehicle_journey) { assign :vehicle_journey, build(:vehicle_journey, :route => route) }
+
+ it "renders _form" do
+ render
+ view.should render_template(:partial => "_form")
+ end
+ context "summary part" do
+ it "should render route name" do
+ render
+ rendered.should have_selector( ".summary a", :text => route.name)
+ end
+ end
+
+end
+