diff options
| author | Xinhui | 2017-03-30 14:55:06 +0200 |
|---|---|---|
| committer | Xinhui | 2017-03-30 14:55:45 +0200 |
| commit | 869ba13f7bbd72f197737ffe2a2c234fb73a5059 (patch) | |
| tree | 43a4739666b99fd3b3dcc9c74c68130e5bdf81f4 | |
| parent | fb583e5fb235a3f04558e94ec1aa933460faa82c (diff) | |
| download | chouette-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.coffee | 8 | ||||
| -rw-r--r-- | app/controllers/routes_controller.rb | 26 | ||||
| -rw-r--r-- | app/helpers/routes_helper.rb | 6 | ||||
| -rw-r--r-- | app/models/chouette/route.rb | 3 | ||||
| -rw-r--r-- | app/views/routes/_form.html.slim | 6 |
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 |
