diff options
| author | Teddy Wing | 2018-01-31 19:40:59 +0100 | 
|---|---|---|
| committer | Teddy Wing | 2018-02-01 15:42:04 +0100 | 
| commit | 50080adc6df79c8bbde909118ddc1b96950663a3 (patch) | |
| tree | f4798aa8da330aae633f3107746ffe6c49e2f3fb | |
| parent | 11e0e3fca27685a41dc2a7226275a4e8f39a49be (diff) | |
| download | chouette-core-50080adc6df79c8bbde909118ddc1b96950663a3.tar.bz2 | |
ReferentialVehicleJourneys#index: Add 'line' filter
Filter vehicle journeys by their associated route's line.
The `with_line_id` scope is modeled on `with_stop_area_ids`.
The HTML filter is modeled on the line filter from
`app/views/workbenches/_filters.html.slim`.
Refs #5576
| -rw-r--r-- | app/controllers/referential_vehicle_journeys_controller.rb | 1 | ||||
| -rw-r--r-- | app/models/chouette/vehicle_journey.rb | 11 | ||||
| -rw-r--r-- | app/views/referential_vehicle_journeys/_filters.html.slim | 17 | 
3 files changed, 28 insertions, 1 deletions
| diff --git a/app/controllers/referential_vehicle_journeys_controller.rb b/app/controllers/referential_vehicle_journeys_controller.rb index 2ce28a5cc..935b52d93 100644 --- a/app/controllers/referential_vehicle_journeys_controller.rb +++ b/app/controllers/referential_vehicle_journeys_controller.rb @@ -16,6 +16,7 @@ class ReferentialVehicleJourneysController < ChouetteController    def collection      @q ||= end_of_association_chain +    @q = @q.with_line_id(params[:q][:line_id]) if params[:q] && params[:q][:line_id]      @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/vehicle_journey.rb b/app/models/chouette/vehicle_journey.rb index 1756a7098..918ca07aa 100644 --- a/app/models/chouette/vehicle_journey.rb +++ b/app/models/chouette/vehicle_journey.rb @@ -52,6 +52,10 @@ module Chouette        end      } +    scope :with_line_id, ->(id) { +      joins(:route).where(routes: { line_id: id }) +    } +      scope :in_purchase_window, ->(range){        purchase_windows = Chouette::PurchaseWindow.overlap_dates(range)        sql = purchase_windows.joins(:vehicle_journeys).select('vehicle_journeys.id').uniq.to_sql @@ -59,8 +63,9 @@ module Chouette      }      # We need this for the ransack object in the filters -    ransacker :stop_area_ids +    ransacker :line_id      ransacker :purchase_window_date_gt +    ransacker :stop_area_ids      # returns VehicleJourneys with at least 1 day in their time_tables      # included in the given range @@ -375,5 +380,9 @@ module Chouette          ')          .where('"time_tables_vehicle_journeys"."vehicle_journey_id" IS NULL')      end + +    def self.lines +      Chouette::Line.joins(routes: :vehicle_journeys).distinct +    end    end  end diff --git a/app/views/referential_vehicle_journeys/_filters.html.slim b/app/views/referential_vehicle_journeys/_filters.html.slim index bfb5b77dd..838150d2c 100644 --- a/app/views/referential_vehicle_journeys/_filters.html.slim +++ b/app/views/referential_vehicle_journeys/_filters.html.slim @@ -15,6 +15,23 @@          = f.input :company_id_eq_any, collection: @all_companies.select(:id, :name).order(name: :asc), as: :check_boxes, label: false, label_method: lambda{|l| ("<span>" + l.name + "</span>").html_safe}, required: false, wrapper_html: { class: 'checkbox_list'}        - else          = f.input :company_id_eq_any, collection: [[I18n.t('companies.search_no_results_for_filter'), nil]], as: :check_boxes, label: false, disabled: true, required: false, wrapper_html: { class: 'checkbox_list disabled'} + +    .form-group.togglable +      = f.label Chouette::Line.model_name.human, +          required: false, +          class: 'control-label' +      .inputs.form-inline.checkbox_list +        = f.input :line_id, +            as: :select, +            collection: @vehicle_journeys.lines, +            input_html: { \ +              'data-select2ed': 'true', +              'data-select2ed-placeholder': t('referentials.filters.line') \ +            }, +            label: false, +            label_method: :display_name, +            wrapper_html: { class: 'select2ed' } +      .form-group.togglable.name-filter        = f.label Chouette::VehicleJourney.human_attribute_name(:published_journey_name), required: false, class: 'control-label'        .inputs.form-inline.checkbox_list | 
