diff options
| author | Zog | 2018-01-08 16:13:22 +0100 | 
|---|---|---|
| committer | Zog | 2018-01-11 11:17:10 +0100 | 
| commit | dad755a814b087af1ba30b27cf966b9c914dfa51 (patch) | |
| tree | 5c50ea0da7cf85ab39958a66805cc1bd773ede6b /app | |
| parent | f7ed3ca6615bb4950b644d56136016c4482395a8 (diff) | |
| download | chouette-core-dad755a814b087af1ba30b27cf966b9c914dfa51.tar.bz2 | |
Refs #5500 @3h; Add filters on ReferentialVJ#index
To enable users to filter on stop areas
Diffstat (limited to 'app')
| -rw-r--r-- | app/controllers/referential_vehicle_journeys_controller.rb | 5 | ||||
| -rw-r--r-- | app/models/chouette/vehicle_journey.rb | 13 | ||||
| -rw-r--r-- | app/views/referential_vehicle_journeys/_filters.html.slim | 4 | 
3 files changed, 21 insertions, 1 deletions
| diff --git a/app/controllers/referential_vehicle_journeys_controller.rb b/app/controllers/referential_vehicle_journeys_controller.rb index 217fb9629..f93de29cc 100644 --- a/app/controllers/referential_vehicle_journeys_controller.rb +++ b/app/controllers/referential_vehicle_journeys_controller.rb @@ -10,9 +10,12 @@ class ReferentialVehicleJourneysController < ChouetteController    private    def collection -    @q ||= end_of_association_chain.ransack(params[:q]) +    @q ||= end_of_association_chain +    @q = @q.with_stop_area_ids(params[:q][:stop_area_ids]) if params[:q] && params[:q][:stop_area_ids] +    @q = @q.ransack(params[:q])      @vehicle_journeys ||= @q.result.order(:published_journey_name).includes(:vehicle_journey_at_stops).paginate page: params[:page], per_page: 10      @all_companies = Chouette::Company.where("id IN (#{@referential.vehicle_journeys.select(:company_id).to_sql})").distinct +    @all_stop_areas = Chouette::StopArea.where("id IN (#{@referential.vehicle_journeys.joins(:stop_areas).select("stop_areas.id").to_sql})").distinct    end  end diff --git a/app/models/chouette/vehicle_journey.rb b/app/models/chouette/vehicle_journey.rb index 11da77948..a8c9c1824 100644 --- a/app/models/chouette/vehicle_journey.rb +++ b/app/models/chouette/vehicle_journey.rb @@ -22,6 +22,7 @@ module Chouette      belongs_to :company      belongs_to :route      belongs_to :journey_pattern +    has_many :stop_areas, through: :journey_pattern      has_and_belongs_to_many :footnotes, :class_name => 'Chouette::Footnote'      has_and_belongs_to_many :purchase_windows, :class_name => 'Chouette::PurchaseWindow' @@ -42,6 +43,18 @@ module Chouette      before_validation :set_default_values,        :calculate_vehicle_journey_at_stop_day_offset +    scope :with_stop_area_ids, ->(ids){ +      _ids = ids.select(&:present?).map(&:to_i) +      if _ids.present? +        where("array(SELECT stop_points.stop_area_id::integer FROM stop_points INNER JOIN journey_patterns_stop_points ON journey_patterns_stop_points.stop_point_id = stop_points.id WHERE journey_patterns_stop_points.journey_pattern_id = vehicle_journeys.journey_pattern_id) @> array[?]", _ids) +      else +        all +      end +    } + +    # We need this for the ransack object in the filters +    ransacker :stop_area_ids +      # TODO: Remove this validator      # We've eliminated this validation because it prevented vehicle journeys      # from being saved with at-stops having a day offset greater than 0, diff --git a/app/views/referential_vehicle_journeys/_filters.html.slim b/app/views/referential_vehicle_journeys/_filters.html.slim index 4506251c3..609927615 100644 --- a/app/views/referential_vehicle_journeys/_filters.html.slim +++ b/app/views/referential_vehicle_journeys/_filters.html.slim @@ -16,6 +16,10 @@          .form-group.w10.to= I18n.t('vehicle_journeys.form.to')          = f.input :published_journey_name_lteq, label: false, wrapper_html: { class: 'w45'} +    .form-group.togglable +      = f.label Chouette::StopArea.model_name.human.pluralize, required: false, class: 'control-label' +      = f.input :stop_area_ids, collection: @all_stop_areas.select(:id, :name).order(name: :asc), checked: params[:q] && params[:q][:stop_area_ids], as: :check_boxes, label: false, label_method: lambda{|l| ("<span>" + l.name + "</span>").html_safe}, required: false, wrapper_html: { class: 'checkbox_list'}, multiple: true +    .actions      = link_to 'Effacer', referential_vehicle_journeys_path(@referential), class: 'btn btn-link'      = f.submit 'Filtrer', class: 'btn btn-default' | 
