diff options
| -rw-r--r-- | app/assets/stylesheets/modules/_vj_collection.sass | 10 | ||||
| -rw-r--r-- | app/controllers/referential_vehicle_journeys_controller.rb | 2 | ||||
| -rw-r--r-- | app/models/chouette/route.rb | 6 | ||||
| -rw-r--r-- | app/models/chouette/stop_point.rb | 3 | ||||
| -rw-r--r-- | app/models/chouette/vehicle_journey.rb | 1 | ||||
| -rw-r--r-- | app/models/chouette/vehicle_journey_at_stop.rb | 4 | ||||
| -rw-r--r-- | app/services/referential_consolidated.rb | 45 | ||||
| -rw-r--r-- | app/views/referential_vehicle_journeys/_consolidated_line.html.slim | 4 | 
8 files changed, 61 insertions, 14 deletions
| diff --git a/app/assets/stylesheets/modules/_vj_collection.sass b/app/assets/stylesheets/modules/_vj_collection.sass index 9bb19f75f..b230991fb 100644 --- a/app/assets/stylesheets/modules/_vj_collection.sass +++ b/app/assets/stylesheets/modules/_vj_collection.sass @@ -22,7 +22,7 @@            display: block            height: 100% -          > span +          > span:not(.small)              position: absolute              display: block              line-height: 1em @@ -268,9 +268,12 @@            margin-bottom: 0px            & > *              display: inline-block +          .t2e-item-list +            overflow: scroll              & > *                overflow: hidden                min-width: 0 +              max-width: none            &.open              margin-bottom: 40px @@ -305,6 +308,11 @@    .table-2entries > .t2e-head > .td > div > span::after      bottom: -6px !important +  .table-2entries > .t2e-head > .td > div > span +    text-overflow: ellipsis +    overflow: hidden +    white-space: nowrap +    .table.table-2entries .t2e-item-list .t2e-item      background-color: #F9F9F9 diff --git a/app/controllers/referential_vehicle_journeys_controller.rb b/app/controllers/referential_vehicle_journeys_controller.rb index 111d39c2b..917326a6d 100644 --- a/app/controllers/referential_vehicle_journeys_controller.rb +++ b/app/controllers/referential_vehicle_journeys_controller.rb @@ -23,7 +23,7 @@ class ReferentialVehicleJourneysController < ChouetteController    private    def collection -    @q ||= end_of_association_chain +    @q ||= end_of_association_chain.select("vehicle_journeys.id", "vehicle_journeys.journey_pattern_id", "vehicle_journeys.route_id", "vehicle_journeys.objectid", "vehicle_journeys.published_journey_name")      @q = @q.with_stop_area_ids(params[:q][:stop_area_ids]) if params[:q] && params[:q][:stop_area_ids]      @q = ransack_period_range(scope: @q, error_message:  t('vehicle_journeys.errors.purchase_window'), query: :in_purchase_window, prefix: :purchase_window)      @q = ransack_period_range(scope: @q, error_message:  t('vehicle_journeys.errors.time_table'), query: :with_matching_timetable, prefix: :time_table) diff --git a/app/models/chouette/route.rb b/app/models/chouette/route.rb index 949b18d6f..6a02203ad 100644 --- a/app/models/chouette/route.rb +++ b/app/models/chouette/route.rb @@ -63,6 +63,9 @@ module Chouette          where(" position between ? and ? ", between_positions.first, between_positions.last)        end      end + +    has_many :vehicle_journey_at_stops, through: :vehicle_journeys +      has_many :stop_areas, -> { order('stop_points.position ASC') }, :through => :stop_points do        def between(departure, arrival)          departure, arrival = [departure, arrival].map do |endpoint| @@ -166,7 +169,8 @@ module Chouette      end      def time_tables -      vehicle_journeys.joins(:time_tables).map(&:"time_tables").flatten.uniq +      ids = vehicle_journeys.joins(:time_tables).pluck('time_tables.id').uniq +      Chouette::TimeTable.where(id: ids)      end      def sorted_vehicle_journeys(journey_category_model) diff --git a/app/models/chouette/stop_point.rb b/app/models/chouette/stop_point.rb index edb0e81fd..82bedc6ab 100644 --- a/app/models/chouette/stop_point.rb +++ b/app/models/chouette/stop_point.rb @@ -10,6 +10,7 @@ module Chouette      include ObjectidSupport      belongs_to :stop_area +    belongs_to :stop_area_light, -> {select(:name, :city_name, :zip_code, :time_zone)}, class_name: "Chouette::StopArea", foreign_key: :stop_area_id      belongs_to :route, inverse_of: :stop_points      has_many :journey_patterns, through: :route      has_many :vehicle_journey_at_stops, :dependent => :destroy @@ -27,7 +28,7 @@ module Chouette      scope :default_order, -> { order("position") } -    delegate :name, :registration_number, :kind, :area_type, to: :stop_area +    delegate :name, :registration_number, :kind, :area_type, to: :stop_area_light      before_destroy :remove_dependent_journey_pattern_stop_points      def remove_dependent_journey_pattern_stop_points diff --git a/app/models/chouette/vehicle_journey.rb b/app/models/chouette/vehicle_journey.rb index 818287b04..3bbd89f7b 100644 --- a/app/models/chouette/vehicle_journey.rb +++ b/app/models/chouette/vehicle_journey.rb @@ -21,6 +21,7 @@ module Chouette      belongs_to :company      belongs_to :route      belongs_to :journey_pattern +    belongs_to :journey_pattern_only_objectid, -> {select("journey_patterns.objectid")}, class_name: "Chouette::JourneyPattern", foreign_key: :journey_pattern_id      has_many :stop_areas, through: :journey_pattern      has_and_belongs_to_many :footnotes, :class_name => 'Chouette::Footnote' diff --git a/app/models/chouette/vehicle_journey_at_stop.rb b/app/models/chouette/vehicle_journey_at_stop.rb index 3f5bd5abf..797571070 100644 --- a/app/models/chouette/vehicle_journey_at_stop.rb +++ b/app/models/chouette/vehicle_journey_at_stop.rb @@ -101,8 +101,8 @@ module Chouette      end      def time_zone_offset -      return 0 unless stop_point&.stop_area&.time_zone.present? -      ActiveSupport::TimeZone[stop_point.stop_area.time_zone]&.utc_offset || 0 +      return 0 unless stop_point&.stop_area_light&.time_zone.present? +      ActiveSupport::TimeZone[stop_point.stop_area_light.time_zone]&.utc_offset || 0      end      private diff --git a/app/services/referential_consolidated.rb b/app/services/referential_consolidated.rb index 465eab405..832210db3 100644 --- a/app/services/referential_consolidated.rb +++ b/app/services/referential_consolidated.rb @@ -48,11 +48,12 @@ class ReferentialConsolidated      attr_reader :parent      attr_reader :ar_model -    def initialize parent, ar_model, vehicle_journeys, params +    def initialize parent, ar_model, vehicle_journeys, params, opts={}        @parent = parent        @ar_model = ar_model        @all_vehicle_journeys = vehicle_journeys        @params = params +      @opts = opts      end      def should_highlight? @@ -74,9 +75,19 @@ class ReferentialConsolidated    class Route < Base      def_delegators :ar_model, :name, :id, :time_tables, :purchase_windows, :stop_area_ids +    def vehicle_journey_at_stops +      @vehicle_journey_at_stops ||= begin +        out = Hash.new{|h, k| h[k] = {}} +        ar_model.vehicle_journey_at_stops.each do |vjas| +          out[vjas.vehicle_journey_id][vjas.stop_point_id] = vjas +        end +        out +      end +    end +      def vehicle_journeys        @vehicle_journeys ||= begin -        ar_model.vehicle_journeys.map {|vj| VehicleJourney.new(self, vj, @all_vehicle_journeys, params) } +        ar_model.vehicle_journeys.select(:id, :published_journey_name, :route_id, :journey_pattern_id).map {|vj| VehicleJourney.new(self, vj, @all_vehicle_journeys, params, vehicle_journey_at_stops: vehicle_journey_at_stops[vj.id]) }        end      end @@ -85,7 +96,7 @@ class ReferentialConsolidated      end      def highlighted_count -      highlighted_journeys.count +      highlighted_journeys.except(:select).count      end      def highlighted? @@ -93,18 +104,32 @@ class ReferentialConsolidated        (should_highlight? || matching_stop_areas) && highlighted_journeys.exists?      end +    def stop_areas +      @stop_areas ||= begin +        out = {} +        ar_model.stop_areas.select(:id, :name, :city_name, :zip_code, :time_zone).each do |sp| +          out[sp.id] = sp +        end +        out +      end +    end +      def stop_points -      @stop_points ||= ar_model.stop_points.map {|sp| StopPoint.new(self, sp, @all_vehicle_journeys, params) } +      @stop_points ||= ar_model.stop_points.map {|sp| StopPoint.new(self, sp, @all_vehicle_journeys, params, stop_area: stop_areas[sp.stop_area_id]) }      end    end    class VehicleJourney < Base -    def_delegators :ar_model, :id, :published_journey_name, :journey_pattern, :time_tables, :purchase_windows, :vehicle_journey_at_stops, :time_table_ids, :purchase_window_ids, :route +    def_delegators :ar_model, :id, :published_journey_name, :journey_pattern, :time_tables, :purchase_windows, :time_table_ids, :purchase_window_ids, :route, :journey_pattern_only_objectid      def highlighted?        should_highlight? && @all_vehicle_journeys.where(id: self.id).exists?      end +    def vehicle_journey_at_stops +      @opts[:vehicle_journey_at_stops] || {} +    end +      def has_purchase_window? purchase_window        purchase_window_ids.include?(purchase_window.id)      end @@ -115,7 +140,15 @@ class ReferentialConsolidated    end    class StopPoint < Base -    def_delegators :ar_model, :id, :arrival_time, :departure_time, :name, :stop_area, :stop_area_id +    def_delegators :ar_model, :id, :arrival_time, :departure_time, :stop_area_id + +    def stop_area +      @opts[:stop_area] +    end + +    def name +      stop_area.name +    end      def highlighted?        params[:q] && params[:q]["stop_areas"] && params[:q]["stop_areas"].values.any?{|v| v.to_s == stop_area_id.to_s} diff --git a/app/views/referential_vehicle_journeys/_consolidated_line.html.slim b/app/views/referential_vehicle_journeys/_consolidated_line.html.slim index c73c65961..9a27c0ecf 100644 --- a/app/views/referential_vehicle_journeys/_consolidated_line.html.slim +++ b/app/views/referential_vehicle_journeys/_consolidated_line.html.slim @@ -78,7 +78,7 @@                        strong= link_to journey.id, [@referential, journey.route.line, journey.route, :vehicle_journeys]                      div                        = link_to journey.published_journey_name, [@referential, journey.route.line, journey.route, :vehicle_journeys], title: journey.published_journey_name -                    div= journey.journey_pattern.get_objectid.short_id +                    div= journey.journey_pattern_only_objectid.get_objectid.short_id                      div                        - journey.purchase_windows[0..3].each do |tt|                          span.vj_tt @@ -105,7 +105,7 @@                      ruby:                        headline = vehicle_journey_stop_headline prev_sp, sp                        prev_sp = sp -                      vjas = journey.vehicle_journey_at_stops.where(stop_point_id: sp.id).last +                      vjas = journey.vehicle_journey_at_stops[sp.id]                      .td class="#{vjas && sp.highlighted? ? 'highlighted' : ''} #{vjas.nil? ? 'disabled' : ''} #{headline.present? ? 'headlined' : ''}"                        div title="#{sp.stop_area.city_name ? "#{sp.stop_area.city_name} (#{sp.stop_area.zip_code})" : ''}" data-headline=headline class=(headline.present? ? 'headlined' : '')                          - if vjas.present? | 
