diff options
| author | Alban Peignier | 2012-06-19 14:43:15 +0200 |
|---|---|---|
| committer | Alban Peignier | 2012-06-19 14:43:15 +0200 |
| commit | 79cf607092029d050a0fb62907f2c920341386c0 (patch) | |
| tree | b462b54a278d2403cc62b3705559f8928c15d522 | |
| parent | 4b83eeb9d19c8e362af209d6227bf7c782b1abdb (diff) | |
| parent | d142fee1e270ded464e3fb482d5a075b8f640a6c (diff) | |
| download | chouette-core-79cf607092029d050a0fb62907f2c920341386c0.tar.bz2 | |
Merge branch 'master' of chouette.dryade.priv:/srv/git/chouette2
39 files changed, 711 insertions, 98 deletions
@@ -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ération 7 du 04/06/2012 +Chouette v2 : itération 8 du 19/06/2012 Cette itération présente les formulaires de : @@ -11,11 +11,16 @@ Cette itération présente les formulaires de : * transporteurs * lignes ** séquences d'arrêts -** missions +*** missions +*** courses/horaires * arrêts +** arrêts physiques +** zones d'arrê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éplacer un arrêt depuis la carte (voir mode opératoire dans l'aide des arrêts) * associer les arrêts à leurs parents * ajouter des fils à un arrêt -* importer des lignes au format Neptune (fichier ZIP uniquement) +* importer des lignes aux formats Neptune et CSV (zip et fichier non compressé) +* exporter des lignes au format Neptune (zip) * éditer des séquences d'arrêts : ** ajouter, déplacer et retirer des arrêts dans la séquence ** ajouter, modifier les missions de la séquence +** afficher, ajouter, modifier, supprimer des courses/horaires * préciser des paramètres généraux de l'espace de données les actions suivantes ne sont pas encore disponible : * afficher le fond Géoportail -* associer une ITL à une ligne -* imports à d'autres formats que Neptune -* exports de données +* exports de données à d'autres formats que Neptune (GTFS/CSV) * définir l'emprise générale du réseau * gérer le second référentiel de projection -* consulter/créer/é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 + |
