diff options
| author | Zog | 2018-04-18 16:14:54 +0200 | 
|---|---|---|
| committer | cedricnjanga | 2018-04-19 23:12:34 -0700 | 
| commit | e6567cbfc987d8488492e2b1ce66a03db3a3d37d (patch) | |
| tree | dbace69e87473783624c89e3351be153ba7f9bed /app | |
| parent | 7c0ce4a2f39f6d7386734016452c594ee7ee8797 (diff) | |
| download | chouette-core-e6567cbfc987d8488492e2b1ce66a03db3a3d37d.tar.bz2 | |
Refs #6193; Show journey length in VJs editor
If `journey_length_in_vehicle_journeys` feature is enabled
Diffstat (limited to 'app')
| -rw-r--r-- | app/controllers/vehicle_journeys_controller.rb | 1 | ||||
| -rw-r--r-- | app/javascript/vehicle_journeys/actions/index.js | 12 | ||||
| -rw-r--r-- | app/javascript/vehicle_journeys/components/VehicleJourney.js | 9 | ||||
| -rw-r--r-- | app/javascript/vehicle_journeys/components/VehicleJourneys.js | 5 | ||||
| -rw-r--r-- | app/models/chouette/journey_pattern.rb | 37 | ||||
| -rw-r--r-- | app/models/chouette/stop_point.rb | 4 | ||||
| -rw-r--r-- | app/views/vehicle_journeys/show.rabl | 2 | 
7 files changed, 49 insertions, 21 deletions
| diff --git a/app/controllers/vehicle_journeys_controller.rb b/app/controllers/vehicle_journeys_controller.rb index 220f2d29e..921a2cf7f 100644 --- a/app/controllers/vehicle_journeys_controller.rb +++ b/app/controllers/vehicle_journeys_controller.rb @@ -208,6 +208,7 @@ class VehicleJourneysController < ChouetteController            short_id: item.get_objectid.short_id,            full_schedule: item.full_schedule?,            costs: item.costs, +          journey_length: item.journey_length,            stop_area_short_descriptions: item.stop_areas.map do |stop|              {                stop_area_short_description: { diff --git a/app/javascript/vehicle_journeys/actions/index.js b/app/javascript/vehicle_journeys/actions/index.js index d51012cdb..70d6e953a 100644 --- a/app/javascript/vehicle_journeys/actions/index.js +++ b/app/javascript/vehicle_journeys/actions/index.js @@ -48,16 +48,10 @@ const actions = {    }),    selectJPCreateModal : (selectedJP) => ({      type : 'SELECT_JP_CREATE_MODAL', -    selectedItem: { -      id: selectedJP.id, +    selectedItem: _.assign({}, selectedJP, {        objectid: selectedJP.object_id, -      short_id: selectedJP.short_id, -      name: selectedJP.name, -      published_name: selectedJP.published_name, -      stop_areas: selectedJP.stop_area_short_descriptions, -      costs: selectedJP.costs, -      full_schedule: selectedJP.full_schedule -    } +      stop_areas: selectedJP.stop_area_short_descriptions +    })    }),    openEditModal : (vehicleJourney) => ({      type : 'EDIT_VEHICLEJOURNEY_MODAL', diff --git a/app/javascript/vehicle_journeys/components/VehicleJourney.js b/app/javascript/vehicle_journeys/components/VehicleJourney.js index 73d99d120..5eb73de0e 100644 --- a/app/javascript/vehicle_journeys/components/VehicleJourney.js +++ b/app/javascript/vehicle_journeys/components/VehicleJourney.js @@ -10,6 +10,10 @@ export default class VehicleJourney extends Component {      this.previousCity = undefined    } +  journey_length() { +    return this.props.value.journey_pattern.journey_length + "km" +  } +    cityNameChecker(sp) {      return this.props.vehicleJourneys.showHeader(sp.stop_point_objectid)    } @@ -115,6 +119,11 @@ export default class VehicleJourney extends Component {                <div key={i}>{this.extraHeaderValue(header)}</div>              )            } +          { this.hasFeature('journey_length_in_vehicle_journeys') && +            <div> +              {this.journey_length()} +            </div> +          }            { this.hasFeature('purchase_windows') &&              <div>              {purchase_windows.slice(0,3).map((tt, i)=> diff --git a/app/javascript/vehicle_journeys/components/VehicleJourneys.js b/app/javascript/vehicle_journeys/components/VehicleJourneys.js index e4f5ad11c..27e147b37 100644 --- a/app/javascript/vehicle_journeys/components/VehicleJourneys.js +++ b/app/javascript/vehicle_journeys/components/VehicleJourneys.js @@ -224,6 +224,11 @@ export default class VehicleJourneys extends Component {                        <div key={i}>{this.extraHeaderLabel(header)}</div>                      )                    } +                  { this.hasFeature('journey_length_in_vehicle_journeys') && +                    <div> +                    {I18n.attribute_name("vehicle_journey", "journey_length")} +                    </div> +                  }                    { this.hasFeature('purchase_windows') &&                      <div>                        { detailed_purchase_windows && diff --git a/app/models/chouette/journey_pattern.rb b/app/models/chouette/journey_pattern.rb index 1e4041798..4b4cc2c73 100644 --- a/app/models/chouette/journey_pattern.rb +++ b/app/models/chouette/journey_pattern.rb @@ -86,10 +86,8 @@ module Chouette      def state_stop_points_update item        item['stop_points'].each do |sp| -        exist = stop_area_ids.include?(sp['id']) -        next if exist && sp['checked'] - -        stop_point = route.stop_points.find_by(stop_area_id: sp['id']) +        stop_point = route.stop_points.find_by(stop_area_id: sp['id'], position: sp['position']) +        exist = stop_points.include?(stop_point)          if !exist && sp['checked']            stop_points << stop_point          end @@ -175,11 +173,12 @@ module Chouette        full      end -    def distance_to stop +    def distance_between start, stop +      return 0 unless start.position < stop.position        val = 0 -      i = 0 -      _end = stop_points.first -      while _end != stop +      i = stop_points.index(start) +      _end = start +      while _end && _end != stop          i += 1          _start = _end          _end = stop_points[i] @@ -188,6 +187,28 @@ module Chouette        val      end +    def distance_to stop +      distance_between stop_points.first, stop +    end + +    def journey_length +      i = 0 +      j = stop_points.length - 1 +      start = stop_points[i] +      stop = stop_points[j] +      while i < j && start.kind == "non_commercial" +        i+= 1 +        start = stop_points[i] +      end + +      while i < j && stop.kind == "non_commercial" +        j-= 1 +        stop = stop_points[j] +      end +      return 0 unless start && stop +      distance_between start, stop +    end +      def set_distances distances        raise "inconsistent data: #{distances.count} values for #{stop_points.count} stops" unless distances.count == stop_points.count        prev = distances[0].to_i diff --git a/app/models/chouette/stop_point.rb b/app/models/chouette/stop_point.rb index 1df1a664a..6f2d89578 100644 --- a/app/models/chouette/stop_point.rb +++ b/app/models/chouette/stop_point.rb @@ -9,7 +9,6 @@ module Chouette      include ForAlightingEnumerations      include ObjectidSupport -      belongs_to :stop_area      belongs_to :route, inverse_of: :stop_points      has_many :vehicle_journey_at_stops, :dependent => :destroy @@ -17,7 +16,6 @@ module Chouette      acts_as_list :scope => :route, top_of_list: 0 -      validates_presence_of :stop_area      validate :stop_area_id_validation      def stop_area_id_validation @@ -28,7 +26,7 @@ module Chouette      scope :default_order, -> { order("position") } -    delegate :name, to: :stop_area +    delegate :name, :kind, :area_type, to: :stop_area      before_destroy :remove_dependent_journey_pattern_stop_points      def remove_dependent_journey_pattern_stop_points diff --git a/app/views/vehicle_journeys/show.rabl b/app/views/vehicle_journeys/show.rabl index d218038a6..6c588416c 100644 --- a/app/views/vehicle_journeys/show.rabl +++ b/app/views/vehicle_journeys/show.rabl @@ -17,7 +17,7 @@ child(:route) do |route|  end  child(:journey_pattern) do |journey_pattern| -  attributes :id, :objectid, :name, :published_name +  attributes :id, :objectid, :name, :published_name, :journey_length    node(:short_id) {journey_pattern.get_objectid.short_id}  end | 
