aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/time_tables_controller.rb17
-rw-r--r--app/models/chouette/time_table.rb4
2 files changed, 15 insertions, 6 deletions
diff --git a/app/controllers/time_tables_controller.rb b/app/controllers/time_tables_controller.rb
index 8436dc020..228b31c05 100644
--- a/app/controllers/time_tables_controller.rb
+++ b/app/controllers/time_tables_controller.rb
@@ -112,8 +112,8 @@ class TimeTablesController < ChouetteController
scope = select_time_tables.tagged_with(tags, :wild => true, :any => true) if tags.any?
end
scope = ransack_periode(scope)
-
@q = scope.search(params[:q])
+
if sort_column && sort_direction
@time_tables ||= @q.result(:distinct => true).order("#{sort_column} #{sort_direction}")
else
@@ -139,24 +139,29 @@ class TimeTablesController < ChouetteController
end
private
- # Fake ransack filter
def ransack_periode scope
return scope unless params[:q]
- periode = params[:q]
- return scope if periode['end_date_lteq(1i)'].empty? || periode['start_date_gteq(1i)'].empty?
+ return scope unless params[:q]['end_date_lteq(1i)'].present?
- begin_range = Date.civil(periode["start_date_gteq(1i)"].to_i, periode["start_date_gteq(2i)"].to_i, periode["start_date_gteq(3i)"].to_i)
- end_range = Date.civil(periode["end_date_lteq(1i)"].to_i, periode["end_date_lteq(2i)"].to_i, periode["end_date_lteq(3i)"].to_i)
+ begin_range = flatten_date('start_date_gteq')
+ end_range = flatten_date('end_date_lteq')
if begin_range > end_range
flash.now[:error] = t('referentials.errors.validity_period')
else
+ scope = scope.overlapping(begin_range, end_range)
+ params[:q] = params[:q].slice('comment_cont', 'color_cont_any')
@begin_range = begin_range
@end_range = end_range
end
scope
end
+ def flatten_date key
+ date_int = %w(1 2 3).map {|e| params[:q]["#{key}(#{e}i)"].to_i }
+ Date.new(*date_int)
+ end
+
def sort_column
referential.time_tables.column_names.include?(params[:sort]) ? params[:sort] : 'comment'
end
diff --git a/app/models/chouette/time_table.rb b/app/models/chouette/time_table.rb
index 41effe3eb..10d7039a0 100644
--- a/app/models/chouette/time_table.rb
+++ b/app/models/chouette/time_table.rb
@@ -20,6 +20,10 @@ class Chouette::TimeTable < Chouette::TridentActiveRecord
belongs_to :calendar
belongs_to :created_from, class_name: 'Chouette::TimeTable'
+ scope :overlapping, -> (date_start, date_end) do
+ joins(:periods).where('(period_start, period_end) OVERLAPS (?, ?)', date_start, date_end)
+ end
+
after_save :save_shortcuts
def self.object_id_key