diff options
| -rw-r--r-- | app/controllers/time_tables_controller.rb | 17 | ||||
| -rw-r--r-- | app/models/chouette/time_table.rb | 4 |
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 |
