aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--app/assets/javascripts/application.js2
-rw-r--r--app/assets/javascripts/timebands.js.coffee3
-rw-r--r--app/assets/javascripts/tools.js.coffee6
-rw-r--r--app/assets/javascripts/vehicle_journey.js.coffee12
-rw-r--r--app/assets/javascripts/vehicle_journey_frequencies.js.coffee0
-rw-r--r--app/assets/javascripts/vehicle_journey_frequencies/index.js.coffee4
-rw-r--r--app/assets/javascripts/vehicle_journeys/index.js.coffee1
-rw-r--r--app/assets/stylesheets/application.css.scss.erb1
-rw-r--r--app/assets/stylesheets/main/layout.css.scss4
-rw-r--r--app/assets/stylesheets/main/lines.css.scss29
-rw-r--r--app/assets/stylesheets/main/timebands.css.scss0
-rw-r--r--app/assets/stylesheets/main/vehicle_journey_frequencies.scss153
-rw-r--r--app/assets/stylesheets/main/vehicle_journeys.css.scss57
-rw-r--r--app/assets/stylesheets/partials/base.scss23
-rw-r--r--app/assets/stylesheets/vendor/bootstrap_changes.css.scss24
-rw-r--r--app/controllers/breadcrumb_controller.rb16
-rw-r--r--app/controllers/journey_patterns_controller.rb3
-rw-r--r--app/controllers/timebands_controller.rb20
-rw-r--r--app/controllers/vehicle_journey_frequencies_controller.rb20
-rw-r--r--app/controllers/vehicle_journeys_controller.rb23
-rw-r--r--app/helpers/application_helper.rb4
-rw-r--r--app/helpers/breadcrumb_helper.rb16
-rw-r--r--app/helpers/timebands_helper.rb2
-rw-r--r--app/helpers/vehicle_journey_frequencies_helper.rb9
-rw-r--r--app/helpers/vehicle_journeys_helper.rb29
-rw-r--r--app/models/referential.rb4
-rw-r--r--app/models/vehicle_filter.rb5
-rw-r--r--app/views/help/timebands.textile0
-rw-r--r--app/views/lines/_line.erb40
-rw-r--r--app/views/routes/_route.html.erb47
-rw-r--r--app/views/shared/_header.erb4
-rw-r--r--app/views/timebands/_form.html.erb12
-rw-r--r--app/views/timebands/_sidebar.html.erb11
-rw-r--r--app/views/timebands/edit.html.erb3
-rw-r--r--app/views/timebands/index.html.erb29
-rw-r--r--app/views/timebands/new.html.erb3
-rw-r--r--app/views/timebands/show.html.erb12
-rw-r--r--app/views/vehicle_journey_frequencies/_form_footer.html.erb14
-rw-r--r--app/views/vehicle_journey_frequencies/_form_vehicle_journey_at_stops.html.erb59
-rw-r--r--app/views/vehicle_journey_frequencies/_journey_frequency_fields.html.erb15
-rw-r--r--app/views/vehicle_journey_frequencies/_show_journey_frequencies.html.erb28
-rw-r--r--app/views/vehicle_journey_frequencies/_show_sidebar.html.erb23
-rw-r--r--app/views/vehicle_journey_frequencies/_show_vehicle_journey_at_stops.html.erb29
-rw-r--r--app/views/vehicle_journey_frequencies/_vehicle_journey_at_stop_fields.html.erb52
-rw-r--r--app/views/vehicle_journey_frequencies/_vehicle_journeys_matrix.html.erb22
-rw-r--r--app/views/vehicle_journey_frequencies/edit.html.erb7
-rw-r--r--app/views/vehicle_journey_frequencies/edit.js.erb10
-rw-r--r--app/views/vehicle_journey_frequencies/new.html.erb6
-rw-r--r--app/views/vehicle_journey_frequencies/new.js.erb13
-rw-r--r--app/views/vehicle_journey_frequencies/select_journey_pattern.js.erb5
-rw-r--r--app/views/vehicle_journey_frequencies/show.html.erb3
-rw-r--r--app/views/vehicle_journeys/_form.html.erb59
-rw-r--r--app/views/vehicle_journeys/_form_footer.html.erb5
-rw-r--r--app/views/vehicle_journeys/_form_vehicle_journey_at_stops.html.erb49
-rw-r--r--app/views/vehicle_journeys/_route_popover.html.erb3
-rw-r--r--app/views/vehicle_journeys/_show_details.html.erb87
-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/_vehicle_journeys.html.erb40
-rw-r--r--app/views/vehicle_journeys/_vehicle_journeys_matrix.html.erb40
-rw-r--r--app/views/vehicle_journeys/edit.html.erb3
-rw-r--r--app/views/vehicle_journeys/index.html.erb43
-rw-r--r--app/views/vehicle_journeys/new.html.erb2
-rw-r--r--app/views/vehicle_journeys/new.js.erb11
-rw-r--r--app/views/vehicle_journeys/show.html.erb121
-rw-r--r--config/locales/breadcrumbs.yml2
-rw-r--r--config/locales/journey_frequencies.en.yml13
-rw-r--r--config/locales/journey_frequencies.fr.yml13
-rw-r--r--config/locales/lines_en.yml2
-rw-r--r--config/locales/lines_fr.yml2
-rw-r--r--config/locales/referentials.yml2
-rw-r--r--config/locales/timebands.en.yml26
-rw-r--r--config/locales/timebands.fr.yml26
-rw-r--r--config/locales/vehicle_journey_frequencies.en.yml7
-rw-r--r--config/locales/vehicle_journey_frequencies.fr.yml7
-rw-r--r--config/locales/vehicle_journeys.en.yml125
-rw-r--r--config/locales/vehicle_journeys.fr.yml125
-rw-r--r--config/locales/vehicle_journeys.yml228
-rw-r--r--config/routes.rb4
-rw-r--r--db/migrate/20151015150300_create_journey_frequencies.ninoxe_engine.rb14
-rw-r--r--db/migrate/20151022150419_add_journey_category_to_vehicle_journey.ninoxe_engine.rb6
-rw-r--r--db/migrate/20151023101306_create_timebands.ninoxe_engine.rb16
-rw-r--r--db/migrate/20151028105423_add_timeband_id_to_journey_frequencies.ninoxe_engine.rb6
-rw-r--r--db/schema.rb44
-rw-r--r--spec/controllers/vehicle_journey_frequencies_controller_spec.rb5
-rw-r--r--spec/features/timebands_spec.rb62
-rw-r--r--spec/helpers/vehicle_journey_frequencies_helper_spec.rb15
-rw-r--r--spec/models/gtfs_export_spec.rb4
-rw-r--r--spec/views/timebands/edit.html.erb_spec.rb23
-rw-r--r--spec/views/timebands/index.html.erb_spec.rb20
-rw-r--r--spec/views/timebands/new.html.erb_spec.rb21
-rw-r--r--spec/views/timebands/show.html.erb_spec.rb24
-rw-r--r--spec/views/vehicle_journeys/_form.html.erb_spec.rb42
-rw-r--r--spec/views/vehicle_journeys/_vehicle_journey.html.erb_spec.rb6
96 files changed, 1743 insertions, 576 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/javascripts/application.js b/app/assets/javascripts/application.js
index 212ccdff8..1ae76cd05 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -22,10 +22,12 @@
//= require footable/footable.filter
//= require footable/footable.paginate
//= require footable/footable.sort
+//= require tools
//= require_directory ./plugins
//= require_directory .
//= require_directory ./stop_areas
//= require_directory ./vehicle_journeys
+//= require_directory ./vehicle_journey_frequencies
//= require_directory ./import_tasks
//= require_directory ./compliance_check_tasks
//= require_directory ./compliance_checks
diff --git a/app/assets/javascripts/timebands.js.coffee b/app/assets/javascripts/timebands.js.coffee
new file mode 100644
index 000000000..24f83d18b
--- /dev/null
+++ b/app/assets/javascripts/timebands.js.coffee
@@ -0,0 +1,3 @@
+# Place all the behaviors and hooks related to the matching controller here.
+# All this logic will automatically be available in application.js.
+# You can use CoffeeScript in this file: http://coffeescript.org/
diff --git a/app/assets/javascripts/tools.js.coffee b/app/assets/javascripts/tools.js.coffee
new file mode 100644
index 000000000..b30eb6f15
--- /dev/null
+++ b/app/assets/javascripts/tools.js.coffee
@@ -0,0 +1,6 @@
+(($) ->
+ $ ->
+ $('.ce-hide').removeClass 'ce-hide'
+ return
+ return
+) jQuery
diff --git a/app/assets/javascripts/vehicle_journey.js.coffee b/app/assets/javascripts/vehicle_journey.js.coffee
index 54b359b7a..caf505960 100644
--- a/app/assets/javascripts/vehicle_journey.js.coffee
+++ b/app/assets/javascripts/vehicle_journey.js.coffee
@@ -1,6 +1,6 @@
jQuery ->
swap_hour_minute = ( from, to) ->
- rows = $('.vehicle_journeys tbody.journey_pattern_dependent_list tr.time')
+ rows = $('tbody.journey_pattern_dependent_list tr.time')
for row in rows
do (row) ->
$(row).find( to).find('.hour')[0].value = $(row).find( from).find('.hour')[0].value
@@ -8,15 +8,15 @@ jQuery ->
copy_departures_to_arrivals = (event) ->
event.preventDefault()
- swap_hour_minute( '.departure_time', '.arrival_time')
+ swap_hour_minute('.departure_time', '.arrival_time')
- $(document).on("click", '.vehicle_journeys a.to_arrivals', copy_departures_to_arrivals)
+ $(document).on('click', '[data-ce-action="to_arrivals"]', copy_departures_to_arrivals)
copy_arrivals_to_departures = (event) ->
event.preventDefault()
- swap_hour_minute( '.arrival_time', '.departure_time')
+ swap_hour_minute('.arrival_time', '.departure_time')
- $(document).on("click", '.vehicle_journeys a.to_departures', copy_arrivals_to_departures)
+ $(document).on('click', '[data-ce-action="to_departures"]', copy_arrivals_to_departures)
switch_vehicle_journey_at_stops = (event) ->
event.preventDefault()
@@ -72,4 +72,4 @@ jQuery ->
slide_to( '.departure_time', duration)
slide_to( '.arrival_time', duration)
- $(document).on("click", '.vehicle_journeys a.slide', slide) \ No newline at end of file
+ $(document).on("click", '.vehicle_journeys a.slide', slide)
diff --git a/app/assets/javascripts/vehicle_journey_frequencies.js.coffee b/app/assets/javascripts/vehicle_journey_frequencies.js.coffee
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/app/assets/javascripts/vehicle_journey_frequencies.js.coffee
diff --git a/app/assets/javascripts/vehicle_journey_frequencies/index.js.coffee b/app/assets/javascripts/vehicle_journey_frequencies/index.js.coffee
new file mode 100644
index 000000000..4f4fccc18
--- /dev/null
+++ b/app/assets/javascripts/vehicle_journey_frequencies/index.js.coffee
@@ -0,0 +1,4 @@
+$(".vehicle_journey_frequencies.index").ready ->
+ $( 'body' ).popover({html: true, trigger: "click", selector: '[rel="popover"]'}).on("show.bs.popover", (event)->
+ $('[aria-describedby]').click()
+ $(event.target).data("bs.popover").tip().css("maxWidth", "350px"))
diff --git a/app/assets/javascripts/vehicle_journeys/index.js.coffee b/app/assets/javascripts/vehicle_journeys/index.js.coffee
index e89c3f519..02de558d4 100644
--- a/app/assets/javascripts/vehicle_journeys/index.js.coffee
+++ b/app/assets/javascripts/vehicle_journeys/index.js.coffee
@@ -4,4 +4,3 @@ $(".vehicle_journeys.index").ready ->
.on("show.bs.popover", (event)->
$(event.target).data("bs.popover").tip().css("maxWidth", "350px"))
- \ No newline at end of file
diff --git a/app/assets/stylesheets/application.css.scss.erb b/app/assets/stylesheets/application.css.scss.erb
index 52405c14c..770e3c82b 100644
--- a/app/assets/stylesheets/application.css.scss.erb
+++ b/app/assets/stylesheets/application.css.scss.erb
@@ -17,6 +17,7 @@ $body-bg: #eee;
@import "modules/progress_bars";
// Partials
+@import "partials/base";
@import "partials/header";
@import "partials/footer";
diff --git a/app/assets/stylesheets/main/layout.css.scss b/app/assets/stylesheets/main/layout.css.scss
index 0a9ade3a8..aac5846c5 100644
--- a/app/assets/stylesheets/main/layout.css.scss
+++ b/app/assets/stylesheets/main/layout.css.scss
@@ -17,6 +17,10 @@ ol.breadcrumb{
margin-top: 10px;
}
+.ce-hide {
+ display: none;
+}
+
#middle{
min-height: 500px;
-webkit-box-shadow: 0 0 5px 2px rgba(0, 0, 0, .2);
diff --git a/app/assets/stylesheets/main/lines.css.scss b/app/assets/stylesheets/main/lines.css.scss
index 94201212a..e114a2338 100644
--- a/app/assets/stylesheets/main/lines.css.scss
+++ b/app/assets/stylesheets/main/lines.css.scss
@@ -78,7 +78,30 @@
display: inline;
}
}
-}
-
-
+}
+.ce-LineBlock-header-list {
+ display: table;
+ width: 100%;
+ margin: 0;
+ padding: 0;
+ > li {
+ display: table-cell;
+ vertical-align: middle;
+ > input {
+ margin-top: 0;
+ }
+ &:first-child {
+ width: 37px;
+ }
+ &:last-child {
+ text-align: right;
+ width: 73px;
+ }
+ }
+}
+.ce-LineBlock-header-title {
+ padding: 0 !important;
+ line-height: 12px;
+ font-size: 13px;
+}
diff --git a/app/assets/stylesheets/main/timebands.css.scss b/app/assets/stylesheets/main/timebands.css.scss
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/app/assets/stylesheets/main/timebands.css.scss
diff --git a/app/assets/stylesheets/main/vehicle_journey_frequencies.scss b/app/assets/stylesheets/main/vehicle_journey_frequencies.scss
new file mode 100644
index 000000000..f973de209
--- /dev/null
+++ b/app/assets/stylesheets/main/vehicle_journey_frequencies.scss
@@ -0,0 +1,153 @@
+#workspace {
+ .ce-TimeBandFormTable {
+ .btn {
+ white-space: normal;
+ width: 130px;
+ }
+ }
+ .ce-TimeBandFormTable th {
+ text-align: left;
+ padding: 6px 20px 6px 20px;
+ }
+ .ce-TimeBandFormTable td {
+ padding: 6px 20px 6px 20px;
+ }
+ .ce-TimeBandFormTable td {
+ vertical-align: middle;
+ }
+ .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;
+ }
+ tr:first-child td .ce-TimeBandFormTable-line:after {
+ top: 50%;
+ }
+ tr:last-child td .ce-TimeBandFormTable-line:after {
+ bottom: 50%;
+ }
+ .ce-TimeBandFormTable-circle {
+ position: relative;
+ z-index: 999;
+ display: block;
+ width: 16px;
+ height: 16px;
+ border-radius: 8px;
+ background-color: #4d7809;
+ }
+ tr:hover .ce-TimeBandFormTable-circle {
+ background-color: #fff;
+ border: 2px solid #61970b;
+ }
+ .ce-FrequencyFormFields {
+ display: table;
+ width: 100%;
+ padding-left: 25%;
+ .inline-errors {
+ margin: 0;
+ }
+ > li {
+ display: table-cell;
+ width: 21%;
+ vertical-align: top;
+ padding:0 ;
+ margin: 0;
+ &:first-child select {
+ width: 160px;
+ }
+ &:nth-last-child(2), &:last-child {
+ width: 8%;
+ }
+ label {
+ font-size: 13px;
+ padding-left: 0;
+ }
+ legend {
+ position: relative;
+ width: auto;
+ float: none;
+ border: 0;
+ label {
+ position: relative;
+ }
+ }
+ .fragments-group {
+ float: none;
+ width: auto;
+ padding: 0;
+ > li {
+ display: inline-block;
+ vertical-align: top;
+ }
+ }
+ }
+ }
+ &.vehicle_journey_frequencies {
+ .actions-add-fields {
+ clear: both;
+ padding-left: 25%;
+ margin-top: 10px;
+ }
+ }
+ td.ce-VehicleJourneyBlock-frequency {
+ background-color: rgba(95, 95, 95, 0.2);
+ }
+ .ce-VehicleJourneyFrequencyTableBlock {
+ margin: 0 !important;
+ }
+ .ce-VehicleJourneyFrequenciesMatrix {
+ margin: 0;
+ padding: 0;
+ > li {
+ background-color: #eee;
+ height: 22px;
+ margin-bottom: 20px;
+ position: relative;
+ > ul {
+ margin: 0;
+ padding: 0;
+ > li {
+ cursor: pointer;
+ position: absolute;
+ padding: 0 2px;
+ top: 0;
+ bottom: 0;
+ background-color: $brand-primary;
+ border-left: 1px solid #000;
+ border-right: 1px solid #000;
+ &:hover {
+ z-index: 9999;
+ background-color: #4d7809;
+ top: -2px;
+ bottom: -2px;
+ > span {
+ display: block;
+ }
+ }
+ }
+ }
+ }
+ }
+ .ce-VehicleJourneyFrequenciesMatrix-firstDepartureTime,
+ .ce-VehicleJourneyFrequenciesMatrix-lastDepartureTime {
+ display: none;
+ position: absolute;
+ top: -13px;
+ font-size: 11px;
+ color: #262626;
+ }
+ .ce-VehicleJourneyFrequenciesMatrix-firstDepartureTime {
+ left: -32px;
+ }
+ .ce-VehicleJourneyFrequenciesMatrix-lastDepartureTime {
+ right: -32px;
+ }
+}
diff --git a/app/assets/stylesheets/main/vehicle_journeys.css.scss b/app/assets/stylesheets/main/vehicle_journeys.css.scss
index 119883fb4..6f67bc4b4 100644
--- a/app/assets/stylesheets/main/vehicle_journeys.css.scss
+++ b/app/assets/stylesheets/main/vehicle_journeys.css.scss
@@ -1,21 +1,30 @@
-// 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/
-
-#workspace.vehicle_journeys.edit, #workspace.vehicle_journeys.update, #workspace.vehicle_journeys.create, #workspace.vehicle_journeys.new {
+#workspace.vehicle_journeys.edit,
+#workspace.vehicle_journeys.update,
+#workspace.vehicle_journeys.create,
+#workspace.vehicle_journeys.new,
+#workspace.vehicle_journey_frequencies.edit,
+#workspace.vehicle_journey_frequencies.update,
+#workspace.vehicle_journey_frequencies.create,
+#workspace.vehicle_journey_frequencies.new {
#route_color{
width: 100px;
color: white;
font-weight: bold;
}
+ .btn {
+ padding: 6px 12px;
+ }
+
.time_table_list { padding-left: 25%; }
- #vehicle_journey_footnote_ids_input {
+ #vehicle_journey_footnote_ids_input,
+ #vehicle_journey_frequency_footnote_ids_input {
min-height: 3em;
}
- .vehicle_journey_at_stops {
+ .vehicle_journey_at_stops,
+ .vehicle_journey_frequency_at_stops {
margin-left: 25%;
thead, tbody, tfoot{
@@ -56,7 +65,8 @@
}
}
-#workspace.vehicle_journeys.index
+#workspace.vehicle_journeys.index,
+#workspace.vehicle_journey_frequencies.index
{
#search{
@@ -95,39 +105,44 @@
}
-#workspace.vehicle_journeys.show, #workspace.vehicle_journeys.edit, #workspace.vehicle_journeys.update, #workspace.vehicle_journeys.create, #workspace.vehicle_journeys.new {
-
- .to_departures {
- cursor: pointer;
- }
-
- .to_arrivals {
- cursor: pointer;
- }
+#workspace.vehicle_journeys.show,
+#workspace.vehicle_journeys.edit,
+#workspace.vehicle_journeys.update,
+#workspace.vehicle_journeys.create,
+#workspace.vehicle_journeys.new,
+#workspace.vehicle_journey_journey.show,
+#workspace.vehicle_journey_journey.edit,
+#workspace.vehicle_journey_journey.update,
+#workspace.vehicle_journey_journey.create,
+#workspace.vehicle_journey_journey.new {
.slide {
cursor: pointer;
}
}
-#workspace.vehicle_journeys.show
+#workspace.vehicle_journeys.show,
+#workspace.vehicle_journey_frequencies.show
{
.summary p label {
font-weight: bold;
}
}
-#workspace.vehicle_journeys.timeless
+#workspace.vehicle_journeys.timeless,
+#workspace.vehicle_journey_frequencies.timeless
{
.summary p label {
font-weight: bold;
}
- .vehicle_journeys {
+ .vehicle_journeys,
+ .vehicle_journey_frequencies {
margin-top: 20px;
}
- .vehicle_journey {
+ .vehicle_journey,
+ .vehicle_journey_frequency {
span.included_day_type {
font-weight: bolder;
diff --git a/app/assets/stylesheets/partials/base.scss b/app/assets/stylesheets/partials/base.scss
new file mode 100644
index 000000000..e4258c277
--- /dev/null
+++ b/app/assets/stylesheets/partials/base.scss
@@ -0,0 +1,23 @@
+.formtastic.timeband {
+ .time_select {
+ .fragments {
+ .fragments-group {
+ padding-left: 0;
+ }
+ legend.label {
+ position: relative;
+ width: auto;
+ display: block;
+ width: 25%;
+ float: left;
+ border: none;
+ label {
+ position: relative;
+ width: auto;
+ font-size: 125%;
+ padding: .2em .6em .3em;
+ }
+ }
+ }
+ }
+}
diff --git a/app/assets/stylesheets/vendor/bootstrap_changes.css.scss b/app/assets/stylesheets/vendor/bootstrap_changes.css.scss
index 67cf90ae4..6e2ccc1f6 100644
--- a/app/assets/stylesheets/vendor/bootstrap_changes.css.scss
+++ b/app/assets/stylesheets/vendor/bootstrap_changes.css.scss
@@ -11,6 +11,7 @@
span.included_day_type {
color: black;
+ font-weight: bold;
}
span.excluded_day_type {
}
@@ -32,3 +33,26 @@
color: $brand-success;
}
}
+.popover-title {
+ display: table;
+ width: 100%;
+ > a {
+ display: table-cell;
+ vertical-align: top;
+ &:first-child {
+ padding-right: 10px;
+ }
+ &:last-child {
+ width: 32px;
+ }
+ }
+}
+.popover-content {
+ > ul {
+ margin: 0;
+ padding: 0;
+ > li {
+ list-style: none !important;
+ }
+ }
+}
diff --git a/app/controllers/breadcrumb_controller.rb b/app/controllers/breadcrumb_controller.rb
index 143651b52..29ecd262c 100644
--- a/app/controllers/breadcrumb_controller.rb
+++ b/app/controllers/breadcrumb_controller.rb
@@ -1,37 +1,37 @@
class BreadcrumbController < InheritedResources::Base
include BreadcrumbHelper
-
+
def show
- show! do
+ show! do
build_breadcrumb :show
end
end
-
+
def index
- index! do
+ index! do
build_breadcrumb :index
end
end
-
+
def edit
edit! do
build_breadcrumb :edit
end
end
- def update
+ def update
update! do |success, failure|
build_breadcrumb :edit
end
end
def new
- new! do
+ new! do
build_breadcrumb :new
end
end
-
+
def create
create! do |success, failure|
build_breadcrumb :new
diff --git a/app/controllers/journey_patterns_controller.rb b/app/controllers/journey_patterns_controller.rb
index ce59d00b6..b7cdccc72 100644
--- a/app/controllers/journey_patterns_controller.rb
+++ b/app/controllers/journey_patterns_controller.rb
@@ -36,7 +36,8 @@ 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"
+ vehicle_journey_category = params[:journey_category] ? "vehicle_journey_#{params[:journey_category]}" : 'vehicle_journey'
+ render "#{vehicle_journey_category.pluralize}/select_journey_pattern"
end
# overwrite inherited resources to use delete instead of destroy
diff --git a/app/controllers/timebands_controller.rb b/app/controllers/timebands_controller.rb
new file mode 100644
index 000000000..446255cac
--- /dev/null
+++ b/app/controllers/timebands_controller.rb
@@ -0,0 +1,20 @@
+class TimebandsController < ChouetteController
+
+ defaults :resource_class => Chouette::Timeband
+
+ respond_to :html
+
+ belongs_to :referential
+
+ def new
+ new! do
+ build_breadcrumb :new
+ end
+ end
+
+ private
+
+ def timeband_params
+ params.require(:timeband).permit( :name, :start_time, :end_time )
+ end
+end
diff --git a/app/controllers/vehicle_journey_frequencies_controller.rb b/app/controllers/vehicle_journey_frequencies_controller.rb
new file mode 100644
index 000000000..c12400775
--- /dev/null
+++ b/app/controllers/vehicle_journey_frequencies_controller.rb
@@ -0,0 +1,20 @@
+class VehicleJourneyFrequenciesController < VehicleJourneysController
+
+ defaults resource_class: Chouette::VehicleJourneyFrequency
+
+ private
+
+ def vehicle_journey_frequency_params
+ params.require(:vehicle_journey_frequency).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] },
+ { journey_frequencies_attributes: [ :id, :_destroy, :scheduled_headway_interval, :first_departure_time,
+ :last_departure_time, :exact_time, :timeband_id ] } )
+ end
+end
diff --git a/app/controllers/vehicle_journeys_controller.rb b/app/controllers/vehicle_journeys_controller.rb
index ace7aff5e..036816b21 100644
--- a/app/controllers/vehicle_journeys_controller.rb
+++ b/app/controllers/vehicle_journeys_controller.rb
@@ -28,7 +28,6 @@ class VehicleJourneysController < ChouetteController
def index
index! do
- @matrix ||= matrix
if collection.out_of_bounds?
redirect_to params.merge(:page => 1)
end
@@ -50,10 +49,11 @@ class VehicleJourneysController < ChouetteController
def collection
unless @vehicle_journeys
@vehicle_filter = VehicleFilter.new adapted_params
+ @vehicle_filter.journey_category_model = resource_class.model_name.route_key
@q = @vehicle_filter.vehicle_journeys.search @vehicle_filter.filtered_params
@vehicle_journeys = @q.result( :distinct => false ).paginate(:page => params[:page], :per_page => 8)
end
-
+ matrix
@vehicle_journeys
end
alias_method :vehicle_journeys, :collection
@@ -74,20 +74,21 @@ class VehicleJourneysController < ChouetteController
end
def matrix
- {}.tap do |hash|
- vehicle_journeys.each do |vj|
- vj.vehicle_journey_at_stops.each do |vjas|
- hash[ "#{vj.id}-#{vjas.stop_point_id}"] = vjas
- end
- end
- end
+ @matrix = resource_class.matrix(@vehicle_journeys)
end
-
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] } )
end
end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index d3e9655b9..37b9d7a63 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_journey_frequencies")
+ "vehicle_journeys"
when path.include?("/journey_patterns")
"journey_patterns"
when path.include?("/routes")
@@ -67,6 +69,8 @@ module ApplicationHelper
"connection_links"
when path.include?("/time_tables")
"time_tables"
+ when path.include?("/timebands")
+ "timebands"
when path.include?("/rule_parameter_set")
"parametersets"
when path.include?("/import_tasks")
diff --git a/app/helpers/breadcrumb_helper.rb b/app/helpers/breadcrumb_helper.rb
index c98691b72..52da8b887 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::VehicleJourneyFrequency"
+ vehicle_journey_frequency_breadcrumb action
when "VehicleJourneyImport"
vehicle_journey_import_breadcrumb action
when "Chouette::StopArea"
@@ -28,6 +30,8 @@ module BreadcrumbHelper
connection_link_breadcrumb action
when "Chouette::TimeTable"
time_table_breadcrumb action
+ when "Chouette::Timeband"
+ timeband_breadcrumb action
when "StopAreaCopy"
stop_area_copy_breadcrumb action
when "Import"
@@ -102,6 +106,12 @@ module BreadcrumbHelper
add_breadcrumb breadcrumb_label(@time_table), referential_time_table_path(@referential, @time_table),:title => breadcrumb_tooltip(@time_table) if action == :edit
end
+ def timeband_breadcrumb(action)
+ referential_breadcrumb
+ add_breadcrumb Chouette::Timeband.model_name.human(:count => 2), referential_timebands_path(@referential) unless action == :index
+ add_breadcrumb breadcrumb_label(@timeband), referential_timeband_path(@referential, @timeband),:title => breadcrumb_tooltip(@timeband) if action == :edit
+ end
+
def line_breadcrumb(action)
referential_breadcrumb
add_breadcrumb Chouette::Line.model_name.human(:count => 2), referential_lines_path(@referential) unless action == :index
@@ -124,6 +134,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_journey_frequency_breadcrumb(action)
+ route_breadcrumb :edit
+ add_breadcrumb I18n.t("breadcrumbs.vehicle_journey_frequencies"), referential_line_route_vehicle_journey_frequencies_path(@referential, @line, @route) unless action == :index
+ add_breadcrumb breadcrumb_label(@vehicle_journey_frequency), referential_line_route_vehicle_journey_frequency_path(@referential, @line,@route, @vehicle_journey_frequency),:title => breadcrumb_tooltip(@vehicle_journey_frequency) if action == :edit
+ end
+
def vehicle_journey_import_breadcrumb (action)
route_breadcrumb :edit
end
diff --git a/app/helpers/timebands_helper.rb b/app/helpers/timebands_helper.rb
new file mode 100644
index 000000000..51251e46f
--- /dev/null
+++ b/app/helpers/timebands_helper.rb
@@ -0,0 +1,2 @@
+module TimebandsHelper
+end
diff --git a/app/helpers/vehicle_journey_frequencies_helper.rb b/app/helpers/vehicle_journey_frequencies_helper.rb
new file mode 100644
index 000000000..1c603e4b1
--- /dev/null
+++ b/app/helpers/vehicle_journey_frequencies_helper.rb
@@ -0,0 +1,9 @@
+module VehicleJourneyFrequenciesHelper
+ def journey_frequency_percent(journey_frequency)
+ base = 100.0 / 2359.0
+ left = base * journey_frequency.first_departure_time.strftime("%H%M").to_i
+ right = base * journey_frequency.last_departure_time.strftime("%H%M").to_i
+ width = (right < left ? 100 - left : right - left)
+ [left.round(2), width.round(2)]
+ end
+end
diff --git a/app/helpers/vehicle_journeys_helper.rb b/app/helpers/vehicle_journeys_helper.rb
index 95741f441..c5f3242be 100644
--- a/app/helpers/vehicle_journeys_helper.rb
+++ b/app/helpers/vehicle_journeys_helper.rb
@@ -16,18 +16,29 @@ module VehicleJourneysHelper
return "missing" if (is_present && is_present.departure_time.nil?)
end
- def vehicle_departure(vehicle)
- first_vjas = vehicle.vehicle_journey_at_stops.first
- return "" unless first_vjas.departure_time
- l(first_vjas.departure_time, :format => :hour).gsub( / /, ' ')
+ def vehicle_departure(vehicle, departure_time=nil)
+ unless departure_time
+ first_vjas = vehicle.vehicle_journey_at_stops.first
+ return '' unless first_vjas.departure_time
+ departure_time = first_vjas.departure_time
+ end
+ l(departure_time, :format => :hour).gsub( / /, ' ')
end
- def vehicle_title( vehicle)
- return t('vehicle_journeys.vehicle_journey.title_stopless', :name => vehicle_name( vehicle)) if vehicle.vehicle_journey_at_stops.empty?
+ def vehicle_title(vehicle, journey_frequency=nil)
+ return t("vehicle_journeys.vehicle_journey#{'_frequency' if vehicle.frequency?}.title_stopless", :name => vehicle_name( vehicle)) if vehicle.vehicle_journey_at_stops.empty?
first_vjas = vehicle.vehicle_journey_at_stops.first
- t('vehicle_journeys.vehicle_journey.title',
- :stop => first_vjas.stop_point.stop_area.name,
- :time => vehicle_departure(vehicle))
+ if vehicle.frequency? && journey_frequency
+ t("vehicle_journeys.vehicle_journey_frequency.title_frequency",
+ :interval => l(journey_frequency.scheduled_headway_interval, format: :hour),
+ :stop => first_vjas.stop_point.stop_area.name,
+ :time_first => vehicle_departure(nil, journey_frequency.first_departure_time),
+ :time_last => vehicle_departure(nil, journey_frequency.last_departure_time))
+ else
+ t("vehicle_journeys.vehicle_journey#{'_frequency' if vehicle.frequency?}.title",
+ :stop => first_vjas.stop_point.stop_area.name,
+ :time => vehicle_departure(vehicle, (journey_frequency ? journey_frequency.first_departure_time : nil )))
+ end
end
def edit_vehicle_title( vehicle)
diff --git a/app/models/referential.rb b/app/models/referential.rb
index d50694c60..e32c956fb 100644
--- a/app/models/referential.rb
+++ b/app/models/referential.rb
@@ -79,6 +79,10 @@ class Referential < ActiveRecord::Base
Chouette::TimeTable.all
end
+ def timebands
+ Chouette::Timeband.all
+ end
+
def connection_links
Chouette::ConnectionLink.all
end
diff --git a/app/models/vehicle_filter.rb b/app/models/vehicle_filter.rb
index 64cc3e75a..13a302dc6 100644
--- a/app/models/vehicle_filter.rb
+++ b/app/models/vehicle_filter.rb
@@ -1,6 +1,7 @@
class VehicleFilter
attr_accessor :route
attr_accessor :q
+ attr_accessor :journey_category_model
def initialize(attributes = {})
attributes.each do |name, value|
@@ -17,9 +18,9 @@ class VehicleFilter
end
def vehicles_passing_time_filtered
if without_any_passing_time?
- route.vehicle_journeys.without_any_passing_time
+ route.send(journey_category_model).without_any_passing_time
else
- route.sorted_vehicle_journeys
+ route.sorted_vehicle_journeys(journey_category_model)
end
end
def vehicle_journeys
diff --git a/app/views/help/timebands.textile b/app/views/help/timebands.textile
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/app/views/help/timebands.textile
diff --git a/app/views/lines/_line.erb b/app/views/lines/_line.erb
index 69c7978ab..b23992a1c 100644
--- a/app/views/lines/_line.erb
+++ b/app/views/lines/_line.erb
@@ -1,26 +1,26 @@
-<div id="index_item" class="panel panel-default line">
- <div class="panel-heading">
- <div class="panel-title clearfix">
- <span class="pull-right">
- <%= link_to edit_referential_line_path(@referential, line), :class => "btn btn-default btn-sm" do %>
+<div id="index_item" class="panel panel-default line ce-LineBlock">
+ <div class="panel-heading ce-LineBlock-header">
+ <ul class="ce-LineBlock-header-list">
+ <li>
+ <%= check_box_tag "ids[]", line.id, false, class: "multiple_selection", style: "display: none;" %>
+ <% if line.number && line.number.length <= 3 %>
+ <span class="label label-default line_number" style="<%= number_style(line) %>"><%= line.number %></span>
+ <% end %>
+ </li>
+ <li>
+ <%= link_to([@referential, line], class: 'preview', title: "#{Chouette::Line.model_name.human.capitalize} #{line.name}") do %>
+ <h5 class="ce-LineBlock-header-title"><%= truncate(line.name, length: 24) %></h5>
+ <% end %>
+ </li>
+ <li>
+ <%= link_to edit_referential_line_path(@referential, line), class: 'btn btn-default btn-sm' do %>
<span class="fa fa-pencil"></span>
- <% end if edit %>
- <%= link_to referential_line_path(@referential, line), :method => :delete, :data => {:confirm => t('lines.actions.destroy_confirm')}, :class => "btn btn-danger btn-sm" do %>
+ <% end if edit %>
+ <%= link_to referential_line_path(@referential, line), method: :delete, data: { confirm: t('lines.actions.destroy_confirm') }, class: 'btn btn-danger btn-sm' do %>
<span class="fa fa-trash-o"></span>
<% end if delete %>
- </span>
- <h5>
- <%= check_box_tag "ids[]", line.id, false, :class => "multiple_selection", :style => "display: none;" %>
- <% if line.number and line.number.length <= 3 %>
- <span class="label label-default line_number" style="<%= number_style(line) %>"><%= line.number %></span>
- <% end %>
- <%= link_to([@referential, line], :class => "preview", :title => "#{Chouette::Line.model_name.human.capitalize} #{line.name}") do %>
- <span class="name">
- <%= truncate(line.name, :length => 20) %>
- </span>
- <% end %>
- </h5>
- </div>
+ </li>
+ </ul>
</div>
<div class="panel-body">
<p>
diff --git a/app/views/routes/_route.html.erb b/app/views/routes/_route.html.erb
index 0fee47cd1..179f06a25 100644
--- a/app/views/routes/_route.html.erb
+++ b/app/views/routes/_route.html.erb
@@ -22,26 +22,33 @@
</div>
</div>
<div class="panel-body">
- <p>
- <% if route.journey_patterns.size > 0 %>
- <i class="fa fa-clock-o"></i><%= link_to t("vehicle_journeys.actions.index"), referential_line_route_vehicle_journeys_path(@referential, @line, route) %>
- <% else %>
- <%= t('.no_journey_pattern')%>
- <% end%>
- </p>
- <p>
- <% if route.opposite_route %>
- <%= fonticon_wayback(route.opposite_route.wayback) %><%= link_to truncate(route.opposite_route.name, :length => 30), referential_line_route_path( @referential, @line, route.opposite_route) %>
- <% else %>
- <%= t('.no_opposite') %>
+ <p>
+ <% if route.journey_patterns.size > 0 %>
+ <i class="fa fa-clock-o"></i>
+ <%= link_to t("vehicle_journeys.actions.index"), referential_line_route_vehicle_journeys_path(@referential, @line, route) %>
+ <% else %>
+ <%= t('.no_journey_pattern')%>
+ <% end%>
+ </p>
+ <% if @line.vehicle_journey_frequencies? %>
+ <p>
+ <i class="fa fa-clock-o"></i>
+ <%= link_to t("vehicle_journey_frequencies.actions.index"), referential_line_route_vehicle_journey_frequencies_path(@referential, @line, route) %>
+ </p>
<% end %>
- </p>
- <p>
- <% if ! route.direction.blank? %>
- <%= route.human_attribute_name('direction_code') %> : <%= t('directions.label.'+route.direction_code) %>
- <% else %>
- <br>
- <% end %>
- </p>
+ <p>
+ <% if route.opposite_route %>
+ <%= fonticon_wayback(route.opposite_route.wayback) %><%= link_to truncate(route.opposite_route.name, :length => 30), referential_line_route_path( @referential, @line, route.opposite_route) %>
+ <% else %>
+ <%= t('.no_opposite') %>
+ <% end %>
+ </p>
+ <p>
+ <% if ! route.direction.blank? %>
+ <%= route.human_attribute_name('direction_code') %> : <%= t('directions.label.'+route.direction_code) %>
+ <% else %>
+ <br>
+ <% end %>
+ </p>
</div>
</div>
diff --git a/app/views/shared/_header.erb b/app/views/shared/_header.erb
index d1e8dd2ce..1e8a63fba 100644
--- a/app/views/shared/_header.erb
+++ b/app/views/shared/_header.erb
@@ -65,6 +65,10 @@
<span class="badge pull-right"><%= @referential.time_tables.size %></span><%= Referential.human_attribute_name("time_tables") %>
<% end %>
</li>
+ <li><%= link_to referential_timebands_path(@referential) do %>
+ <span class="badge pull-right"><%= @referential.timebands.size %></span><%= Referential.human_attribute_name("timebands") %>
+ <% end %>
+ </li>
</ul>
</li>
<li><%= link_to Referential.human_attribute_name("imports"), referential_imports_path(@referential) %></li>
diff --git a/app/views/timebands/_form.html.erb b/app/views/timebands/_form.html.erb
new file mode 100644
index 000000000..bfa32212e
--- /dev/null
+++ b/app/views/timebands/_form.html.erb
@@ -0,0 +1,12 @@
+<%= semantic_form_for [@referential, @timeband] do |form| %>
+ <%= form.inputs do %>
+ <%= form.input :name %>
+ <%= form.input :start_time %>
+ <%= form.input :end_time %>
+ <% end %>
+
+ <%= form.actions do %>
+ <%= form.action :submit, :as => :button %>
+ <%= form.action :cancel, :as => :link %>
+ <% end %>
+<% end %>
diff --git a/app/views/timebands/_sidebar.html.erb b/app/views/timebands/_sidebar.html.erb
new file mode 100644
index 000000000..8ffa16dca
--- /dev/null
+++ b/app/views/timebands/_sidebar.html.erb
@@ -0,0 +1,11 @@
+<% content_for :sidebar do %>
+ <ul class="actions">
+ <li><%= link_to t('timebands.actions.new'), new_referential_timeband_path(@referential), :class => "add" %></li>
+ <% if @timeband %>
+ <li><%= link_to t('timebands.actions.edit'), edit_referential_timeband_path(@referential, @timeband), :class => "edit" %></li>
+ <li><%= link_to t('timebands.actions.destroy'), referential_timeband_path(@referential, @timeband), :method => :delete, :data => {:confirm => t('timebands.actions.destroy_confirm')}, :class => "remove" %></li>
+ <% end %>
+ </ul>
+<% end %>
+
+
diff --git a/app/views/timebands/edit.html.erb b/app/views/timebands/edit.html.erb
new file mode 100644
index 000000000..bc2c73ace
--- /dev/null
+++ b/app/views/timebands/edit.html.erb
@@ -0,0 +1,3 @@
+<%= title_tag t('timebands.edit.title', timeband: @timeband.name) %>
+
+<%= render "form" %>
diff --git a/app/views/timebands/index.html.erb b/app/views/timebands/index.html.erb
new file mode 100644
index 000000000..54be52675
--- /dev/null
+++ b/app/views/timebands/index.html.erb
@@ -0,0 +1,29 @@
+<%= title_tag t('timebands.index.title') %>
+
+<% if @timebands.any? %>
+ <table class="table table-striped table-condensed">
+ <thead>
+ <tr>
+ <th><%= t('activerecord.attributes.timeband.name') %></th>
+ <th><%= t('activerecord.attributes.timeband.start_time') %></th>
+ <th><%= t('activerecord.attributes.timeband.end_time') %></th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody>
+ <% @timebands.each do |timeband| %>
+ <tr>
+ <td><%= link_to timeband.name, referential_timeband_path(@referential, timeband) %></td>
+ <td><%= l(timeband.start_time, format: :hour) %></td>
+ <td><%= l(timeband.end_time, format: :hour) %></td>
+ <td>
+ <%= link_to '', edit_referential_timeband_path(@referential, timeband), :class => "edit" %>
+ <%= link_to '', referential_timeband_path(@referential, timeband), :method => :delete, :data => {:confirm => t('timebands.actions.destroy_confirm')}, :class => "remove" %>
+ </td>
+ </tr>
+ <% end %>
+ </tbody>
+ </table>
+<% end %>
+
+<%= render 'sidebar' %>
diff --git a/app/views/timebands/new.html.erb b/app/views/timebands/new.html.erb
new file mode 100644
index 000000000..c016325d0
--- /dev/null
+++ b/app/views/timebands/new.html.erb
@@ -0,0 +1,3 @@
+<%= title_tag t('timebands.new.title') %>
+
+<%= render "form" %>
diff --git a/app/views/timebands/show.html.erb b/app/views/timebands/show.html.erb
new file mode 100644
index 000000000..1a6171712
--- /dev/null
+++ b/app/views/timebands/show.html.erb
@@ -0,0 +1,12 @@
+<%= title_tag t( 'timebands.show.title', timeband: @timeband.name )%>
+
+<div class="summary">
+ <p>
+ <label><%= @timeband.name %>: </label>
+ <%= l(@timeband.start_time, format: :hour) %>
+ -
+ <%= l(@timeband.end_time, format: :hour) %>
+ </p>
+</div>
+
+<%= render 'sidebar' %>
diff --git a/app/views/vehicle_journey_frequencies/_form_footer.html.erb b/app/views/vehicle_journey_frequencies/_form_footer.html.erb
new file mode 100644
index 000000000..d38f8af0e
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/_form_footer.html.erb
@@ -0,0 +1,14 @@
+<% if vehicle_journey.new_record? %>
+ <%= javascript_include_tag new_referential_line_route_vehicle_journey_frequency_path(
+ @referential,
+ @line,
+ @route,
+ format: :js) %>
+<% else %>
+ <%= javascript_include_tag edit_referential_line_route_vehicle_journey_frequency_path(
+ @referential,
+ @line,
+ @route,
+ vehicle_journey,
+ format: :js) %>
+<% end %>
diff --git a/app/views/vehicle_journey_frequencies/_form_vehicle_journey_at_stops.html.erb b/app/views/vehicle_journey_frequencies/_form_vehicle_journey_at_stops.html.erb
new file mode 100644
index 000000000..7f503e547
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/_form_vehicle_journey_at_stops.html.erb
@@ -0,0 +1,59 @@
+<li class="input">
+ <%= form.label vehicle_journey.human_attribute_name(:vehicle_journey_at_stop_ids), class: 'label' %>
+ <table class="table-striped ce-TimeBandFormTable">
+ <thead>
+ <tr>
+ <th>
+ <%= t('vehicle_journeys.form.stop_title') %>
+ </th>
+ <th></th>
+ <th>
+ <%= t('vehicle_journeys.form.arrival') %>
+ </th>
+ <th>
+ <%= t('vehicle_journeys.form.departure') %>
+ </th>
+ </tr>
+ </thead>
+ <tbody class="journey_pattern_dependent_list">
+ <%= 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 } %>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td></td>
+ <td></td>
+ <td>
+ <%= button_tag 'data-ce-action' => 'to_departures', class: 'ce-hide btn btn-primary' do %>
+ <%= t('vehicle_journeys.form.to_departures').html_safe %>
+ <i class="fa fa-angle-double-right"></i>
+ <% end %>
+ <td>
+ <%= button_tag 'data-ce-action' => 'to_arrivals', class: 'ce-hide btn btn-primary' do %>
+ <i class="fa fa-angle-double-left"></i>
+ <%= t('vehicle_journeys.form.to_arrivals').html_safe %>
+ <% end %>
+ </td>
+ </tr>
+ </tfoot>
+ </table>
+</li>
+
+<li class="input">
+ <%= form.label vehicle_journey.human_attribute_name(:journey_frequency_ids), class: 'label' %>
+ <ul class="ce-FrequencyFormFields">
+ <li><%= t('activerecord.attributes.journey_frequency.timeband') %></li>
+ <li><%= t('activerecord.attributes.journey_frequency.first_departure_time') %></li>
+ <li><%= t('activerecord.attributes.journey_frequency.last_departure_time') %></li>
+ <li><%= t('activerecord.attributes.journey_frequency.scheduled_headway_interval') %></li>
+ <li></li>
+ <li></li>
+ </ul>
+ <%= form.semantic_fields_for :journey_frequencies do |journey_frequency| %>
+ <%= render 'journey_frequency_fields', f: journey_frequency %>
+ <% end %>
+ <div class="actions-add-fields">
+ <%= link_to_add_association t('journey_frequencies.form.add_line'), form, :journey_frequencies, class: 'btn btn-primary' %>
+ </div>
+</li>
diff --git a/app/views/vehicle_journey_frequencies/_journey_frequency_fields.html.erb b/app/views/vehicle_journey_frequencies/_journey_frequency_fields.html.erb
new file mode 100644
index 000000000..9370fc8d3
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/_journey_frequency_fields.html.erb
@@ -0,0 +1,15 @@
+<div class="nested-fields">
+ <ul class="ce-FrequencyFormFields">
+ <%= f.input :timeband, collection: Chouette::Timeband.all.map{ |timeband| [timeband.fullname, timeband.id] }, label: false %>
+ <%= f.input :first_departure_time, label: false %>
+ <%= f.input :last_departure_time, label: false %>
+ <%= f.input :scheduled_headway_interval, label: false %>
+ <%= f.input :exact_time, label: t('activerecord.attributes.journey_frequency.exact_time') %>
+ <li>
+ <label class="label"></label>
+ <%= link_to_remove_association f do %>
+ <i class="fa fa-trash"></i>
+ <% end %>
+ </li>
+ </ul>
+</div>
diff --git a/app/views/vehicle_journey_frequencies/_show_journey_frequencies.html.erb b/app/views/vehicle_journey_frequencies/_show_journey_frequencies.html.erb
new file mode 100644
index 000000000..328c702f9
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/_show_journey_frequencies.html.erb
@@ -0,0 +1,28 @@
+<h3><%= t('vehicle_journeys.show.journey_frequencies') %></h3>
+<div class="journey_frequencies content">
+ <table class="table table-hover table-striped">
+ <thead>
+ <tr>
+ <th><%= t('activerecord.attributes.journey_frequency.timeband') %></th>
+ <th><%= t('activerecord.attributes.journey_frequency.first_departure_time') %></th>
+ <th><%= t('activerecord.attributes.journey_frequency.last_departure_time') %></th>
+ <th><%= t('activerecord.attributes.journey_frequency.scheduled_headway_interval') %></th>
+ <th><%= t('activerecord.attributes.journey_frequency.exact_time') %></th>
+ </tr>
+ <thead>
+ <tbody>
+ <% @vehicle_journey_frequency.journey_frequencies.each do |journey_frequency| %>
+ <tr class="<%= cycle :odd, :even %>">
+ <td>
+ <%= link_to journey_frequency.timeband.fullname,
+ referential_timeband_path(@referential, journey_frequency.timeband) if journey_frequency.timeband %>
+ </td>
+ <td><%= l(journey_frequency.first_departure_time, format: :hour) %></td>
+ <td><%= l(journey_frequency.last_departure_time, format: :hour) %></td>
+ <td><%= l(journey_frequency.scheduled_headway_interval, format: :hour) %></td>
+ <td><%= '<i class="fa fa-check"></i>'.html_safe if journey_frequency.exact_time %></td>
+ </tr>
+ <% end %>
+ </tbody>
+ </table>
+</div>
diff --git a/app/views/vehicle_journey_frequencies/_show_sidebar.html.erb b/app/views/vehicle_journey_frequencies/_show_sidebar.html.erb
new file mode 100644
index 000000000..2a7be143c
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/_show_sidebar.html.erb
@@ -0,0 +1,23 @@
+<% 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_journey_frequency_path(@referential, @line, @route), class: "add" %>
+ </li>
+ <li>
+ <%= link_to t('vehicle_journeys.actions.edit_frequency'),
+ edit_referential_line_route_vehicle_journey_frequency_path(@referential, @line, @route, @vehicle_journey_frequency),
+ class: "edit" %>
+ </li>
+ <li>
+ <%= link_to t('vehicle_journeys.actions.destroy'),
+ referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey_frequency),
+ method: :delete, data: { confirm: t('vehicle_journeys.actions.destroy_confirm') }, class: "remove" %>
+ </li>
+ </ul>
+ <%= creation_tag(@vehicle_journey_frequency) %>
+<% end %>
diff --git a/app/views/vehicle_journey_frequencies/_show_vehicle_journey_at_stops.html.erb b/app/views/vehicle_journey_frequencies/_show_vehicle_journey_at_stops.html.erb
new file mode 100644
index 000000000..0a91a8af3
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/_show_vehicle_journey_at_stops.html.erb
@@ -0,0 +1,29 @@
+<div class="vehicle_journey_at_stops content">
+ <table class="table-striped ce-TimeBandFormTable">
+ <thead>
+ <tr>
+ <th class="stop title" ><%= t('vehicle_journeys.show.stop_title') %></th>
+ <th></th>
+ <th class="hour title"><%= t('vehicle_journeys.show.arrival') %></th>
+ <th class="hour title"><%= t('vehicle_journeys.show.departure') %></th>
+ </tr>
+ <thead>
+ <tbody>
+ <% @vehicle_journey_frequency.vehicle_journey_at_stops.each do |vjas| %>
+ <tr class="<%= cycle :odd, :even %>">
+ <td><%= link_to vjas.stop_point.stop_area.name, [@referential, vjas.stop_point.stop_area] %></td>
+ <td class="ce-TimeBandFormTable-circleLine">
+ <span class="ce-TimeBandFormTable-circle"></span>
+ <span class="ce-TimeBandFormTable-line"></span>
+ </td>
+ <td class="hour <%= 'missing' if vjas.arrival_time.nil? %>">
+ <%= l(vjas.arrival_time, format: :hour) if vjas.arrival_time %>
+ </td>
+ <td class="hour <%= 'missing' if vjas.departure_time.nil? %>">
+ <%= l(vjas.departure_time, format: :hour) if vjas.departure_time %>
+ </td>
+ </tr>
+ <% end %>
+ </tbody>
+ </table>
+</div>
diff --git a/app/views/vehicle_journey_frequencies/_vehicle_journey_at_stop_fields.html.erb b/app/views/vehicle_journey_frequencies/_vehicle_journey_at_stop_fields.html.erb
new file mode 100644
index 000000000..5a4ed7382
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/_vehicle_journey_at_stop_fields.html.erb
@@ -0,0 +1,52 @@
+<%
+ 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 class="time input optional <%= 'no_stop' if vjas._destroy %> <%= cycle :odd, :even %>" >
+ <td>
+ <%= {
+ id: vjas.id,
+ _destroy: (vjas._destroy ? 1 : 0),
+ stop_point_id: vjas.stop_point_id,
+ :'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_frequency[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 class="arrival_time <%= 'missing' unless vjas.arrival_time %> <%= 'invalid_position' if vjas.errors[:arrival_time].present? %>">
+ <%= select_hour(vjas.arrival_time ? vjas.arrival_time.hour : 0,
+ {
+ prefix: 'vehicle_journey_frequency',
+ field_name: "vehicle_journey_at_stops_attributes[#{vehicle_journey_at_stop_counter}][arrival_time(4i)]"
+ }, class: 'hour', tabindex: tab_counter_arrival + 1) %>
+ <%= select_minute(vjas.arrival_time ? vjas.arrival_time.min : 0,
+ {
+ prefix: 'vehicle_journey_frequency',
+ field_name: "vehicle_journey_at_stops_attributes[#{vehicle_journey_at_stop_counter}][arrival_time(5i)]"
+ }, class: 'minute', tabindex: tab_counter_arrival + 2) %>
+ </td>
+ <td class="departure_time <%= 'missing' unless vjas.departure_time %> <%= 'invalid_position' if vjas.errors[:departure_time].present? %>">
+ <%= select_hour(vjas.departure_time ? vjas.departure_time.hour : 0,
+ {
+ prefix: 'vehicle_journey_frequency',
+ field_name: "vehicle_journey_at_stops_attributes[#{vehicle_journey_at_stop_counter}][departure_time(4i)]"
+ }, class: 'hour', tabindex: tab_counter_departure + 1) %>
+ <%= select_minute(vjas.departure_time ? vjas.departure_time.min : 0,
+ {
+ prefix: 'vehicle_journey_frequency',
+ field_name: "vehicle_journey_at_stops_attributes[#{vehicle_journey_at_stop_counter}][departure_time(5i)]"
+ }, class: 'minute', tabindex: tab_counter_departure + 2) %>
+ </td>
+</tr>
diff --git a/app/views/vehicle_journey_frequencies/_vehicle_journeys_matrix.html.erb b/app/views/vehicle_journey_frequencies/_vehicle_journeys_matrix.html.erb
new file mode 100644
index 000000000..c023f9cfb
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/_vehicle_journeys_matrix.html.erb
@@ -0,0 +1,22 @@
+<ul class="ce-VehicleJourneyFrequenciesMatrix">
+<% @vehicle_journeys.each do |vj| %>
+ <li>
+ <ul>
+ <% vj.journey_frequencies.each do |jf| %>
+ <% left, width = journey_frequency_percent(jf) %>
+ <li style="left:<%= left %>%;width:<%= width %>%"
+ data-style="primary" data-container="body" rel="popover" data-toggle="popover"
+ data-title='<%= link_to(vehicle_title(vj, jf), [@referential, @line, @route, vj] ) %>
+ <%= link_to('<span class="fa fa-pencil"></span>'.html_safe,
+ send("edit_referential_line_route_vehicle_journey#{'_frequency' if vj.frequency?}_path", @referential, @line, @route, vj),
+ :class => "btn btn-default btn-sm" ) %>'
+ data-placement= "top"
+ data-content='<%= render 'vehicle_journeys/show_popover', { vehicle_journey: vj } %>'>
+ <span class="ce-VehicleJourneyFrequenciesMatrix-firstDepartureTime"><%= l(jf.first_departure_time, format: :hour) %></span>
+ <span class="ce-VehicleJourneyFrequenciesMatrix-lastDepartureTime"><%= l(jf.last_departure_time, format: :hour) %></span>
+ </li>
+ <% end %>
+ </ul>
+ </li>
+<% end %>
+</ul>
diff --git a/app/views/vehicle_journey_frequencies/edit.html.erb b/app/views/vehicle_journey_frequencies/edit.html.erb
new file mode 100644
index 000000000..1bc1e6d88
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/edit.html.erb
@@ -0,0 +1,7 @@
+<%= title_tag edit_vehicle_title(@vehicle_journey_frequency) %>
+
+<%= render 'vehicle_journeys/form', vehicle_journey: @vehicle_journey_frequency,
+ form_url: referential_line_route_vehicle_journey_frequency_path(@referential,
+ @line,
+ @route,
+ id: @vehicle_journey_frequency) %>
diff --git a/app/views/vehicle_journey_frequencies/edit.js.erb b/app/views/vehicle_journey_frequencies/edit.js.erb
new file mode 100644
index 000000000..f5aaf8ad7
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/edit.js.erb
@@ -0,0 +1,10 @@
+$(document).ready(function() {
+ $("#vehicle_journey_frequency_journey_pattern_id").change(
+ function(){
+ var url = "<%= select_journey_pattern_referential_line_route_vehicle_journey_path( @referential, @line, @route, @vehicle_journey_frequency)%>?journey_pattern_id="+
+ $("#vehicle_journey_frequency_journey_pattern_input select option:selected").attr("value");
+ url += "&journey_category=frequency";
+ $.get(url);
+ }
+ );
+});
diff --git a/app/views/vehicle_journey_frequencies/new.html.erb b/app/views/vehicle_journey_frequencies/new.html.erb
new file mode 100644
index 000000000..677605276
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/new.html.erb
@@ -0,0 +1,6 @@
+<%= title_tag t('vehicle_journeys.new.title_frequency') %>
+
+<%= render 'vehicle_journeys/form', vehicle_journey: @vehicle_journey_frequency,
+ form_url: referential_line_route_vehicle_journey_frequencies_path(@referential,
+ @line,
+ @route) %>
diff --git a/app/views/vehicle_journey_frequencies/new.js.erb b/app/views/vehicle_journey_frequencies/new.js.erb
new file mode 100644
index 000000000..b5fc75aef
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/new.js.erb
@@ -0,0 +1,13 @@
+$(document).ready(function() {
+ $("#vehicle_journey_frequency_journey_pattern_id").change(
+ function(){
+ var vehicle_journey_journey_pattern_id = $("#vehicle_journey_frequency_journey_pattern_input select option:selected").attr("value");
+ if (vehicle_journey_journey_pattern_id > 0) {
+ var url = "<%= referential_line_route_journey_patterns_path(@referential.id,@line.id,@route.id) %>";
+ url = url + "/" + vehicle_journey_journey_pattern_id +
+ "/new_vehicle_journey?journey_category=frequency";
+ $.get(url);
+ }
+ }
+ );
+});
diff --git a/app/views/vehicle_journey_frequencies/select_journey_pattern.js.erb b/app/views/vehicle_journey_frequencies/select_journey_pattern.js.erb
new file mode 100644
index 000000000..8fe20ed37
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/select_journey_pattern.js.erb
@@ -0,0 +1,5 @@
+$('.journey_pattern_dependent_list').html('<%= escape_javascript(
+ render(partial: 'vehicle_journey_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/app/views/vehicle_journey_frequencies/show.html.erb b/app/views/vehicle_journey_frequencies/show.html.erb
new file mode 100644
index 000000000..7939ae319
--- /dev/null
+++ b/app/views/vehicle_journey_frequencies/show.html.erb
@@ -0,0 +1,3 @@
+<%= render 'vehicle_journeys/show_details', vehicle_journey: @vehicle_journey_frequency %>
+<%= render 'show_journey_frequencies' %>
+<%= render 'show_sidebar' %>
diff --git a/app/views/vehicle_journeys/_form.html.erb b/app/views/vehicle_journeys/_form.html.erb
index e4b1ce432..10d9bfeee 100644
--- a/app/views/vehicle_journeys/_form.html.erb
+++ b/app/views/vehicle_journeys/_form.html.erb
@@ -1,4 +1,4 @@
-<%= 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 :journey_pattern, :as => :select, :collection => @route.journey_patterns, :member_label => Proc.new { |jp| journey_name(jp) } %>
<%= form.input :number %>
@@ -6,64 +6,23 @@
<%= form.input :published_journey_identifier %>
<%= form.input :comment %>
<%= form.input :transport_mode_name, :as => :select, :collection => Chouette::Line.transport_modes, :include_blank => true, :member_label => Proc.new { |mode| t("transport_modes.label.#{mode}") } %>
- <%= form.input :mobility_restricted_suitability, :as => :select, :collection => [[@vehicle_journey.human_attribute_name("accessible"), true], [@vehicle_journey.human_attribute_name("not_accessible"), false]], :include_blank => true %>
- <%= form.input :flexible_service, :as => :select, :collection => [[@vehicle_journey.human_attribute_name("on_demand_fs"), true], [@vehicle_journey.human_attribute_name("regular_fs"), false]], :include_blank => true %>
+ <%= form.input :mobility_restricted_suitability, :as => :select, :collection => [[vehicle_journey.human_attribute_name("accessible"), true], [vehicle_journey.human_attribute_name("not_accessible"), false]], :include_blank => true %>
+ <%= form.input :flexible_service, :as => :select, :collection => [[vehicle_journey.human_attribute_name("on_demand_fs"), true], [vehicle_journey.human_attribute_name("regular_fs"), false]], :include_blank => true %>
<%= form.input :status_value %>
<%= form.input :facility %>
<%= form.input :vehicle_type_identifier%>
- <%= form.input :objectid, :required => !@vehicle_journey.new_record?, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.vehicle_journey.objectid")} %>
- <%= form.input :time_table_tokens, :label => t('.time_tables'), :as => :search_time_table, :json => referential_autocomplete_time_tables_path(@referential, :format => :json), :hint_text => t('search_hint'), :no_result_text => t('no_result_text'),:searching_text => t('searching_term'), :input_html => { :"data-pre" => Rabl::Renderer.new( 'autocomplete_time_tables/index', @vehicle_journey.time_tables, :view_path => 'app/views', :format => :json, :scope => :self ).render } %>
+ <%= form.input :objectid, :required => !vehicle_journey.new_record?, :input_html => { :title => t("formtastic.titles#{format_restriction_for_locales(@referential)}.vehicle_journey.objectid")} %>
+ <%= form.input :time_table_tokens, :label => t('.time_tables'), :as => :search_time_table, :json => referential_autocomplete_time_tables_path(@referential, :format => :json), :hint_text => t('search_hint'), :no_result_text => t('no_result_text'),:searching_text => t('searching_term'), :input_html => { :"data-pre" => Rabl::Renderer.new( 'autocomplete_time_tables/index', vehicle_journey.time_tables, :view_path => 'app/views', :format => :json, :scope => :self ).render } %>
<%= form.input :footnote_ids, :as => :check_boxes, :collection => @line.footnotes.map { |f| [ "#{f.code}: #{f.label}", f.id.to_s]} %>
- <li class="input">
- <%= 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', vehicle_journey: vehicle_journey, 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.journey_category}") %>
+ <%= 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', vehicle_journey: vehicle_journey %>
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..c4c51b2b3
--- /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..7e9bc1b38
--- /dev/null
+++ b/app/views/vehicle_journeys/_form_vehicle_journey_at_stops.html.erb
@@ -0,0 +1,49 @@
+<li class="input">
+ <%= 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('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">
+ <%= button_tag 'data-ce-action' => 'to_departures', class: 'ce-hide btn btn-primary' do %>
+ <%= t('vehicle_journeys.form.to_departures').html_safe %>
+ <i class="fa fa-angle-double-right"></i>
+ <% end %>
+ <td class="title"></td>
+ <td class="title">
+ <%= button_tag 'data-ce-action' => 'to_arrivals', class: 'ce-hide btn btn-primary' do %>
+ <i class="fa fa-angle-double-left"></i>
+ <%= t('vehicle_journeys.form.to_arrivals').html_safe %>
+ <% end %>
+ </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/_route_popover.html.erb b/app/views/vehicle_journeys/_route_popover.html.erb
index 1acba5665..27023b625 100644
--- a/app/views/vehicle_journeys/_route_popover.html.erb
+++ b/app/views/vehicle_journeys/_route_popover.html.erb
@@ -1,6 +1,5 @@
<ul>
<% (selected_route.line.routes.limit(10).reject{ |route| route == selected_route}).each do |route| %>
- <li><%= link_to route.name.truncate(30), [@referential, route.line, route, 'vehicle_journeys'] %></li>
+ <li><%= link_to route.name.truncate(30), [@referential, route.line, route, controller_name] %></li>
<% end %>
</ul>
-</p>
diff --git a/app/views/vehicle_journeys/_show_details.html.erb b/app/views/vehicle_journeys/_show_details.html.erb
new file mode 100644
index 000000000..fccf3d210
--- /dev/null
+++ b/app/views/vehicle_journeys/_show_details.html.erb
@@ -0,0 +1,87 @@
+<%= title_tag vehicle_title(vehicle_journey) %>
+
+<div id="modal_translation" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
+ <h4 class="modal-title" id="myModalLabel"><%= t('vehicle_journeys.show.translation_form') %></h4>
+ <div id="translate_form"></div>
+ </div>
+ </div>
+ </div>
+</div>
+
+<div class="vehicle_journey">
+ <div class="summary">
+ <p>
+ <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>
+ <label><%= vehicle_journey.human_attribute_name("number") %>: </label>
+ <%= vehicle_journey.number %>
+ </p>
+ <p>
+ <label><%= vehicle_journey.human_attribute_name("published_journey_name") %>: </label>
+ <%= vehicle_journey.published_journey_name %>
+ </p>
+ <p>
+ <label><%= vehicle_journey.human_attribute_name("published_journey_identifier") %>: </label>
+ <%= vehicle_journey.published_journey_identifier %>
+ </p>
+
+ <p>
+ <label><%= vehicle_journey.human_attribute_name("mobility_restricted_suitability") %>: </label>
+ <% if vehicle_journey.mobility_restricted_suitability.nil? %>
+ <%= vehicle_journey.human_attribute_name("unspecified_mrs") %>
+ <% elsif vehicle_journey.mobility_restricted_suitability? %>
+ <%= vehicle_journey.human_attribute_name("accessible") %>
+ <% else %>
+ <%= vehicle_journey.human_attribute_name("not_accessible") %>
+ <% end %>
+ </p>
+ <p>
+ <label><%= vehicle_journey.human_attribute_name("flexible_service") %>: </label>
+ <% if vehicle_journey.flexible_service.nil? %>
+ <%= vehicle_journey.human_attribute_name("unspecified_fs") %>
+ <% elsif vehicle_journey.flexible_service? %>
+ <%= vehicle_journey.human_attribute_name("on_demand_fs") %>
+ <% else %>
+ <%= vehicle_journey.human_attribute_name("regular_fs") %>
+ <% end %>
+ </p>
+
+ <p>
+ <label><%= vehicle_journey.human_attribute_name("comment") %>: </label>
+ <%= vehicle_journey.comment %>
+ </p>
+ <p>
+ <label><%= vehicle_journey.human_attribute_name("status_value") %>: </label>
+ <%= vehicle_journey.status_value %>
+ </p>
+ <p>
+ <label><%= vehicle_journey.human_attribute_name("facility") %>: </label>
+ <%= vehicle_journey.facility %>
+ </p>
+ <p>
+ <label><%= vehicle_journey.human_attribute_name("vehicle_type_identifier") %>: </label>
+ <%= vehicle_journey.vehicle_type_identifier %>
+ </p>
+ <p>
+ <label><%= vehicle_journey.human_attribute_name("footnote_ids") %>: </label>
+ <ul>
+ <% vehicle_journey.footnotes.each do |footnote| %>
+ <li><%= footnote.code %> : <%= footnote.label %></li>
+ <% end %>
+ </ul>
+ </p>
+ </div>
+</div>
+<h3><%= vehicle_journey.human_attribute_name(:vehicle_journey_at_stop_ids) %></h3>
+<%= render 'show_vehicle_journey_at_stops' %>
+
+<h3><%= t('vehicle_journeys.show.time_tables') %></h3>
+<div class="time_tables paginated_content">
+ <%= paginated_content vehicle_journey.time_tables, "time_tables/time_table", :delete => false %>
+</div>
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..5ab7d449a
--- /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_journey_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..cb4a95263
--- /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('vehicle_journeys.show.arrival') %></th>
+ <th class="stop title" ><%= t('vehicle_journeys.show.stop_title') %></th>
+ <th class="hour title"><%= t('vehicle_journeys.show.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..11260cd7b 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_journey_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/_vehicle_journeys.html.erb b/app/views/vehicle_journeys/_vehicle_journeys.html.erb
index ecdb12c6e..3bff10b59 100644
--- a/app/views/vehicle_journeys/_vehicle_journeys.html.erb
+++ b/app/views/vehicle_journeys/_vehicle_journeys.html.erb
@@ -1,39 +1,21 @@
<div class="page_info">
- <span class="search"> <%= t("will_paginate.page_entries_info.search") %></span> <%= page_entries_info @vehicle_journeys %>
+ <span class="search"><%= t("will_paginate.page_entries_info.search") %></span>
+ <%= page_entries_info @vehicle_journeys %>
+ <span class="pull-right">
+ <i class="fa fa-clock-o"></i>
+ <% if controller_name == 'vehicle_journey_frequencies' %>
+ <%= link_to t("vehicle_journeys.actions.show"), referential_line_route_vehicle_journeys_path(@referential, @line, @route) %>
+ <% else %>
+ <%= link_to t("vehicle_journey_frequencies.actions.show"), referential_line_route_vehicle_journey_frequencies_path(@referential, @line, @route) %>
+ <% end %>
+ </span>
</div>
<div class="pagination">
<%= will_paginate @vehicle_journeys, :container => false, renderer: RemoteBootstrapPaginationLinkRenderer %>
</div>
<div class="vehicle_journeys paginated_content">
- <table class="table table-hover table-striped">
- <thead>
- <tr>
- <th class="title">
- <button data-style="primary" data-container="body" rel="popover" data-toggle="popover" title='<%= t(".line_routes") %>' data-placement="top" data-content='<%= render( partial: "route_popover", :locals => { :selected_route => @route }) %>' class="route_popover btn btn-default btn-sm"><i class='fa fa-search'></i><%= Chouette::Route.model_name.human.capitalize %></button>
- </th>
- <% @vehicle_journeys.each do |vj| %>
- <th class="vehicle_journey">
- <button data-style="primary" data-container="body" rel="popover" data-toggle="popover" data-title='<%= link_to(vehicle_title(vj), [@referential, @line, @route, vj] ) %> <%= link_to('<span class="fa fa-pencil"></span>'.html_safe, ["edit", @referential, @line, @route, vj], :class => "btn btn-default btn-sm" ) %>' data-placement= "top" data-content='<%= render( partial: "show_popover", :locals => { :vehicle_journey => vj }) %>' class="vehicle_journey_popover btn btn-default btn-sm"><i class='fa fa-search'></i></button>
- </th>
- <% end %>
- </tr>
- </thead>
- <tbody>
- <% @route.stop_points.each_with_index do |sp, index| %>
- <tr class="<%= cycle('odd', 'even') %>">
- <td class="stop_area"><%= sp.stop_area.name %></td>
- <% @vehicle_journeys.each do |vj| %>
- <td class="hours <%= missing_time_check(@matrix["#{vj.id}-#{sp.id}"]) %>">
- <%= (@matrix["#{vj.id}-#{sp.id}"] && @matrix["#{vj.id}-#{sp.id}"].departure_time) ? l( @matrix["#{vj.id}-#{sp.id}"].departure_time, :format => :hour) : "--" %>
- </td>
- <% end %>
- </tr>
- <% end %>
- </tbody>
- </table>
+ <%= render 'vehicle_journeys_matrix' %>
</div>
<div class="pagination">
<%= will_paginate @vehicle_journeys, :container => false, renderer: RemoteBootstrapPaginationLinkRenderer %>
</div>
-
-
diff --git a/app/views/vehicle_journeys/_vehicle_journeys_matrix.html.erb b/app/views/vehicle_journeys/_vehicle_journeys_matrix.html.erb
new file mode 100644
index 000000000..3254430cd
--- /dev/null
+++ b/app/views/vehicle_journeys/_vehicle_journeys_matrix.html.erb
@@ -0,0 +1,40 @@
+<table class="table table-hover table-striped">
+ <thead>
+ <tr>
+ <th class="title">
+ <button data-style="primary" data-container="body" rel="popover" data-toggle="popover" title='<%= t(".line_routes") %>'
+ data-placement="top" data-content='<%= render( partial: "route_popover", :locals => { :selected_route => @route }) %>'
+ class="route_popover btn btn-default btn-sm">
+ <i class='fa fa-search'></i>
+ <%= Chouette::Route.model_name.human.capitalize %>
+ </button>
+ </th>
+ <% @vehicle_journeys.each do |vj| %>
+ <th class="vehicle_journey">
+ <button data-style="primary" data-container="body" rel="popover" data-toggle="popover"
+ data-title='<%= link_to(vehicle_title(vj), [@referential, @line, @route, vj] ) %>
+ <%= link_to('<span class="fa fa-pencil"></span>'.html_safe,
+ send("edit_referential_line_route_vehicle_journey#{'_frequency' if vj.frequency?}_path", @referential, @line, @route, vj),
+ :class => "btn btn-default btn-sm" ) %>'
+ data-placement= "top"
+ data-content='<%= render( partial: "show_popover", :locals => { :vehicle_journey => vj }) %>'
+ class="vehicle_journey_popover btn btn-default btn-sm">
+ <i class='fa fa-search'></i>
+ </button>
+ </th>
+ <% end %>
+ </tr>
+ </thead>
+ <tbody>
+ <% @route.stop_points.each_with_index do |sp, index| %>
+ <tr class="<%= cycle('odd', 'even') %>">
+ <td class="stop_area"><%= sp.stop_area.name %></td>
+ <% @vehicle_journeys.each do |vj| %>
+ <td class="hours <%= missing_time_check(@matrix["#{vj.id}-#{sp.id}"]) %><%= ' ce-VehicleJourneyBlock-frequency' if vj.frequency? %>">
+ <%= (@matrix["#{vj.id}-#{sp.id}"] && @matrix["#{vj.id}-#{sp.id}"].departure_time) ? l( @matrix["#{vj.id}-#{sp.id}"].departure_time, :format => :hour) : "--" %>
+ </td>
+ <% end %>
+ </tr>
+ <% end %>
+ </tbody>
+</table>
diff --git a/app/views/vehicle_journeys/edit.html.erb b/app/views/vehicle_journeys/edit.html.erb
index 51653a34a..0d3a2db96 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', vehicle_journey: @vehicle_journey, form_url: referential_line_route_vehicle_journey_path(@referential, @line, @route, @vehicle_journey) %>
+
diff --git a/app/views/vehicle_journeys/index.html.erb b/app/views/vehicle_journeys/index.html.erb
index 13126b2e1..3fd123c79 100644
--- a/app/views/vehicle_journeys/index.html.erb
+++ b/app/views/vehicle_journeys/index.html.erb
@@ -14,30 +14,31 @@
<div id="advanced_search" class="panel-collapse collapse">
<div class="panel-body">
<div>
- <%= f.label :time_tables_id_not_eq, "Sans calendrier" %>
- <%= f.check_box :time_tables_id_not_eq %>
+ <%= f.label :time_tables_id_not_eq, "Sans calendrier" %>
+ <%= f.check_box :time_tables_id_not_eq %>
- <span class="time_tables_id_eq">
- <%= f.label :time_tables_id_eq, "Sélectionner calendriers" %>
- <%= f.text_field :time_tables_id_eq, :input_html => { :"data-pre" => [].to_json} %>
- </span>
+ <span class="time_tables_id_eq">
+ <%= f.label :time_tables_id_eq, "Sélectionner calendriers" %>
+ <%= f.text_field :time_tables_id_eq, :input_html => { :"data-pre" => [].to_json} %>
+ </span>
</div>
+ <% if controller_name != 'vehicle_journey_frequencies' %>
+ <div>
+ <%= f.label :vehicle_journey_at_stops_departure_time_not_eq, "Sans horaire" %>
+ <%= f.check_box :vehicle_journey_at_stops_departure_time_not_eq %>
- <div>
- <%= f.label :vehicle_journey_at_stops_departure_time_not_eq, "Sans horaire" %>
- <%= f.check_box :vehicle_journey_at_stops_departure_time_not_eq %>
-
- <span class="vehicle_journey_at_stops_departure_time_gt">
- <input name=<%= "q[vehicle_journey_at_stops_departure_time_gt(3i)]" %> type="hidden" value="1">
- <input name=<%= "q[vehicle_journey_at_stops_departure_time_gt(2i)]" %> type="hidden" value="1">
- <input name=<%= "q[vehicle_journey_at_stops_departure_time_gt(1i)]" %> type="hidden" value="2000">
- <%= f.label :vehicle_journey_at_stops_departure_time_gt, t('.time_range') %>
- <%= select_hour(@q.send( "vehicle_journey_at_stops_departure_time_gt") ? @q.send( "vehicle_journey_at_stops_departure_time_gt").hour : 0,
- :prefix => "q", :field_name => "vehicle_journey_at_stops_departure_time_gt(4i)") %>
- <%= select_minute(@q.send( "vehicle_journey_at_stops_departure_time_gt") ? @q.send( "vehicle_journey_at_stops_departure_time_gt").min : 0,
- :prefix => "q", :field_name => "vehicle_journey_at_stops_departure_time_gt(5i)") %>
- </span>
- </div>
+ <span class="vehicle_journey_at_stops_departure_time_gt">
+ <input name=<%= "q[vehicle_journey_at_stops_departure_time_gt(3i)]" %> type="hidden" value="1">
+ <input name=<%= "q[vehicle_journey_at_stops_departure_time_gt(2i)]" %> type="hidden" value="1">
+ <input name=<%= "q[vehicle_journey_at_stops_departure_time_gt(1i)]" %> type="hidden" value="2000">
+ <%= f.label :vehicle_journey_at_stops_departure_time_gt, t('.time_range') %>
+ <%= select_hour(@q.send( "vehicle_journey_at_stops_departure_time_gt") ? @q.send( "vehicle_journey_at_stops_departure_time_gt").hour : 0,
+ :prefix => "q", :field_name => "vehicle_journey_at_stops_departure_time_gt(4i)") %>
+ <%= select_minute(@q.send( "vehicle_journey_at_stops_departure_time_gt") ? @q.send( "vehicle_journey_at_stops_departure_time_gt").min : 0,
+ :prefix => "q", :field_name => "vehicle_journey_at_stops_departure_time_gt(5i)") %>
+ </span>
+ </div>
+ <% end %>
</div>
</div>
</div>
diff --git a/app/views/vehicle_journeys/new.html.erb b/app/views/vehicle_journeys/new.html.erb
index a32e9cc31..d2e9d7c4c 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 'form', { vehicle_journey: @vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(@referential, @line, @route, @vehicle_journey) } %>
diff --git a/app/views/vehicle_journeys/new.js.erb b/app/views/vehicle_journeys/new.js.erb
index 65e5dfccb..160e7a34b 100644
--- a/app/views/vehicle_journeys/new.js.erb
+++ b/app/views/vehicle_journeys/new.js.erb
@@ -1,10 +1,13 @@
$(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";
- $.get(url);
+ var vehicle_journey_journey_pattern_id = $("#vehicle_journey_journey_pattern_input select option:selected").attr("value");
+ if (vehicle_journey_journey_pattern_id > 0) {
+ var url = "<%= referential_line_route_journey_patterns_path(@referential.id,@line.id,@route.id) %>";
+ url = url + "/" + vehicle_journey_journey_pattern_id +
+ "/new_vehicle_journey";
+ $.get(url);
+ }
}
)
});
diff --git a/app/views/vehicle_journeys/show.html.erb b/app/views/vehicle_journeys/show.html.erb
index 695b5c8b5..4bf814bbe 100644
--- a/app/views/vehicle_journeys/show.html.erb
+++ b/app/views/vehicle_journeys/show.html.erb
@@ -1,119 +1,2 @@
-<%= title_tag vehicle_title(@vehicle_journey) %>
-
-<div id="modal_translation" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
- <h4 class="modal-title" id="myModalLabel"><%= t('.translation_form') %></h4>
- <div id="translate_form"></div>
- </div>
- </div>
- </div>
-</div>
-
-<div class="vehicle_journey">
- <div class="summary">
- <p>
- <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>
- <label><%= @vehicle_journey.human_attribute_name("number") %>: </label>
- <%= @vehicle_journey.number %>
- </p>
- <p>
- <label><%= @vehicle_journey.human_attribute_name("published_journey_name") %>: </label>
- <%= @vehicle_journey.published_journey_name %>
- </p>
- <p>
- <label><%= @vehicle_journey.human_attribute_name("published_journey_identifier") %>: </label>
- <%= @vehicle_journey.published_journey_identifier %>
- </p>
-
- <p>
- <label><%= @vehicle_journey.human_attribute_name("mobility_restricted_suitability") %>: </label>
- <% if @vehicle_journey.mobility_restricted_suitability.nil? %>
- <%= @vehicle_journey.human_attribute_name("unspecified_mrs") %>
- <% elsif @vehicle_journey.mobility_restricted_suitability? %>
- <%= @vehicle_journey.human_attribute_name("accessible") %>
- <% else %>
- <%= @vehicle_journey.human_attribute_name("not_accessible") %>
- <% end %>
- </p>
- <p>
- <label><%= @vehicle_journey.human_attribute_name("flexible_service") %>: </label>
- <% if @vehicle_journey.flexible_service.nil? %>
- <%= @vehicle_journey.human_attribute_name("unspecified_fs") %>
- <% elsif @vehicle_journey.flexible_service? %>
- <%= @vehicle_journey.human_attribute_name("on_demand_fs") %>
- <% else %>
- <%= @vehicle_journey.human_attribute_name("regular_fs") %>
- <% end %>
- </p>
-
- <p>
- <label><%= @vehicle_journey.human_attribute_name("comment") %>: </label>
- <%= @vehicle_journey.comment %>
- </p>
- <p>
- <label><%= @vehicle_journey.human_attribute_name("status_value") %>: </label>
- <%= @vehicle_journey.status_value %>
- </p>
- <p>
- <label><%= @vehicle_journey.human_attribute_name("facility") %>: </label>
- <%= @vehicle_journey.facility %>
- </p>
- <p>
- <label><%= @vehicle_journey.human_attribute_name("vehicle_type_identifier") %>: </label>
- <%= @vehicle_journey.vehicle_type_identifier %>
- </p>
- <p>
- <label><%= @vehicle_journey.human_attribute_name("footnote_ids") %>: </label>
- <ul>
- <% @vehicle_journey.footnotes.each do |footnote| %>
- <li><%= footnote.code %> : <%= footnote.label %></li>
- <% end %>
- </ul>
- </p>
- </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>
-
-<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_details', vehicle_journey: @vehicle_journey %>
+<%= render 'show_sidebar' %>
diff --git a/config/locales/breadcrumbs.yml b/config/locales/breadcrumbs.yml
index ccf97c414..c40e5dd9b 100644
--- a/config/locales/breadcrumbs.yml
+++ b/config/locales/breadcrumbs.yml
@@ -1,10 +1,12 @@
en:
breadcrumbs:
vehicle_journeys: "Passing times"
+ vehicle_journey_frequencies: "Times bands"
referentials: "Home"
users: "Users"
fr:
breadcrumbs:
vehicle_journeys: "Horaires"
+ vehicle_journey_frequencies: "Plages horaires"
referentials: "Accueil"
users: "Utilisateurs"
diff --git a/config/locales/journey_frequencies.en.yml b/config/locales/journey_frequencies.en.yml
new file mode 100644
index 000000000..ad4a92432
--- /dev/null
+++ b/config/locales/journey_frequencies.en.yml
@@ -0,0 +1,13 @@
+en:
+ journey_frequencies:
+ time_band: Time band
+ form:
+ add_line: Add a line
+ activerecord:
+ attributes:
+ journey_frequency:
+ first_departure_time: First departure
+ last_departure_time: Last departure
+ scheduled_headway_interval: Interval
+ exact_time: Exact?
+ timeband: Time bands
diff --git a/config/locales/journey_frequencies.fr.yml b/config/locales/journey_frequencies.fr.yml
new file mode 100644
index 000000000..7bfd6de69
--- /dev/null
+++ b/config/locales/journey_frequencies.fr.yml
@@ -0,0 +1,13 @@
+fr:
+ journey_frequencies:
+ time_band: Plages horaires
+ form:
+ add_line: Ajouter une ligne
+ activerecord:
+ attributes:
+ journey_frequency:
+ first_departure_time: Premier départ
+ last_departure_time: Dernier départ
+ scheduled_headway_interval: Intervalle
+ exact_time: Exact ?
+ timeband: Plage horaires
diff --git a/config/locales/lines_en.yml b/config/locales/lines_en.yml
index baaad6bbf..b0200240b 100644
--- a/config/locales/lines_en.yml
+++ b/config/locales/lines_en.yml
@@ -37,7 +37,7 @@ en:
deselect_all: "Deselect all"
unset: "undefined"
advanced_search: "Advanced Search"
- color: "Colors"
+ color: "Color"
form:
group_of_lines: "Associated groups of lines"
no_group_of_line: "No group of line"
diff --git a/config/locales/lines_fr.yml b/config/locales/lines_fr.yml
index 3661f6856..ad0bee6c2 100644
--- a/config/locales/lines_fr.yml
+++ b/config/locales/lines_fr.yml
@@ -37,7 +37,7 @@ fr:
deselect_all: "Tout désélectionner"
unset: "non défini"
advanced_search: "Recherche avancée"
- color: "Couleurs"
+ color: "Couleur"
form:
group_of_lines: "Groupes de lignes associés"
no_group_of_line: "Aucun groupe de lignes"
diff --git a/config/locales/referentials.yml b/config/locales/referentials.yml
index 22e923be7..abc56ae51 100644
--- a/config/locales/referentials.yml
+++ b/config/locales/referentials.yml
@@ -68,6 +68,7 @@ en:
rule_parameter_sets: "Rule parameters sets"
data_format_restrictions: "Data format constraint"
data_format: "Favorite format for export"
+ timebands: "Time bands"
formtastic:
titles:
referential:
@@ -146,6 +147,7 @@ fr:
rule_parameter_sets: "Jeux de paramètres"
data_format_restrictions: "Format d'export privilégié"
data_format: "Format d'export privilégié"
+ timebands: "Plages horaires"
formtastic:
titles:
referential:
diff --git a/config/locales/timebands.en.yml b/config/locales/timebands.en.yml
new file mode 100644
index 000000000..fae2f1d30
--- /dev/null
+++ b/config/locales/timebands.en.yml
@@ -0,0 +1,26 @@
+en:
+ timebands:
+ actions:
+ new: "Add a time band"
+ edit: "Edit a time band"
+ destroy: "Delete a time band"
+ destroy_confirm: "Thank you to confirm the deletion of these time band."
+ new:
+ title: "Add a time band"
+ edit:
+ title: "Edit this time band %{timeband}"
+ show:
+ title: "Time band %{timeband}"
+ index:
+ title: "Time bands"
+ activerecord:
+ models:
+ timeband:
+ zero: "Time band"
+ one: "Time band"
+ other: "Time bands"
+ attributes:
+ timeband:
+ name: "Title"
+ start_time: "Start time"
+ end_time: "End time"
diff --git a/config/locales/timebands.fr.yml b/config/locales/timebands.fr.yml
new file mode 100644
index 000000000..1865d0c39
--- /dev/null
+++ b/config/locales/timebands.fr.yml
@@ -0,0 +1,26 @@
+fr:
+ timebands:
+ actions:
+ new: "Ajouter une plage horaire"
+ edit: "Modifier cette plage horaire"
+ destroy: "Supprimer cette plage horaire"
+ destroy_confirm: "Merci de confirmer la suppression de cette plage horaire."
+ new:
+ title: "Ajouter une plage horaire"
+ edit:
+ title: "Modifier la plage horaire %{timeband}"
+ show:
+ title: Plage horaire %{timeband}
+ index:
+ title: "Plages horaires"
+ activerecord:
+ models:
+ timeband:
+ zero: "plage horaire"
+ one: "plage horaire"
+ other: "plages horaires"
+ attributes:
+ timeband:
+ name: "Titre"
+ start_time: "Heure de début"
+ end_time: "Heure de fin"
diff --git a/config/locales/vehicle_journey_frequencies.en.yml b/config/locales/vehicle_journey_frequencies.en.yml
new file mode 100644
index 000000000..f502ff0ab
--- /dev/null
+++ b/config/locales/vehicle_journey_frequencies.en.yml
@@ -0,0 +1,7 @@
+en:
+ vehicle_journey_frequencies:
+ vehicle_journeys_matrix:
+ line_routes: "Line's routes"
+ actions:
+ index: "Vehicle journey frequency"
+ show: "Show frequency vehicle journey"
diff --git a/config/locales/vehicle_journey_frequencies.fr.yml b/config/locales/vehicle_journey_frequencies.fr.yml
new file mode 100644
index 000000000..d8bc48b4b
--- /dev/null
+++ b/config/locales/vehicle_journey_frequencies.fr.yml
@@ -0,0 +1,7 @@
+fr:
+ vehicle_journey_frequencies:
+ vehicle_journeys_matrix:
+ line_routes: Séquences d'arrêts de la ligne
+ actions:
+ index: "Courses à fréquence"
+ show: "Voir les courses à fréquence"
diff --git a/config/locales/vehicle_journeys.en.yml b/config/locales/vehicle_journeys.en.yml
new file mode 100644
index 000000000..6d51cc8bf
--- /dev/null
+++ b/config/locales/vehicle_journeys.en.yml
@@ -0,0 +1,125 @@
+en:
+ vehicle_journeys:
+ vehicle_journeys_matrix:
+ line_routes: "Line's routes"
+ vehicle_journey:
+ title_stopless: "Vehicle journey %{name}"
+ title: "Vehicle journey leaving from %{stop} at %{time}"
+ vehicle_journey_frequency:
+ title_stopless: "Vehicle journey frequency %{name}"
+ title: "Vehicle journey frequency leaving from %{stop} at %{time}"
+ title_frequency: "Vehicle journey frequency with %{interval}min leaving from %{stop} at %{time_first} to %{time_last}"
+ actions:
+ index: "Vehicle time's board"
+ new: "Add a new timed vehicle journey"
+ new_frequency: "Add a new frequency vehicle journey"
+ edit: "Edit this timed vehicle journey"
+ edit_frequency: "Edit this frequency vehicle journey"
+ destroy: "Remove this vehicle journey"
+ destroy_confirm: "Are you sure you want destroy this vehicle journey?"
+ show: "Show timed vehicle journeys"
+ new:
+ title: "Add a new vehicle journey"
+ title_frequency: "Add a new frequency 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"
+ submit_timed: "Create vehicle journey"
+ submit_frequency: "Create frequency vehicle 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"
+ journey_frequencies: "Interval time duration"
+ 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"
+ journey_frequency_ids: "Interval time duration"
+ 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..98d6c7eb4
--- /dev/null
+++ b/config/locales/vehicle_journeys.fr.yml
@@ -0,0 +1,125 @@
+fr:
+ vehicle_journeys:
+ vehicle_journeys_matrix:
+ line_routes: "Séquences d'arrêts de la ligne"
+ vehicle_journey:
+ title_stopless: "Course %{name}"
+ title: "Course partant de %{stop} à %{time}"
+ vehicle_journey_frequency:
+ title_stopless: "Course à fréquences %{name}"
+ title: "Course à fréquence partant de %{stop} à %{time}"
+ title_frequency: "Course à fréquence de %{interval}min partant de %{stop} de %{time_first} à %{time_last}"
+ actions:
+ index: "Horaires des courses"
+ new: "Ajouter une course à horaire"
+ new_frequency: "Ajouter une course à fréquence"
+ edit: "Modifier cette course à horaire"
+ edit_frequency: "Modifier cette course à fréquence"
+ destroy: "Supprimer cette course"
+ destroy_confirm: "Etes vous sûr de supprimer cette course ?"
+ show: "Voir les courses à horaire"
+ new:
+ title: "Ajouter une course à horaire"
+ 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_timed: "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"
+ journey_frequencies: "Durée d'intervalle du trajet"
+ 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"
+ journey_frequency_ids: "Durée d'intervalle du trajet"
+ 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..fdcc506bf 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_journey_frequencies do
get 'select_journey_pattern', :on => :member
resources :vehicle_translations
resources :time_tables
@@ -133,6 +133,8 @@ ChouetteIhm::Application.routes.draw do
resources :time_table_combinations
end
+ resources :timebands
+
resources :access_points do
resources :access_links
end
diff --git a/db/migrate/20151015150300_create_journey_frequencies.ninoxe_engine.rb b/db/migrate/20151015150300_create_journey_frequencies.ninoxe_engine.rb
new file mode 100644
index 000000000..e5c763ab7
--- /dev/null
+++ b/db/migrate/20151015150300_create_journey_frequencies.ninoxe_engine.rb
@@ -0,0 +1,14 @@
+# This migration comes from ninoxe_engine (originally 20151015143707)
+class CreateJourneyFrequencies < ActiveRecord::Migration
+ def change
+ create_table :journey_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_journey_category_to_vehicle_journey.ninoxe_engine.rb b/db/migrate/20151022150419_add_journey_category_to_vehicle_journey.ninoxe_engine.rb
new file mode 100644
index 000000000..b8af53f24
--- /dev/null
+++ b/db/migrate/20151022150419_add_journey_category_to_vehicle_journey.ninoxe_engine.rb
@@ -0,0 +1,6 @@
+# This migration comes from ninoxe_engine (originally 20151022150156)
+class AddJourneyCategoryToVehicleJourney < ActiveRecord::Migration
+ def change
+ add_column :vehicle_journeys, :journey_category, :integer, null: false, default: 0
+ end
+end
diff --git a/db/migrate/20151023101306_create_timebands.ninoxe_engine.rb b/db/migrate/20151023101306_create_timebands.ninoxe_engine.rb
new file mode 100644
index 000000000..3758fdf09
--- /dev/null
+++ b/db/migrate/20151023101306_create_timebands.ninoxe_engine.rb
@@ -0,0 +1,16 @@
+# This migration comes from ninoxe_engine (originally 20151023083836)
+class CreateTimebands < ActiveRecord::Migration
+ def change
+ create_table :timebands do |t|
+ t.string "objectid", :null => false
+ t.integer "object_version"
+ t.datetime "creation_time"
+ t.string "creator_id"
+ t.string :name
+ t.time :start_time, null: false
+ t.time :end_time, null: false
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20151028105423_add_timeband_id_to_journey_frequencies.ninoxe_engine.rb b/db/migrate/20151028105423_add_timeband_id_to_journey_frequencies.ninoxe_engine.rb
new file mode 100644
index 000000000..094efa005
--- /dev/null
+++ b/db/migrate/20151028105423_add_timeband_id_to_journey_frequencies.ninoxe_engine.rb
@@ -0,0 +1,6 @@
+# This migration comes from ninoxe_engine (originally 20151028105340)
+class AddTimebandIdToJourneyFrequencies < ActiveRecord::Migration
+ def change
+ add_reference :journey_frequencies, :timeband, index: true
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index b68c3190a..38b935b6c 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: 20151028105423) 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
@@ -195,6 +208,20 @@ ActiveRecord::Schema.define(version: 20150922095511) do
t.integer "line_id", limit: 8
end
+ create_table "journey_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"
+ t.integer "timeband_id"
+ end
+
+ add_index "journey_frequencies", ["timeband_id"], name: "index_journey_frequencies_on_timeband_id", using: :btree
+ add_index "journey_frequencies", ["vehicle_journey_id"], name: "index_journey_frequencies_on_vehicle_journey_id", using: :btree
+
create_table "journey_patterns", force: true do |t|
t.integer "route_id", limit: 8
t.string "objectid", null: false
@@ -452,6 +479,18 @@ ActiveRecord::Schema.define(version: 20150922095511) do
add_index "time_tables_vehicle_journeys", ["time_table_id"], name: "index_time_tables_vehicle_journeys_on_time_table_id", using: :btree
add_index "time_tables_vehicle_journeys", ["vehicle_journey_id"], name: "index_time_tables_vehicle_journeys_on_vehicle_journey_id", using: :btree
+ create_table "timebands", force: true do |t|
+ t.string "objectid", null: false
+ t.integer "object_version"
+ t.datetime "creation_time"
+ t.string "creator_id"
+ t.string "name"
+ t.time "start_time", null: false
+ t.time "end_time", null: false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
create_table "users", force: true do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: ""
@@ -510,7 +549,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 +563,7 @@ ActiveRecord::Schema.define(version: 20150922095511) do
t.integer "number", limit: 8
t.boolean "mobility_restricted_suitability"
t.boolean "flexible_service"
+ t.integer "journey_category", 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_journey_frequencies_controller_spec.rb b/spec/controllers/vehicle_journey_frequencies_controller_spec.rb
new file mode 100644
index 000000000..61636e334
--- /dev/null
+++ b/spec/controllers/vehicle_journey_frequencies_controller_spec.rb
@@ -0,0 +1,5 @@
+require 'spec_helper'
+
+RSpec.describe VehicleJourneyFrequenciesController, :type => :controller do
+
+end
diff --git a/spec/features/timebands_spec.rb b/spec/features/timebands_spec.rb
new file mode 100644
index 000000000..6f07fab4f
--- /dev/null
+++ b/spec/features/timebands_spec.rb
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+require 'spec_helper'
+
+describe "Timebands", :type => :feature do
+ login_user
+
+ let!(:timebands) { Array.new(2) { create(:timeband) } }
+ subject { timebands.first }
+
+ describe "list" do
+ it "display timebands" do
+ visit referential_timebands_path(referential)
+ expect(page).to have_content(timebands.first.name)
+ expect(page).to have_content(timebands.last.name)
+ end
+
+ end
+
+ describe "show" do
+ it "display timeband" do
+ visit referential_timebands_path(referential)
+ click_link "#{timebands.first.name}"
+ expect(page).to have_content(timebands.first.name)
+ end
+
+ end
+
+ describe "new" do
+ it "creates timeband and return to show" do
+ visit referential_timebands_path(referential)
+ click_link "Ajouter une plage horaire"
+ fill_in "Titre", :with => "Timeband 1"
+
+ select '10', from: 'timeband_start_time_4i'
+ select '00', from: 'timeband_start_time_5i'
+ select '11', from: 'timeband_end_time_4i'
+ select '00', from: 'timeband_end_time_5i'
+
+ click_button("Créer plage horaire")
+ expect(page).to have_content("Timeband 1")
+ end
+ end
+
+ describe "edit and return to show" do
+ it "edit timeband" do
+ visit referential_timeband_path(referential, subject)
+ click_link "Modifier cette plage horaire"
+ fill_in "Titre", :with => "Timeband Modified"
+ click_button("Modifier plage horaire")
+ expect(page).to have_content("Timeband Modified")
+ end
+ end
+
+ describe "delete and return to list" do
+ it "delete timeband" do
+ visit referential_timebands_path(referential)
+ page.all('.remove')[0].click
+ expect(page).to_not have_content("Timeband Modified")
+ end
+ end
+
+end
diff --git a/spec/helpers/vehicle_journey_frequencies_helper_spec.rb b/spec/helpers/vehicle_journey_frequencies_helper_spec.rb
new file mode 100644
index 000000000..97a1df052
--- /dev/null
+++ b/spec/helpers/vehicle_journey_frequencies_helper_spec.rb
@@ -0,0 +1,15 @@
+require 'spec_helper'
+
+# Specs in this file have access to a helper object that includes
+# the VehicleJourneyFrequenciesHelper. For example:
+#
+# describe VehicleJourneyFrequenciesHelper 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 VehicleJourneyFrequenciesHelper, :type => :helper do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
diff --git a/spec/models/gtfs_export_spec.rb b/spec/models/gtfs_export_spec.rb
index 6051497a7..ccc98e872 100644
--- a/spec/models/gtfs_export_spec.rb
+++ b/spec/models/gtfs_export_spec.rb
@@ -11,7 +11,7 @@ describe GtfsExport, :type => :model do
end
it "should be mandatory" do
- subject.should validate_presence_of(:time_zone)
+ should validate_presence_of(:time_zone)
end
end
@@ -23,7 +23,7 @@ describe GtfsExport, :type => :model do
end
it "should be mandatory" do
- subject.should_not validate_presence_of(:time_zone)
+ should_not validate_presence_of(:time_zone)
end
end
diff --git a/spec/views/timebands/edit.html.erb_spec.rb b/spec/views/timebands/edit.html.erb_spec.rb
new file mode 100644
index 000000000..26c85c229
--- /dev/null
+++ b/spec/views/timebands/edit.html.erb_spec.rb
@@ -0,0 +1,23 @@
+require 'spec_helper'
+
+describe "/timebands/edit", :type => :view do
+ assign_referential
+ let!(:timeband) { assign(:timeband, create(:timeband) ) }
+
+ describe "test" do
+ it "should render h2 with the group name" do
+ render
+ expect(rendered).to have_selector("h2", text: Regexp.new(timeband.name))
+ end
+ end
+
+ describe "form" do
+ it "should render input for timeband" do
+ render
+ expect(rendered).to have_selector("form") do
+ with_tag "input[type=text][name='timeband[name]'][value=?]", timeband.name
+ end
+ end
+
+ end
+end
diff --git a/spec/views/timebands/index.html.erb_spec.rb b/spec/views/timebands/index.html.erb_spec.rb
new file mode 100644
index 000000000..0ce0c419c
--- /dev/null
+++ b/spec/views/timebands/index.html.erb_spec.rb
@@ -0,0 +1,20 @@
+require 'spec_helper'
+
+describe "/timebands/index", :type => :view do
+
+ assign_referential
+ let!(:timebands) { assign :timebands, Array.new(2){ create(:timeband) }.paginate }
+
+ it "should render a show link for each timeband" do
+ render
+ timebands.each do |timeband|
+ expect(rendered).to have_selector("a[href='#{view.referential_timeband_path(referential, timeband)}']", :text => timeband.name)
+ end
+ end
+
+ it "should render a link to create a new timeband" do
+ render
+ expect(view.content_for(:sidebar)).to have_selector(".actions a[href='#{new_referential_timeband_path(referential)}']")
+ end
+
+end
diff --git a/spec/views/timebands/new.html.erb_spec.rb b/spec/views/timebands/new.html.erb_spec.rb
new file mode 100644
index 000000000..73a99cad5
--- /dev/null
+++ b/spec/views/timebands/new.html.erb_spec.rb
@@ -0,0 +1,21 @@
+require 'spec_helper'
+
+describe "/timebands/new", :type => :view do
+ assign_referential
+ let!(:timeband) { assign(:timeband, build(:timeband)) }
+
+ describe "form" do
+
+ it "should render inputs" do
+ render
+ expect(rendered).to have_selector("form") do
+ with_selector "input[type=text][name=?]", timeband.name
+ with_selector "select[start_time(4i)=?]", timeband.start_time
+ with_selector "select[start_time(5i)=?]", timeband.start_time
+ with_selector "select[end_time(4i)=?]", timeband.end_time
+ with_selector "select[end_time(5i)=?]", timeband.end_time
+ end
+ end
+
+ end
+end
diff --git a/spec/views/timebands/show.html.erb_spec.rb b/spec/views/timebands/show.html.erb_spec.rb
new file mode 100644
index 000000000..d43ba588c
--- /dev/null
+++ b/spec/views/timebands/show.html.erb_spec.rb
@@ -0,0 +1,24 @@
+require 'spec_helper'
+
+describe "/timebands/show", :type => :view do
+
+ assign_referential
+ let!(:timeband) { assign(:timeband, create(:timeband)) }
+
+ it "should render h2 with the timeband name" do
+ render
+ expect(rendered).to have_selector("h2", text: Regexp.new(timeband.name))
+ end
+
+ it "should render a link to edit the timeband" do
+ render
+ expect(view.content_for(:sidebar)).to have_selector(".actions a[href='#{view.edit_referential_timeband_path(referential, timeband)}']")
+ end
+
+ it "should render a link to remove the timeband" do
+ render
+ expect(view.content_for(:sidebar)).to have_selector(".actions a[href='#{view.referential_timeband_path(referential, timeband)}'][class='remove']")
+ 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 ab1d946bf..05fa068d9 100644
--- a/spec/views/vehicle_journeys/_form.html.erb_spec.rb
+++ b/spec/views/vehicle_journeys/_form.html.erb_spec.rb
@@ -8,7 +8,11 @@ describe "/vehicle_journeys/_form", :type => :view do
let!(:vehicle_journey) { assign :vehicle_journey, create(:vehicle_journey, :route => route) }
it "should render an input for transport_mode" do
- render
+ render partial: 'vehicle_journeys/form',
+ locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential,
+ line,
+ route,
+ vehicle_journey) }
expect(rendered).to have_selector( "select#vehicle_journey_transport_mode_name") do |node|
Chouette::Line.transport_modes.each do |mode|
expect(node).to have_selector("option", :text => mode.text_code)
@@ -17,14 +21,22 @@ describe "/vehicle_journeys/_form", :type => :view do
end
it "should render an input for comment" do
- render
+ render partial: 'vehicle_journeys/form',
+ locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential,
+ line,
+ route,
+ vehicle_journey) }
expect(rendered).to have_selector("form") do
with_selector "input[type=text][comment=]", vehicle_journey.comment
end
end
context "stop's time view part" do
it "should render stop's names" do
- render
+ render partial: 'vehicle_journeys/form',
+ locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential,
+ line,
+ route,
+ vehicle_journey) }
expect(rendered).to have_selector("form") do |form_node|
vehicle_journey.stop_points.each do |sp|
form_node.with_selector "label", :text => sp.stop_area.name
@@ -32,12 +44,20 @@ describe "/vehicle_journeys/_form", :type => :view do
end
end
it "renders _vehicle_journey_at_stop_fields partial for each vehicle_journey_at_stop" do
- render
+ render partial: 'vehicle_journeys/form',
+ locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential,
+ line,
+ route,
+ vehicle_journey) }
expect(view).to 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
+ render partial: 'vehicle_journeys/form',
+ locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential,
+ line,
+ route,
+ vehicle_journey) }
expect(rendered).to have_selector("form") do |form_node|
vehicle_journey.stop_points.each_with_index do |sp, index|
form_node.with_selector "select", :name => "vehicle_journey[vehicle_journey_at_stops_attributes][#{index}][departure_time(4i)]"
@@ -48,7 +68,11 @@ describe "/vehicle_journeys/_form", :type => :view do
end
context "when existing vehicle_journey" do
it "should display objectid not as an input" do
- render
+ render partial: 'vehicle_journeys/form',
+ locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential,
+ line,
+ route,
+ vehicle_journey) }
expect(rendered).to have_selector("form") do
with_selector "input[type=text][objectid=][disabled=true]", vehicle_journey.objectid
end
@@ -57,7 +81,11 @@ describe "/vehicle_journeys/_form", :type => :view do
context "when new vehicle_journey" do
let!(:vehicle_journey) { assign :vehicle_journey, build(:vehicle_journey, :route => route) }
it "should render an input for objectid" do
- render
+ render partial: 'vehicle_journeys/form',
+ locals: { vehicle_journey: vehicle_journey, form_url: referential_line_route_vehicle_journeys_path(referential,
+ line,
+ route,
+ vehicle_journey) }
expect(rendered).to have_selector("form") do
with_selector "input[type=text][objectid=][disabled=false]", vehicle_journey.objectid
end
diff --git a/spec/views/vehicle_journeys/_vehicle_journey.html.erb_spec.rb b/spec/views/vehicle_journeys/_vehicle_journey.html.erb_spec.rb
new file mode 100644
index 000000000..e1c61c4a7
--- /dev/null
+++ b/spec/views/vehicle_journeys/_vehicle_journey.html.erb_spec.rb
@@ -0,0 +1,6 @@
+require 'spec_helper'
+
+describe "/vehicle_journeys/_vehicle_journey", :type => :view do
+
+ assign_referential
+end