diff options
| author | Xinhui | 2017-11-09 14:58:02 +0100 | 
|---|---|---|
| committer | Xinhui | 2017-11-09 14:58:02 +0100 | 
| commit | 5c799fbeceae9876b1fa1c50f7504956c3b4b834 (patch) | |
| tree | 69097eb2c70c1bbcdf3fb17fa0542a4103ff021e | |
| parent | 205d69f10d7011246b331dbf9c0e504b322ff377 (diff) | |
| parent | 40656591832d8f26903f2bbdb16ef53cbcb7e6bc (diff) | |
| download | chouette-core-5c799fbeceae9876b1fa1c50f7504956c3b4b834.tar.bz2 | |
Merge branch '4944_remove_route_section_code'
44 files changed, 12 insertions, 1383 deletions
| diff --git a/app/controllers/route_sections_controller.rb b/app/controllers/route_sections_controller.rb deleted file mode 100644 index 03d6cf176..000000000 --- a/app/controllers/route_sections_controller.rb +++ /dev/null @@ -1,70 +0,0 @@ -class RouteSectionsController < ChouetteController - -  defaults :resource_class => Chouette::RouteSection - -  respond_to :html -  respond_to :kml, :only => :show - -  belongs_to :referential - -  before_action :save_return_to_path, only: [:edit, :create_to_edit] - -  helper_method :search - -  def new -    @stop_areas = referential.stop_areas.with_geometry.order :name -    new! -  end - -  def show -    @map = RouteSectionMap.new(resource).with_helpers(self) -    show! -  end - -  def edit -    @map = RouteSectionMap.new(resource, true).with_helpers(self) -    edit! -  end - -  def update -    update! { session.delete(:return_to) } -  end - -  def create -    create! { session.delete(:return_to) } -  end - -  def create_to_edit -    route_section = Chouette::RouteSection.create(route_section_params) -    if route_section.id -      redirect_to edit_referential_route_section_path(referential, route_section) -    else -      flash[:alert] = I18n.t('route_sections.unable_to_contact_server') -      redirect_to :back -    end -  end - -  protected - -  def save_return_to_path -    session[:return_to] = params[:return_to] if params[:return_to] -  end - -  def collection -    # if q = params[:q] -    #   @route_sections ||= Chouette::RouteSection.joins(:departure, :arrival).where(departure: {name: "#{q}"}).or.where(arrival: {name: "#{q}"}) -    # end -    @route_sections ||= search.collection.includes(:departure, :arrival).paginate page: params[:page] -  end - -  def search -    @search ||= RouteSectionSearch.new(params[:route_section_search]) -  end - -  private - -  def route_section_params -    params.require(:route_section).permit(:departure_id, :arrival_id, :editable_geometry, :no_processing) -  end - -end diff --git a/app/controllers/route_sections_selectors_controller.rb b/app/controllers/route_sections_selectors_controller.rb deleted file mode 100644 index b5b5ebd48..000000000 --- a/app/controllers/route_sections_selectors_controller.rb +++ /dev/null @@ -1,47 +0,0 @@ -class RouteSectionsSelectorsController < ChouetteController - -  # singleton option makes association_chain crazy -  #defaults singleton: true - -  respond_to :html, only: [ :edit, :update ] -  respond_to :js, only: :section - -  belongs_to :referential do -    belongs_to :line, :parent_class => Chouette::Line do -      belongs_to :route, :parent_class => Chouette::Route do -        belongs_to :journey_pattern, parent_class: Chouette::JourneyPattern -      end -    end -  end - -  def edit -    @map = RouteSectionSelectorMap.new(resource).with_helpers(self) -  end - -  def update -    update! -    parent.control_route_sections -  end - -  def selection -    parent - -    @route_section = referential.route_sections.find params[:route_section_id].to_i -    render partial: 'selection', format: 'js' -  end - -  private - -  def resource -    @route_sections_selector ||= RouteSectionsSelector.new parent -  end - -  def build_resource -    @route_sections_selector ||= RouteSectionsSelector.new parent, *resource_params -  end - -  def route_section_selector_params -    params.require(:route_section_selector).permit() -  end - -end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 5edb8c3bf..9f2e2765f 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -73,8 +73,6 @@ module ApplicationHelper        "time_tables"      when path.include?("/timebands")        "timebands" -    when path.include?("/route_sections") -      "route_sections"       when path.include?("/rule_parameter_set")        "parametersets"      when path.include?("/import_tasks") diff --git a/app/helpers/route_section_selectors_helper.rb b/app/helpers/route_section_selectors_helper.rb deleted file mode 100644 index 1be30066b..000000000 --- a/app/helpers/route_section_selectors_helper.rb +++ /dev/null @@ -1,23 +0,0 @@ -module RouteSectionSelectorsHelper - -  def link_to_edit_route_section(route_section) -    classes = [ 'edit-route-section' ] -    link ='#' - -    if route_section.present? -      return_to = edit_referential_line_route_journey_pattern_route_sections_selector_path(@referential, @line, @route, @journey_pattern) -      link = edit_referential_route_section_path(@referential, route_section, return_to: return_to) -    else -      classes << 'disabled' -    end - -    link_to "Edit", link, class: classes, title: t('route_sections_selectors.edit.route_section.edit') -  end - -  def link_to_create_route_section(departure, arrival) -    return_to = edit_referential_line_route_journey_pattern_route_sections_selector_path(@referential, @line, @route, @journey_pattern) -    link_to t('route_sections_selectors.edit.route_section.new'), -            create_to_edit_referential_route_sections_path(@referential, route_section: {departure_id:departure.id, arrival_id: arrival.id}, return_to: return_to) -  end - -end diff --git a/app/maps/design/route_section_selector_style_map.rb b/app/maps/design/route_section_selector_style_map.rb deleted file mode 100644 index 12f192ec8..000000000 --- a/app/maps/design/route_section_selector_style_map.rb +++ /dev/null @@ -1,73 +0,0 @@ -class Design::RouteSectionSelectorStyleMap < Design::GenericStyleMap -  attr_accessor :style - -  def initialize(helpers, options = {}) -    @helpers = helpers -    @style = options[:style].present? ? default_style.merge(options[:style]) : default_style -  end - -  def select_style -    { -      fillColor: "blue", -      graphicName: "square", -      rotation: 90, -      strokeColor: "#00dd00", -      pointRadius: 15, -      graphicZIndex: 100 -    } -  end - -  def highlight_style -    { -      fillColor: "orange", -      graphicName: "square", -      rotation: 90, -      strokeColor: "#dd0000", -      pointRadius: 15, -      graphicZIndex: 200 -    } -  end - -  def default_style -    { -      label: "${label}", -      fontColor: "black", -      fontSize: "11px", -      fontWeight: "bold", -      labelAlign: "ct", -      labelXOffset: 0, -      labelYOffset: -15, -      strokeColor: "#0000dd", -      strokeOpacity: 1, -      strokeWidth: 3, -      strokeLineCap: "round", -      strokeDashstyle: "solid", -      externalGraphic: @helpers.assets_path_patch( "map/${positionType}.png"), -      graphicWidth: 12, -      graphicHeight: 12, -      graphicOpacity: 1, -      graphicXOffset: -6, -      graphicYOffset: -6, -      display: true, -      fillColor: "red", -      graphicName: "square", -      rotation: 90, -      graphicZIndex: 10 -    } -  end - -  def context -    { -      label: :" function(feature) {if(feature.layer.map.getZoom() > 13) { return feature.attributes.name;} else {return '';}} ", -      positionType: :" function(feature) { if (feature.attributes.iconCode != undefined) {return feature.attributes.iconCode;} else { return '';} } " -    } -  end - -  def style_map -    OpenLayers::StyleMap.new( -        default: OpenLayers::Style.new(style, { context: context}), -        select: OpenLayers::Style.new(style.merge(select_style), { context: context }), -        highlight: OpenLayers::Style.new(style.merge( highlight_style), { context: context })) -  end - -end diff --git a/app/maps/design/route_section_style_map.rb b/app/maps/design/route_section_style_map.rb deleted file mode 100644 index dbd292412..000000000 --- a/app/maps/design/route_section_style_map.rb +++ /dev/null @@ -1,66 +0,0 @@ -class Design::RouteSectionStyleMap < Design::GenericStyleMap -  attr_accessor :style - -  def initialize(helpers, options = {}) -    @helpers= helpers -    @style = options[:style].present? ? default_style.merge(options[:style]) : default_style -  end - -  def select_style -    { -      fillColor:"blue", -      graphicName:"circle", -      rotation:90, -      :strokeColor => "red", -      pointerEvents: "visiblePainted" -    } -  end - -  def highlight_style -    { -      fillColor:"lightblue", -      graphicName:"circle", -      rotation:90, -      :strokeColor => "#dd0000" -    } -  end - -  def default_style - -    { -      :fontColor => "black", -      :fontSize => "11px", -      :fontWeight => "bold", -      :labelAlign => "cm", -      :labelXOffset => 0, -      :labelYOffset => -15, -      :strokeColor => "green", -      :strokeOpacity => 1, -      :strokeWidth => 4, -      :strokeLineCap => "round", -      :strokeLineJoin => "round", -      :strokeDashstyle => "solid", -      :lineCap => "round", -      :lineJoin => "round", -      :dashstyle => "solid", -      :graphicWidth => 12, -      :graphicHeight => 12, -      :graphicOpacity => 1, -      :graphicXOffset => -6, -      :graphicYOffset => -6, -      :display => true, -      fillOpacity: 0.8, -      fillColor: "#ffffff", -      graphicName: "circle", -      pointRadius: 7, -      pointerEvents: "visiblePainted", -      rotation: 90 -    } - -  end - -  def style_map -    OpenLayers::StyleMap.new(:default => OpenLayers::Style.new(style), :select =>  OpenLayers::Style.new(style.merge( select_style)), :highlight =>  OpenLayers::Style.new(style.merge( highlight_style))) -  end - -end diff --git a/app/maps/route_section_map.rb b/app/maps/route_section_map.rb deleted file mode 100644 index de4d5e746..000000000 --- a/app/maps/route_section_map.rb +++ /dev/null @@ -1,66 +0,0 @@ -class RouteSectionMap < ApplicationMap - -  attr_reader :route_section - -  attr_accessor :editable -  alias_method :editable?, :editable - -  def initialize(route_section, editable = false) -    @route_section = route_section -    @editable = editable -  end - -  def customize_map(map, page) -    # layers order seems to matter for ModifyFeature control -    route_section.stop_areas.each do |stop_area| -      layer = "stop_area_#{stop_area.id}".to_sym -      page.assign layer.to_s, kml_layer(stop_area, :styleMap => Design::StopAreasStyleMap.new(helpers).style_map) -      page << map.add_layer(layer) -      page << map.add_control( hover_control_display_name(layer) ) -    end - -    geometry_options = {}.tap do |options| -      options[:mode] = :editable if editable? -    end -    geometry_uneditable_kml_layer = kml_layer(route_section, :styleMap => Design::RouteSectionSelectorStyleMap.new(helpers).style_map) -    page << map.add_layer(geometry_uneditable_kml_layer) - -    if route_section.input_geometry -      geometry_editable_layer = kml_layer(route_section, geometry_options, {}) # , :styleMap => Design::LineStyleMap.new(style: nil).style_map) -    else -      points = route_section.stop_areas.map{|point| OpenLayers::Geometry::Point.new(point.longitude, point.latitude).transform("EPSG:4326", "EPSG:900913")} -      geometry_editable_layer = OpenLayers::Layer::Vector.new("user_geometry", {:projection => projection("EPSG:4326"), :styleMap => Design::RouteSectionStyleMap.new(helpers).style_map}) -      geometry_editable_features = OpenLayers::Feature::Vector.new(OpenLayers::Geometry::LineString.new(points)) -      page.assign :geometry_editable_features, geometry_editable_features -    end - -    if editable -      page.assign :user_geometry, geometry_editable_layer - -      page << "user_geometry.addFeatures([geometry_editable_features])" if geometry_editable_features - -      page << map.add_layer(:user_geometry) - -      page.assign :modify_feature, OpenLayers::Control::ModifyFeature.new(:user_geometry, autoActivate: true) -      page << map.add_control( :modify_feature ) -    else -      page << map.add_layer(geometry_editable_layer) -    end - -    page << map.zoom_to_extent(bounds.to_google.to_openlayers) if bounds -  end - -  def bounds -    @bounds ||= -      if route_section.geometry.present? -        route_section.geometry.bounds -      elsif route_section.stop_areas.present? -        GeoRuby::SimpleFeatures::Point.bounds route_section.stop_areas.collect(&:geometry) -      end -  end - -  def ready? -    bounds.present? -  end - -end diff --git a/app/maps/route_section_selector_map.rb b/app/maps/route_section_selector_map.rb deleted file mode 100644 index 7287c4d8a..000000000 --- a/app/maps/route_section_selector_map.rb +++ /dev/null @@ -1,116 +0,0 @@ -class RouteSectionSelectorMap < ApplicationMap - -  attr_reader :route_section_selector, :style - -  def initialize(route_section_selector, style = nil) -    @route_section_selector = route_section_selector -    @style = nil -  end - -  def customize_map(map, page) -    layer = kml_layer([route_section_selector.itinerary.referential, route_section_selector.itinerary.route.line, route_section_selector.itinerary.route, route_section_selector.itinerary], -                      { rendererOptions: { zIndexing: true }, styleMap: Design::JourneyPatternStyleMap.new(helpers).style_map }) -    page.assign 'journeyPatternLayer', layer - -    page << map.add_layer(:journeyPatternLayer) -    page << map.add_control(hover_control_display_name(:journeyPatternLayer)) - -    route_section_geometry = OpenLayers::Layer::Vector.new('Route Section Geometry', -                                                           { projection: projection('EPSG:900913'), -                                                             rendererOptions: { zIndexing: true }, -                                                             styleMap: Design::RouteSectionSelectorStyleMap.new(helpers).style_map}) - -    route_section_layer_points = [] -    route_section_selector.sections.reject{|s| s.candidates.length==0}.each do |section| -      section.candidates.each do |candidate| -        geometry = candidate.processed_geometry -        route_section_layer_points << ["#{candidate.id}"] + clean_route_section_line(geometry) -      end -    end - -    page.assign :route_section_layer_points, route_section_layer_points -    page << <<EOF -      var route_section_layers; -      route_section_layers = route_section_layer_points.map(function(elt, index) { -        var route_section_id = elt[0]; -        elt.splice(0, 1); -        var points = elt.map( function(e,i) { -          return OpenLayers.Projection.transform(new OpenLayers.Geometry.Point(e[0], e[1]), "EPSG:4326", "EPSG:900913" ); -          }) -        return new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(points), {id: route_section_id, name: ""}); -      }) -EOF -    page.assign :route_section_geometry, route_section_geometry -    page << 'route_section_geometry.addFeatures(route_section_layers)' -    page << map.add_layer(:route_section_geometry) - -    page << <<EOF -    function selected(feature) { -      RouteSectionMap.onSelectedFeature(feature); -    } -    function unselected(feature) { -      RouteSectionMap.onUnselectedFeature(feature); -    } - -    highlightControl = new OpenLayers.Control.SelectFeature([route_section_geometry], -      { -        clickout: true, -        toggle: false, -        multiple:false, -        hover:true, -        highlightOnly:true, -        eventListeners:{ -          featurehighlighted: function (event) { -            event.feature.layer.drawFeature( -              event.feature, -              'highlight' -            ); -          }, -          featureunhighlighted: function (event) { -            event.feature.layer.drawFeature( -              event.feature, -                'default' -            ); -          } -        } -      } -    ); -    selectControl = new OpenLayers.Control.SelectFeature([route_section_geometry], -      { -        onSelect:selected, -        onUnselect:unselected -      } -    ); -    map.addControl(highlightControl); -    map.addControl(selectControl); -    highlightControl.activate(); -    selectControl.activate(); -EOF - -    #page.assign :select_feature, OpenLayers::Control::SelectFeature.new(:route_section_geometry, {onSelect: selected, onUnselect: unselected}) -    #page << map.add_control( :select_feature ) - - -    page << map.zoom_to_extent(bounds.to_google.to_openlayers) if bounds - -  end - -  def clean_route_section_line(line) -    point_array = line.to_s.scan(/-?\d+[.]\d+\s-?\d+[.]\d+/) -    point_array.map do |point| -      point = point.scan(/-?\d+[.]\d+/) -      lat = point[0].to_f -      lng = point[1].to_f -      [lat, lng] -    end - -  end - -  def ready? -     bounds.present? -   end - -   def bounds -     @bounds ||= GeoRuby::SimpleFeatures::Point.bounds(route_section_selector.itinerary.route.stop_areas.collect(&:geometry).compact) -   end -end diff --git a/app/models/chouette/journey_pattern.rb b/app/models/chouette/journey_pattern.rb index fa2a9c8bb..1104c6035 100644 --- a/app/models/chouette/journey_pattern.rb +++ b/app/models/chouette/journey_pattern.rb @@ -9,8 +9,6 @@ class Chouette::JourneyPattern < Chouette::TridentActiveRecord    has_many :vehicle_journey_at_stops, :through => :vehicle_journeys    has_and_belongs_to_many :stop_points, -> { order("stop_points.position") }, :before_add => :vjas_add, :before_remove => :vjas_remove, :after_add => :shortcuts_update_for_add, :after_remove => :shortcuts_update_for_remove    has_many :stop_areas, through: :stop_points -  has_many :journey_pattern_sections -  has_many :route_sections, through: :journey_pattern_sections, dependent: :destroy    validates_presence_of :route    validates_presence_of :name @@ -19,9 +17,6 @@ class Chouette::JourneyPattern < Chouette::TridentActiveRecord    enum section_status: { todo: 0, completed: 1, control: 2 }    attr_accessor  :control_checked -  after_update :control_route_sections, :unless => "control_checked" - -    def local_id      "IBOO-#{self.referential.id}-#{self.try(:route).try(:line).try(:objectid).try(:local_id)}-#{self.id}"    end @@ -146,39 +141,4 @@ class Chouette::JourneyPattern < Chouette::TridentActiveRecord        vjas.destroy      end    end - -  def control_route_sections -    stop_area_ids = self.stop_points.map(&:stop_area_id) -    control_route_sections_by_stop_areas(stop_area_ids) -  end - -  def control_route_sections_by_stop_areas(stop_area_ids) -    journey_pattern_section_all -    i = 0 -    to_control = false -    stop_area_ids.each_cons(2) do |a| -      jps = @route_sections_orders[i] -      i += 1 -      unless jps -        to_control = true -        next -      end -      unless [jps.route_section.departure.id, jps.route_section.arrival.id] == a -        jps.destroy -        to_control = true -      end -    end -    self.control_checked = true -    to_control ? self.control! : self.completed! -  end - -  protected - -  def journey_pattern_section_all -    @route_sections_orders = {} -    self.journey_pattern_sections.all.map do |journey_pattern_section| -      @route_sections_orders[journey_pattern_section.rank] = journey_pattern_section -    end -  end -  end diff --git a/app/models/chouette/journey_pattern_section.rb b/app/models/chouette/journey_pattern_section.rb deleted file mode 100644 index 3ccba8ec0..000000000 --- a/app/models/chouette/journey_pattern_section.rb +++ /dev/null @@ -1,20 +0,0 @@ -class Chouette::JourneyPatternSection < Chouette::ActiveRecord -  belongs_to :journey_pattern -  belongs_to :route_section - -  validates :journey_pattern_id, presence: true -  validates :route_section_id, presence: true -  validates :rank, presence: true, numericality: :only_integer -  validates :journey_pattern_id, uniqueness: { scope: [:route_section_id, :rank] } - -  default_scope { order(:rank) } - -  def self.update_by_journey_pattern_rank(journey_pattern_id, route_section_id, rank) -    jps = self.find_or_initialize_by(journey_pattern_id: journey_pattern_id, rank: rank) -    if route_section_id.present? -      jps.update_attributes(route_section_id: route_section_id) -    else -      jps.destroy -    end -  end -end diff --git a/app/models/chouette/route.rb b/app/models/chouette/route.rb index 7a529d2b9..1a05d43d9 100644 --- a/app/models/chouette/route.rb +++ b/app/models/chouette/route.rb @@ -74,8 +74,6 @@ class Chouette::Route < Chouette::TridentActiveRecord    validates :wayback, inclusion: { in: self.wayback.values } -  after_commit :journey_patterns_control_route_sections -    def duplicate      overrides = {        'opposite_route_id' => nil, @@ -183,12 +181,6 @@ class Chouette::Route < Chouette::TridentActiveRecord      return true    end -  def journey_patterns_control_route_sections -    self.journey_patterns.each do |jp| -      jp.control_route_sections -    end -  end -    protected    def self.vehicle_journeys_timeless(stop_point_id) diff --git a/app/models/chouette/route_section.rb b/app/models/chouette/route_section.rb deleted file mode 100644 index 3ce4232be..000000000 --- a/app/models/chouette/route_section.rb +++ /dev/null @@ -1,81 +0,0 @@ -class Chouette::RouteSection < Chouette::TridentActiveRecord -  belongs_to :departure, class_name: 'Chouette::StopArea' -  belongs_to :arrival, class_name: 'Chouette::StopArea' -  has_many :journey_pattern_sections -  has_many :journey_patterns, through: :journey_pattern_sections, dependent: :destroy - -  validates :departure, :arrival, :processed_geometry, presence: true - -  scope :by_endpoint_name, ->(endpoint, name) do -    joins("INNER JOIN stop_areas #{endpoint} ON #{endpoint}.id = route_sections.#{endpoint}_id").where(["#{endpoint}.name ilike ?", "%#{name}%"]) -  end -  scope :by_line_id, ->(line_id) do -    joins(:journey_pattern_sections, :journey_patterns).joins('INNER JOIN routes ON journey_patterns.route_id = routes.id').where("routes.line_id = #{line_id}") -  end - -  def stop_areas -    [departure, arrival].compact -  end - -  def default_geometry -    points = stop_areas.collect(&:geometry).compact -    GeoRuby::SimpleFeatures::LineString.from_points(points) if points.many? -  end - -  def name -    stop_areas.map do |stop_area| -      stop_area.try(:name) or '?' -    end.join(' - ') + " (#{geometry_description})" -  end - -  def via_count -    input_geometry ? [ input_geometry.points.count - 2, 0 ].max : 0 -  end - -  def geometry_description -    if input_geometry || processed_geometry -      [ "#{distance.to_i}m" ].tap do |parts| -        parts << "#{via_count} #{'via'.pluralize(via_count)}" if via_count > 0 -      end.join(' - ') -    else -      "-" -    end -  end - -  DEFAULT_PROCESSOR = Proc.new { |section| section.input_geometry || section.default_geometry.try(:to_rgeo) } - -  @@processor = DEFAULT_PROCESSOR -  cattr_accessor :processor - -  def instance_processor -    no_processing || processor.nil? ? DEFAULT_PROCESSOR : processor -  end - -  def process_geometry -    if input_geometry_changed? || processed_geometry.nil? -      self.processed_geometry = instance_processor.call(self) -      self.distance = processed_geometry.to_georuby.to_wgs84.spherical_distance if processed_geometry -    end - -    true -  end -  before_validation :process_geometry - -  def editable_geometry=(geometry) -    self.input_geometry = geometry -  end - -  def editable_geometry -    input_geometry.try(:to_georuby) or default_geometry -  end - -  def editable_geometry_before_type_cast -    editable_geometry.to_ewkt -  end - -  def geometry(mode = nil) -    mode ||= :processed -    mode == :editable ? editable_geometry : processed_geometry.to_georuby -  end - -end diff --git a/app/models/referential.rb b/app/models/referential.rb index ed13cd077..fad91fa7f 100644 --- a/app/models/referential.rb +++ b/app/models/referential.rb @@ -123,10 +123,6 @@ class Referential < ActiveRecord::Base      Chouette::VehicleJourneyFrequency.all    end -  def route_sections -    Chouette::RouteSection.all -  end -    def routing_constraint_zones      Chouette::RoutingConstraintZone.all    end diff --git a/app/models/route_section_search.rb b/app/models/route_section_search.rb deleted file mode 100644 index bf53cdf05..000000000 --- a/app/models/route_section_search.rb +++ /dev/null @@ -1,33 +0,0 @@ -class RouteSectionSearch -  include ActiveModel::Conversion -  extend  ActiveModel::Naming - -  attr_accessor :departure_name, :arrival_name, :line_id -  attr_accessor :scope - -  def scope -    scope ||= Chouette::RouteSection -  end - -  def initialize(attributes = {}) -    attributes.each { |k,v| send "#{k}=", v } if attributes -  end - -  def collection -    collection = scope - -    [:departure, :arrival].each do |endpoint| -      endpoint_name = send "#{endpoint}_name" -      collection = collection.by_endpoint_name(endpoint, endpoint_name) if endpoint_name.present? -    end - -    collection = collection.by_line_id(line_id) if line_id.present? - -    collection -  end - -  def persisted? -    false -  end - -end diff --git a/app/models/route_sections_selector.rb b/app/models/route_sections_selector.rb deleted file mode 100644 index 0db09ed25..000000000 --- a/app/models/route_sections_selector.rb +++ /dev/null @@ -1,101 +0,0 @@ -class RouteSectionsSelector -  extend ActiveModel::Naming -  include ActiveModel::Conversion - -  include ActiveModel::Validations - -  attr_reader :itinerary - -  def initialize(journey_pattern, attributes = {}) -    @itinerary = journey_pattern - -    self.attributes = attributes -  end - -  def attributes=(attributes) -    attributes.each { |k,v| send "#{k}=", v } -  end - -  def update_attributes(attributes) -    self.attributes = attributes -    save -  end - -  delegate :stop_points, to: :itinerary - -  def sections -    @sections ||= create_sections -  end - -  def create_sections -    [].tap do |sections| -      stop_points.each_cons(2).each_with_index do |(departure, arrival), index| -        journey_pattern_section = Chouette::JourneyPatternSection.find_by(journey_pattern: @itinerary, rank: index) - -        if journey_pattern_section -          route_section = journey_pattern_section ? journey_pattern_section.route_section : nil -        else -          route_section = Chouette::RouteSection.find_by(departure: departure.stop_area, arrival: arrival.stop_area) -        end - -        sections << Section.new(departure.stop_area, arrival.stop_area, index, route_section) -      end -    end -  end - -  def sections_attributes=(attributes) -    # Process the attributes hash -    attributes.each do |index, section_attributes| -      sections[index.to_i].attributes = section_attributes -    end -  end - -  def save -    sections.each do |s| -      Chouette::JourneyPatternSection.update_by_journey_pattern_rank(itinerary.id, s.route_section_id, s.rank) -    end -  end - -  class Section -    extend ActiveModel::Translation - -    attr_accessor :departure, :arrival, :rank, :route_section_id - -    def initialize(departure, arrival, rank, route_section = nil) -      @departure, @arrival, @rank = departure, arrival, rank - -      self.route_section = route_section -    end - -    def route_section=(route_section) -      @route_section = route_section -      @route_section_id = route_section.respond_to?(:id) ? route_section.id : nil -    end - -    def route_section -      @route_section ||= candidates.find_by id: route_section_id -    end - -    def persisted? -      false -    end - -    def candidates -      @candidates ||= Chouette::RouteSection.where(departure: departure, arrival: arrival) -    end - -    def create_candidate -      Chouette::RouteSection.create(departure: departure, arrival: arrival) -    end - -    def attributes=(attributes) -      attributes.each { |k,v| send "#{k}=", v } -    end - -    def valid? -      route_section.present? -    end - -  end - -end diff --git a/app/views/help/route_sections.textile b/app/views/help/route_sections.textile deleted file mode 100644 index 4cd6bf93f..000000000 --- a/app/views/help/route_sections.textile +++ /dev/null @@ -1,92 +0,0 @@ ----
 -layout: default
 -title: Tracés
 ----
 -
 -CHOUETTE permet d'éditer le tracé de ligne sur la cartographie. Le tracé est defini au niveau de la "mission":/journey_patterns . Chaque trajet entre deux arrêts est défini séparément. 
 -
 -Les tracés définis entre deux arrêts pour une mission peuvent être récupérés pour une autre mission. Il est possible de définir autant de tracés entre deux arrêts que nécessaire. 
 -
 -L'application dispose d'un moteur de recherche d'itinéraire qui établi un trajet par défaut. Il peut également être utilisé pour faciliter le tracé manuel, l'utilisateur plaçant les principaux points de son tracé, le moteur se chargeant de les relier en suivant les voiries (et en tenant compte des sens de circulation).
 -
 -Il est à noter que seul le format GTFS sait gérer les tracés aussi bien en import et en export. 
 -
 -h3. Création d'un nouveau tracé
 -
 -h4. Accès à l'interface de tracé
 -
 -Créer un nouveau tracé se fait dans le menu d'une mission. Un lien de modification du tracé est disponible dans le menu latéral. Tant que le tracé n'est pas entièrement défini, le lien apparaît en orange avec un panneau d'alerte. 
 -
 -!2016-01-08_163438.png!
 -
 -p=. Accès à la modification d'un tracé
 -
 -La page de modification d'un tracé liste toutes les sections de la mission. Il s'agit du trajet entre deux arrêts de la mission. Le tracé est entièrement défini à partir du moment où toutes les sections bénéficient d'un tracé. 
 -
 -Pour chaque section, un menu déroulant liste les tracés disponibles avec la distance et éventuellement le nombre de _via_. Lorsque seule la distance est visible, cela signifie que le tracé a été généré automatiquement par le calculateur d'itinéraire. Si des vias sont indiqués, cela signifie que le tracé a été établi à partir de points définis par l'utilisateur. 
 -
 -!2016-01-08_163715.png!
 -
 -p=. Liste des tracés
 -
 -Pour créer un tracé sur une section n'en disposant pas encore, il convient de cliquer sur _Ajouter une alternative_. A ce stade, le pictogramme en forme de crayon est grisé puisqu'il n'existe pas encore de tracé à modifier. 
 -
 -h4. Choix du traitement de la géométrie
 -
 -Après avoir cliqué le lien d'ajout d'une alternative, la cartographie s'affiche avec le trajet proposé automatiquement par le calculateur d'itinéraire en bleu et une ligne droite entre les deux arrêts en vert. Côté menu, les poitns de départ et d'arrivée sont indiqués sur le côté et un menu déroulant permet de choisir le traitement de la géométrie. Deux options sont possibles :
 -
 -* Standard : Le calculateur d'itinéraire recherche le trajet le plus court en respectant le cas échéant les points définis par l'utilisateur.
 -* Pas de traitement : le calculateur n'est pas utilsé, le parcours correspondra très exactement au tracé fait manuellement par l'utilisateur. 
 -
 -h4. Création du tracé
 -
 -Lors de la création d'un nouveau tracé, la ligne bleue correspondant à la proposition du calculateur ne peut pas être éditée. Si le tracé calculé par défaut convient, il suffit de le valider sans éditer le moindre point. 
 -
 -Dans le cas contraire, il est possible de cliquer sur la ligne verte qui change alors de couleur pour devenir rouge. Chaque extrémité est marquée par un pictogramme rond de couleur verte qui signale une étape du tracé. Au centre du tracé se trouve un point identique mais semi-transparent que l'on peut faire glisser sur la carte pour raffiner le tracé. Chaque posistionnement du point fait automatiquement apparaître un nouveau point éditable de chaque côté de la section, ce qui permet de dessiner un tracé de plus en plus précis. 
 -
 -Il est recommandé de commencer son tracé sur les grosses étapes puis de raffiner le trajet en replaçant les points et en créant de nouvelles étapes afin d'avoir le prochain point du tracé à portée de souris.
 -
 -Le traitement de la géométrie permet de ne pas tracer le trajet dans le moindre détail. Il suffit de placer quelques points significatifs et de valider en conservant _standard_ comme traitement de géométrie pour que le trajet soit calculé en passant par les points définis. Attention, le calculateur cherche une solution en fonction des voiries auxquelles sont associés les points placés. Si l'un d'entre-eux est effectivement associé à une mauvaise voirie, le calculateur risque de faire faire de gros détours pour satisfaire la demande. En conséquence il est déconseillé de placer les points directement sur les carrefous pour éviter que le point soit associé à une voirie non désirée.
 -
 -Dans le cas d'un tracé entièrement défini à la main, il convient de choisir _pas de traitement_ dans le menu de traitement de la géométrie.
 -
 -Finalier la sélection des tracés se fait en cliquant sur le bouton _modifier le parcours_ en bas de la page. 
 -
 -!2016-01-08_165558.png!
 -
 -p=. Placement des points d'un tracé.
 -
 -h3. Modifier un tracé
 -
 -Une fois le tracé créé, il est possible de sélectionner un autre tracé ou de modifier un tracé. Le menu déroulant sur la liste des sections permet de sélectionner le tracé que l'on va retenir, soit pour l'affecter, soit pour le modifier.
 -!2016-01-08_170524.png!
 -
 -p=. Séléction d'un tracé
 -
 -Dès lors qu'un tracé a été créé, il est possible de le modifier. Il suffit pour cela de cliquer sur le pictogramme représentant un crayon. Sur la page d'édition du tracé, il s'affiche dans une couleur violette. Double cliquer sur le tracé permet de le faire passer en mode édition. Il redevient bleu avec des cercles organges déplaçables correspondants à chacun des points du parcours. Lorsqu'on édite les points du tracé, le tracé intial reste visible en dessous en bleu. 
 -
 -!2016-01-08_175148.png!
 -
 -p=. Tracé à modifier
 -
 -!2016-01-08_175340.png!
 -
 -p=. Tracé en mode édition
 -
 -Modifier le tracé se fait en déplaçant les points qui le composent. Si le traitement de la géométrie est paramété en _Standard_, un nouveau trajet est calculé en fonction des modifications apportées au tracé. Dans le cas inverse, le tracé est modifié en fonction de ce qui a été tracé par l'utilisateur. 
 -
 -Il est également possible de visualiser et de modifier un tracé en passant par le sous-menu _Sections de parcours_ du menu _données_.
 -
 -h3. Supprimer un tracé
 -
 -La suppresion des tracés se fait dans un sous-menu spécifique du menu _données_. Il dispose de champs de recherche qui permettent de retrouver les sections à éditer pour les consulter, les modifier et les supprimer. 
 -
 -!2016-01-08_180432.png!
 -
 -p=. gestion des tracés par section. 
 -
 -La supression se fait en cliquant sur le pictogramme poubelle dans le tableau ou dans la page de détail de la section de parcours après avoir cliqué sur le bouton _Voir_.
 -
 -!2016-01-08_180930.png!
 -
 -p=. Visualisation, modification et suppresion de tracé
 diff --git a/app/views/help/toc.textile b/app/views/help/toc.textile index 9a80cb84e..9772ca1b6 100644 --- a/app/views/help/toc.textile +++ b/app/views/help/toc.textile @@ -30,7 +30,6 @@ h3. Sommaire  ## "Courses en fréquence":timebands.textile
  ## "Correspondances":connection_links
  ## "Calendrier":time_tables
 -## "Tracés":route_sections
  # Imports
  ## "Imports":imports
  ## "Formats d'import":import_formats
 diff --git a/app/views/journey_patterns/show.html.slim b/app/views/journey_patterns/show.html.slim index 823252480..a77536130 100644 --- a/app/views/journey_patterns/show.html.slim +++ b/app/views/journey_patterns/show.html.slim @@ -39,12 +39,6 @@ h3.journey_pattern_stop_points = t('.stop_points')        - if policy(@journey_pattern).destroy?          = link_to t('journey_patterns.actions.destroy'), referential_line_route_journey_pattern_path(@referential, @line, @route, @journey_pattern), :method => :delete, :data => {:confirm => t('journey_patterns.actions.destroy_confirm')}, class: 'remove'      li -      = link_to edit_referential_line_route_journey_pattern_route_sections_selector_path(@referential, @line, @route, @journey_pattern), class: "edit#{' control-shape' if @journey_pattern.control?}" do -        = t('journey_patterns.actions.edit_route_sections') -        - if @journey_pattern.control? -          i.fa.fa-exclamation-triangle - -    li        = link_to t('journey_patterns.journey_pattern.vehicle_journey_at_stops'), referential_line_route_vehicle_journeys_path(@referential, @line, @route, :q => {:journey_pattern_id_eq => @journey_pattern.id, :journey_pattern_object_id => @journey_pattern.objectid}), class: 'clock'    = creation_tag(@journey_pattern) diff --git a/app/views/route_sections/_form.html.slim b/app/views/route_sections/_form.html.slim deleted file mode 100644 index 51e4fdcf6..000000000 --- a/app/views/route_sections/_form.html.slim +++ /dev/null @@ -1,21 +0,0 @@ -= semantic_form_for [@referential, @route_section] do |form| -  = form.inputs do -    - if @route_section.new_record? -      = form.input :departure, as: :select, collection: @stop_areas, include_blank: false -      = form.input :arrival, as: :select, collection: @stop_areas, include_blank: false -    - else -      li.input.optional -        label.label = @route_section.human_attribute_name('departure') -        = @route_section.departure.name - -      li.input.optional -        label.label = @route_section.human_attribute_name('arrival') -        = @route_section.arrival.name - -      = form.input :editable_geometry, as: :hidden - -    = form.input :no_processing, label: t('.no_processing'), as: :select, collection: { t('.standard_processor') => false, t('.no_processor') => true }, include_blank: false - -  = form.actions do -    = form.action :submit, as: :button, label: t('.submit') -    = form.action :cancel, as: :link
\ No newline at end of file diff --git a/app/views/route_sections/edit.html.slim b/app/views/route_sections/edit.html.slim deleted file mode 100644 index 7c95def73..000000000 --- a/app/views/route_sections/edit.html.slim +++ /dev/null @@ -1,6 +0,0 @@ -- breadcrumb :referential_route_section, @referential, @route_section - -= title_tag t('route_sections.edit.title') - -= @map.to_html if @map -== render 'form' diff --git a/app/views/route_sections/index.html.slim b/app/views/route_sections/index.html.slim deleted file mode 100644 index c459af73c..000000000 --- a/app/views/route_sections/index.html.slim +++ /dev/null @@ -1,49 +0,0 @@ -- breadcrumb :referential_route_sections, @referential -= title_tag t('.title') - -= form_for search, url: referential_route_sections_path(@referential), method: :get, class: 'form-inline' do |form| -  .panel.panel-default -    .panel-heading -      .col-md-6 -        = form.text_field :departure_name, class: 'form-control', placeholder: Chouette::RouteSection.human_attribute_name(:departure) - -      .input-group.col-md-6 -        = form.text_field :arrival_name, class: 'form-control', placeholder: Chouette::RouteSection.human_attribute_name(:arrival) - -        .input-group-btn -          button.btn.btn-default type="submit" -            i.fa.fa-search - -    .panel-body -      .col-md-4 -        = form.select :line_id, @referential.lines.order(:name).pluck(:name, :id), { include_blank: t('.all_lines')}, class: 'form-control' - -table.table.table-hover.table-striped -  thead -    tr -      th = Chouette::RouteSection.human_attribute_name :departure -      th = Chouette::RouteSection.human_attribute_name :arrival -      th.distance = Chouette::RouteSection.human_attribute_name :distance -      th.points = Chouette::RouteSection.human_attribute_name :points -      th.points = Chouette::RouteSection.human_attribute_name :quantity -      th.actions - -  tbody -    - @route_sections.each do |route_section| -      tr -        td -          = route_section.departure.name -          = link_to content_tag(:i, "", class: "fa fa-external-link"), referential_stop_area_path(@referential, route_section.departure) -        td -          = route_section.arrival.name -          = link_to content_tag(:i, "", class: "fa fa-external-link"), referential_stop_area_path(@referential, route_section.arrival) -        td.distance = route_section.distance.to_i if route_section.distance -        td.points = route_section.via_count if route_section.via_count > 0 -        td.journey_patterns = route_section.journey_pattern_sections.count(:journey_pattern_id, distinct: true) -        td.actions -          = link_to t('.actions.show'), referential_route_section_path(@referential, route_section), class: 'view' -          = link_to t('.actions.edit'), edit_referential_route_section_path(@referential, route_section), class: 'edit' -          = link_to t('.actions.destroy'), referential_route_section_path(@referential, route_section), method: :delete, data: { confirm: t('route_sections.actions.destroy_confirm') }, class: 'remove' - -.pagination -  = will_paginate @route_sections, :container => false, renderer: RemoteBootstrapPaginationLinkRenderer diff --git a/app/views/route_sections/new.html.slim b/app/views/route_sections/new.html.slim deleted file mode 100644 index 79f4cda2b..000000000 --- a/app/views/route_sections/new.html.slim +++ /dev/null @@ -1,4 +0,0 @@ -- breadcrumb :referential_route_sections, @referential -= title_tag t('route_sections.new.title') - -== render 'form' diff --git a/app/views/route_sections/show.html.slim b/app/views/route_sections/show.html.slim deleted file mode 100644 index afd0ed0d6..000000000 --- a/app/views/route_sections/show.html.slim +++ /dev/null @@ -1,27 +0,0 @@ -- breadcrumb :referential_route_section, @referential, @route_section -= title_tag t('.title') - -.route_section -  = @map.to_html - -  .summary -    p -      label = "#{@route_section.human_attribute_name('departure')} : " -      = @route_section.departure.name - -    p -      label = "#{@route_section.human_attribute_name('arrival')} : " -      = @route_section.arrival.name - -    p -      label = "#{@route_section.human_attribute_name('distance')} : " -      = "#{@route_section.distance.round}m" if @route_section.distance - -- content_for :sidebar do -  ul.actions -    li -      = link_to t('route_sections.actions.edit'), edit_referential_route_section_path(@referential, @route_section), class: 'edit' -    li -      = link_to t('route_sections.actions.destroy'), referential_route_section_path(@referential, @route_section), :method => :delete, :data => {:confirm =>  t('route_sections.actions.destroy_confirm')}, class: 'remove' - -  = creation_tag(@route_section) diff --git a/app/views/route_sections/show.kml.slim b/app/views/route_sections/show.kml.slim deleted file mode 100644 index 9dbb4957b..000000000 --- a/app/views/route_sections/show.kml.slim +++ /dev/null @@ -1,6 +0,0 @@ -doctype XML - -kml xmlns="http://www.opengis.net/kml/2.2" -  document -    placemark id="route-section-#{@route_section.id}" -      = @route_section.geometry(params[:mode]).kml_representation.html_safe
\ No newline at end of file diff --git a/app/views/route_sections_selectors/_selection.js.slim b/app/views/route_sections_selectors/_selection.js.slim deleted file mode 100644 index 6b5489171..000000000 --- a/app/views/route_sections_selectors/_selection.js.slim +++ /dev/null @@ -1,21 +0,0 @@ -div -  span.departure -    label = "#{@route_section.human_attribute_name('departure')} : " -    = link_to @route_section.departure.name, referential_stop_area_path(@referential, @route_section.departure) - -  span.arrival -    label = "#{@route_section.human_attribute_name('arrival')} : " -    = link_to @route_section.arrival.name, referential_stop_area_path(@referential, @route_section.arrival) - -  span.distance -    label = "#{@route_section.human_attribute_name('distance')} : " -    = "#{@route_section.distance.to_i} m" if @route_section.distance > 0 - -  - if @route_section.via_count > 0 -    span.via_count -      label = "#{@route_section.human_attribute_name('via_count')} : " -      = @route_section.via_count if @route_section.via_count > 0 - -  span.actions -    = link_to_edit_route_section @route_section -    = link_to_create_route_section @route_section.departure, @route_section.arrival
\ No newline at end of file diff --git a/app/views/route_sections_selectors/edit.html.slim b/app/views/route_sections_selectors/edit.html.slim deleted file mode 100644 index 9dcee8af3..000000000 --- a/app/views/route_sections_selectors/edit.html.slim +++ /dev/null @@ -1,34 +0,0 @@ -= title_tag t('.title', journey_pattern: journey_name(@journey_pattern)) - -.large-map -  = @map.to_html(no_fullscreen: true) - -= semantic_form_for resource, url: referential_line_route_journey_pattern_route_sections_selector_path(@referential, @line, @route, @journey_pattern), method: :put do |form| -  h3 = t('.selection.title') - -  #map-selection style="display: none;" -    div - -  #empty-map-selection -    = t('.no_selection') - -  h3 = t('.form.title') - -  table.table.table-hover.table-striped -    tbody -      = form.fields_for :sections do |section_form| -        tr -          td = link_to section_form.object.departure.name, referential_stop_area_path(@referential, section_form.object.departure) -          td.route_section -            - if section_form.object.candidates.present? -              = section_form.input :route_section_id, as: :select, label: false, collection: section_form.object.candidates, include_blank: t('.no_selection') -            - else -              = t('.no_candidate') - -          td.action -            = link_to_edit_route_section section_form.object.route_section -            = link_to_create_route_section section_form.object.departure, section_form.object.arrival - -  = form.actions do -    = form.action :submit, as: :button, label: t('.submit') -    = form.action :cancel, as: :link, url: referential_line_route_journey_pattern_path(@referential, @line, @route, @journey_pattern)
\ No newline at end of file diff --git a/app/views/shared/_header.html.slim b/app/views/shared/_header.html.slim index 33aee09a4..afe802b49 100644 --- a/app/views/shared/_header.html.slim +++ b/app/views/shared/_header.html.slim @@ -82,11 +82,6 @@ nav.navbar.navbar-default.navbar-fixed-top role="navigation"                    = Referential.human_attribute_name("time_tables")                li -                = link_to referential_route_sections_path(@referential) do -                  span.badge.pull-right = @referential.route_sections.size -                  = Referential.human_attribute_name("route_sections") - -              li                  = link_to referential_timebands_path(@referential) do                    span.badge.pull-right = @referential.timebands.size                    = Referential.human_attribute_name("timebands") diff --git a/config/breadcrumbs.rb b/config/breadcrumbs.rb index 4883ec7a2..0cabf9c6b 100644 --- a/config/breadcrumbs.rb +++ b/config/breadcrumbs.rb @@ -41,17 +41,6 @@ crumb :referential_group_of_line do |referential, group_of_line|    parent :referential_group_of_lines, referential  end -crumb :referential_route_sections do |referential| -  link I18n.t('route_sections.index.title'), referential_route_sections_path(referential) -  parent :referential, referential -end - -crumb :referential_route_section do |referential, route_section| -  link  breadcrumb_name(route_section.departure), referential_route_section_path(referential, route_section) -  parent :referential_route_sections, referential -end - -  crumb :time_tables do |referential|    link I18n.t('time_tables.index.title'), referential_time_tables_path(referential)    parent :referential, referential diff --git a/config/initializers/route_section.rb b/config/initializers/route_section.rb deleted file mode 100644 index dadea36ee..000000000 --- a/config/initializers/route_section.rb +++ /dev/null @@ -1,3 +0,0 @@ -Rails.application.config.to_prepare do -  Chouette::RouteSection.processor = OsrmRouteSectionProcessor.new -end diff --git a/config/locales/journey_patterns.en.yml b/config/locales/journey_patterns.en.yml index 494e700b9..effac5569 100644 --- a/config/locales/journey_patterns.en.yml +++ b/config/locales/journey_patterns.en.yml @@ -10,7 +10,6 @@ en:        edit: "Edit this journey pattern"        destroy: "Remove this journey pattern"        destroy_confirm: A"re you sure you want destroy this journey pattern ?" -      edit_route_sections: "Update route sections"        edit_journey_patterns_collection: "Edit journey patterns"      new:        title: "Add a new journey pattern" diff --git a/config/locales/journey_patterns.fr.yml b/config/locales/journey_patterns.fr.yml index 24f182168..23c43e2a7 100644 --- a/config/locales/journey_patterns.fr.yml +++ b/config/locales/journey_patterns.fr.yml @@ -10,7 +10,6 @@ fr:        edit: "Editer cette mission"        destroy: "Supprimer cette mission"        destroy_confirm: "Etes vous sûr de vouloir détruire cette mission ?" -      edit_route_sections: "Editer les sections de parcours"        edit_journey_patterns_collection: "Editer les missions"      new:        title: "Ajouter une mission" diff --git a/config/locales/referentials.en.yml b/config/locales/referentials.en.yml index 8c58e53ee..a2c6fcf59 100644 --- a/config/locales/referentials.en.yml +++ b/config/locales/referentials.en.yml @@ -78,7 +78,6 @@ en:          access_points: "Access Points"          time_tables: "Time tables"          connection_links: "Connection links" -        route_sections: "Route sections"          quays: "quays"          boarding_positions: "boarding positions"          commercial_stops: "commercial stops" diff --git a/config/locales/referentials.fr.yml b/config/locales/referentials.fr.yml index 5b028233c..e132c959d 100644 --- a/config/locales/referentials.fr.yml +++ b/config/locales/referentials.fr.yml @@ -78,7 +78,6 @@ fr:          access_points: "points d'accès"          time_tables: "Calendriers"          connection_links: "Correspondances" -        route_sections: "Sections de parcours"          quays: "quais"          boarding_positions: "points d'embarquement"          commercial_stops: "arrêts commerciaux" diff --git a/config/locales/route_sections.en.yml b/config/locales/route_sections.en.yml deleted file mode 100644 index 7f4a56fc4..000000000 --- a/config/locales/route_sections.en.yml +++ /dev/null @@ -1,50 +0,0 @@ -en: -  route_sections: -    new: -      title: "Add a new section" -    show: -      title: "Show this section" -    edit: -      title: "Edit this section" -    form: -      no_processing: "Geometry processing" -      standard_processor: "Standard" -      no_processor: "No treatment" -      submit: "Submit" -    index: -      title: "Sections course" -      all_lines: "All lines" -      actions: -        show: "Show" -        edit: "Edit" -        destroy: "Delete" -        destroy_confirm: "Are you sure you want to delete this route section?" -    actions: -      edit: "Edit this section" -      destroy: "Delete this section" -      destroy_confirm: "Are you sure you want to delete this route section?" -    unable_to_contact_server: 'Unable to contact OSRM server, please try again later.' -  route_sections_selectors: -    edit: -      title: "Changing the course of the mission %{journey_pattern}" -      route_section: -        edit: "Edit this section" -        new: "Add alternative" -      no_candidate: "No known path" -      no_selection: "No selection" -      selection: -        title: "Selected section" -      form: -        title: "Full course" -      submit: "Change the route" -  activerecord: -    models: -      route_section: "Section course" -    attributes: -      route_section: -        departure: "Departure point" -        arrival: "Arrival point" -        points: "Via" -        distance: "Distance" -        created_at: Created at -        updated_at: Updated at diff --git a/config/locales/route_sections.fr.yml b/config/locales/route_sections.fr.yml deleted file mode 100644 index 852d47a57..000000000 --- a/config/locales/route_sections.fr.yml +++ /dev/null @@ -1,50 +0,0 @@ -fr: -  route_sections: -    new: -      title: "Ajouter une section" -    show: -      title: "Détails d'une Section de parcours" -    edit: -      title: "Editer une Section de parcours" -    form: -      no_processing: "Traitement de la géométrie" -      standard_processor: "Standard" -      no_processor: "Pas de traitement" -      submit: "Valider" -    index: -      title: "Sections de parcours" -      all_lines: "Tous les lignes" -      actions: -        show: "Voir" -        edit: "Editer" -        destroy: "Supprimer" -        destroy_confirm: "Etes vous sûr de vouloir supprimer cette section de parcours ?" -    actions: -      edit: "Editer cette section" -      destroy: "Supprimer cette section" -      destroy_confirm: "Etes vous sûr de vouloir supprimer cette section de parcours ?" -    unable_to_contact_server: "Le serveur OSRM n'est pas disponible pour le moment, merci de réessayer dans quelques instants." -  route_sections_selectors: -    edit: -      title: "Edition du parcours de la mission %{journey_pattern}" -      route_section: -        edit: "Editer cette section" -        new: "Ajouter une alternative" -      no_candidate: "Aucun parcours connu" -      no_selection: "Aucune selection" -      selection: -        title: "Section sélectionnée" -      form: -        title: "Parcours complet" -      submit: "Editer le parcours" -  activerecord: -    models: -      route_section: "Section du parcours" -    attributes: -      route_section: -        departure: "Arrêt de départ" -        arrival: "Arrêt d'arrivée" -        points: "Via" -        distance: "Distance" -        created_at: "Créé le" -        updated_at: "Edité le" diff --git a/config/routes.rb b/config/routes.rb index 2f332b2c9..0470d9aec 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -106,7 +106,6 @@ ChouetteIhm::Application.routes.draw do      get :select_compliance_control_set      post :validate, on: :member      resources :autocomplete_time_tables, only: [:index] -    resources :autocomplete_route_sections      resources :autocomplete_timebands      resources :group_of_lines, controller: "referential_group_of_lines" do        collection do @@ -138,9 +137,6 @@ ChouetteIhm::Application.routes.draw do          resource :journey_patterns_collection, :only => [:show, :update]          resources :journey_patterns do            get 'new_vehicle_journey', on: :member -          resource :route_sections_selector, path: 'sections' do -            post 'selection' -          end          end          resource :vehicle_journeys_collection, :only => [:show, :update]          resources :vehicle_journeys, :vehicle_journey_frequencies do @@ -214,12 +210,6 @@ ChouetteIhm::Application.routes.draw do        end      end      resources :clean_ups - -    resources :route_sections do -      collection  do -        get 'create_to_edit' -      end -    end    end    root :to => "dashboards#show" diff --git a/db/migrate/20171109101358_drop_table_journey_pattern_sections.rb b/db/migrate/20171109101358_drop_table_journey_pattern_sections.rb new file mode 100644 index 000000000..a7bb482a5 --- /dev/null +++ b/db/migrate/20171109101358_drop_table_journey_pattern_sections.rb @@ -0,0 +1,5 @@ +class DropTableJourneyPatternSections < ActiveRecord::Migration +  def change +    drop_table :journey_pattern_sections +  end +end diff --git a/db/migrate/20171109101514_drop_table_route_sections.rb b/db/migrate/20171109101514_drop_table_route_sections.rb new file mode 100644 index 000000000..c009ed8ec --- /dev/null +++ b/db/migrate/20171109101514_drop_table_route_sections.rb @@ -0,0 +1,5 @@ +class DropTableRouteSections < ActiveRecord::Migration +  def change +    drop_table :route_sections +  end +end diff --git a/db/schema.rb b/db/schema.rb index 050e81ad5..d6823e8b0 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: 20171106111448) do +ActiveRecord::Schema.define(version: 20171109101514) do    # These are extensions that must be enabled in order to support this database    enable_extension "plpgsql" @@ -408,9 +408,9 @@ ActiveRecord::Schema.define(version: 20171106111448) do      t.string   "type"      t.integer  "parent_id",             limit: 8      t.string   "parent_type" +    t.datetime "notified_parent_at"      t.integer  "current_step",                    default: 0      t.integer  "total_steps",                     default: 0 -    t.datetime "notified_parent_at"      t.string   "creator"    end @@ -431,18 +431,6 @@ ActiveRecord::Schema.define(version: 20171106111448) do    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_pattern_sections", id: :bigserial, force: :cascade do |t| -    t.integer  "journey_pattern_id", limit: 8, null: false -    t.integer  "route_section_id",   limit: 8, null: false -    t.integer  "rank",                         null: false -    t.datetime "created_at" -    t.datetime "updated_at" -  end - -  add_index "journey_pattern_sections", ["journey_pattern_id", "route_section_id", "rank"], name: "index_jps_on_journey_pattern_id_and_route_section_id_and_rank", unique: true, using: :btree -  add_index "journey_pattern_sections", ["journey_pattern_id"], name: "index_journey_pattern_sections_on_journey_pattern_id", using: :btree -  add_index "journey_pattern_sections", ["route_section_id"], name: "index_journey_pattern_sections_on_route_section_id", using: :btree -    create_table "journey_patterns", id: :bigserial, force: :cascade do |t|      t.integer  "route_id",                limit: 8      t.string   "objectid",                                      null: false @@ -652,20 +640,6 @@ ActiveRecord::Schema.define(version: 20171106111448) do    add_index "referentials", ["created_from_id"], name: "index_referentials_on_created_from_id", using: :btree    add_index "referentials", ["referential_suite_id"], name: "index_referentials_on_referential_suite_id", using: :btree -  create_table "route_sections", id: :bigserial, force: :cascade do |t| -    t.integer  "departure_id",       limit: 8 -    t.integer  "arrival_id",         limit: 8 -    t.geometry "input_geometry",     limit: {:srid=>4326, :type=>"line_string"} -    t.geometry "processed_geometry", limit: {:srid=>4326, :type=>"line_string"} -    t.string   "objectid",                                                       null: false -    t.integer  "object_version",     limit: 8 -    t.string   "creator_id" -    t.float    "distance" -    t.boolean  "no_processing" -    t.datetime "created_at" -    t.datetime "updated_at" -  end -    create_table "routes", id: :bigserial, force: :cascade do |t|      t.integer  "line_id",           limit: 8      t.string   "objectid",                    null: false @@ -1009,16 +983,12 @@ ActiveRecord::Schema.define(version: 20171106111448) do    add_foreign_key "group_of_lines_lines", "group_of_lines", name: "groupofline_group_fkey", on_delete: :cascade    add_foreign_key "journey_frequencies", "timebands", on_delete: :nullify    add_foreign_key "journey_frequencies", "vehicle_journeys", on_delete: :nullify -  add_foreign_key "journey_pattern_sections", "journey_patterns", on_delete: :cascade -  add_foreign_key "journey_pattern_sections", "route_sections", on_delete: :cascade    add_foreign_key "journey_patterns", "routes", name: "jp_route_fkey", on_delete: :cascade    add_foreign_key "journey_patterns", "stop_points", column: "arrival_stop_point_id", name: "arrival_point_fkey", on_delete: :nullify    add_foreign_key "journey_patterns", "stop_points", column: "departure_stop_point_id", name: "departure_point_fkey", on_delete: :nullify    add_foreign_key "journey_patterns_stop_points", "journey_patterns", name: "jpsp_jp_fkey", on_delete: :cascade    add_foreign_key "journey_patterns_stop_points", "stop_points", name: "jpsp_stoppoint_fkey", on_delete: :cascade    add_foreign_key "referentials", "referential_suites" -  add_foreign_key "route_sections", "stop_areas", column: "arrival_id" -  add_foreign_key "route_sections", "stop_areas", column: "departure_id"    add_foreign_key "routes", "routes", column: "opposite_route_id", name: "route_opposite_route_fkey"    add_foreign_key "stop_areas", "stop_areas", column: "parent_id", name: "area_parent_fkey", on_delete: :nullify    add_foreign_key "stop_areas_stop_areas", "stop_areas", column: "child_id", name: "stoparea_child_fkey", on_delete: :cascade diff --git a/lib/osrm_route_section_processor.rb b/lib/osrm_route_section_processor.rb deleted file mode 100644 index e9f92def0..000000000 --- a/lib/osrm_route_section_processor.rb +++ /dev/null @@ -1,42 +0,0 @@ -require 'open-uri' - -class OsrmRouteSectionProcessor - -  def call(route_section) -    osrm_endpoint = Rails.application.secrets.osrm_endpoint - -    points_string = (route_section.input_geometry || route_section.default_geometry).points.map do |point| -      "loc=#{point.y.to_f},#{point.x.to_f}" -    end.join - -    Rails.logger.info "Invoke #{osrm_endpoint} for RouteSection StopArea:#{route_section.departure.id} -> StopArea:#{route_section.arrival.id}" - -    response = open "#{osrm_endpoint}/viaroute?#{points_string}instructions=false" -    return nil unless response - -    geometry = JSON.parse(response.read.to_s)['route_geometry'] -    if geometry -      decoded_geometry = Polylines::Decoder.decode_polyline(geometry, 1e6).map do |point| -        GeoRuby::SimpleFeatures::Point.from_x_y(point[1], point[0], 4326) -      end - -      GeoRuby::SimpleFeatures::LineString.from_points(decoded_geometry).try(:to_rgeo) if decoded_geometry.many? -    end -  rescue OpenURI::HTTPError => e -    Rails.logger.error "#{osrm_endpoint} failed: #{e}" -    nil -  rescue IOError => e -    Rails.logger.error "#{osrm_endpoint} failed: #{e}" -    nil -  end - -  def self.create_all -    Chouette::JourneyPattern.find_each do |journey_pattern| -      selector = RouteSectionsSelector.new(journey_pattern) -      selector.sections.each do |section| -        section.create_candidate unless section.candidates.present? -      end -    end -  end - -end diff --git a/lib/tasks/route_sections.rake b/lib/tasks/route_sections.rake deleted file mode 100644 index d48ddbba4..000000000 --- a/lib/tasks/route_sections.rake +++ /dev/null @@ -1,17 +0,0 @@ -namespace :route_sections do - -  def find_referential(id_or_slug) -    if id_or_slug.to_s =~ /\A\d+\Z/ -      Referential.find id_or_slug.to_i -    else -      Referential.find_by slug: id_or_slug -    end -  end - -  desc "Generate all RouteSections for a given Referential" -  task :create_all, [:referential] => [:environment] do |t, args| -    find_referential(args[:referential]).switch -    OsrmRouteSectionProcessor.create_all -  end - -end diff --git a/spec/factories/chouette_route_sections.rb b/spec/factories/chouette_route_sections.rb deleted file mode 100644 index d5e2cf69d..000000000 --- a/spec/factories/chouette_route_sections.rb +++ /dev/null @@ -1,6 +0,0 @@ -FactoryGirl.define do -  factory :route_section, :class => Chouette::RouteSection do -    association :departure, :factory => :stop_area -    association :arrival, :factory => :stop_area -  end -end diff --git a/spec/models/chouette/route_section_spec.rb b/spec/models/chouette/route_section_spec.rb deleted file mode 100644 index f064d38ea..000000000 --- a/spec/models/chouette/route_section_spec.rb +++ /dev/null @@ -1,93 +0,0 @@ -# require 'spec_helper' -# -# RSpec.describe Chouette::RouteSection, :type => :model do -# -#   subject { create :route_section } -# -#   it { should validate_presence_of(:departure) } -#   it { should validate_presence_of(:arrival) } -# -#   describe "#default_geometry" do -# -#     it "should return nil when departure isn't defined" do -#       subject.departure  = nil -#       expect(subject.default_geometry).to be_nil -#     end -# -#     it "should return nil when arrival isn't defined" do -#       subject.arrival  = nil -#       expect(subject.default_geometry).to be_nil -#     end -#  -#     it "should return nil when departure has no geometry" do -#       subject.departure.stub :geometry -#       expect(subject.default_geometry).to be_nil -#     end -# -#     it "should return nil when arrival has no geometry" do -#       subject.arrival.stub :geometry -#       expect(subject.default_geometry).to be_nil -#     end -# -#     it "should use departure geometry as first point" do -#       expect(subject.default_geometry.first).to eq(subject.departure.geometry) -#     end -# -#   end -# -#   describe "#process_geometry" do -# -#     let(:sample_geometry) { line_string("0 0,1 1").to_rgeo } -# -#     context "without processor" do -# -#       it "should use the input geometry" do -#         subject.input_geometry = sample_geometry -#         subject.process_geometry -#         expect(subject.processed_geometry).to eq(subject.input_geometry) -#       end -# -#       it "should use the default geometry when no input is defined" do -#         subject.input_geometry = nil -#         subject.process_geometry -#         expect(subject.processed_geometry).to eq(subject.default_geometry.to_rgeo) -#       end -# -#     end -# -#     # context "with a processor" do -#     # -#     #   it "should use the processor result" do -#     #     subject.processor = Proc.new { |s| sample_geometry } -#     #     subject.process_geometry -#     #     subject.processor = nil -#     #     expect(subject.processed_geometry).to eq(sample_geometry) -#     #   end -#     # end -#   end -# -#   describe "#distance" do -# -#     context "with simple line" do -#       let(:sample_geometry) { line_string("2.329534 48.842397,2.325725 48.855839").to_rgeo } -#       it "should return the right distance" do -#         subject.input_geometry = sample_geometry -#         subject.process_geometry -#         expect(subject.distance).to eq(sample_geometry.to_georuby.spherical_distance) -#       end -#     end -# -#     context "with complex line" do -#       let(:sample_geometry) { line_string("2.329561 48.842397, 2.329351 48.843119, 2.329152 48.843801, 2.3289820000000003 48.844426,2.3287960000000005 48.845059,2.3286540000000007 48.845575,2.3283130000000005 48.846748,2.3281220000000005 48.847404999999995,2.3279330000000003 48.848088,2.3278860000000003 48.848245999999996,2.3273240000000004 48.850142999999996,2.3273030000000006 48.850218999999996,2.3271630000000005 48.850745999999994,2.3270140000000006 48.85130999999999,2.3269350000000006 48.85142799999999,2.3268640000000005 48.85153599999999,2.3268290000000005 48.85161099999999,2.3267490000000004 48.85180999999999,2.3267700000000002 48.852053999999995,2.326759 48.852216999999996,2.326687 48.852427999999996,2.3266620000000002 48.852512,2.3264280000000004 48.853286,2.3264050000000003 48.853362,2.3263710000000004 48.853483,2.326125 48.854343,2.3259980000000002 48.854727,2.325737 48.855833999999994").to_rgeo } -#       it "should return the right distance" do -#         subject.input_geometry = sample_geometry -#         subject.process_geometry -#         expect(subject.distance).to eq(sample_geometry.to_georuby.spherical_distance) -#       end -#     end -# -#   end -# -# -# -# end diff --git a/spec/models/route_sections_selector_spec.rb b/spec/models/route_sections_selector_spec.rb deleted file mode 100644 index 19863c315..000000000 --- a/spec/models/route_sections_selector_spec.rb +++ /dev/null @@ -1,43 +0,0 @@ -# require 'spec_helper' -# -# describe RouteSectionsSelector, :type => :model do -# -#   let(:stop_points) { create_list :stop_point, 5 } -#   let(:itinerary) { double stop_points: stop_points, route_sections: [] } -# -#   subject { RouteSectionsSelector.new itinerary } -# -#   describe "#sections" do -# -#     it "should create a Section between each StopPoint" do -#       expect(subject.sections.size).to eq(stop_points.size - 1) -#     end -# -#   end -# -# end -# -# describe RouteSectionsSelector::Section, :type => :model do -# -#   let(:departure) { create :stop_point } -#   let(:arrival) { create :stop_point } -# -#   subject { RouteSectionsSelector::Section.new departure, arrival } -# -#   let(:route_sections) do -#     create_list :route_section, 5, -#                 departure: departure.stop_area, -#                 arrival: arrival.stop_area -#   end -# -#   describe "#candidates" do -#     it "should return an empty array when no RouteSection exists" do -#       expect(subject.candidates).to be_empty -#     end -# -#     it "should return the RouteSections with the same departure/arrival StopAreas" do -#       expect(subject.candidates).to match_array(route_sections) -#     end -#   end -# -# end | 
