diff options
| author | Thomas Haddad | 2017-03-09 18:06:30 +0100 |
|---|---|---|
| committer | Thomas Haddad | 2017-03-09 18:06:30 +0100 |
| commit | f14fbad37c0daa0b79aaf12b234168e917b29cee (patch) | |
| tree | e5149f670c704b5cc7b11f5063bad16125d8ae5e /app/controllers | |
| parent | f4c5751a4037f52ab1d73fc201e81ba07798ecd4 (diff) | |
| parent | 3ec5c7bf65b267ce96431906feb6025cfbff347a (diff) | |
| download | chouette-core-f14fbad37c0daa0b79aaf12b234168e917b29cee.tar.bz2 | |
Merge branch '2498_vehicle_journeys'
Diffstat (limited to 'app/controllers')
5 files changed, 97 insertions, 25 deletions
diff --git a/app/controllers/autocomplete_time_tables_controller.rb b/app/controllers/autocomplete_time_tables_controller.rb index ce3824b7a..e977a28b0 100644 --- a/app/controllers/autocomplete_time_tables_controller.rb +++ b/app/controllers/autocomplete_time_tables_controller.rb @@ -1,25 +1,28 @@ class AutocompleteTimeTablesController < InheritedResources::Base respond_to :json, :only => [:index] + before_action :switch_referential include ReferentialSupport + def switch_referential + Apartment::Tenant.switch!(referential.slug) + end + + def referential + @referential ||= current_organisation.referentials.find params[:referential_id] + end + protected def select_time_tables + scope = referential.time_tables if params[:route_id] - referential.time_tables.joins( vehicle_journeys: :route).where( "routes.id IN (#{params[:route_id]})") - else - referential.time_tables - end - end - - def referential_time_tables - @referential_time_tables ||= select_time_tables + scope = scope.joins(vehicle_journeys: :route).where( "routes.id IN (#{params[:route_id]})") + end + scope end def collection - comment_selection = referential_time_tables.select{ |p| p.comment =~ /#{params[:q]}/i } - tag_selection = referential_time_tables.tagged_with( params[:q], :wild => true) - @time_tables = (comment_selection + tag_selection).uniq + @time_tables = select_time_tables.search(params[:q]).result.paginate(page: params[:page]) end end diff --git a/app/controllers/journey_patterns_collections_controller.rb b/app/controllers/journey_patterns_collections_controller.rb index d96d7f9c7..4d1a06fd3 100644 --- a/app/controllers/journey_patterns_collections_controller.rb +++ b/app/controllers/journey_patterns_collections_controller.rb @@ -10,7 +10,7 @@ class JourneyPatternsCollectionsController < ChouetteController alias_method :route, :parent def show - @q = route.journey_patterns.includes(:stop_points) + @q = route.journey_patterns.search(params[:q]).result(distinct: true).includes(:stop_points) @ppage = 10 @journey_patterns ||= @q.paginate(page: params[:page], per_page: @ppage).order(:name) diff --git a/app/controllers/line_footnotes_controller.rb b/app/controllers/line_footnotes_controller.rb index 192f902c8..8f7a38512 100644 --- a/app/controllers/line_footnotes_controller.rb +++ b/app/controllers/line_footnotes_controller.rb @@ -1,6 +1,9 @@ class LineFootnotesController < ChouetteController defaults :resource_class => Chouette::Line, :instance_name => 'line' include PolicyChecker + before_action :check_policy, only: [:edit, :update, :destroy] + respond_to :json, :only => :show + belongs_to :referential def show @@ -34,6 +37,7 @@ class LineFootnotesController < ChouetteController def resource @referential = Referential.find params[:referential_id] @line = @referential.lines.find params[:line_id] + @footnotes = @line.footnotes end def line_params diff --git a/app/controllers/vehicle_journeys_collections_controller.rb b/app/controllers/vehicle_journeys_collections_controller.rb new file mode 100644 index 000000000..caaa2258e --- /dev/null +++ b/app/controllers/vehicle_journeys_collections_controller.rb @@ -0,0 +1,19 @@ +class VehicleJourneysCollectionsController < ChouetteController + respond_to :json + belongs_to :referential do + belongs_to :line, :parent_class => Chouette::Line do + belongs_to :route, :parent_class => Chouette::Route + end + end + alias_method :route, :parent + + def update + state = JSON.parse request.raw_post + Chouette::VehicleJourney.state_update route, state + errors = state.any? {|item| item['errors']} + + respond_to do |format| + format.json { render json: state, status: errors ? :unprocessable_entity : :ok } + end + end +end diff --git a/app/controllers/vehicle_journeys_controller.rb b/app/controllers/vehicle_journeys_controller.rb index 45cb25344..8845b0c54 100644 --- a/app/controllers/vehicle_journeys_controller.rb +++ b/app/controllers/vehicle_journeys_controller.rb @@ -1,5 +1,9 @@ class VehicleJourneysController < ChouetteController defaults :resource_class => Chouette::VehicleJourney + before_action :check_policy, only: [:edit, :update, :destroy] + before_action :user_permissions, only: :index + before_action :ransack_params, only: :index + respond_to :json, :only => :index respond_to :js, :only => [:select_journey_pattern, :edit, :new, :index] @@ -10,6 +14,9 @@ class VehicleJourneysController < ChouetteController end include PolicyChecker + alias_method :vehicle_journeys, :collection + alias_method :route, :parent + alias_method :vehicle_journey, :resource def select_journey_pattern if params[:journey_pattern_id] @@ -29,6 +36,31 @@ class VehicleJourneysController < ChouetteController end def index + @stop_points_list = [] + route.stop_points.each do |sp| + @stop_points_list << { + :id => sp.stop_area.id, + :route_id => sp.try(:route_id), + :object_id => sp.try(:objectid), + :position => sp.try(:position), + :for_boarding => sp.try(:for_boarding), + :for_alighting => sp.try(:for_alighting), + :name => sp.stop_area.try(:name), + :zip_code => sp.stop_area.try(:zip_code), + :city_name => sp.stop_area.try(:city_name), + :comment => sp.stop_area.try(:comment), + :area_type => sp.stop_area.try(:area_type), + :registration_number => sp.stop_area.try(:registration_number), + :nearest_topic_name => sp.stop_area.try(:nearest_topic_name), + :fare_code => sp.stop_area.try(:fare_code), + :longitude => sp.stop_area.try(:longitude), + :latitude => sp.stop_area.try(:latitude), + :long_lat_type => sp.stop_area.try(:long_lat_type), + :country_code => sp.stop_area.try(:country_code), + :street_name => sp.stop_area.try(:street_name) + } + end + index! do if collection.out_of_bounds? redirect_to params.merge(:page => 1) @@ -37,7 +69,6 @@ class VehicleJourneysController < ChouetteController end end - # overwrite inherited resources to use delete instead of destroy # foreign keys will propagate deletion) def destroy_resource(object) @@ -45,20 +76,14 @@ class VehicleJourneysController < ChouetteController end protected - - alias_method :vehicle_journey, :resource - def collection - unless @vehicle_journeys - @vehicle_filter = VehicleFilter.new adapted_params - @vehicle_filter.journey_category_model = resource_class.model_name.route_key - @q = @vehicle_filter.vehicle_journeys.search @vehicle_filter.filtered_params - @vehicle_journeys = @q.result( :distinct => false ).paginate(:page => params[:page], :per_page => 8) - end - matrix + @ppage = 20 + @q = route.sorted_vehicle_journeys('vehicle_journeys').search params[:q] + @vehicle_journeys = @q.result.paginate(:page => params[:page], :per_page => @ppage) + @footnotes = route.line.footnotes.to_json + @matrix = resource_class.matrix(@vehicle_journeys) @vehicle_journeys end - alias_method :vehicle_journeys, :collection def adapted_params params.tap do |adapted_params| @@ -79,7 +104,29 @@ class VehicleJourneysController < ChouetteController @matrix = resource_class.matrix(@vehicle_journeys) end + def check_policy + authorize resource + end + + def user_permissions + @perms = {}.tap do |perm| + ['vehicle_journeys.create', 'vehicle_journeys.edit', 'vehicle_journeys.destroy'].each do |name| + perm[name] = current_user.permissions.include?(name) + end + end + @perms = @perms.to_json + end + private + def ransack_params + if params[:q] + params[:q] = params[:q].reject{|k| params[:q][k] == 'undefined'} + [:departure_time_gteq, :departure_time_lteq].each do |filter| + time = params[:q]["vehicle_journey_at_stops_#{filter}"] + params[:q]["vehicle_journey_at_stops_#{filter}"] = "2000-01-01 #{time}:00 UTC" + end + end + end def vehicle_journey_params params.require(:vehicle_journey).permit( { footnote_ids: [] } , :journey_pattern_id, :number, :published_journey_name, @@ -92,5 +139,4 @@ class VehicleJourneysController < ChouetteController :stop_point_id, :departure_time] } ) end - end |
