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 |
