aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--app/assets/stylesheets/main/vehicle_journeys_frequencies.scss69
-rw-r--r--app/controllers/breadcrumb_controller.rb2
-rw-r--r--app/controllers/journey_patterns_controller.rb2
-rw-r--r--app/controllers/vehicle_journeys_controller.rb17
-rw-r--r--app/controllers/vehicle_journeys_frequencies_controller.rb6
-rw-r--r--app/helpers/application_helper.rb2
-rw-r--r--app/helpers/breadcrumb_helper.rb8
-rw-r--r--app/helpers/vehicle_journeys_frequencies_helper.rb2
-rw-r--r--app/views/vehicle_journeys/_form.html.erb49
-rw-r--r--app/views/vehicle_journeys/_form_footer.html.erb5
-rw-r--r--app/views/vehicle_journeys/_form_vehicle_journey_at_stops.html.erb37
-rw-r--r--app/views/vehicle_journeys/_show_sidebar.html.erb15
-rw-r--r--app/views/vehicle_journeys/_show_vehicle_journey_at_stops.html.erb20
-rw-r--r--app/views/vehicle_journeys/_sidebar.html.erb11
-rw-r--r--app/views/vehicle_journeys/edit.html.erb3
-rw-r--r--app/views/vehicle_journeys/new.html.erb2
-rw-r--r--app/views/vehicle_journeys/show.html.erb34
-rw-r--r--app/views/vehicle_journeys_frequencies/_form_footer.html.erb5
-rw-r--r--app/views/vehicle_journeys_frequencies/_form_vehicle_journey_at_stops.html.erb17
-rw-r--r--app/views/vehicle_journeys_frequencies/_frequency_fields.html.erb14
-rw-r--r--app/views/vehicle_journeys_frequencies/_show_sidebar.html.erb16
-rw-r--r--app/views/vehicle_journeys_frequencies/_show_vehicle_journey_at_stops.html.erb0
-rw-r--r--app/views/vehicle_journeys_frequencies/_vehicle_journey_at_stop_fields.html.erb54
-rw-r--r--app/views/vehicle_journeys_frequencies/edit.html.erb3
-rw-r--r--app/views/vehicle_journeys_frequencies/new.html.erb3
-rw-r--r--app/views/vehicle_journeys_frequencies/new.js.erb10
-rw-r--r--app/views/vehicle_journeys_frequencies/select_journey_pattern.js.erb5
-rw-r--r--config/locales/breadcrumbs.yml2
-rw-r--r--config/locales/frequencies.en.yml5
-rw-r--r--config/locales/frequencies.fr.yml5
-rw-r--r--config/locales/vehicle_journeys.en.yml118
-rw-r--r--config/locales/vehicle_journeys.fr.yml118
-rw-r--r--config/locales/vehicle_journeys.yml228
-rw-r--r--config/routes.rb2
-rw-r--r--db/migrate/20151015150300_create_frequencies.ninoxe_engine.rb14
-rw-r--r--db/migrate/20151022150419_add_vehicle_journey_type_to_vehicle_journey.ninoxe_engine.rb6
-rw-r--r--db/schema.rb30
-rw-r--r--spec/controllers/vehicle_journeys_frequencies_controller_spec.rb5
-rw-r--r--spec/helpers/vehicle_journeys_frequencies_helper_spec.rb15
40 files changed, 645 insertions, 317 deletions
diff --git a/.gitignore b/.gitignore
index cc3e0cd16..8b21c30a3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,3 +24,6 @@ chouette2.war
vendor/bundle
.ruby-version
coverage
+
+# IDE
+.idea
diff --git a/app/assets/stylesheets/main/vehicle_journeys_frequencies.scss b/app/assets/stylesheets/main/vehicle_journeys_frequencies.scss
new file mode 100644
index 000000000..682f02e12
--- /dev/null
+++ b/app/assets/stylesheets/main/vehicle_journeys_frequencies.scss
@@ -0,0 +1,69 @@
+#workspace {
+ .ce-TimeBandFormTable {
+ border-left: 1px solid #616161;
+ }
+ .ce-TimeBandFormTable td {
+ padding: 0 20px 4px 20px;
+ vertical-align: top;
+ }
+ .ce-TimeBandFormTable td:last-child {
+ text-align: right;
+ padding-right: 4px;
+ }
+ .ce-TimeBandFormTable-circleLine {
+ position: relative;
+ }
+ .ce-TimeBandFormTable-line:after {
+ content: '';
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 50%;
+ width: 2px;
+ margin-left: -1px;
+ background-color: #61970b;
+ }
+ .ce-TimeBandFormTable tr:last-child td .ce-TimeBandFormTable-line {
+ display: none;
+ }
+ .ce-TimeBandFormTable-circle {
+ position: relative;
+ z-index: 999;
+ display: block;
+ width: 16px;
+ height: 16px;
+ border-radius: 8px;
+ background-color: #4d7809;
+ }
+ .ce-TimeBandFormTable tr:hover .ce-TimeBandFormTable-circle {
+ background-color: #fff;
+ border: 2px solid #61970b;
+ }
+ .ce-TimeBandFormTable-subList {
+
+ }
+ .ce-FrequencyFormFields {
+ padding-left: 25%;
+ > li {
+ display: inline-block;
+ vertical-align: top;
+ legend {
+ position: relative;
+ width: auto;
+ float: none;
+ label {
+ position: relative;
+ }
+ }
+ .fragments-group {
+ float: none;
+ width: auto;
+ padding: 0;
+ > li {
+ display: inline-block;
+ vertical-align: top;
+ }
+ }
+ }
+ }
+}
diff --git a/app/controllers/breadcrumb_controller.rb b/app/controllers/breadcrumb_controller.rb
index 143651b52..c1bb4289c 100644
--- a/app/controllers/breadcrumb_controller.rb
+++ b/app/controllers/breadcrumb_controller.rb
@@ -27,7 +27,7 @@ class BreadcrumbController < InheritedResources::Base
end
def new
- new! do
+ new! do
build_breadcrumb :new
end
end
diff --git a/app/controllers/journey_patterns_controller.rb b/app/controllers/journey_patterns_controller.rb
index ce59d00b6..13018771d 100644
--- a/app/controllers/journey_patterns_controller.rb
+++ b/app/controllers/journey_patterns_controller.rb
@@ -36,7 +36,7 @@ class JourneyPatternsController < ChouetteController
def new_vehicle_journey
@vehicle_journey = Chouette::VehicleJourney.new(:route_id => route.id)
@vehicle_journey.update_journey_pattern(resource)
- render "vehicle_journeys/select_journey_pattern"
+ render "vehicle_journeys#{"_#{params[:suffix]}" if params[:suffix]}/select_journey_pattern"
end
# overwrite inherited resources to use delete instead of destroy
diff --git a/app/controllers/vehicle_journeys_controller.rb b/app/controllers/vehicle_journeys_controller.rb
index ace7aff5e..32bc68a5e 100644
--- a/app/controllers/vehicle_journeys_controller.rb
+++ b/app/controllers/vehicle_journeys_controller.rb
@@ -1,5 +1,5 @@
class VehicleJourneysController < ChouetteController
- defaults :resource_class => Chouette::VehicleJourney
+ defaults :resource_class => Chouette::VehicleJourneyTimed
respond_to :js, :only => [:select_journey_pattern, :edit, :new, :index]
@@ -87,7 +87,20 @@ class VehicleJourneysController < ChouetteController
private
def vehicle_journey_params
- params.require(:vehicle_journey).permit( { footnote_ids: [] } , :journey_pattern_id, :number, :published_journey_name, :published_journey_identifier, :comment, :transport_mode_name, :mobility_restricted_suitability, :flexible_service, :status_value, :facility, :vehicle_type_identifier, :objectid, :time_table_tokens, { date: [ :hour, :minute ] }, :button, :referential_id, :line_id, :route_id, :id, { vehicle_journey_at_stops_attributes: [ :arrival_time, :id, :_destroy, :stop_point_id, :departure_time ] } )
+ params.require(:vehicle_journey).permit( { footnote_ids: [] } , :journey_pattern_id, :number, :published_journey_name,
+ :published_journey_identifier, :comment, :transport_mode_name,
+ :mobility_restricted_suitability, :flexible_service, :status_value,
+ :facility, :vehicle_type_identifier, :objectid, :time_table_tokens,
+ { date: [ :hour, :minute ] }, :button, :referential_id, :line_id,
+ :route_id, :id, { vehicle_journey_at_stops_attributes: [ :arrival_time,
+ :id, :_destroy,
+ :stop_point_id,
+ :departure_time,
+ :is_frequency] },
+ { frequencies_attributes: [ :scheduled_headway_interval, :first_departure_time,
+ :last_departure_time,
+ :exact_time ] },
+ :is_frequency )
end
end
diff --git a/app/controllers/vehicle_journeys_frequencies_controller.rb b/app/controllers/vehicle_journeys_frequencies_controller.rb
new file mode 100644
index 000000000..6cd1ca0da
--- /dev/null
+++ b/app/controllers/vehicle_journeys_frequencies_controller.rb
@@ -0,0 +1,6 @@
+class VehicleJourneysFrequenciesController < VehicleJourneysController
+
+ defaults :resource_class => Chouette::VehicleJourneyFrequency
+
+end
+
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index d3e9655b9..28e652f2f 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -51,6 +51,8 @@ module ApplicationHelper
"group_of_lines"
when path.include?("/vehicle_journeys")
"vehicle_journeys"
+ when path.include?("/vehicle_journeys_frequencies")
+ "vehicle_journeys"
when path.include?("/journey_patterns")
"journey_patterns"
when path.include?("/routes")
diff --git a/app/helpers/breadcrumb_helper.rb b/app/helpers/breadcrumb_helper.rb
index c98691b72..1f3c9a2ce 100644
--- a/app/helpers/breadcrumb_helper.rb
+++ b/app/helpers/breadcrumb_helper.rb
@@ -16,6 +16,8 @@ module BreadcrumbHelper
journey_pattern_breadcrumb action
when "Chouette::VehicleJourney"
vehicle_journey_breadcrumb action
+ when "Chouette::VehicleJourneysFrequency"
+ vehicle_journeys_frequency_breadcrumb action
when "VehicleJourneyImport"
vehicle_journey_import_breadcrumb action
when "Chouette::StopArea"
@@ -124,6 +126,12 @@ module BreadcrumbHelper
add_breadcrumb breadcrumb_label(@vehicle_journey), referential_line_route_vehicle_journey_path(@referential, @line,@route,@vehicle_journey),:title => breadcrumb_tooltip(@vehicle_journey) if action == :edit
end
+ def vehicle_journeys_frequency_breadcrumb(action)
+ route_breadcrumb :edit
+ add_breadcrumb I18n.t("breadcrumbs.vehicle_journeys_frequencies"), referential_line_route_vehicle_journeys_frequencies_path(@referential, @line, @route) unless action == :index
+ add_breadcrumb breadcrumb_label(@vehicle_journey), referential_line_route_vehicle_journeys_frequency_path(@referential, @line,@route, @vehicle_journey),:title => breadcrumb_tooltip(@vehicle_journey) if action == :edit
+ end
+
def vehicle_journey_import_breadcrumb (action)
route_breadcrumb :edit
end
diff --git a/app/helpers/vehicle_journeys_frequencies_helper.rb b/app/helpers/vehicle_journeys_frequencies_helper.rb
new file mode 100644
index 000000000..b5a7926ea
--- /dev/null
+++ b/app/helpers/vehicle_journeys_frequencies_helper.rb
@@ -0,0 +1,2 @@
+module VehicleJourneysFrequenciesHelper
+end
diff --git a/app/views/vehicle_journeys/_form.html.erb b/app/views/vehicle_journeys/_form.html.erb
index e4b1ce432..627b2fa60 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| %>
+<%= semantic_form_for @vehicle_journey, url: form_url do |form| %>
<%= form.inputs do %>
+ <%= form.input :is_frequency, as: :hidden %>
<%= form.input :journey_pattern, :as => :select, :collection => @route.journey_patterns, :member_label => Proc.new { |jp| journey_name(jp) } %>
<%= form.input :number %>
<%= form.input :published_journey_name %>
@@ -18,52 +19,14 @@
<%= form.label @vehicle_journey.human_attribute_name(:vehicle_journey_at_stop_ids), :class => "label" %>
</li>
- <% unless @vehicle_journey.vehicle_journey_at_stops.empty? ||
- @vehicle_journey.vehicle_journey_at_stops.any? { |vjas| vjas.departure_time.nil? } %> <div class="vehicle_journey_at_stops">
- <div class="well">
- <span class="title"><%= t(".slide_title") %></span>
- <div>
- <span><%= t(".set") %></span> <%= select_tag "", options_for_select( [ [t('.slide_departure'), "departure"], [t('.slide_arrival'), "arrival"] ] ), :class => "departure_or_arrival" %> <span><%= t(".to") %></span>
- <%= select_hour(@vehicle_journey.vehicle_journey_at_stops.first.departure_time.hour) %>
- <%= select_minute(@vehicle_journey.vehicle_journey_at_stops.first.departure_time.min) %>
- <a class="slide btn btn-default"><%= t(".slide") %></a>
- </div>
- </div>
- <% end %>
-
- <table class="table table-hover table-striped">
- <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>
- <tfoot>
- <tr>
- <td class="title"> <a class="to_departures"><%= t('.to_departures') %></a></td>
- <td class="title" ></td>
- <td class="title"><a class="to_arrivals"><%= t('.to_arrivals') %></a></td>
- </tr>
- </tfoot>
- <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, :locals => { :vehicle_journey_at_stops_size => @vehicle_journey.vehicle_journey_at_stops.size } %>
-
- </tbody>
- </table>
+ <%= render 'form_vehicle_journey_at_stops', form: form %>
<% end %>
<%= form.actions do %>
- <%= form.action :submit, :as => :button %>
- <%= form.action :cancel, :as => :link %>
+ <%= form.action :submit, as: :button, label: t(".submit_#{@vehicle_journey.vehicle_journey_type}") %>
+ <%= form.action :cancel, as: :link %>
<% end %>
<% end %>
-<% if @vehicle_journey.new_record? %>
- <%= javascript_include_tag new_referential_line_route_vehicle_journey_path(@referential, @line, @route, :format => :js) %>
-<% else %>
- <%= javascript_include_tag edit_referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey, :format => :js) %>
-<% end %>
-
+<%= render 'form_footer' %>
diff --git a/app/views/vehicle_journeys/_form_footer.html.erb b/app/views/vehicle_journeys/_form_footer.html.erb
new file mode 100644
index 000000000..1a5259348
--- /dev/null
+++ b/app/views/vehicle_journeys/_form_footer.html.erb
@@ -0,0 +1,5 @@
+<% if @vehicle_journey.new_record? %>
+ <%= javascript_include_tag new_referential_line_route_vehicle_journey_path(@referential, @line, @route, :format => :js) %>
+<% else %>
+ <%= javascript_include_tag edit_referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey, :format => :js) %>
+<% end %>
diff --git a/app/views/vehicle_journeys/_form_vehicle_journey_at_stops.html.erb b/app/views/vehicle_journeys/_form_vehicle_journey_at_stops.html.erb
new file mode 100644
index 000000000..826733135
--- /dev/null
+++ b/app/views/vehicle_journeys/_form_vehicle_journey_at_stops.html.erb
@@ -0,0 +1,37 @@
+<% unless @vehicle_journey.vehicle_journey_at_stops.empty? || @vehicle_journey.vehicle_journey_at_stops.any? { |vjas| vjas.departure_time.nil? } %>
+ <div class="vehicle_journey_at_stops">
+ <div class="well">
+ <span class="title"><%= t('vehicle_journeys.form.slide_title') %></span>
+ <div>
+ <span><%= t('vehicle_journeys.form.set') %></span>
+ <%= select_tag '', options_for_select( [ [t('vehicle_journeys.form.slide_departure'), "departure"], [t('vehicle_journeys.form.slide_arrival'), "arrival"] ] ), :class => "departure_or_arrival" %>
+ <span><%= t('vehicle_journeys.form.to') %></span>
+ <%= select_hour(@vehicle_journey.vehicle_journey_at_stops.first.departure_time.hour) %>
+ <%= select_minute(@vehicle_journey.vehicle_journey_at_stops.first.departure_time.min) %>
+ <a class="slide btn btn-default"><%= t('vehicle_journeys.form.slide') %></a>
+ </div>
+ </div>
+ </div>
+<% end %>
+
+<table class="table table-hover table-striped">
+ <thead>
+ <tr>
+ <th class="hour title"><%= t('vehicle_journeys.form.arrival') %></th>
+ <th class="stop title"><%= t('vehicle_journeys.form.stop_title') %></th>
+ <th class="hour title"><%= t('vehicle_journeys.form.departure') %></th>
+ </tr>
+ </thead>
+ <tfoot>
+ <tr>
+ <td class="title"><a class="to_departures"><%= t('vehicle_journeys.form.to_departures') %></a></td>
+ <td class="title"></td>
+ <td class="title"><a class="to_arrivals"><%= t('vehicle_journeys.form.to_arrivals') %></a></td>
+ </tr>
+ </tfoot>
+ <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,
+ :locals => { :vehicle_journey_at_stops_size => @vehicle_journey.vehicle_journey_at_stops.size } %>
+ </tbody>
+</table>
diff --git a/app/views/vehicle_journeys/_show_sidebar.html.erb b/app/views/vehicle_journeys/_show_sidebar.html.erb
new file mode 100644
index 000000000..e649edaef
--- /dev/null
+++ b/app/views/vehicle_journeys/_show_sidebar.html.erb
@@ -0,0 +1,15 @@
+<% 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>
+ <li><%= link_to t('vehicle_journeys.actions.new_frequency'), new_referential_line_route_vehicle_journeys_frequency_path(@referential, @line, @route), :class => "add" %></li>
+ <li><%= link_to t('vehicle_journeys.actions.edit'), edit_referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey), :class => "edit" %></li>
+ <li><%= link_to t('vehicle_journeys.actions.destroy'), referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey), :method => :delete, :data => {:confirm => t('vehicle_journeys.actions.destroy_confirm')}, :class => "remove" %></li>
+ <% unless @vehicle_journey.vehicle_journey_at_stops.empty? %>
+ <li>
+ <i class="fa fa-cubes fa-fw" style="color:#D98F3B;"></i>
+ <%= link_to t('vehicle_journeys.show.translation_form'), new_referential_line_route_vehicle_journey_vehicle_translation_path(@referential, @line, @route, @vehicle_journey), {:remote => true, 'data-toggle' => "modal", 'data-target' => '#modal_translation', :class => "with_fa" } %>
+ </li>
+ <% end %>
+ </ul>
+ <%= creation_tag(@vehicle_journey) %>
+<% end %>
diff --git a/app/views/vehicle_journeys/_show_vehicle_journey_at_stops.html.erb b/app/views/vehicle_journeys/_show_vehicle_journey_at_stops.html.erb
new file mode 100644
index 000000000..e2e0ef82e
--- /dev/null
+++ b/app/views/vehicle_journeys/_show_vehicle_journey_at_stops.html.erb
@@ -0,0 +1,20 @@
+<div class="vehicle_journey_at_stops content">
+ <table class="table table-hover table-striped">
+ <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.nil? ? "missing" : "" %>"><%= 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.nil? ? "missing" : "" %>"><%= vjas.departure_time ? l( vjas.departure_time, :format => :hour) : "" %></td>
+ </tr>
+ <% end %>
+ </tbody>
+ </table>
+</div>
diff --git a/app/views/vehicle_journeys/_sidebar.html.erb b/app/views/vehicle_journeys/_sidebar.html.erb
index 8d6f310d3..4522fa109 100644
--- a/app/views/vehicle_journeys/_sidebar.html.erb
+++ b/app/views/vehicle_journeys/_sidebar.html.erb
@@ -1,6 +1,7 @@
- <ul class="actions">
- <li><%= link_to t('vehicle_journeys.actions.new'), new_referential_line_route_vehicle_journey_path(@referential, @line, @route), :class => "add" %></li>
- <li><%= link_to t('vehicle_journey_imports.new.title'), new_referential_line_route_vehicle_journey_import_path( @referential, @line, @route ), :class => "import" %></li>
- <li><%= link_to t('vehicle_journey_exports.new.title'), referential_line_route_vehicle_journey_exports_path(@referential, @line, @route, :format => :zip), :class => "export" %></li>
- </ul>
+<ul class="actions">
+ <li><%= link_to t('vehicle_journeys.actions.new'), new_referential_line_route_vehicle_journey_path(@referential, @line, @route), :class => "add" %></li>
+ <li><%= link_to t('vehicle_journeys.actions.new_frequency'), new_referential_line_route_vehicle_journeys_frequency_path(@referential, @line, @route), :class => "add" %></li>
+ <li><%= link_to t('vehicle_journey_imports.new.title'), new_referential_line_route_vehicle_journey_import_path( @referential, @line, @route ), :class => "import" %></li>
+ <li><%= link_to t('vehicle_journey_exports.new.title'), referential_line_route_vehicle_journey_exports_path(@referential, @line, @route, :format => :zip), :class => "export" %></li>
+</ul>
diff --git a/app/views/vehicle_journeys/edit.html.erb b/app/views/vehicle_journeys/edit.html.erb
index 51653a34a..2d87ffe57 100644
--- a/app/views/vehicle_journeys/edit.html.erb
+++ b/app/views/vehicle_journeys/edit.html.erb
@@ -1,4 +1,5 @@
<%= title_tag edit_vehicle_title(@vehicle_journey) %>
-<%= render "form" %>
+<%= render 'form', form_url: referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey) %>
+
diff --git a/app/views/vehicle_journeys/new.html.erb b/app/views/vehicle_journeys/new.html.erb
index a32e9cc31..19b31e422 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') %>
-<%= render "form" %>
+<%= render partial: 'form', locals: { form_url: referential_line_route_vehicle_journeys_path(@referential, @line, @route, @vehicle_journey) } %>
diff --git a/app/views/vehicle_journeys/show.html.erb b/app/views/vehicle_journeys/show.html.erb
index 695b5c8b5..3bdfbb945 100644
--- a/app/views/vehicle_journeys/show.html.erb
+++ b/app/views/vehicle_journeys/show.html.erb
@@ -79,41 +79,11 @@
</div>
</div>
<h3><%= @vehicle_journey.human_attribute_name(:vehicle_journey_at_stop_ids) %></h3>
-<div class="vehicle_journey_at_stops content">
- <table class="table table-hover table-striped">
- <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.nil? ? "missing" : "" %>"><%= 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.nil? ? "missing" : "" %>"><%= vjas.departure_time ? l( vjas.departure_time, :format => :hour) : "" %></td>
- </tr>
- <% end %>
- </tbody>
- </table>
-</div>
+<%= render 'show_vehicle_journey_at_stops' %>
<h3><%= t('.time_tables') %></h3>
<div class="time_tables paginated_content">
<%= paginated_content @vehicle_journey.time_tables, "time_tables/time_table", :delete => false %>
</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>
- <li><%= link_to t('vehicle_journeys.actions.edit'), edit_referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey), :class => "edit" %></li>
- <li><%= link_to t('vehicle_journeys.actions.destroy'), referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey), :method => :delete, :data => {:confirm => t('vehicle_journeys.actions.destroy_confirm')}, :class => "remove" %></li>
- <% unless @vehicle_journey.vehicle_journey_at_stops.empty? %>
- <li><font color="#D98F3B"><i class="fa fa-cubes fa-fw"></i></font><%= link_to t('.translation_form'), new_referential_line_route_vehicle_journey_vehicle_translation_path(@referential, @line, @route, @vehicle_journey), {:remote => true, 'data-toggle' => "modal", 'data-target' => '#modal_translation', :class => "with_fa" } %></li>
- <% end %>
- </ul>
- <%= creation_tag(@vehicle_journey) %>
-<% end %>
+<%= render 'show_sidebar' %>
diff --git a/app/views/vehicle_journeys_frequencies/_form_footer.html.erb b/app/views/vehicle_journeys_frequencies/_form_footer.html.erb
new file mode 100644
index 000000000..1217e2c08
--- /dev/null
+++ b/app/views/vehicle_journeys_frequencies/_form_footer.html.erb
@@ -0,0 +1,5 @@
+<% if @vehicle_journey.new_record? %>
+ <%= javascript_include_tag new_referential_line_route_vehicle_journeys_frequency_path(@referential, @line, @route, :format => :js) %>
+<% else %>
+ <%= javascript_include_tag edit_referential_line_route_vehicle_journeys_frequency_path(@referential, @line, @route, @vehicle_journey, :format => :js) %>
+<% end %>
diff --git a/app/views/vehicle_journeys_frequencies/_form_vehicle_journey_at_stops.html.erb b/app/views/vehicle_journeys_frequencies/_form_vehicle_journey_at_stops.html.erb
new file mode 100644
index 000000000..4bbb0671d
--- /dev/null
+++ b/app/views/vehicle_journeys_frequencies/_form_vehicle_journey_at_stops.html.erb
@@ -0,0 +1,17 @@
+<li class="input">
+ <label class="label">Durée d'intervalle du trajet</label>
+ <table class="journey_pattern_dependent_list ce-TimeBandFormTable">
+ <%= render :partial => 'vehicle_journey_at_stop_fields',
+ :collection => @vehicle_journey.vehicle_journey_at_stops, :as => :vehicle_journey_at_stop,
+ :locals => { :vehicle_journey_at_stops_size => @vehicle_journey.vehicle_journey_at_stops.size } %>
+ </table>
+</li>
+
+<% form.semantic_fields_for :frequencies do |frequency| %>
+ <%= render 'frequency_fields', f: frequency %>
+<% end %>
+
+<li class="input">
+ <label class="label"></label>
+ <%= link_to_add_association t('frequencies.form.add_frequency_line'), form, :frequencies, class: 'btn btn-primary' %>
+</li>
diff --git a/app/views/vehicle_journeys_frequencies/_frequency_fields.html.erb b/app/views/vehicle_journeys_frequencies/_frequency_fields.html.erb
new file mode 100644
index 000000000..57a0baf3d
--- /dev/null
+++ b/app/views/vehicle_journeys_frequencies/_frequency_fields.html.erb
@@ -0,0 +1,14 @@
+<li class="nested-fields">
+ <ul class="ce-FrequencyFormFields">
+ <%= f.input :first_departure_time %>
+ <%= f.input :last_departure_time %>
+ <%= f.input :scheduled_headway_interval %>
+ <%= f.input :exact_time %>
+ <li>
+ <label class="label"></label>
+ <%= link_to_remove_association f do %>
+ <i class="fa fa-trash"></i>
+ <% end %>
+ </li>
+ </ul>
+</li>
diff --git a/app/views/vehicle_journeys_frequencies/_show_sidebar.html.erb b/app/views/vehicle_journeys_frequencies/_show_sidebar.html.erb
new file mode 100644
index 000000000..7be0e4d63
--- /dev/null
+++ b/app/views/vehicle_journeys_frequencies/_show_sidebar.html.erb
@@ -0,0 +1,16 @@
+<% 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>
+ <li><%= link_to t('vehicle_journeys.actions.new_frequency'), new_referential_line_route_vehicle_journeys_frequency_path(@referential, @line, @route), :class => "add" %></li>
+ <li><%= link_to t('vehicle_journeys.actions.edit_frequency'), edit_referential_line_route_vehicle_journeys_frequency_path(@referential, @line, @route, @vehicle_journey), :class => "edit" %></li>
+ <li><%= link_to t('vehicle_journeys.actions.destroy'), referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey), :method => :delete, :data => {:confirm => t('vehicle_journeys.actions.destroy_confirm')}, :class => "remove" %></li>
+ <% unless @vehicle_journey.vehicle_journey_at_stops.empty? %>
+ <li>
+ <i class="fa fa-cubes fa-fw" style="color:#D98F3B;"></i>
+ TODO
+ <%# link_to t('vehicle_journeys.show.translation_form'), new_referential_line_route_vehicle_journey_vehicle_translation_path(@referential, @line, @route, @vehicle_journey), {:remote => true, 'data-toggle' => "modal", 'data-target' => '#modal_translation', :class => "with_fa" } %>
+ </li>
+ <% end %>
+ </ul>
+ <%= creation_tag(@vehicle_journey) %>
+<% end %>
diff --git a/app/views/vehicle_journeys_frequencies/_show_vehicle_journey_at_stops.html.erb b/app/views/vehicle_journeys_frequencies/_show_vehicle_journey_at_stops.html.erb
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/app/views/vehicle_journeys_frequencies/_show_vehicle_journey_at_stops.html.erb
diff --git a/app/views/vehicle_journeys_frequencies/_vehicle_journey_at_stop_fields.html.erb b/app/views/vehicle_journeys_frequencies/_vehicle_journey_at_stop_fields.html.erb
new file mode 100644
index 000000000..44da12328
--- /dev/null
+++ b/app/views/vehicle_journeys_frequencies/_vehicle_journey_at_stop_fields.html.erb
@@ -0,0 +1,54 @@
+<% vjas = vehicle_journey_at_stop
+ tab_counter_arrival = 2 * vehicle_journey_at_stop_counter + 100
+ tab_counter_departure = (vehicle_journey_at_stops_size * 2) + 2 * vehicle_journey_at_stop_counter + 100
+%>
+<tr>
+ <td>
+ <%= {
+ id: vjas.id,
+ _destroy: (vjas._destroy ? 1 : 0),
+ stop_point_id: vjas.stop_point_id,
+ is_frequency: true,
+ :'departure_time(3i)' => 1,
+ :'departure_time(2i)' => 1,
+ :'departure_time(1i)' => 1,
+ :'arrival_time(3i)' => 1,
+ :'arrival_time(2i)' => 1,
+ :'arrival_time(1i)' => 2000
+ }.map{ |k, v|
+ "<input name=\"vehicle_journey[vehicle_journey_at_stops_attributes][#{vehicle_journey_at_stop_counter}][#{k}]\"
+ type=\"hidden\" value=\"#{v}\">" }.join("\n").html_safe %>
+
+ <%= vjas.stop_point.stop_area.name %>
+ </td>
+ <td class="ce-TimeBandFormTable-circleLine">
+ <span class="ce-TimeBandFormTable-circle"></span>
+ <span class="ce-TimeBandFormTable-line"></span>
+ </td>
+ <td>
+ <ul class="ce-TimeBandFormTable-subList">
+ <li>
+ <span>Durée d'attente</span>
+ <%= 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)]" },
+ :class => "hour") %>
+ <%= 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)]" },
+ :class => "minute") %>
+ </li>
+ <li>
+ <span>Durée de parcours</span>
+ <%= 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)]" },
+ :class => 'hour') %>
+ <%= 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)]" },
+ :class => 'minute') %>
+ </li>
+ </ul>
+ </td>
+</tr>
diff --git a/app/views/vehicle_journeys_frequencies/edit.html.erb b/app/views/vehicle_journeys_frequencies/edit.html.erb
new file mode 100644
index 000000000..8b9942d95
--- /dev/null
+++ b/app/views/vehicle_journeys_frequencies/edit.html.erb
@@ -0,0 +1,3 @@
+<%= title_tag edit_vehicle_title(@vehicle_journey) %>
+
+<%= render 'vehicle_journeys/form', form_url: referential_line_route_vehicle_journeys_frequency_path(@referential, @line, @route, id: @vehicle_journey) %>
diff --git a/app/views/vehicle_journeys_frequencies/new.html.erb b/app/views/vehicle_journeys_frequencies/new.html.erb
new file mode 100644
index 000000000..67ff079a3
--- /dev/null
+++ b/app/views/vehicle_journeys_frequencies/new.html.erb
@@ -0,0 +1,3 @@
+<%= title_tag t('vehicle_journeys.new.title_frequency') %>
+
+<%= render 'vehicle_journeys/form', form_url: referential_line_route_vehicle_journeys_frequencies_path(@referential, @line, @route, @vehicle_journey) %>
diff --git a/app/views/vehicle_journeys_frequencies/new.js.erb b/app/views/vehicle_journeys_frequencies/new.js.erb
new file mode 100644
index 000000000..c6fb98b22
--- /dev/null
+++ b/app/views/vehicle_journeys_frequencies/new.js.erb
@@ -0,0 +1,10 @@
+$(document).ready(function() {
+ $("#vehicle_journey_journey_pattern_id").change(
+ function(){
+ var url = "<%= referential_line_route_journey_patterns_path(@referential.id,@line.id,@route.id) %>";
+ url = url + "/" + $("#vehicle_journey_journey_pattern_input select option:selected").attr("value") +
+ "/new_vehicle_journey?suffix=frequencies";
+ $.get(url);
+ }
+ )
+});
diff --git a/app/views/vehicle_journeys_frequencies/select_journey_pattern.js.erb b/app/views/vehicle_journeys_frequencies/select_journey_pattern.js.erb
new file mode 100644
index 000000000..59e9e2f4a
--- /dev/null
+++ b/app/views/vehicle_journeys_frequencies/select_journey_pattern.js.erb
@@ -0,0 +1,5 @@
+$('.journey_pattern_dependent_list').html('<%= escape_javascript(
+ render(:partial => "vehicle_journeys_frequencies/vehicle_journey_at_stop_fields",
+ :collection => @vehicle_journey.vehicle_journey_at_stops,
+ :as => :vehicle_journey_at_stop,
+ :locals => { :vehicle_journey_at_stops_size => @vehicle_journey.vehicle_journey_at_stops.size })).html_safe %>');
diff --git a/config/locales/breadcrumbs.yml b/config/locales/breadcrumbs.yml
index ccf97c414..ba3b4d8b2 100644
--- a/config/locales/breadcrumbs.yml
+++ b/config/locales/breadcrumbs.yml
@@ -1,10 +1,12 @@
en:
breadcrumbs:
vehicle_journeys: "Passing times"
+ vehicle_journeys_frequencies: "Times bands"
referentials: "Home"
users: "Users"
fr:
breadcrumbs:
vehicle_journeys: "Horaires"
+ vehicle_journeys_frequencies: "Plages horaires"
referentials: "Accueil"
users: "Utilisateurs"
diff --git a/config/locales/frequencies.en.yml b/config/locales/frequencies.en.yml
new file mode 100644
index 000000000..b32da80c9
--- /dev/null
+++ b/config/locales/frequencies.en.yml
@@ -0,0 +1,5 @@
+en:
+ frequencies:
+ time_band: Time band
+ form:
+ add_frequency_line: Add a line
diff --git a/config/locales/frequencies.fr.yml b/config/locales/frequencies.fr.yml
new file mode 100644
index 000000000..337a00ae9
--- /dev/null
+++ b/config/locales/frequencies.fr.yml
@@ -0,0 +1,5 @@
+fr:
+ frequencies:
+ time_band: Plages horaires
+ form:
+ add_frequency_line: Ajouter une ligne
diff --git a/config/locales/vehicle_journeys.en.yml b/config/locales/vehicle_journeys.en.yml
new file mode 100644
index 000000000..cb4c9d649
--- /dev/null
+++ b/config/locales/vehicle_journeys.en.yml
@@ -0,0 +1,118 @@
+en:
+ vehicle_journeys:
+ vehicle_journeys:
+ line_routes: "Line's routes"
+ vehicle_journey:
+ title_stopless: "Vehicle journey %{name}"
+ title: "Vehicle journey leaving from %{stop} at %{time}"
+ actions:
+ index: "Vehicle time's board"
+ new: "Add a new vehicle journey"
+ new_frequency: "Add a new vehicle frequency journey"
+ edit: "Edit this vehicle journey"
+ edit_frequency: "Edit this vehicle frequency journey"
+ destroy: "Remove this vehicle journey"
+ destroy_confirm: "Are you sure you want destroy this vehicle journey?"
+ new:
+ title: "Add a new vehicle journey"
+ title_frequency: "Add a new vehicle frequency journey"
+ edit:
+ title_stopless: "Update vehicle journey %{name}"
+ title: "Update vehicle journey %{name} leaving from %{stop} at %{time}"
+ form:
+ stop_title: "Stop"
+ departure: "Departure"
+ arrival: "Arrival"
+ to_arrivals: "Copy departures to arrivals"
+ to_departures: "Copy arrivals to departures"
+ time_tables: "Associated calendars to vehicle journey"
+ slide: "Shift"
+ slide_title: "Shift all vehicle passing times"
+ set: "Set"
+ to: "at"
+ slide_departure: "departure time at first stop"
+ slide_arrival: "arrival time at first stop"
+ submit: "Create vehicle journey"
+ submit_frequency: "Create vehicle frequency journey"
+ timeless:
+ title: "Timeless vehicle journeys"
+ vehicle_journeys: "Vehicle journeys with times at stop"
+ vehicles_list: "Vehicle journeys list"
+ show:
+ title: "Vehicle Journey %{vehicle journey}"
+ stop_title: "Stop"
+ departure: "Departure"
+ arrival: "Arrival"
+ time_tables: "Calendars list"
+ bounding: "From %{start} to %{end}"
+ translation_form: "Vehicle journey translations"
+ index:
+ title: "Vehicle journeys on route %{route}"
+ vehicle_journeys: "Departure's times"
+ selection: "Filter on"
+ selection_all: "All"
+ select_journey_patterns: "Select journey pattern"
+ select_time_tables: "Enter a timetable"
+ time_range: "Departure time threshold"
+ advanced_search: "Advanced Search"
+ sidebar:
+ timeless: "Timeless vehicle journeys"
+ time_filter:
+ time_range_filter: "Filter"
+ activerecord:
+ models:
+ vehicle_journey:
+ zero: "vehicle journey"
+ one: "vehicle journey"
+ other: "vehicle journeys"
+ attributes:
+ vehicle_journey:
+ line: "Line"
+ route: "Route"
+ journey_pattern: "Journey Pattern"
+ time_tables: "Calendars"
+ time_slot: "Time Slot"
+ company: "Company"
+ number: "Number"
+ comment: "Comments"
+ status_value: "Status Value"
+ transport_mode_name: "Transport Mode"
+ mobility_restricted_suitability: "PRM accessibility"
+ flexible_service: "On demond transportation"
+ unspecified_mrs: "Not specified"
+ accessible: "Accessible"
+ not_accessible: "Not accessible"
+ unspecified_fs: "Not specified"
+ on_demand_fs: "On demand service"
+ regular_fs: "Regular service"
+ published_journey_name: "Published Name"
+ 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"
+ creator_id: "Created by"
+ footnote_ids: "Footnotes"
+ errors:
+ models:
+ vehicle_journey:
+ invalid_times: "Invalid times"
+ formtastic:
+ titles:
+ vehicle_journey:
+ objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ neptune:
+ vehicle_journey:
+ objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ netex:
+ vehicle_journey:
+ objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ gtfs:
+ vehicle_journey:
+ objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
+ hub:
+ vehicle_journey:
+ objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 8."
diff --git a/config/locales/vehicle_journeys.fr.yml b/config/locales/vehicle_journeys.fr.yml
new file mode 100644
index 000000000..9d16adff8
--- /dev/null
+++ b/config/locales/vehicle_journeys.fr.yml
@@ -0,0 +1,118 @@
+fr:
+ vehicle_journeys:
+ vehicle_journeys:
+ line_routes: "Séquences d'arrêts de la ligne"
+ vehicle_journey:
+ title_stopless: "Course %{name}"
+ title: "Course partant de %{stop} à %{time}"
+ actions:
+ index: "Horaires des courses"
+ new: "Ajouter une course"
+ new_frequency: "Ajouter une course à fréquence"
+ edit: "Modifier cette course"
+ edit_frequency: "Modifier cette course à fréquence"
+ destroy: "Supprimer cette course"
+ destroy_confirm: "Etes vous sûr de supprimer cette course ?"
+ new:
+ title: "Ajouter une course"
+ title_frequency: "Ajouter une course à fréquence"
+ edit:
+ 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"
+ to_arrivals: "Copie départs vers arrivées"
+ to_departures: "Copie arrivées vers départs"
+ time_tables: "Calendriers associés à la course"
+ slide: "Décaler"
+ slide_title: "Décaler l'ensemble des horaires de course"
+ set: "Fixer"
+ to: "à"
+ slide_departure: "horaire de départ au 1° arrêt à"
+ slide_arrival: "horaire d'arrivée au 1° arrêt à"
+ submit: "Créer course"
+ submit_frequency: "Créer course à fréquence"
+ timeless:
+ title: "Courses sans horaire"
+ vehicle_journeys: "Courses ayant des horaires"
+ vehicles_list: "Liste des courses"
+ 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}"
+ translation_form: "Cloner la course"
+ index:
+ title: "Horaires de la séquence d'arrêts %{route}"
+ vehicle_journeys: "Horaires de départ aux arrêts"
+ selection: "Filtrer sur"
+ selection_all: "Tous"
+ select_journey_patterns: "Sélectionner une mission"
+ select_time_tables: "Saisir un calendrier"
+ time_range: "Seuil horaire au départ"
+ advanced_search: "Recherche avancée"
+ time_filter:
+ time_range_filter: "Filtrer"
+ sidebar:
+ timeless: "Courses sans horaire"
+ activerecord:
+ models:
+ vehicle_journey:
+ zero: "course"
+ one: "course"
+ other: "courses"
+ attributes:
+ vehicle_journey:
+ line: "Ligne"
+ route: "Séquence d'arrêt"
+ journey_pattern: "Mission"
+ time_tables: "Calendriers"
+ time_slot: "Fréquence"
+ company: "Transporteur"
+ number: "Numéro"
+ comment: "Commentaires"
+ status_value: "Etat de trafic"
+ transport_mode_name: "Mode de transport"
+ mobility_restricted_suitability: "Accessibilité PMR"
+ flexible_service: "Transport à la demande"
+ unspecified_mrs: "Non spécifié"
+ accessible: "Accessible"
+ not_accessible: "Non accessible"
+ unspecified_fs: "Non spécifié"
+ on_demand_fs: "Service à la demande"
+ regular_fs: "Service régulier"
+ published_journey_name: "Nom public"
+ 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"
+ creator_id: "Créé par"
+ footnote_ids: "Notes de bas de page"
+ errors:
+ models:
+ vehicle_journey:
+ invalid_times: "Horaires invalides"
+ formtastic:
+ titles:
+ vehicle_journey:
+ objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ neptune:
+ vehicle_journey:
+ objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ netex:
+ vehicle_journey:
+ objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ gtfs:
+ vehicle_journey:
+ objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
+ hub:
+ vehicle_journey:
+ objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'. Longueur maximale de la clé unique = 8."
diff --git a/config/locales/vehicle_journeys.yml b/config/locales/vehicle_journeys.yml
deleted file mode 100644
index 3b18447f4..000000000
--- a/config/locales/vehicle_journeys.yml
+++ /dev/null
@@ -1,228 +0,0 @@
-en:
- vehicle_journeys:
- vehicle_journeys:
- line_routes: "Line's routes"
- vehicle_journey:
- title_stopless: "Vehicle journey %{name}"
- title: "Vehicle journey 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"
- destroy_confirm: "Are you sure you want destroy this vehicle journey?"
- new:
- title: "Add a new vehicle journey"
- edit:
- title_stopless: "Update vehicle journey %{name}"
- title: "Update vehicle journey %{name} leaving from %{stop} at %{time}"
- form:
- stop_title: "Stop"
- departure: "Departure"
- arrival: "Arrival"
- to_arrivals: "Copy departures to arrivals"
- to_departures: "Copy arrivals to departures"
- time_tables: "Associated calendars to vehicle journey"
- slide: "Shift"
- slide_title: "Shift all vehicle passing times"
- set: "Set"
- to: "at"
- slide_departure: "departure time at first stop"
- slide_arrival: "arrival time at first stop"
- timeless:
- title: "Timeless vehicle journeys"
- vehicle_journeys: "Vehicle journeys with times at stop"
- vehicles_list: "Vehicle journeys list"
- show:
- title: "Vehicle Journey %{vehicle journey}"
- stop_title: "Stop"
- departure: "Departure"
- arrival: "Arrival"
- time_tables: "Calendars list"
- bounding: "From %{start} to %{end}"
- translation_form: "Vehicle journey translations"
- index:
- title: "Vehicle journeys on route %{route}"
- vehicle_journeys: "Departure's times"
- selection: "Filter on"
- selection_all: "All"
- select_journey_patterns: "Select journey pattern"
- select_time_tables: "Enter a timetable"
- time_range: "Departure time threshold"
- advanced_search: "Advanced Search"
- sidebar:
- timeless: "Timeless vehicle journeys"
- time_filter:
- time_range_filter: "Filter"
- activerecord:
- models:
- vehicle_journey:
- zero: "vehicle journey"
- one: "vehicle journey"
- other: "vehicle journeys"
- attributes:
- vehicle_journey:
- line: "Line"
- route: "Route"
- journey_pattern: "Journey Pattern"
- time_tables: "Calendars"
- time_slot: "Time Slot"
- company: "Company"
- number: "Number"
- comment: "Comments"
- status_value: "Status Value"
- transport_mode_name: "Transport Mode"
- mobility_restricted_suitability: "PRM accessibility"
- flexible_service: "On demond transportation"
- unspecified_mrs: "Not specified"
- accessible: "Accessible"
- not_accessible: "Not accessible"
- unspecified_fs: "Not specified"
- on_demand_fs: "On demand service"
- regular_fs: "Regular service"
- published_journey_name: "Published Name"
- 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"
- creator_id: "Created by"
- footnote_ids: "Footnotes"
- errors:
- models:
- vehicle_journey:
- invalid_times: "Invalid times"
- formtastic:
- titles:
- vehicle_journey:
- objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- neptune:
- vehicle_journey:
- objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- netex:
- vehicle_journey:
- objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- gtfs:
- vehicle_journey:
- objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character"
- hub:
- vehicle_journey:
- objectid: "[prefix]:VehicleJourney:[unique_key] : prefix contains only alphanumerical or underscore characters, unique_key accepts also minus character. Maximum length of the unique key = 8."
-
-fr:
- vehicle_journeys:
- vehicle_journeys:
- line_routes: "Séquences d'arrêts de la ligne"
- vehicle_journey:
- title_stopless: "Course %{name}"
- title: "Course partant de %{stop} à %{time}"
- actions:
- index: "Horaires des courses"
- new: "Ajouter une course"
- edit: "Modifier cette course"
- destroy: "Supprimer cette course"
- destroy_confirm: "Etes vous sûr de supprimer cette course ?"
- new:
- title: "Ajouter une course"
- edit:
- 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"
- to_arrivals: "Copie départs vers arrivées"
- to_departures: "Copie arrivées vers départs"
- time_tables: "Calendriers associés à la course"
- slide: "Décaler"
- slide_title: "Décaler l'ensemble des horaires de course"
- set: "Fixer"
- to: "à"
- slide_departure: "horaire de départ au 1° arrêt à"
- slide_arrival: "horaire d'arrivée au 1° arrêt à"
- timeless:
- title: "Courses sans horaire"
- vehicle_journeys: "Courses ayant des horaires"
- vehicles_list: "Liste des courses"
- 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}"
- translation_form: "Cloner la course"
- index:
- title: "Horaires de la séquence d'arrêts %{route}"
- vehicle_journeys: "Horaires de départ aux arrêts"
- selection: "Filtrer sur"
- selection_all: "Tous"
- select_journey_patterns: "Sélectionner une mission"
- select_time_tables: "Saisir un calendrier"
- time_range: "Seuil horaire au départ"
- advanced_search: "Recherche avancée"
- time_filter:
- time_range_filter: "Filtrer"
- sidebar:
- timeless: "Courses sans horaire"
- activerecord:
- models:
- vehicle_journey:
- zero: "course"
- one: "course"
- other: "courses"
- attributes:
- vehicle_journey:
- line: "Ligne"
- route: "Séquence d'arrêt"
- journey_pattern: "Mission"
- time_tables: "Calendriers"
- time_slot: "Fréquence"
- company: "Transporteur"
- number: "Numéro"
- comment: "Commentaires"
- status_value: "Etat de trafic"
- transport_mode_name: "Mode de transport"
- mobility_restricted_suitability: "Accessibilité PMR"
- flexible_service: "Transport à la demande"
- unspecified_mrs: "Non spécifié"
- accessible: "Accessible"
- not_accessible: "Non accessible"
- unspecified_fs: "Non spécifié"
- on_demand_fs: "Service à la demande"
- regular_fs: "Service régulier"
- published_journey_name: "Nom public"
- 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"
- creator_id: "Créé par"
- footnote_ids: "Notes de bas de page"
- errors:
- models:
- vehicle_journey:
- invalid_times: "Horaires invalides"
- formtastic:
- titles:
- vehicle_journey:
- objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- neptune:
- vehicle_journey:
- objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- netex:
- vehicle_journey:
- objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- gtfs:
- vehicle_journey:
- objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'"
- hub:
- vehicle_journey:
- objectid: "[prefixe]:VehicleJourney:[clé_unique] caractères autorisés : alphanumériques et 'souligné' pour le préfixe, la clé unique accepte en plus le 'moins'. Longueur maximale de la clé unique = 8."
-
diff --git a/config/routes.rb b/config/routes.rb
index 29ef9eff1..b03f6ebac 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -70,7 +70,7 @@ ChouetteIhm::Application.routes.draw do
get 'new_vehicle_journey'
end
end
- resources :vehicle_journeys do
+ resources :vehicle_journeys, :vehicle_journeys_frequencies do
get 'select_journey_pattern', :on => :member
resources :vehicle_translations
resources :time_tables
diff --git a/db/migrate/20151015150300_create_frequencies.ninoxe_engine.rb b/db/migrate/20151015150300_create_frequencies.ninoxe_engine.rb
new file mode 100644
index 000000000..152825222
--- /dev/null
+++ b/db/migrate/20151015150300_create_frequencies.ninoxe_engine.rb
@@ -0,0 +1,14 @@
+# This migration comes from ninoxe_engine (originally 20151015143707)
+class CreateFrequencies < ActiveRecord::Migration
+ def change
+ create_table :frequencies do |t|
+ t.references :vehicle_journey, index: true
+ t.time :scheduled_headway_interval, null: false
+ t.time :first_departure_time, null: false
+ t.time :last_departure_time
+ t.boolean :exact_time, default: false
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20151022150419_add_vehicle_journey_type_to_vehicle_journey.ninoxe_engine.rb b/db/migrate/20151022150419_add_vehicle_journey_type_to_vehicle_journey.ninoxe_engine.rb
new file mode 100644
index 000000000..e5af3caba
--- /dev/null
+++ b/db/migrate/20151022150419_add_vehicle_journey_type_to_vehicle_journey.ninoxe_engine.rb
@@ -0,0 +1,6 @@
+# This migration comes from ninoxe_engine (originally 20151022150156)
+class AddVehicleJourneyTypeToVehicleJourney < ActiveRecord::Migration
+ def change
+ add_column :vehicle_journeys, :vehicle_journey_type, :integer, null: false, default: 0
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index b68c3190a..8a2cdef07 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20150922095511) do
+ActiveRecord::Schema.define(version: 20151022150419) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -134,6 +134,19 @@ ActiveRecord::Schema.define(version: 20150922095511) do
add_index "delayed_jobs", ["priority", "run_at"], name: "delayed_jobs_priority", using: :btree
+ create_table "exports", force: true do |t|
+ t.integer "referential_id", limit: 8
+ t.string "status"
+ t.string "type"
+ t.string "options"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.string "references_type"
+ t.string "reference_ids"
+ end
+
+ add_index "exports", ["referential_id"], name: "index_exports_on_referential_id", using: :btree
+
create_table "facilities", force: true do |t|
t.integer "stop_area_id", limit: 8
t.integer "line_id", limit: 8
@@ -178,6 +191,18 @@ ActiveRecord::Schema.define(version: 20150922095511) do
t.integer "footnote_id", limit: 8
end
+ create_table "frequencies", force: true do |t|
+ t.integer "vehicle_journey_id"
+ t.time "scheduled_headway_interval", null: false
+ t.time "first_departure_time", null: false
+ t.time "last_departure_time"
+ t.boolean "exact_time", default: false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "frequencies", ["vehicle_journey_id"], name: "index_frequencies_on_vehicle_journey_id", using: :btree
+
create_table "group_of_lines", force: true do |t|
t.string "objectid", null: false
t.integer "object_version"
@@ -510,7 +535,7 @@ ActiveRecord::Schema.define(version: 20150922095511) do
t.integer "journey_pattern_id", limit: 8
t.integer "time_slot_id", limit: 8
t.integer "company_id", limit: 8
- t.string "objectid", null: false
+ t.string "objectid", null: false
t.integer "object_version"
t.datetime "creation_time"
t.string "creator_id"
@@ -524,6 +549,7 @@ ActiveRecord::Schema.define(version: 20150922095511) do
t.integer "number", limit: 8
t.boolean "mobility_restricted_suitability"
t.boolean "flexible_service"
+ t.integer "vehicle_journey_type", default: 0, null: false
end
add_index "vehicle_journeys", ["objectid"], name: "vehicle_journeys_objectid_key", unique: true, using: :btree
diff --git a/spec/controllers/vehicle_journeys_frequencies_controller_spec.rb b/spec/controllers/vehicle_journeys_frequencies_controller_spec.rb
new file mode 100644
index 000000000..735ffe5db
--- /dev/null
+++ b/spec/controllers/vehicle_journeys_frequencies_controller_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe VehicleJourneysFrequenciesController, :type => :controller do
+
+end
diff --git a/spec/helpers/vehicle_journeys_frequencies_helper_spec.rb b/spec/helpers/vehicle_journeys_frequencies_helper_spec.rb
new file mode 100644
index 000000000..4c881f90f
--- /dev/null
+++ b/spec/helpers/vehicle_journeys_frequencies_helper_spec.rb
@@ -0,0 +1,15 @@
+require 'rails_helper'
+
+# Specs in this file have access to a helper object that includes
+# the VehicleJourneysFrequenciesHelper. For example:
+#
+# describe VehicleJourneysFrequenciesHelper do
+# describe "string concat" do
+# it "concats two strings with spaces" do
+# expect(helper.concat_strings("this","that")).to eq("this that")
+# end
+# end
+# end
+RSpec.describe VehicleJourneysFrequenciesHelper, :type => :helper do
+ pending "add some examples to (or delete) #{__FILE__}"
+end