aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Florisson2014-09-19 11:12:04 +0200
committerMarc Florisson2014-09-19 11:12:04 +0200
commit1bfbcbfb0dd0580fe9e36bec0e1d5aa663c955dd (patch)
tree64dacf50b0f15515585a0d8bdfd3de1a99fc078e
parentbf6bea71846d2ab079d592086251c6af426c80d9 (diff)
downloadchouette-core-1bfbcbfb0dd0580fe9e36bec0e1d5aa663c955dd.tar.bz2
refactor vehicles_journey#index. Mantis 26842
-rw-r--r--app/controllers/journey_patterns_controller.rb11
-rw-r--r--app/controllers/vehicle_journeys_controller.rb28
-rw-r--r--app/models/vehicle_filter.rb57
-rw-r--r--app/views/vehicle_journeys/_sidebar.html.erb1
-rw-r--r--app/views/vehicle_journeys/_vehicle_journeys.html.erb2
-rw-r--r--app/views/vehicle_journeys/index.html.erb42
-rw-r--r--app/views/vehicle_journeys/timeless.html.erb28
-rw-r--r--config/routes.rb1
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