diff options
| author | Zog | 2018-02-13 15:17:08 +0100 |
|---|---|---|
| committer | Zog | 2018-02-13 15:17:08 +0100 |
| commit | ea5a7cda28c48d52785ecbe4f01d180d1b8a8d78 (patch) | |
| tree | e58725d77107f28e1322aafea53b005f60717d6e /app/controllers | |
| parent | 84891328d7ea0c3b82ba3fa3a73b7c49f317855e (diff) | |
| download | chouette-core-ea5a7cda28c48d52785ecbe4f01d180d1b8a8d78.tar.bz2 | |
Refs #5919 @0.5h; Make ReferentialVJs#index sortable
Diffstat (limited to 'app/controllers')
| -rw-r--r-- | app/controllers/referential_vehicle_journeys_controller.rb | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/app/controllers/referential_vehicle_journeys_controller.rb b/app/controllers/referential_vehicle_journeys_controller.rb index 2ce28a5cc..84eb413d3 100644 --- a/app/controllers/referential_vehicle_journeys_controller.rb +++ b/app/controllers/referential_vehicle_journeys_controller.rb @@ -20,11 +20,30 @@ class ReferentialVehicleJourneysController < ChouetteController @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) @q = @q.ransack(params[:q]) - @vehicle_journeys ||= @q.result.order(:published_journey_name).includes(:vehicle_journey_at_stops).paginate page: params[:page], per_page: params[:per_page] || 10 + @vehicle_journeys ||= @q.result + @vehicle_journeys = parse_order @vehicle_journeys + @vehicle_journeys = @vehicle_journeys.paginate page: params[:page], per_page: params[: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 stop_area_ids = params[:q].try(:[], :stop_area_ids).try(:select, &:present?) @filters_stop_areas = Chouette::StopArea.find(stop_area_ids) if stop_area_ids.present? && stop_area_ids.size <= 2 end + def parse_order scope + return scope.order(:published_journey_name) unless params[:sort].present? + direction = params[:direction] || "asc" + attributes = Chouette::VehicleJourney.column_names.map{|n| "vehicle_journeys.#{n}"}.join(',') + case params[:sort] + when "line" + scope.order("lines.name #{direction}").joins(route: :line) + when "route" + scope.order("routes.name #{direction}").joins(:route) + when "departure_time" + scope.joins(:vehicle_journey_at_stops).group(attributes).select(attributes).order("MIN(vehicle_journey_at_stops.departure_time) #{direction}") + when "arrival_time" + scope.joins(:vehicle_journey_at_stops).group(attributes).select(attributes).order("MAX(vehicle_journey_at_stops.departure_time) #{direction}") + else + scope.order "#{params[:sort]} " + end + end end |
