aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXinhui2017-03-30 14:55:06 +0200
committerXinhui2017-03-30 14:55:45 +0200
commit869ba13f7bbd72f197737ffe2a2c234fb73a5059 (patch)
tree43a4739666b99fd3b3dcc9c74c68130e5bdf81f4
parentfb583e5fb235a3f04558e94ec1aa933460faa82c (diff)
downloadchouette-core-869ba13f7bbd72f197737ffe2a2c234fb73a5059.tar.bz2
Fix route form opposite_route option should be based on wayback selection
Refs #2839
-rw-r--r--app/assets/javascripts/routes.coffee8
-rw-r--r--app/controllers/routes_controller.rb26
-rw-r--r--app/helpers/routes_helper.rb6
-rw-r--r--app/models/chouette/route.rb3
-rw-r--r--app/views/routes/_form.html.slim6
5 files changed, 33 insertions, 16 deletions
diff --git a/app/assets/javascripts/routes.coffee b/app/assets/javascripts/routes.coffee
new file mode 100644
index 000000000..2e36061b8
--- /dev/null
+++ b/app/assets/javascripts/routes.coffee
@@ -0,0 +1,8 @@
+$(document).on("change", '#route_wayback', (e) ->
+ way = if $(this).is(':checked') then "backward" else "straight_forward"
+ $('.opposite_route').hide().find('select').prop('disabled', true)
+
+ field = $(".opposite_route.#{way}")
+ if field.length
+ field.removeClass('hidden').show().find('select').prop('disabled', false)
+)
diff --git a/app/controllers/routes_controller.rb b/app/controllers/routes_controller.rb
index 6a38b022d..a1aadf883 100644
--- a/app/controllers/routes_controller.rb
+++ b/app/controllers/routes_controller.rb
@@ -9,8 +9,7 @@ class RoutesController < ChouetteController
belongs_to :referential do
belongs_to :line, :parent_class => Chouette::Line, :optional => true, :polymorphic => true
end
-
- before_action :define_candidate_opposite_routes, only: [:new, :edit, :create, :update]
+ before_action :define_candidate_opposite_routes, only: [:new, :edit]
def index
index! do |format|
@@ -66,11 +65,11 @@ class RoutesController < ChouetteController
end
end
-# def update
-# update! do |success, failure|
-# success.html { redirect_to referential_line_path(@referential,@line) }
-# end
-# end
+ # def update
+ # update! do |success, failure|
+ # success.html { redirect_to referential_line_path(@referential,@line) }
+ # end
+ # end
protected
alias_method :route, :resource
@@ -86,12 +85,13 @@ class RoutesController < ChouetteController
end
def define_candidate_opposite_routes
- @candidate_opposite_routes =
- if params[:id]
- resource.line.routes.where("id <> ?", resource)
- else
- parent.routes.select(&:persisted?)
- end
+ scope = if params[:id]
+ parent.routes.where(opposite_route: [nil, resource]).where('id <> ?', resource.id)
+ else
+ parent.routes.where(opposite_route: nil)
+ end
+ @forward = scope.where(wayback: :straight_forward)
+ @backward = scope.where(wayback: :backward)
end
private
diff --git a/app/helpers/routes_helper.rb b/app/helpers/routes_helper.rb
index 2f52f78f5..4a9215653 100644
--- a/app/helpers/routes_helper.rb
+++ b/app/helpers/routes_helper.rb
@@ -13,6 +13,12 @@ module RoutesHelper
end
end
+ def input_opposite_route_id_css(route, way)
+ css = ['opposite_route', way]
+ css << 'hidden' if route.wayback.send("#{way}?")
+ css
+ end
+
def route_json_for_edit(route)
route.stop_points.includes(:stop_area).order(:position).map do |stop_point|
stop_area_attributes = stop_point.stop_area.attributes.slice("name","city_name", "zip_code", "registration_number", "longitude", "latitude", "area_type")
diff --git a/app/models/chouette/route.rb b/app/models/chouette/route.rb
index 7c8511634..9de7d7470 100644
--- a/app/models/chouette/route.rb
+++ b/app/models/chouette/route.rb
@@ -5,7 +5,7 @@ class Chouette::Route < Chouette::TridentActiveRecord
extend ActiveModel::Naming
enumerize :direction, in: %i(straight_forward backward clockwise counter_clockwise north north_west west south_west south south_east east north_east)
- enumerize :wayback, in: %i(straight_forward backward)
+ enumerize :wayback, in: %i(straight_forward backward), default: :backward
# FIXME http://jira.codehaus.org/browse/JRUBY-6358
self.primary_key = "id"
@@ -91,7 +91,6 @@ class Chouette::Route < Chouette::TridentActiveRecord
validate :check_opposite_route
def check_opposite_route
return unless opposite_route && opposite_wayback
-
unless opposite_route_candidates.include?(opposite_route)
errors.add(:opposite_route_id, :invalid)
end
diff --git a/app/views/routes/_form.html.slim b/app/views/routes/_form.html.slim
index 2603f64cb..ad389c482 100644
--- a/app/views/routes/_form.html.slim
+++ b/app/views/routes/_form.html.slim
@@ -9,7 +9,11 @@
= f.label :wayback, class: 'col-sm-4 control-label'
= f.input :wayback, as: :boolean, checked_value: :straight_forward, unchecked_value: :backward, label: content_tag(:span, @route.wayback_text, class: 'switch-label', data: {checkedValue: t('enumerize.route.direction.straight_forward'), uncheckedValue: t('enumerize.route.direction.backward')}), wrapper_html: { class: 'col-sm-8'}
- = f.input :opposite_route_id, collection: @candidate_opposite_routes
+ = f.input :opposite_route_id, collection: @forward, disabled: @route.wayback.straight_forward?, wrapper_html: {class: input_opposite_route_id_css(@route, 'straight_forward')}
+
+ = f.input :opposite_route_id, collection: @backward, disabled: @route.wayback.backward?, wrapper_html: {class: input_opposite_route_id_css(@route, 'backward')}
+
+
.separator