aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2018-01-31 19:40:59 +0100
committerTeddy Wing2018-02-01 15:42:04 +0100
commit50080adc6df79c8bbde909118ddc1b96950663a3 (patch)
treef4798aa8da330aae633f3107746ffe6c49e2f3fb
parent11e0e3fca27685a41dc2a7226275a4e8f39a49be (diff)
downloadchouette-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.rb1
-rw-r--r--app/models/chouette/vehicle_journey.rb11
-rw-r--r--app/views/referential_vehicle_journeys/_filters.html.slim17
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