diff options
| -rw-r--r-- | app/controllers/journey_patterns_controller.rb | 11 | ||||
| -rw-r--r-- | app/controllers/vehicle_journeys_controller.rb | 28 | ||||
| -rw-r--r-- | app/models/vehicle_filter.rb | 57 | ||||
| -rw-r--r-- | app/views/vehicle_journeys/_sidebar.html.erb | 1 | ||||
| -rw-r--r-- | app/views/vehicle_journeys/_vehicle_journeys.html.erb | 2 | ||||
| -rw-r--r-- | app/views/vehicle_journeys/index.html.erb | 42 | ||||
| -rw-r--r-- | app/views/vehicle_journeys/timeless.html.erb | 28 | ||||
| -rw-r--r-- | config/routes.rb | 1 |
8 files changed, 107 insertions, 63 deletions
diff --git a/app/controllers/journey_patterns_controller.rb b/app/controllers/journey_patterns_controller.rb index 084f34b03..69b518d3f 100644 --- a/app/controllers/journey_patterns_controller.rb +++ b/app/controllers/journey_patterns_controller.rb @@ -2,6 +2,7 @@ class JourneyPatternsController < ChouetteController defaults :resource_class => Chouette::JourneyPattern respond_to :html + respond_to :json, :only => :index respond_to :js, :only => [:new_vehicle_journey, :show] respond_to :kml, :only => :show @@ -14,7 +15,7 @@ class JourneyPatternsController < ChouetteController alias_method :route, :parent alias_method :journey_pattern, :resource - def index + def index index! do |format| format.html { redirect_to referential_line_route_path(@referential,@line,@route) } end @@ -56,10 +57,16 @@ class JourneyPatternsController < ChouetteController @vehicle_journey.update_journey_pattern(resource) render "vehicle_journeys/select_journey_pattern" end - # overwrite inherited resources to use delete instead of destroy + # overwrite inherited resources to use delete instead of destroy # foreign keys will propagate deletion) def destroy_resource(object) object.delete end + + def collection + @q = route.journey_patterns.search( params[:q]) + @journey_patterns ||= @q.result(:distinct => true).order(:name) + end + end diff --git a/app/controllers/vehicle_journeys_controller.rb b/app/controllers/vehicle_journeys_controller.rb index 18cd6b96c..637e30365 100644 --- a/app/controllers/vehicle_journeys_controller.rb +++ b/app/controllers/vehicle_journeys_controller.rb @@ -9,10 +9,6 @@ class VehicleJourneysController < ChouetteController end end - def timeless - @vehicle_journeys = parent.vehicle_journeys.timeless - end - def select_journey_pattern if params[:journey_pattern_id] selected_journey_pattern = Chouette::JourneyPattern.find( params[:journey_pattern_id]) @@ -51,15 +47,18 @@ class VehicleJourneysController < ChouetteController alias_method :vehicle_journey, :resource def collection - adapt_time_params - @q = select_vehicles.search(params[:q]) - @vehicle_journeys ||= @q.result.order( "vehicle_journey_at_stops.departure_time").paginate(:page => params[:page], :per_page => 8) + @vehicle_filter = VehicleFilter.new( adapted_params) + @q = @vehicle_filter.vehicle_journeys.search( @vehicle_filter.filtered_params) + @vehicle_journeys ||= @q.result( :distinct => true ).order( "vehicle_journey_at_stops.departure_time").paginate(:page => params[:page], :per_page => 8) end - def adapt_time_params - hour_entry = "vehicle_journey_at_stops_departure_time_gt(4i)".to_sym - if params[:q] && params[:q][ hour_entry] - params[:q].merge! hour_entry => (params[:q][ hour_entry].to_i - utc_offset) + def adapted_params + params.tap do |adapted_params| + adapted_params.merge!( :route => parent) + hour_entry = "vehicle_journey_at_stops_departure_time_gt(4i)".to_sym + if params[:q] && params[:q][ hour_entry] + adapted_params[:q].merge! hour_entry => (params[:q][ hour_entry].to_i - utc_offset) + end end end def utc_offset @@ -67,13 +66,6 @@ class VehicleJourneysController < ChouetteController sample = [2001,1,1,10,0] Time.zone.local(*sample).utc.hour - Time.utc(*sample).hour end - def select_vehicles - if params[:q] && params[:q][ :time_tables_id_eq ] - parent.sorted_vehicle_journeys.joins( :time_tables).where( "time_tables_vehicle_journeys.time_table_id" => params[:q][ :time_tables_id_eq ].split(',')) - else - parent.sorted_vehicle_journeys - end - end def matrix {}.tap do |hash| diff --git a/app/models/vehicle_filter.rb b/app/models/vehicle_filter.rb new file mode 100644 index 000000000..ba8cce867 --- /dev/null +++ b/app/models/vehicle_filter.rb @@ -0,0 +1,57 @@ +class VehicleFilter + include ActiveModel::Validations + include ActiveModel::Conversion + extend ActiveModel::Naming + + attr_accessor :route + attr_accessor :q + + def initialize(attributes = {}) + attributes.each do |name, value| + send("#{name}=", value) if self.respond_to? name.to_sym + end + end + + def without_any_time_table? + q && q[ "time_tables_id_not_eq" ] && q[ "time_tables_id_not_eq" ]=="1" + end + def without_any_passing_time? + q && q[ "vehicle_journey_at_stops_departure_time_not_eq" ] && + q[ "vehicle_journey_at_stops_departure_time_not_eq" ]=="1" + end + def vehicles_passing_time_filtered + if without_any_passing_time? + route.vehicle_journeys.includes( :vehicle_journey_at_stops).where( :vehicle_journey_at_stops => { :id => nil}) + else + route.sorted_vehicle_journeys + end + end + def vehicle_journeys + if without_any_time_table? + vehicles_passing_time_filtered.includes( :time_tables).where( :time_tables => { :id => nil}) + elsif time_table_ids.empty? + vehicles_passing_time_filtered + else + vehicles_passing_time_filtered.joins( :time_tables).where( "time_tables_vehicle_journeys.time_table_id" => time_table_ids) + end + end + def time_table_ids + return [] unless q && q[ "time_tables_id_eq" ] + q[ "time_tables_id_eq" ].split(',') + end + def filtered_params + return {} unless q + q.tap do |filtered_params| + if without_any_passing_time? + 1.upto( 5 ) do |index| + q.delete "vehicle_journey_at_stops_departure_time_gt(#{index}i)" + end + end + q.delete "time_tables_id_eq" + q.delete "time_tables_id_not_eq" + q.delete "vehicle_journey_at_stops_departure_time_not_eq" + end + end + + +end diff --git a/app/views/vehicle_journeys/_sidebar.html.erb b/app/views/vehicle_journeys/_sidebar.html.erb index 355f90618..cb3236c18 100644 --- a/app/views/vehicle_journeys/_sidebar.html.erb +++ b/app/views/vehicle_journeys/_sidebar.html.erb @@ -1,6 +1,5 @@ <ul class="actions"> <li><%= link_to t('vehicle_journeys.actions.new'), new_referential_line_route_vehicle_journey_path(@referential, @line, @route), :class => "add" %></li> - <li><%= link_to t('.timeless'), timeless_referential_line_route_vehicle_journeys_path(@referential, @line, @route), :class => "link" %></li> <li><%= link_to t('vehicle_journey_imports.new.title'), new_referential_line_route_vehicle_journey_import_path( @referential, @line, @route ), :class => "import" %></li> </ul> <div class="btn-group"> diff --git a/app/views/vehicle_journeys/_vehicle_journeys.html.erb b/app/views/vehicle_journeys/_vehicle_journeys.html.erb index ed9ad67ca..529b2683b 100644 --- a/app/views/vehicle_journeys/_vehicle_journeys.html.erb +++ b/app/views/vehicle_journeys/_vehicle_journeys.html.erb @@ -34,7 +34,7 @@ <td class="stop_area"><%= sp.stop_area.name %></td> <% @vehicle_journeys.each do |vj| %> <td class="hours <%= missing_time_check(@matrix["#{vj.id}-#{sp.id}"]) %>"> - <%= (@matrix["#{vj.id}-#{sp.id}"] && @matrix["#{vj.id}-#{sp.id}"].departure_time) ? l( @matrix["#{vj.id}-#{sp.id}"].departure_time, :format => :hour) : "" %> + <%= (@matrix["#{vj.id}-#{sp.id}"] && @matrix["#{vj.id}-#{sp.id}"].departure_time) ? l( @matrix["#{vj.id}-#{sp.id}"].departure_time, :format => :hour) : "--" %> </td> <% end %> </tr> diff --git a/app/views/vehicle_journeys/index.html.erb b/app/views/vehicle_journeys/index.html.erb index b50f25027..dd1cfa301 100644 --- a/app/views/vehicle_journeys/index.html.erb +++ b/app/views/vehicle_journeys/index.html.erb @@ -9,17 +9,9 @@ <div class="panel panel-default"> <div class="panel-heading"> <div class="input-group col-md-9"> - <%= f.collection_select :journey_pattern_id_eq, @route.journey_patterns.map{|j| j.name = journey_name(j); j}, :id, :name, :include_blank => "All" %> - <%= f.label :time_tables_id_eq, "TM" %> - <%= f.text_field :time_tables_id_eq, :input_html => { :"data-pre" => [].to_json} %> - <input name=<%= "q[vehicle_journey_at_stops_departure_time_gt(3i)]" %> type="hidden" value="1"> - <input name=<%= "q[vehicle_journey_at_stops_departure_time_gt(2i)]" %> type="hidden" value="1"> - <input name=<%= "q[vehicle_journey_at_stops_departure_time_gt(1i)]" %> type="hidden" value="2000"> - <%= f.label :vehicle_journey_at_stops_departure_time_gt, t('.time_range') %> - <%= select_hour(@q.send( "vehicle_journey_at_stops_departure_time_gt") ? @q.send( "vehicle_journey_at_stops_departure_time_gt").hour : 0, - :prefix => "q", :field_name => "vehicle_journey_at_stops_departure_time_gt(4i)") %> - <%= select_minute(@q.send( "vehicle_journey_at_stops_departure_time_gt") ? @q.send( "vehicle_journey_at_stops_departure_time_gt").min : 0, - :prefix => "q", :field_name => "vehicle_journey_at_stops_departure_time_gt(5i)") %> + <%= f.label :journey_pattern_id_eq, "Missions" %> + <%= f.text_field :journey_pattern_id_eq %> + <div class="input-group-btn"> <button class="btn btn-default" type="submit"><i class="fa fa-search"></i></button> </div> @@ -31,7 +23,22 @@ <div id="advanced_search" class="panel-collapse collapse"> <div class="panel-body"> - <p>other fields</p> + <%= f.label :time_tables_id_not_eq, "Sans calendrier" %> + <%= f.check_box :time_tables_id_not_eq %> + + <%= f.label :vehicle_journey_at_stops_departure_time_gt, "Sélectionner calendriers" %> + <%= f.text_field :time_tables_id_eq, :input_html => { :"data-pre" => [].to_json} %> + + <%= f.label :vehicle_journey_at_stops_departure_time_not_eq, "Sans horaire" %> + <%= f.check_box :vehicle_journey_at_stops_departure_time_not_eq %> + <input name=<%= "q[vehicle_journey_at_stops_departure_time_gt(3i)]" %> type="hidden" value="1"> + <input name=<%= "q[vehicle_journey_at_stops_departure_time_gt(2i)]" %> type="hidden" value="1"> + <input name=<%= "q[vehicle_journey_at_stops_departure_time_gt(1i)]" %> type="hidden" value="2000"> + <%= f.label :vehicle_journey_at_stops_departure_time_gt, t('.time_range') %> + <%= select_hour(@q.send( "vehicle_journey_at_stops_departure_time_gt") ? @q.send( "vehicle_journey_at_stops_departure_time_gt").hour : 0, + :prefix => "q", :field_name => "vehicle_journey_at_stops_departure_time_gt(4i)") %> + <%= select_minute(@q.send( "vehicle_journey_at_stops_departure_time_gt") ? @q.send( "vehicle_journey_at_stops_departure_time_gt").min : 0, + :prefix => "q", :field_name => "vehicle_journey_at_stops_departure_time_gt(5i)") %> </div> </div> </div> @@ -57,5 +64,16 @@ searchingText: '<%= t('searching_term') %>', resultsFormatter: function(item){ return '<li><div class=\"name\">' + item.comment + '</div><div class=\"info\">' + item.start_date + ' ' + item.end_date + '</div></li>' }, }); + $( "#q_journey_pattern_id_eq" ).tokenInput( '<%= referential_line_route_journey_patterns_path(@referential, @line, @route, :format => :json) %>', { + crossDomain: false, + prePopulate: $('#q_journey_pattern_id_eq').data('pre'), + minChars: 1, + queryParam: 'q[name_cont]', + propertyToSearch: 'name', + hintText: '<%= t('search_hint') %>', + noResultsText: '<%= t('no_result_text') %>', + searchingText: '<%= t('searching_term') %>', + resultsFormatter: function(item){ return '<li><div class=\"name\">' + item.name + ', (' + item.id + ') </div></li>' }, + }); }); </script> diff --git a/app/views/vehicle_journeys/timeless.html.erb b/app/views/vehicle_journeys/timeless.html.erb deleted file mode 100644 index af5ee93ea..000000000 --- a/app/views/vehicle_journeys/timeless.html.erb +++ /dev/null @@ -1,28 +0,0 @@ -<%= title_tag t('.title', :route => @route.name ) %> - -<div class="timeless_vehicle_journey_index"> - <div class="summary"> - <p> - <label><%= @route.human_attribute_name(:line) %>: </label> - <%= link_to line_formatted_name( @line), [@referential, @line] %> - </p> - <p> - <label><%= Chouette::Route.model_name.human %>: </label> - <%= link_to @route.name, [@referential, @line, @route] %> - </p> - </div> -</div> - -<h3><%= t('.vehicles_list') %></h3> -<div class="timeless_vehicles"> - <%= render :partial => "timeless_vehicle_journey", :collection => @vehicle_journeys, :as => :vehicle_journey %> -</div> - -<% content_for :sidebar do %> -<ul class="actions"> - <li> - <%= link_to t('vehicle_journeys.actions.new'), new_referential_line_route_vehicle_journey_path(@referential, @line, @route), :class => "add" %> - </li> - <li><%= link_to t('.vehicle_journeys'), [@referential, @line, @route, :vehicle_journeys], :class => "link" %></li> -</ul> -<% end %> diff --git a/config/routes.rb b/config/routes.rb index 442538868..f545fac98 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -90,7 +90,6 @@ ChouetteIhm::Application.routes.draw do end end resources :vehicle_journeys do - get 'timeless', :on => :collection get 'select_journey_pattern', :on => :member resources :vehicle_translations end |
