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 | 
